TCP 是面向连接的,提供可靠、有序的传输并且还提供流控和拥塞控制,单独提取出 TCP 层而不是在 IP层实现是因为 IP 层有更多的设备需要使用,加了复杂的逻辑不划算。
三次握手主要是为了定义初始序列号,为之后的传输打下基础。
四次挥手是因为全双工协议,双方都得说确认。
SYN 超时了就阶梯性重试,如果有 SYN攻击,可以加大队列数,或减少重试次数,或直接拒绝。
TIME_WAIT 是怕对方没收到最后一个 ACK,然后又发了 FIN 过来,并且也是等待处理网络上残留的数据,怕影响新连接。
超时重传是为了保证对端一定能收到包。
快速重传是为了避免在偶尔丢包的时候需要等待超时这么长时间。
SACK 是为了让发送方知道重传哪些。
D-SACK 是为了让发送方知道这次重传的原因是对方真的没收到还是自己太心急了。
滑动窗口是为了平衡发送方的发送速率和接收方的接受数率,不至于瞎发,注意 Silly Window,纳格算法和延迟确认不能一起搭配。
拥塞控制,保证道路通畅。