TCP/IP笔记
建立连接,三次握手
建立连接过程就不说了。
ACK是在上一个收到的SYN序列号上加一之后进行回复的。如果出现了乱序或丢包的情况,会重复发送最后一个正确收到的报文段的SYN+1的值。如果发送方连续两次收到重复的ACK可以认为是乱序,而连续三次收到重复的ACK,则认为是丢包的可能性更大,此时会启动快速重传和快速恢复的算法。
断开连接,四次握手
发送 FIN 是TCP底层的动作,而原因是应用层调用关闭。主动关闭方 FIN_WAIT1 -> FIN_WAIT2 -> TIME_WAIT 的状态变换 。
半关闭连接:TCP允许一端关闭写数据,而只接受另一端的读。
2MSL的等待时间:防止的最后一次的ACK超时重传。在收到被动关闭方的FIN的时候,进入TIME_WAIT的同时会启动一个定时器。
交互数据流
Nagle 算法
一般用于交互数据流,在广域网中传递数据的时候,可以将多个小的数据包积攒起来一起发送,提高网络的I/O效率。类似于single-flight,TCP选项中可以使用 NO_DELAY 来关闭。
成块数据流
滑动窗口
接收方用于控制流量的一种方式,为了适配接收方的处理能力。只有窗口值不为0 的时候,发送方才可以发送数据。而数据的发送和确认都会导致窗口的左边右移,即窗口变小,接收方收到数据并处理完会导致窗口右侧右移,即窗口变大。
注意在窗口为0