延时确认和Nagle算法

2017-05-22  本文已影响441人  liouville

[TOC]

减小交互式数据 延时确认;Nagle算法

延时确认

发送ack,如果没有segment要发送给对方,等待下一个200ms超时的时候发送ack;如果有segment要发送给对方,则马上

Nagle算法

该算法的优点在于它是自适应的,接收方确认的快,发送方发送的就越快

在一个tcp连接上只能有一个没有被确认的数据包,在这个确认没有收到之前,不发送任何数据报,相反,收集小的报文段以便确认到达时一起发送。

但是有一些例外情况:

  1. 如果包长度达到MSS,则允许发送;

  2. 如果该包含有FIN,则允许发送;

  3. 设置了TCP_NODELAY选项,则允许发送;

  4. 未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;

上述条件都未满足,但发生了超时(一般为200ms),则立即发送。

两种算法一起使用产生的问题

两种算法优点都有减小网络数据包的优点,但是都增加了网络通信的延时

两种算法都是为了减少网络通信包的数量的,但是结合在一起就会有问题,

例如客户端发送一个数据报,

由于延时确认,服务端不是马上确认;

若客户端启用nagle算法,要等到收到上一个数据报的确认在发送下一个数据报;

如此以来,客户端和服务端相互等待,直到超时或者其他情况

上一篇下一篇

猜你喜欢

热点阅读