TCP复位报文段(RST)的用途:
1.当客户端程序访问不存在的端口时,目标主机将给它发送一个复位报文段;收到复位报文段的一端应该关闭连接或者重新连接,而不能回应这个复位报文段。
2.当客户端程序向服务器的某个端口发起连接,而该端口仍被处于TIME_WAIT状态的连接所占用时,客户端程序也将收到复位报文段。
3.异常终止连接:给对方发送一个复位报文段(使用socket选项SO_LINGER),一旦发送了复位报文段,发送端所有排队等待发送的数据都将被丢弃。
4.如果客户端(或服务器)往处于半打开状态的连接写入数据,则对方将回应一个复位报文段;
TCP交互数据流:交互数据仅包含很少的字节,使用交互数据的应用程序(或协议)对实时性要求较高。如telnet, ssh;
TCP成块数据流:长度通常为TCP报文段所允许的最大数据长度,使用成块数据的应用程序(或协议)对传输效率要求高。比如ftp;
Nagle算法:
原理:Nagle算法要求一个TCP连接的通信双方在任意时刻都最多只能发送一个未被确认的TCP报文段,在该TCP报文段的确认到达之前不能发送其他TCP报文段。另一方面,发送方在等待确认的同时收集本端需要发送的微量数据,并在确认到来时以一个TCP报文段将它们全部发出。
优点:01.极大的减少了网络上的微小TCP报文段数量; 02.自适应性:确认到达得越快,数据也就发送得越快;
备注:
1.Nagle算法常与另一个TCP算法联合使用: ACK延滞算法,即TCP在接收到数据后不立即发送ACK,而是等待一小段时间(典型值50~200ms),然后才发送ACK;TCP期待在这一小段时间内自身有数据发送回对端,被延滞的ACK就可以这些数据捎带,从而节省掉一个TCP分节。
2.TCP默认开启Nagle算法,可以通过TCP_NODELAY套接字选项关闭。
需要考虑关闭Nagle算法情形:对于其服务器不在相反方向产生数据以便携带ACK的客户来说,或者对于以若干小片数据向服务器发送单个逻辑请求的客户,Nagle算法和ACK延滞算法可能会导致客户察觉到明显延迟;
3.接收方不应该过分推迟发送确认,否则会导致发送方不必要的重传,这反而浪费了网络的资源;TCP标准规定,确认推迟的时间不应超过0.5秒,若收到一连串具有最大长度的报文段,则必须每隔一个报文段就要发送一个确认。
4.当传输大量大块数据时,发送方会连续发送多个TCP报文段,接收方可以一次确认所有这些报文段。而发送方在收到上一次确认后,能连续发送的TCP报文段数量,是由接收通告窗口和拥塞窗口的大小决定的。
PUSH标志:发送方使用该标志通知接收方将所接收到数据全部提交给接收进程。
带外数据:比普通数据有更高的优先级,它应该总是立即被发送,而不论发送缓冲区中是否有排队等待发送的普通数据,用于迅速通告对方本端发生的重要事件。
TCP超时重传:TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动,如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。
TCP拥塞控制
包括四个部分:慢启动、拥塞避免、快速重传、快速恢复