TCP/IP详解 卷1 第十九章 TCP的交互数据流

  1. 云栖社区>
  2. 博客>
  3. 正文

TCP/IP详解 卷1 第十九章 TCP的交互数据流

xcywt 2018-01-31 21:31:00 浏览685
展开阅读全文

19.1 引言

成块数据:比如ftp、电子邮件、Usenet新闻

交互数据:Telnet、Rlogin

 成块数据的报文段基本上都是满长度(full-size)的,而交互数据小的多(Telnet和Rlogin分组中通常约90%左右的用户数据小于10个字节)。

19.2 交互式输入

 在Rlogin键入一个交互命令时所产生的数据流,一般需要下面四个步骤:

 

然而我们一般可以将报文段2和报文段3进行合并—也就是按键确认和按键回显一起发送。这就是经受时延的确认。 

19.3 经受时延的确认

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

19.4 Nagle算法

微小分组(tinygram):41字节长的分组(20字节IP头,20字节TCP头,1字节数据)。

在局域网内一般不会出现拥塞,但是在广域网上这些小分组会增加出现拥塞的可能。

解决方法就是RFC 896中建议的Nagle算法。

该算法要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组 的确认到达之前不能发送其他的小分组。相反、TCP收集这些少量的分组,并在确认到来时以一个分组的方式发出去。(简而言之就是把所有的小分组收集到一起再发送出去)

 19.4.1关闭Nagle算法

在X窗口系统服务器上,小消息(比如鼠标移动)必须无延时的发送,以便为进行某种操作的交互用户提供实时的反馈

 

19.5 窗口大小通告

19.6 小结

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

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

在较慢的广域网环境中,通常使用Nagle算法来减少这些小报文段的数目。这个算法限制发送者任何时候只能有一个发送的小报文未被确认。

网友评论

登录后评论
0/500
评论