BR 技术头条 技术链接、资讯与社区分享流
bl blog.chinaunix.net / 2016-01-12 21:42 / by @vv1133_

网络编程中的坑(四):数据发送延时

赞过的人

@技术头条@vv1133_

讨论 · 1 条

@技术头条 2016-01-13 09:20

使用TCP socket多次发送较少的数据时,对方可能会一段时间收不到数据。这可能是受到了TCP Nagle算法的影响。

先来了解下Nagle算法。
Nagle算法作用是尽可能发送大块数据,避免网络中拥有大量小块数据而降低了网络利用率。
Nagle算法基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
Nagle算法的规则:
(1)如果包长度达到MSS,则允许发送;
(2)如果该包含有FIN,则允许发送;
(3)设置了TCP_NODELAY选项,则允许发送;
(4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
(5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。

发表评论