延时确认和Nagle算法
2017-05-22 本文已影响441人
liouville
[TOC]
减小交互式数据 延时确认;Nagle算法
延时确认
发送ack,如果没有segment要发送给对方,等待下一个200ms超时的时候发送ack;如果有segment要发送给对方,则马上
Nagle算法
该算法的优点在于它是自适应的,接收方确认的快,发送方发送的就越快
在一个tcp连接上只能有一个没有被确认的数据包,在这个确认没有收到之前,不发送任何数据报,相反,收集小的报文段以便确认到达时一起发送。
但是有一些例外情况:
-
如果包长度达到MSS,则允许发送;
-
如果该包含有FIN,则允许发送;
-
设置了TCP_NODELAY选项,则允许发送;
-
未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
两种算法一起使用产生的问题
两种算法优点都有减小网络数据包的优点,但是都增加了网络通信的延时
两种算法都是为了减少网络通信包的数量的,但是结合在一起就会有问题,
例如客户端发送一个数据报,
由于延时确认,服务端不是马上确认;
若客户端启用nagle算法,要等到收到上一个数据报的确认在发送下一个数据报;
如此以来,客户端和服务端相互等待,直到超时或者其他情况