一些有关TCP通信量的研究如[Caceresetal.1991]发现,如果按照分组数量计算,约有一半的TCP报文段包含成块数据(如 FTP、电子邮件和 Usenet新闻),另一半则包含交互数据(如Telnet和Rlogin)。如果按字节计算,则成块数据与交互数据的比例约为 90 %和10 %。这是因为成块数据的报文段基本上都是满长度的,而交互数据则小得多。
为了同时处理上述两类数据,
延迟确认
对于键入一个交互命令时所产生的数据流,通常情况下每一个交互按键都会产生一个数据分组,也就是说,每次从客户传到服务器的是一个字节的按键。这样对每一个按键都会产生4个报文段:(1)来自客户的交互按键;(2)来自服务器的按键确认;(3)来自服务器的按键回显;( 4)来自客户的按键回显确认。
通过延迟确认的技术,可以将按键确认与按键回显合并发送,以减少网络的负载。
使用延迟确认时,通常TCP在接收到数据时并不立即发送ACK;相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带 ACK)。绝大多数实现采用的时延为 200 ms,也就是说,TCP将以最大200 ms的时延等待是否有数据一起发送。
Nagle算法
Nagle算法是一种解决小包问题的方法,这种问题指的是应用程序一次产生一字节数据,这样会导致网络由于太多的包而过载。例如,如果应用程序一次发送1字节,那么一次实际上会有20字节的IP首部+20字节的TCP首部+1字节的数据被传输,这些小分组会增加出现拥塞的可能。
该算法要求一个 TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。 TCP