所谓交互数据流就是指通过交互产生的一些数据量很小的分组,比如客户端输出一个命令,服务器会对客户端发送一个ack以及该命令的回显,客户端再发送一个对回显命令的确认,如果这样的分组很多,那么会降低传效率。
1.经受时延的确认
是指TCP在接受到数据时通常不会立即发送ACK,而是会等待一段时间,以便于将ACK与需要沿该方向发送的数据一起发送。大部分会采用200ms的定时器。
2.Nagle算法
如果这种交互式数据发送的比较频繁,可能会在广域网上产生拥塞的可能。Nagle算法就是为了解决这种情况。
该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他分组。
也就是说必须要等到对端对上一段报文的ACK之后,才能发送下一个报文,否则收到的来自应用层的数据只能被放入缓存区中,等待收到ACK发送。
该算法的优点在于:在高速网络中,确认到达的越快,数据发送地也就越快,在低速网络中,确认到达地慢,分组数目也会减小,这样可以避免拥塞。
有时候我们也可能会需要关闭Nagle算法。比如交互命令必须无时延发送,或者输入某个特殊的功能键之后,会产生多个字符序列,如果开启了Nagle算法,那么必须要等到收到第一个字符的ACK之后,其余的字符才能发送,但服务器可能不会立马发送对该字符的确认,而是出发经受时延确认算法,这样对交互用户而言,会产生明显的时延。