Nagle算法思想+伪代码

问题引入

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

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

Nagle伪代码:

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

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

你可能感兴趣的:(笔记,学习分享,个人理解,算法)