TCP Nagle算法

Nagle算法旨在解决网络中大量小数据块传输的问题,规定未被确认的小段只能有一个在网络中。TCP_NODELAY选项禁用Nagle算法,提高实时性,而TCP_CORK选项尝试拼接小数据包以提高网络利用率。CORK算法与Nagle算法的主要区别在于着眼点和用户控制层面。
摘要由CSDN通过智能技术生成

在网络传输中,有时候会遇到这样一种场景:网络中传输了大量的小数据块,浪费资源。有时候传输数据本身的大小比头部还小,一个常见的情况是发送端的"糊涂窗口综合症(Silly Window Syndrome)"。

而Nagle的出现就是为了解决这样的问题的。

Nagle规定任何时候网络中只能存在一个未被确认(未发ACK)的小段(小于MSS)。

Nagle算法的规则

Nagle算法的改进在于:如果发送端欲多次发送包含少量字符的数据包(一般情况下,后面统一称长度小于MSS的数据包为小包,与此相对,称长度等于MSS的数据包为大包,为了某些对比说明,还有中包,即长度比小包长,但又不足一个MSS的包),则发送端会先将第一个小包发送出去,而将后面到达的少量字符数据都缓存起来而不立即发送,直到收到接收端对前一个数据包报文段的ACK确认、或当前字符属于紧急数据,或者积攒到了一定数量的数据(比如缓存的字符数据已经达到数据包报文段的最大长度)等多种情况才将其组成一个较大的数据包发送出去。具体情况如下:

/* Return false, if packet can be sent now without violation Nagle's rules:
 * 1. It is full sized. (provided by caller in %partial bool)
 * 2. Or it contains FIN. (already checked by caller)
 * 3. Or TCP_CORK is not set, and TCP_NODELAY is 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值