TCP的交互数据流

两类数据通过TCP传输,交互数据流块数据
TCP需要同时处理这两类数据,但使用的处理算法有所不同。本文介绍交互数据的传输过程。

一、经受时延的确认

通常TCP在接收到数据时并不立即发送ACK,而是推迟发送,以便将ACK和需要沿该方向发送的数据一起发送(有时称之为数据捎带ACK)。绝大多数采用时延是200ms,也就是说TCP将以200ms的时延等待是否有数据一起发送。

如上图,ack2ack3是经受时延的确认。在收到另一端的数据以后,没有马上发起ack,而是等待本地的定时器超时,才发送ack给另一端。

二、Nagle算法

Rlogin每次发送一个字节到服务器,会产生以一些微小分组 (tiny gram) 。在广域网上,会增加拥塞出现的可能性,使用Nagle算法可以减少这类问题。
Nagle算法要求在一个TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些小分组,并在确认到来时以一个分组的方式发出去。
该算法是自适应的:确认到达的越快,数据就发送的越快。在希望减少微小分组的低速广域网上,会发送更少的分组。

关闭Nagle算法

有时我们需要关闭Nagle算法。比如X窗口系统服务器,鼠标移动的消息必须无时延地发送。
此外,跨广域网运行一个交互应用的环境下,当进行多个字节的按键输入时,默认使用Nagle算法会引起额外的时延。

posted on 2017-03-19 16:02  花老🐯  阅读(252)  评论(0编辑  收藏  举报

导航