




免费预览已结束,剩余2页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TCP传输机制简介摘 要:传输层是计算机网络中重要的一层,它负责连接下层物理结构和上层的应用程序,TCP协议是运输层的重要协议之一,本文对TCP协议做一个简单的介绍,然后为了介绍TCP传输机制,首先介绍TCP报文段的结构,而后介绍TCP协议可靠传输的实现方法以及TCP协议的流量控制和TCP协议的拥塞控制,最后介绍TCP协议整个的传输过程,从连接的建立一直到连接的释放。关键词:TCP协议 ;TCP报文段;流量控制;拥塞控制1引言运输层是整个网络体系结构中的关键层次之一,为应用进程之间提供端到端的逻辑通信。TCP(Transport Control Protocol,传输控制协议)协议是运输层两个重要的协议之一(另一个是UDP协议)。它是提供面向连接的服务,为用户提供一条可靠的通信信道,这在一些场合(比如说文件传输,电子邮件等)中是必须的。本文对TCP协议做一个简要的介绍,重点叙述TCP报文的结构以及TCP是如何实现可靠传输的,包括流量控制和拥塞控制,帮助初学者更好的了解TCP传输机制。2TCP协议概述传输控制协议TCP是运输层的重要协议之一,当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的(只是提供尽最大努力服务),但这种逻辑通信信道就相当于一条全双工的可靠信道。它提供一种点对点的面向连接的服务,在传输数据之前必须先建立连接,数据传输结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的、面向连接的运输服务,因此不可避免地增加了许多开销,如确认、流量控制、计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多的处理机资源。TCP提供可靠的交互服务的含义是,通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达。TCP提供全双工通信的含义是,TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接受缓存,在发送时将数据发送到缓存中,而后TCP在合适的时候将数据发送出去;接受时将数据先存入缓存中,上层的程序在合适的时候读取缓存中的数据进行处理。TCP是点对点的通信的含义是,TCP连接有两个端点,这个端点叫做套接字(Socket)接口。根据RFC793的定义:端口号拼接到(contatenated with)IP地址即构成套接字。因此套接字的表示方法是在点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开,即:套接字Socket=(IP地址:端口号)每一条TCP连接唯一地被通信的两端的两个端点(即两个套接字)所确定。此外TCP是面向字节流的传输,即把数据块看成无结构的字节流并将字节流以报文段为单位传输。3TCP报文结构TCP虽然是面向字节流的,但是TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两个部分,而TCP的全部功能都体现在它首部中各字段的作用。因此,只有弄清TCP首部各字段的作用才能掌握TCP的工作原理。下面就讨论TCP报文段的首部格式。TCP报文段首部的前20个字节是固定的(Figure 1),后面有4N个字节是根据需要而增加的选项(N是整数)。因此TCP首部的最小长度是20字节。首部固定部分各个字段的意义如下:(1) 源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号。(2) 序号:占4字节。序号范围是0,232-1,共232个序号。序号增加到232-1后,下一个序号又回到0。TCP是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段则指的是本报文段所发送的数据的第一个字节的序号。这个字段的名称也叫做报文段序号。Figure 1 .TCP报文段的首部格式(3) 确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到A发送过来的一个报文段,去序号字段值是501,而数据长度是200字节(序号501-700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。总之若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。(4) 数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。但注意,“数据偏移”的单位是32位字。由于4位二进制数能够表示的最大十进制数字是15,因此数据偏移的最大值是60字节,这也是TCP首部的最大长度。(5) 保留:占6位,保留为今后使用,但目前应置为0。下面有6个控制位说明本报文段的性质,它们的意义见下面的(6)(11)。(6) 紧急URG(URGent):当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(优先级较高),这时发送方TCP就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据。这时要与首部中紧急指针字段配合使用。(7) 确认ACK(ACKnowlegment):仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。(8) 推送PSH(PuSH):当两个应用进程进行交互式的通信时,有时在一端的应用程序希望在键入一个命令后立即就能够收到对方的回应。在这种情况下,TCP就可以使用推送(push)操作。这时,发送发TCP把PSH置为1,并立即创建一个报文段发送出去。接受方TCP收到PSH=1的报文段,就尽快地(即“推送”向前)交付给接受应用进程,而不再等到整个缓存都填满了再向上交付。但是该方法很少使用。(9) 复位RST(ReSeT):当RST=1时,表明TCP连接中出现严重差错(如主机崩溃等),必须释放连接,然后再重新建立运输连接。RST置为1还用来拒绝一个非法的报文段或拒绝打开一个连接。RST也可称为重建位或重置位。(10) 同步SYN(SYNchronization):在建立连接时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求的报文段。若对方同意建立连接,则应在响应报文段中使SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或连接接受报文。(11) 终止FIN(FINis):用来释放一个连接。当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放运输连接。(12) 窗口:占2个字节。窗口值是0216-1之间的整数。窗口指的是发送本报文段的一方的接受窗口。窗口值告诉对方:从本报文段首部中的确认号算起,接受方目前允许对方发送的数据量。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据,窗口字段明确的支出了现在允许对方发送的数据量。窗口值经常是在动态变化着的。(13) 检验和:占2个字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段前面加上12字节的伪首部。(14) 紧急指针:占2个字节。紧急指针仅在URG=1是才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可发送紧急数据。(15) 选项:长度可变,最长达40字节。当没有使用选项时,TCP的首部长度是20字节。选项内容有最大报文长度MSS、窗口扩大、时间戳和选择确认等。具体的作用可以参考相关的文章,在此不再详述。4TCP可靠传输的实现我们知道,TCP发送的报文段是交给IP层传输的。但IP层只能提供尽最大努力的服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个运输层之间的通信变得可靠。下面从最简单的停止等待协议讲起。4.1 停止等待协议全双工通信的双方既是发送方也是接收方。下面为了讨论问题的方便,我们仅考虑A发送数据而B接受数据并发送确认。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。4.1.1 无差错情况最简单的无差错情况是A发送分组M1,发送完就暂停发送,等待B的确认。B收到M1就像A发送确认。A收到对M1的确认后,就再发送下一个分组M2。同样,在收到B对M2的确认后,在发送M3。4.1.2 出现差错在传输过程中B接受M1时检测出了差错,就丢弃M1,其他什么也不做(不通知A收到有差错的分组)。也可能是M1在传输过程中丢失了,这时B当然什么都不知道。在这两种情况下,B都不会发送任何消息。可靠传输协议是这样设计的:A只要超过一段时间仍然没有收到确认,就认为刚才发送的分组丢失,因而重传前面发送过的分组。这就叫做超时重传。要实现超时重传,就要在每发送完一个分组设置一个超时计时器。4.1.3 丢失确认和确认迟到另一种情况,B发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,因此A在超时计时器到期后就要重传M1,假定B又收到了重传的分组M1,这时应采取两个行动。第一,丢弃这个重复的分组M1,不向上层交付。第二,向A发送确认。不能认为已经发送过确认就不在发送,因为A之所以重传M1就表示A没有收到对M1的确认。4.2 以字节为单位的滑动窗口TCP的滑动窗口是与报文段中窗口值对应的,即接收方最多能够接受多长字节的数据或是发送方最多允许发送多长字节的数据。发送方A根据接收方B发来的确认报文段段中窗口值和确认号构建确认号开头,以窗口值为长度的一个允许发送窗口,其中序号最小的位置称为后沿,最大的称为前沿。后沿后面的数据表示B已经全部收到,不用再发送。在设置一个指针P2表示已经发送数据的最大序号,在后沿到P2之间表示已经发送但没有收到确认的数据。当收到确认报文中确认值大于现在的后沿,那么应向前滑动窗口,使得后沿等于确认值。如果发送窗口中的数据全部发送出去,但是没有收到B的确认,那么A在超时计时器过期时会重传这些数据,保证B能够收到全部的数据。(有关超时重传时间的选择,可以参考相关的文献,这里不再叙述)B在收到数据时,如果没有收到期望的数据(接收窗口中编号最小的数据),即使收到其他数据(编号可能更大),那么在发送确认报文时也需要将确认值置为接收窗口中编号最小的数据,这样保证能够收到完整的数据。4.3 选择确认SACK可以看到上面的过程会重复传输大量数据,那么能不能在收到正确的、但是没有按序号排列的报文段时,能否设法只传输缺少的数据而不重传已经正确到达接收方的数据?答案是可以的,方法就是选择确认。当接收方收到了和前面的字节流不连续的两个字节块时,如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确的告诉发送方,使发送方不再重复发送这些数据。这就要求在建立TCP连接时在首部加上“允许SACK”选项,而且双方必须事先商定好,具体内容可以参见RFC2018。5TCP流量控制一般来说,我们总是希望数据传输得更快一些。但如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。利用滑动窗口机制可以很方便的在TCP连接上实现对发送方的流量控制。发送方的发送窗口不能超过接收方给出的接受窗口的数值(注意TCP的窗口单位是字节,不是报文段)。这样可以使得发送速率有接收方来确定,使得接收方能够接受到数据。但当某一次接收方的窗口值为0,这是发送方不会发送数据,等待接收方发送新的确认报文,但是接收方的新的确认报文在网络中丢失,那么发送方就可能一直等待下去。为了解决这个问题,TCP为每一个连接设有一个持续计时器。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带一字节数据),而对方就在确认这个探测报文段时给出了现在的窗口值。如果窗口仍然是0,那么收到这个报文段的一方就重新设置持续计时器。如果窗口不是0,那么死锁的僵局就可以打破了。6TCP的拥塞控制6.1 拥塞和拥塞控制的概念在计算机网络中的链路容量(即带宽)、交换节点中的缓存和处理机等,都是网络的资源。在某段时间按,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞常常趋于恶化。如果一个路由器没有足够的缓存空间,他就会丢弃一些新到的分组。但当分组被丢弃时,发送这一分组的源点就会重传这一分组,甚至可能还要重传多次。这样会引起更多的分组流入网络和被网络中的路由器丢弃。课件拥塞引起的重传并不会缓解网络的拥塞,反而会加剧网络的拥塞。所谓拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程涉及所有的主机、路由器和降低网络传输性能的有关的所有因素。另外进行拥塞控制需要付出代价,在设计拥塞控制策略时必须全面衡量得失。6.2 拥塞控制方法因特网建议标准RFC2581定义了四种拥塞控制算法,即慢开始、拥塞避免、快重传和快恢复,本文以慢开始和拥塞避免为例介绍,其他两种方法可以参考相关文献。在讨论时我们假定:(1) 数据时单方向传送的,而另一个方向只传送确认。(2) 接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度决定。6.2.1 慢开始发送方维持一个叫做拥塞窗口cwnd的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态变化。下面用例子说明慢开始的原理。在一开始发送方设置cwnd=1,发送第一报文段M1,接收方收到后确认M1。发送方收到对M1的确认后,把cwnd增大到2,于是发送方接着发送M2和M3两个报文段。接收方收到后发回度其的确认。发送方每收到一个对新报文段的确认后就是发送方的拥塞窗口加1,因此发送方收到两个确认后,cwnd增大为4,并可发送M4M7四个报文段。因此使用慢开始算法后,每经过一个传输轮次,拥塞窗口就加倍。为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量,使用方法如下:当cwndssthresh时,停止使用慢开始算法而改用拥塞避免算法。当cwnd=ssthresh时,既可使用慢开始算法,又可以使用拥塞避免算法。6.2.2 拥塞避免拥塞避免算法的思路是让拥塞窗口cwnd缓慢的增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,这样拥塞窗口cwnd按线性规律缓慢增长。无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络拥塞,就要把慢开始门限ssthresh设置为出现拥塞时的一半(但不能小于2)。然后把拥塞窗口cwnd重新 置为1,执行慢开始算法。7TCP的运输连接管理TCP是面向连接的协议。运输连接是用来传输TCP报文的。TCP运输连接时建立和释放每一次面向连接的通信中不可少的过程。因此运输连接就有三个阶段,即:连接建立、数据传送和连接释放。运输连接的管理就是使运输连接的建立和释放都能正常的进行。前面已经讨论了数据传送的相关问题,下面主要讨论连接建立和连接释放。7.1 TCP连接的建立假定A为客户而B为服务器,一开始TCP都处于关闭状态。B首先创建传送控制块TCB,准备接受客户进程请求。这样服务器处于LISTEN状态。A的TCP客户进程也是首先创建传输控制模块TCB,然后向B发出连接请求报文段(SYN=1),报文段中不携带数据,这是TCP客户进程进入SYN-SENT状态。B收到连接请求报文段后,如同意建立连接,则向A发送确认。报文中应把SYN和ACK位都置为1,这时,TCP服务器进程进入SYN-RCVD状态。TCP客户端收到B的确认后,还要向B给出确认。ACK=1。这个报文段可以携带数据,但如果不携带数据,不消耗序号,这是TCP连接已建立
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程消防演练计划方案(3篇)
- 2025年拥有履行合同所需的关键设备
- 工程信息收集处理方案(3篇)
- 城市照明节能改造2025年技术升级与创新研究报告
- 城市照明系统智能化升级对2025年城市夜生活的影响评估
- 2025澳大利亚购房签合同需留意的关键细节
- 红十字应急救护培训测试题及答案
- 2025 租赁合同范本标准简易租赁合同范本
- 2025年急救安全试题及答案
- 2025年消防防晒安全测试题及答案
- 中小学英语课件-Go-away-Mr-Wolf
- 二年级语文上册《有趣的动物》课件PPT
- 不干胶贴标机设计学士学位论文
- 《劳动合同书》-河南省人力资源和社会保障厅劳动关系处监制(2016.11.15)
- 钢轨检测报告
- 战略管理:概念与案例
- GB/T 3505-2009产品几何技术规范(GPS)表面结构轮廓法术语、定义及表面结构参数
- GB/T 11186.1-1989涂膜颜色的测量方法第一部分:原理
- 09S304 卫生设备安装图集
- 功能材料概论-课件
- 微纳加工课件
评论
0/150
提交评论