第十九章 TCP的交互数据流

 

一些有关 TCP通信量的研究如 [Caceres et al. 1991]发现,如果按照分组数量计算,约有一 半的 TCP报文段包含成块数据(如 FTP、电子邮件和 Usenet新闻),另一半则包含交互数据(如TelnetRlogin)。如果按字节计算,则成块数据与交互数据的比例约为90%10%。这是因为成块数据的报文段基本上都是满长度( full-sized)的(通常为 512字节的用户数据),而交互数据则小得多(上述研究表明 TelnetRlogin分组中通常约 90%左右的用户数据小于 10个字节)。

19.4   Nagle算法

在前一节我们看到 , 在一个 Rlogin连接上客户一般每次发送一个字节到服务器,这就产生 了一些41字节长的分组:20字节的IP首部、20字节的TCP首部和1个字节的数据。在局域网上, 这些小分组(被称为微小分组( tinygram))通常不会引起麻烦,因为局域网一般不会出现拥 塞。但在广域网上,这些小分组则会增加拥塞出现的可能。一种简单和好的方法就是采用 RFC 896 [Nagle 1984]中所建议的 Nagle算法。

该算法要求一个 TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反, TCP收集这些少量的分组,并在确认到来时以一 个分组的方式发出去。该算法的优越之处在于它是自适应的:确认到达得越快,数据也就发送得越快。而在希望减少微小分组数目的低速广域网上,则会发送更少的分组。

19.6   小结

交互数据总是以小于最大报文段长度的分组发送。在 Rlogin中通常只有一个字节从客户发送到服务器。 Telnet允许一次发送一行输入数据,但是目前大多数实现仍然发送一个字节。

对于这些小的报文段,接收方使用经受时延的确认方法来判断确认是否可被推迟发送,以便与回送数据一起发送。这样通常会减少报文段的数目,尤其是对于需要回显用户输入字符的Rlogin会话。

在较慢的广域网环境中,通常使用 Nagle算法来减少这些小报文段的数目。这个算法限制 发送者任何时候只能有一个发送的小报文段未被确认。但我们给出的一个例子也表明有时需 要禁止Nagle算法的功能。

你可能感兴趣的:(第十九章 TCP的交互数据流)