Nagle 算法

来源:互联网 发布:淘宝申诉进程在哪看 编辑:程序博客网 时间:2024/04/30 12:30

Nagle算法如下:若发送应用进程把要发送的数据逐个字节地送到TCP的发送缓存,则发送方就把第一个数据字节先发送出去,把后面到达的数据字节都换存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有在收到对前一个报文段的确认后才继续发送下一个报文段。

Nagle算法还规定:当到达的数据已经达到发送窗口大小的一半或已经达到报文段的最大长度时,就立即发送一个报文段。


糊涂窗口综合症(silly window syndrome)

设想一种情况:TCP接收方的缓存已满,而交互式的应用进程一次只从接受缓存中读取一个字节(这样接收缓存空间就仅腾出一个字节),然后向发送方发送确认,并把窗口设置为一个字节(但发送的数据报是40字节长)。接着,发送方又发来一个字节的数据(此时发送方发送的IP数据报是41字节长)。接收方发回确认,如此进行下去,是网络效率很低。

要解决这个问题,可以让接收方等待一段时间,是的或者接受缓存已经有足够的空间容纳一个最长的报文段,或者等到接受缓存已有一半的空闲空间,只要出现这两种情况之一接收方就发出确认报文。此外发送方也不要发送太小的报文段,而是把数据积累成足够大的报文段,或达到接收方缓存空间一半大小。

Nagle算法与防止糊涂窗口综合症都是为了防止网络上出现过多的小报文段,这样会降低网络性能。

原创粉丝点击