TCP/IP详解学习笔记-时延确认和Nagle算法

一、时延确认

1.1时延确认:

时延确认是指当Server方收到Client方的数据后,需要对接收到的数据进行一个确认,但是Server端并不会马上给Client端发送一个数据,而是等待一个最大时延(一般是200ms),如果这个时间段内Server端没有要发送的数据,那么在最大时延后才会发送ACK确认数据;反之,如果Server端需要发送数据,那么Server端就会将数据和确认应答数据放在一个包中发送给Client。
那为什么要这么做呢,是因为如果Server端发送接收到数据后,可能Server端也需要发送数据,那么这个时候Server端就可以把之前的确认数据和需要发送给客户端的数据进行整合一起发送。延时确认并没有直接提高性能,只是减少了网络中确认包,减轻了网络的负担。

1.2时延确认案例

下面我们看一个经典的案例,就是我们说的四次挥手却变成了三次挥手
TCP/IP详解学习笔记-时延确认和Nagle算法
从上图我们可以看到,四次挥手变成了三次挥手,这是因为第二次挥手和第三次挥手整合到一块了,本来第二次挥手,Server端需要发送的是(Seq_num,Ack_num,Ack=1),第三次挥手发送的是(Seq_num,Ack_num,Fin=1);因为有了延时确认,所以会整合在一块,最后发送的是(Seq_num,Ack_num,Ack = 1,Fin=1)。

二、 Nagle算法

Nagle算法:如果Client第一次发送了数据给Server,如果在Server没有回复之前,而Client这个时候有需要发送一些小块数据,那么此时Client端会将这些小数据收集起来,凑满一个MSS或者等待到确认后再发送。
Nagle算法的主要作用是减少网络中的小块的数据包,提高网络的传输效率。