nagle算法和延迟ACK

         nagle算法主要是避免发送小的数据包,要求TCP连接最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组,由于发送小分组时,包头会占很大的比重,所以会使TCP得传输效率降低。

         延迟ACK:对于对等方数据的ACK确认,将由本端下次传输数据时随着数据一起携带过去,也是称捎带。但有一个超时时间,当超时时间过了以后,还有本端还是没有数据传输过去,则将ACK单独发送过去。其主要目的也是为了提高TCP传输效率。

        但是nagle算法遇上延迟ACK时,这就变的有趣了。发送端利用nagle算法发送一个数据包,在某些情况下接受端要回复消息给发送端,这时由于接收端没有回复ACK消息,所以发送端也不会继续发送消息。当接收的延迟ACK超时之后才会回复发送端ACK,这时候发送端才会开始继续发送数据,这会传输速率降低,因为每次都延迟ACK的超时时间。故这时发送端应该禁掉nagle算法。

        发送端的应用程序每次调用send函数拷贝一个小包到发送缓冲区,这需要用到系统调用,会进行上下文切换,这本身也会耗费资源,发送端应用程序如果可行,应该先将数据在应用程序进行累积,然后更少调用send函数,减少资源的耗费。




参考资料:高级TCP/IP编程

         

猜你喜欢

转载自blog.csdn.net/ma2595162349/article/details/80317826