Nagle算法思想+伪代码

81 篇文章 2 订阅
65 篇文章 4 订阅

问题引入

如何避免发送方发送小数据呢?

发送方的策略:
使⽤ Nagle 算法,该算法的思路是延时处理,只有满⾜下⾯两个条件中的任意⼀个条件,才可以发送数据:
条件⼀:要等到窗⼝⼤⼩ >= MSS 并且 数据⼤⼩ >= MSS ;
条件⼆:收到之前发送数据的 ack 回包;
只要上⾯两个条件都不满⾜,发送⽅⼀直在囤积数据,直到满⾜上⾯的发送条件。

Nagle伪代码:

if 有数据要发送 {
	if 可⽤窗⼝⼤⼩ >= MSS and 可发送的数据 >= MSS {
		 ⽴刻发送MSS⼤⼩的数据
 	} 
 	else {
		if 有未确认的数据 {
			将数据放⼊缓存等待接收ACK
 		} 
 		else {
			⽴刻发送数据
 		}
 	}
}

💡注意,如果接收⽅不能满⾜「不通告⼩窗⼝给发送⽅」,那么即使开了 Nagle 算法,也⽆法避免糊涂窗⼝综合症,因为如果对端 ACK 回复很快的话(达到 Nagle 算法的条件⼆),Nagle 算法就不会拼接太多的数据包,这种情况下依然会有⼩数据包的传输,⽹络总体的利⽤率依然很低。
所以,接收⽅得满⾜「不通告⼩窗⼝给发送⽅」+ 发送⽅开启 Nagle 算法,才能避免糊涂窗⼝综合症。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值