- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语言,编程,软件,c++,java,c,软件编程,程序,haoop,android,nfc
2015/9/16 协议森林08 不放弃 (TCP协议与流通信) Vamei 博客园
Fork me on GitHub
Vamei
编程,数学,设计
博客园 首页 博问 闪存 联系 订阅 管理
随笔213 文章1 评论3338
协议森林08 不放弃 (TCP协议与流通信)
作者:Vamei 出处:http :///vamei 欢迎转载,也请保留这
段声明。谢谢!
TCP (Transportation Control Protocol)协议与IP协议是一同产生的。事实
上,两者最初是一个协议,后来才被分拆成网络层的IP和传输层的TCP。我们已经在
UDP协议中介绍过,UDP协议是IP协议在传输层的“傀儡”,用来实现数据包形式的通
信。而TCP协议则实现了“流”形式的通信。
TCP的内容非常丰富。我不能在一篇文章中将TCP讲完。这一篇主要介绍TCP协议的下
面几个方面:
1. “流”通信的意义与实现方式
2. 如何实现可靠传输
3. 使用滑窗提高效率
“流”通信
TCP协议是传输层协议,实现的是端口到端口(port)的通信。更进一步,TCP协议虚
拟了文本流(byte stream)的通信。在Linux文本流中我们谈到,计算机数据的本
质是有序的0/1序列 (如果以byte为单位,就叫做文本流)。计算机的功能就是储存
和处理文本流。CPU + memory + 存储设备实现了文本流在同一台计算机内部的加
工处理。通过一些IO,比如屏幕和键盘,文本流实现了人机交互。而进一步,如果网
络通信可在不同计算机之间进行文本流的交互,那么我们就和整个计算机系统的数据
处理方式实现了对接。
IP协议(参考协议森林03, 05)和UDP协议采用的是数据包的方式传送,后发出的数
据包可能早到,我们并不能保证数据到达的次序。TCP协议确保了数据到达的顺序与
/vamei/archive/2012/12/08/2805252.html 1/13
2015/9/16 协议森林08 不放弃 (TCP协议与流通信) Vamei 博客园
文本流顺序相符。当计算机从TCP协议的接口读取数据时,这些数据已经是排列好顺
序的“流”了。比如我们有一个大文件要从本地主机发送到远程主机,如果是按
照“流”接收到的话,我们可以一边接收,一边将文本流存入文件系统。这样,等
到“流”接收完了,硬盘写入操作也已经完成。如果采取UDP的传输方式,我们需要等
到所有的数据到达后,进行排序,才能组装成大的文件。这种情况下,我们不得不使
用大量的计算机资源来存储已经到达的数据,直到所有数据都达到了,才能开始处
理。
“流”的要点是次序(order),然而实现这一点并不简单。TCP协议是基于IP协议的,
所以最终数据传送还是以IP数据包为单位进行的。如果一个文本流很长的话,我们不
可能将整个文本流放入到一个IP数据包中,那样有可能会超过MTU。所以,TCP协议
封装到IP包的不是整个文本流,而是TCP协议所规定的片段(segment)。与之前的一
个IP或者UDP数据包类似,一个TCP片段同样分为头部(header)和数据(payload)
两部分 (“片段”这个名字更多是起提醒作用:嘿,这里并不是完整的文本流)。整个
文本流按照次序被分成小段,而每一段被放入TCP片段的数据部分。一个TCP片段封装
成的IP包不超过整个IP接力路径上的最小MTU,从而避免令人痛苦的碎片化
(fragmentation)。
(给文本流分段是在发送主机完成的,而碎片化是在网络中的路由器完成的。路由器要
处理许多路的通信,所以相当繁忙。文本流提前在发送主机分好段,可以避免在路由
器上执行碎片化,可大大减小网络负担)
文档评论(0)