TCP的交互数据流
两类数据通过TCP传输,交互数据流与块数据。
TCP需要同时处理这两类数据,但使用的处理算法有所不同。本文介绍交互数据的传输过程。
一、经受时延的确认
通常TCP在接收到数据时并不立即发送ACK,而是推迟发送,以便将ACK和需要沿该方向发送的数据一起发送(有时称之为数据捎带ACK)。绝大多数采用时延是200ms,也就是说TCP将以200ms的时延等待是否有数据一起发送。

如上图,ack2
和ack3
是经受时延的确认。在收到另一端的数据以后,没有马上发起ack,而是等待本地的定时器超时,才发送ack给另一端。
二、Nagle算法
Rlogin每次发送一个字节到服务器,会产生以一些微小分组 (tiny gram) 。在广域网上,会增加拥塞出现的可能性,使用Nagle算法可以减少这类问题。
Nagle算法要求在一个TCP连接上最多只能有一个未被确认的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,TCP收集这些小分组,并在确认到来时以一个分组的方式发出去。
该算法是自适应的:确认到达的越快,数据就发送的越快。在希望减少微小分组的低速广域网上,会发送更少的分组。
关闭Nagle算法
有时我们需要关闭Nagle算法。比如X窗口系统服务器,鼠标移动的消息必须无时延地发送。
此外,跨广域网运行一个交互应用的环境下,当进行多个字节的按键输入时,默认使用Nagle算法会引起额外的时延。
下起雨,也要勇敢前行