没有合适的资源?快使用搜索试试~ 我知道了~
3.2.有连接,可靠传输,数据按序到达的TCP 3.2.1.有连接 3.2.2.传输可靠性
资源详情
资源评论
资源推荐
2014/10/31
TCP协议疑难杂症全景解析 - 笔不敌剑! - 博客频道 - CSDN.NET
http://blog.csdn.net/dog250/article/details/6612496 1/16
1.网络协议设计
ISO提出了OSI分层网络模型,这种分层模型是理论上的,TCP/IP最终实现了一个分层
的协议模型,每一个层次对应一组网络协议完成一组特定的功能,该组网络协议被其下
的层次复用和解复用。这就是分层模型的本质,最终所有的逻辑被编码到线缆或者电磁
波。
分层模型是很好理解的,然而对于每一层的协议设计却不是那么容易。TCP/IP的漂
亮之处在于:协议越往上层越复杂。我们把网络定义为互相连接在一起的设备,网络的
本质作用还是“端到端”的通信,然而希望互相通信的设备并不一定要“直接”连接在一
起,因此必然需要一些中间的设备负责转发数据,因此就把连接这些中间设备的线缆上
跑的协议定义为链路层协议,实际上所谓链路其实就是始发与一个设备,通过一根线,
终止于另一个设备。我们把一条链路称为“一跳”。因此一个端到端的网络包含了“很多
跳”。
2.TCP和IP协议
终止于IP协议,我们已经可以完成一个端到端的通信,为何还需要TCP协议?这是一个
问题,理解了这个问题,我们就能理解TCP协议为何成了现在这个样子,为何如此“复
杂”,为何又如此简单。
正如其名字所展示的那样,TCP的作用是传输控制,也就是控制端到端的传输,那
为何这种控制不在IP协议中实现的。答案很简单,那就是这会增加IP协议的复杂性,而
IP协议需要的就是简单。这是什么原因造成的呢?
首先我们认识一下为何IP协议是沙漏的细腰部分。它的下层是繁多的链路层协议,
这些链路提供了相互截然不同且相差很远的语义,为了互联这些异构的网络,我们需要
一个网络层协议起码要提供一些适配的功能,另外它必然不能提供太多的“保证性服
务”,因为上层的保证性依赖下层的约束性更强的保证性,你永远无法在一个100M吞吐
量的链路之上实现的IP协议保证1000M的吞吐量...
IP协议设计为分组转发协议,每一跳都要经过一个中间节点,路由的设计是TCP/IP
网络的另一大创举,这样,IP协议就无需方向性,路由信息和协议本身不再强关联,它
们仅仅通过IP地址来关联,因此,IP协议更加简单。路由器作为中间节点也不能太复
杂,这涉及到成本问题,因此路由器只负责选路以及转发数据包。
因此传输控制协议必然需要在端点实现。在我们详谈TCP协议之前,首先要看一下
它不能做什么,由于IP协议不提供保证,TCP也不能提供依赖于IP下层链路的这种保
证,比如带宽,比如时延,这些都是链路层决定的,既然IP协议无法修补,TCP也不
能,然而它却能修正始于IP层的一些“不可保证性质”,这些性质包括IP层的不可靠,IP
层的不按顺序,IP层的无方向/无连接。
将该小节总结一下,TCP/IP模型从下往上,功能增加,需要实现的设备减少,然而
2014/10/31
TCP协议疑难杂症全景解析 - 笔不敌剑! - 博客频道 - CSDN.NET
http://blog.csdn.net/dog250/article/details/6612496 2/16
设备的复杂性却在增加,这样保证了成本的最小化,至于性能或者因素,靠软件来调节
吧,TCP协议就是这样的软件,实际上最开始的时候,TCP并不考虑性能,效率,公平
性,正是考虑了这些,TCP协议才复杂了起来。
3.TCP协议
这是一个纯软件协议,为何将其设计上两个端点,参见上一小节,本节详述TCP协议,
中间也穿插一些简短的论述。
3.1.TCP协议
确切的说,TCP协议有两重身份,作为网络协议,它弥补了IP协议尽力而为服务的不
足,实现了有连接,可靠传输,报文按序到达。作为一个主机软件,它和UDP以及左
右的传输层协议隔离了主机服务和网络,它们可以被看做是一个多路复用/解复用器,
将诸多的主机进程数据复用/解复用到IP层。可以看出,不管从哪个角度,TCP都作为
一个接口存在,作为网络协议,它和对端的TCP接口,实现TCP的控制逻辑,作为多路
复用/解复用器,它和下层IP协议接口,实现协议栈的功能,而这正是分层网络协议模
型的基本定义(两类接口,一类和下层接口,另一类和对等层接口)。
我们习惯于将TCP作为协议栈的最顶端,而不把应用层协议当成协议栈的一部分,
这部分是因为应用层被TCP/UDP解复用了之后,呈现出了一种太复杂的局面,应用层
协议用一种不同截然不同的方式被解释,应用层协议习惯于用类似ASN.1标准来封装,
这正体现了TCP协议作为多路复用/解复用器的重要性,由于直接和应用接口,它可以
很容易直接被应用控制,实现不同的传输控制策略,这也是TCP被设计到离应用不太远
的地方的原因之一。
总之,TCP要点有四,一曰有连接,二曰可靠传输,三曰数据按照到达,四曰端到
端流量控制。注意,TCP被设计时只保证这四点,此时它虽然也有些问题,然而很简
单,然而更大的问题很快呈现出来,使之不得不考虑和IP网络相关的东西,比如公平
性,效率,因此增加了拥塞控制,这样TCP就成了现在这个样子。
3.2.有连接,可靠传输,数据按序到达的TCP
IP协议是没有方向的,数据报传输能到达对端全靠路由,因此它是一跳一跳地到达对端
的,只要有一跳没有到达对端的路由,那么数据传输将失败,其实路由也是互联网的核
心之一,实际上IP层提供的核心基本功能有两点,第一点是地址管理,第二点就是路由
选路。TCP利用了IP路由这个简单的功能,因此TCP不必考虑选路,这又一个它被设计
成端到端协议的原因。
既然IP已经能尽力让单独的数据报到达对端,那么TCP就可以在这种尽力而为的网络
上实现其它的更加严格的控制功能。TCP给无连接的IP网络通信增加了连接性,确认了
已经发送出去的数据的状态,并且保证了数据的顺序。
2014/10/31
TCP协议疑难杂症全景解析 - 笔不敌剑! - 博客频道 - CSDN.NET
http://blog.csdn.net/dog250/article/details/6612496 3/16
3.2.1.有连接
这是TCP的基本,因为后续的传输的可靠性以及数据顺序性都依赖于一条连接,这是最
简单的实现方式,因此TCP被设计成一种基于流的协议,既然TCP需要事先建立连接,
之后传输多少数据就无所谓了,只要是同一连接的数据能识别出来即可。
疑难杂症1:3次握手和4次挥手
TCP使用3次握手建立一条连接,该握手初始化了传输可靠性以及数据顺序性必要的信
息,这些信息包括两个方向的初始序列号,确认号由初始序列号生成,使用3次握手是
因为3次握手已经准备好了传输可靠性以及数据顺序性所必要的信息,该握手的第3次
实际上并不是需要单独传输的,完全可以和数据一起传输。
TCP使用4次挥手拆除一条连接,为何需要4次呢?因为TCP是一个全双工协议,必须
单独拆除每一条信道。注意,4次挥手和3次握手的意义是不同的,很多人都会问为何
建立连接是3次握手,而拆除连接是4次挥手。3次握手的目的很简单,就是分配资源,
初始化序列号,这时还不涉及数据传输,3次就足够做到这个了,而4次挥手的目的是
终止数据传输,并回收资源,此时两个端点两个方向的序列号已经没有了任何关系,必
须等待两方向都没有数据传输时才能拆除虚链路,不像初始化时那么简单,发现SYN标
志就初始化一个序列号并确认SYN的序列号。因此必须单独分别在一个方向上终止该方
向的数据传输。
疑难杂症2:TIME_WAIT状态
为何要有这个状态,原因很简单,那就是每次建立连接的时候序列号都是随机产生的,
并且这个序列号是32位的,会回绕。现在我来解释这和TIME_WAIT有什么关系。
任何的TCP分段都要在尽力而为的IP网络上传输,中间的路由器可能会随意的缓存任
何的IP数据报,它并不管这个IP数据报上被承载的是什么数据,然而根据经验和互联网
的大小,一个IP数据报最多存活MSL(这是根据地球表面积,电磁波在各种介质中的传
输速率以及IP协议的TTL等综合推算出来的,如果在火星上,这个MSL会大得多...)。
现在我们考虑终止连接时的被动方发送了一个FIN,然后主动方回复了一个ACK,然
而这个ACK可能会丢失,这会造成被动方重发FIN,这个FIN可能会在互联网上存活
MSL。
如果没有TIME_WAIT的话,假设连接1已经断开,然而其被动方最后重发的那个
FIN(或者FIN之前发送的任何TCP分段)还在网络上,然而连接2重用了连接1的所有的5
元素(源IP,目的IP,TCP,源端口,目的端口),刚刚将建立好连接,连接1迟到的FIN
到达了,这个FIN将以比较低但是确实可能的概率终止掉连接2.
为何说是概率比较低呢?这涉及到一个匹配问题,迟到的FIN分段的序列号必须落在
连接2的一方的期望序列号范围之内。虽然这种巧合很少发生,但确实会发生,毕竟初
始序列号是随机产生了。因此终止连接的主动方必须在接受了被动方且回复了ACK之后
等待2*MSL时间才能进入CLOSE状态,之所以乘以2是因为这是保守的算法,最坏情况
下,针对被动方的ACK在以最长路线(经历一个MSL)经过互联网马上到达被动方时丢
失。
为了应对这个问题,RFC793对初始序列号的生成有个建议,那就是设定一个基准,
在这个基准之上搞随机,这个基准就是时间,我们知道时间是单调递增的。然而这仍然
有问题,那就是回绕问题,如果发生回绕,那么新的序列号将会落到一个很低的值。因
剩余15页未读,继续阅读
豆瓣时间
- 粉丝: 22
- 资源: 329
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0