码迷,mamicode.com
首页 > 其他好文 > 详细

《TCP/IP详解》读书笔记(19章)-TCP的交互数据流

时间:2015-03-17 17:57:04      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:tcp   交互数据流   窗口通告   nagle   经受时延   

在TCP进行数据传输时,可以分为成块数据流和交互数据流两种,如果按字节计算,成块数据与交互数据的比例约为90%和10%,TCP需要同时处理这两类数据,且处理的算法不同。

书籍本章中以Rlogin应用为例观察交互数据的传输过程。提示经受时延的确认是如何工作以及Nagle算法怎样减少了通过广域网络传输的小分组的数目。

交互式输入
技术分享
上图为没有优化的字符输入回显的数据传输过程,一共需要四个报文段。

经受时延的确认
上图第二,三个报文段可以合并---按键确认和按键回显一起发送。这种技术叫做经受时延的确认。
通常TCP在接收到数据时并不立即发送ACK,相反,它推迟发送,以便将ACK与需要沿该方向发送的数据一起发送(有时这种现象为数据捎带的ACK)。绝大数实现采用的时延为200ms,也就是说,TCP将以最大200ms的时延等待是否有数据一起发送。
ACK延时等待时间不大于TCP定时器的原因:
假如TCP使用200ms的定时器,该定时器将相对于内核引导的200ms固定时间溢出,由于将要确定的数据随机到达,TCP将在下一次内核的200ms定时器溢出时得到通知,所以ACK实际等待的时间为1~200ms中任一刻。

Nagle算法
Nagle算法要求TCP连接上最多只有一个未被确认的未完成小分组,在该分组确认到达之前不能发送其他的小分组。相反,TCP收集这些少量的分组,并在确认到达时以一个大的分组发出去。

该算法的优点在于它是自适应的:确认到达得越快,数据也就发送得越快。可以减少网络上的微小分组数目,降低拥塞出现的可能(局域网这些小分组通常不会引起麻烦,但在较慢的广域网则存在拥塞的可能)。但相应的,因为不是立即ACK,也会增加更多的时延。

有时我们也需要关闭Nagle算法,例如鼠标移动必须无时延地发送,以便为用户的交互提供实时的反馈。

流程:
(1)发送端TCP将从应用进程接收到的第一数据块立即发送,不管其大小,哪怕只有一个字节。
(2)发送端输出第一块数据后开始收集数据,并等待确认。
(3)确认未达到时,若收集数据达到窗口的一半或一个MSS段,立即发送。
(4)确认到达后,把缓冲区中的数据组成一个TCP段,然后发送。

窗口大小通知

在图19-4,客户端与服务器端的通告窗口分别为4096与8192。但报文5通告的窗口大小为4095个字节,这意味着在TCP缓冲区中仍然有一个字节等待应用程序读取。

作者原创,转载请标明原处:http://blog.csdn.net/xifeijian/article/details/44260601

《TCP/IP详解》读书笔记(19章)-TCP的交互数据流

标签:tcp   交互数据流   窗口通告   nagle   经受时延   

原文地址:http://blog.csdn.net/xifeijian/article/details/44260601

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!