简述TCP传输机制
简述TCP传输机制
贾杰(2008302590005)
武汉大学遥感信息工程学院 武汉(430079)
Email:645740331@qq.com
摘要:本文主要介绍了TCP传输协议的概念、主要特点、功能等相关内容,结合教科书以及查阅相关资料对TCP传输机制进行了全面而简略的概述,着重对TCP传输的关键机制进行讲解,对TCP有了更加广泛、全面的理解。
关键字:TCP,传输,客户端,可靠性,超时,重传,流量控制,拥塞控制等
前言: 就像人类的语言一样,要使计算机连成的网络能够互通信息,需要有一组共同遵守的通信标准,这就是网络协议,不同的计算机之间必须使用相同的通讯协议才能进行通信。在Internet中TCP/IP协议是使用最为广泛的通讯协议。TCP是英文Transmission Control Protocol的缩写,意思是“传输控制协议”。 TCP与IP共同构成了Internet使用的一组协议(Protocol)。本文通过对传输控制协议(TCP)的简单了解,可以很好的掌握网络间信息的传输方式、传输过程、传输机制,从而更好的理解计算机网络。
1.TCP基本概述
传输控制协议 (TCP )是 TCP/IP 协议栈中的传输层协议,它属于计算机网络OSI七层体系结构中的运输层,它通过序列确认以及包重发机制,提供可靠的数据流发送和到应用程序的虚拟连接服务。与 IP 协议相结合, TCP 组成了因特网协议的核心。
通过前面相关知识的学习我们知道,运输层中网际协议(IP)负责将消息从一个主机传送到另一个主机。为了安全消息在传送的过程中被分割成一个个的小包。 而TCP则负责收集这些信息包,并将其按适当的次序放好传送,在接收端收到后再将其正确地还原。传输协议保证了数据包在传送中准确无误。
TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用:当一台计算机需要与另一台远程计算机连接时,TCP协议会让它们建立一个连接、发送和接收数据以及终止连接。因此TCP 在端点间建立连接或虚拟电路进行可靠通信。尽管计算机通过安装IP软件,从而保证了计算机之间可以发送和接收数据,但IP协议还不能解决数据分组在传输过程中可能出现的问题。因此,若要解决可能出现的问题,连上 Internet 的计算机还需要安装TCP协议来提供可靠的并且无差错的通信服务。虽然IP和TCP这两个协议的功能不尽相同,也可以分开单独使用,但它们是在同一时期作为一个协议来设计的,并且在功能上也是互补的。只有两者的结合,才能保证 Internet 在复杂的环境下正常运行。凡是要连接到 Internet 的计算机,都必须同时安装和使用这两个协议
通过上面可知IP协议只保证计算机能发送和接收分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。可以说IP为网络间传输建立基础,疏通道路,而TCP才是传输层负责传输功能的主体。
2.TCP的特点
(1)TCP是面向连接的运输层协议, 即包括建立TCP连接、传输数据、拆除TCP连接三步
(2)每条TCP连接只能有两个端点,即是端点对端点连接
(3)TCP提供可靠交互的服务,即无差错、无错序、不丢失、不重复
(4)TCP提供全双工通信,即在TCP连接的两端都设有发送缓存和接受缓存,可以接收也可以发送
(5)面向字节流,即把数据块看成无结构的字节流,并将字节流以报文段为单位传输
3. TCP连接的建立和终止
3.1建立连接协议
(1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,隐疾初始序号(ISN),这个SYN报文段为报文段1。
(2) 服务器端发回包含服务器的初 始序号的SYN报文段(报文段2)作为应答。同时将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。
(3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。
这3个报文段完成连接的建立,称为三次握手。发送第一个SYN的一端将执行主动打开,接收这个SYN并发回下一个SYN的另一端执行被动打开。
3.2连接终止协议
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。
(4) 客户段发回确认,并将确认序号设置为收到序号加1(报文段7)。
TCP 服务提供了数据流传输、可靠性、有效流控制、全双工操作和多路复用技术等。
4.TCP可靠传输的实现
TCP 通过面向连接的、端到端的可靠数据报发送来保证可靠性。 TCP 在字节上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个字节。如果在规定时间内,没有收到关于这个包的确认响应,重新发送此包。 TCP 的可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测丢失包并请求重发。
TCP 通过以下方式提供可靠性:
◆ 应用程序分割为TCP认为最合适发送的数据块。由TCP传递给IP的信息单位叫做报文段。
◆ 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能记时收到一个确认,它 就重发这个报文段。
◆ 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常延迟几分之一秒。
◆ TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化如果收到报文段的检验和有差错,TCP将丢弃这个报文段和不确认收到这个报文段。
◆ 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果必要,TCP将对收到的数据进行排序,将收到的数据以正确的顺序交给应用层。
◆ 既然IP数据报会发生重复,TCP连接端必须丢弃重复的数据。
◆ TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。
另外,TCP对字节流的内容不作任何解释。
为了保证可靠性,发送的报文都有递增的序列号。序呈和确认号用来确保传输的可靠性。此外,对每个报文都设立一个定时器,设定一个最大时延。对那些超过最大时延仍没有收到确认信息的报文就认为已经丢失,需要重传。
5. TCP的超时和重传
发送端发出报文段后,在规定的时间内没有能够收到接收端返回的ACK信令,从而使得发送端认为该报文段丢失,触发其拥塞控制策略。在这里面主要涉及到重传计时器(retransmission timer),它是TCP协议中最重要的计时器。根据《Computer Networks, Fourth Edition》,当报文段发出后,重传计时器立即启动,如果发送端在计时器超时之前得到ACK,则计时器停止;如果计时器超时后仍然没有收到ACK,那么报文段就重传,并且计时器重新启动。
如果与服务器无法建立连接,客户端就会三次向服务器发送连接请求。在规定的时间内服务器未应答,则连接失败。即所谓的连接建立的超时。
例如:假设主机A给主机B发送消息,序号分别为1,2,3,4,5其中3号丢包了。那么主机B就会给主机A发送序号为3的ACK。
这时,主机A会向主机B进行重传。
(1)一个数据包发送之后,只有收到对方的ACK包,才会认为该数据包被正确接收了
(2)如果超时后还没有收到ACK那么就进行重传,并且只对该数据包重传,因为
它已经收到了其它数据包的ACK,所以无需对其它数据包进行重传!
(3)还有一种情况,如果数据包在传输过程中损坏了,那么接收方会产生一个NCK报文,
发送给发送方,发送方也会进行重传,并且仅仅重传这一个数据包。
具体流程为:
发送SYN超时->SYN重传->慢启动->拥塞避免算法->数据分组丢失->重复ACK->重传丢失数据分组->重复ACK->发送新的数据分组->重发数据ACK
计算超时的主要公式有: Timeout = RTT + 4×D D = α D + (1-α) | RTT - M | RTT = α RTT + (1-α) M 其中M 、RTT、D均为可变值,M是当次的RTT值。
6.TCP报文段的首部格式
TCP数据被封装在一个IP数据报中,格式如下:
IP首部20 TCP首部20 TCP首部
TCP首部格式如下:
①16位源端口号 16位目的端口号
② 32位序号
③32位确认序号
④4位首部长度 保留6位 U
⑤R
⑥G A
⑦C
⑧K P
⑨S
= 6 \* GB3 ⑥H R
?S
?T S
?Y
?N F
?I
?N 16位窗口大小
?16位检验和 16位紧急指针
?选项
?数据
说明:
(1)每个TCP段都包括源端和目的端的端口号,用于寻找发送端和接收端的应用进程。这两个值加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。
(2)序号用来标识从TCP发送端向接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。
(3)当建立一个新连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN,该主机要发送数据的第一个字节的序号为这个ISN加1,因为SYN标志使用了一个序号。
(4)既然每个被传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当时上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。
(5)发送ACK无需任何代价,因为32位的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。
(6)TCP为应用层提供全双工的服务。因此,连接的每一端必须保持每个方向上的传输数据序号。
(7)TCP可以表述为一个没有选择确认或否认的华东窗口协议。因此TCP首部中的确认序号表示发送方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。
(8)首部长度需要设置,因为任选字段的长度是可变的。TCP首部最多60个字节。
(9)6个标志位中的多个可同时设置为1
◆ URG-紧急指针有效
◆ ACK-确认序号有效
◆ PSH-接收方应尽快将这个报文段交给应用层
◆ RST-重建连接
◆ SYN-同步序号用来发起一个连接
◆ FIN-发送端完成发送任务
(10)TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端期望接收的字节数。窗口大小是一个16为的字段,因而窗口大小最大为65535字节。
(11)检验和覆盖整个TCP报文端:TCP首部和TCP数据。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。TCP检验和的计算和UDP首部检验和的计算一样,也使用伪首部。
(12)紧急指针是一个正的偏移量,黄蓉序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
(13)最常见的可选字段是最长报文大小MMS,每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。
7.TCP的流量控制
所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。这就要求发送方的窗口不能超过接收方给出的接收窗口的数值。而且必须要考虑传输效率的问题。
关于流数据传输 ,TCP 交付一个由序列号定义的无结构的字节流。 这个服务对应用程序有利,因为在送出到 TCP 之前应用程序不需要将数据划分成块, TCP 可以将字节整合成字段,然后传给 IP 进行发送。
TCP 提供了有效流控制。当向发送者返回确认响应时,接收 TCP 进程就会说明它能接收并保证缓存不会发生溢出的最高序列号。具体原理如下:
(1)比如发送端能发送5个数据,接收端也能收到5个数据,给个确认(ACK)给发送端,确认我收到5个数据。如果网络通信出现繁忙或者拥塞的时候,接收端只能收3个数据,接受端给个确认我只能收3个数据,那么发送端就自动调整发送的窗口为3,当线路又恢复通畅的时候,接受端又可以受到5个数据,那它会给确认给发送端,告诉它我的窗口为5,那发送端就把窗口又调整会5,这样进行流量控制的
(2)比如说发送端窗口为3,发送到接收端,接收端的接收窗口为5的话,接受数据,并且会给发送端一个ACK(确认)告诉发送端我的窗口为5,发送端收到确认后会把自己的发送端窗口调整为5~~这样就可以加速数据传输了
我这样说是方便理解,如果回但问题的时候可以把数字用张开和收缩来代替,但是重点要知道,发送端窗口大小取决于接收端窗口大小和网络能够传输窗口大小他们两者中的最小者。
7.TCP的拥塞控制
在计算机网络中的链路容量(即宽带)、交换节点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做拥塞(congestion)。可以把出现网络拥塞的条件写成如下的关系式:
∑ 对资源的要求>可用资源
TCP的发送端采用拥塞窗口cwnd进行控制,而当拥塞发生时减小cwnd,当无拥塞时线性增加cwnd。
拥塞避免步骤:
当cwnd超过慢开始门限时进入拥塞避免阶段→在一个往返时延内收到确认报文,设置cwnd=cwnd+1→在若干个往返时延内没有收到确认报文,判断网络发生拥塞,设置 cwnd=1,进入慢开始状态。
下面是避免拥塞算法的释义:
(1) 对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节。
(2) TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。
(3) 当拥塞发生时,ssthresh被设置为当前窗口大小的一般(cwnd和接收方通告窗口大小文段。
(4) 当新的数据被对方确认时,就增加cwnd,但增加的方法依赖与是否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。
该算法假定由于分组收到损坏引起的丢失是非常少的,因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了阻塞。有两种分组丢失的指示:发生超时和收到重复的确认。拥塞避免算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh。
8.综述
在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
TCP的各个功能之间并不是相互脱离的,而是相互连接,相互写作的关系。比如TCP的拥塞控制使用滑动窗口实现时,实际上TCP的拥塞控制和流量控制综合在一起,传输层无法直接感知网络是否发生拥塞,但可以通过能否及时收到确认报文间接感知。
参考文献
[1] 谢希仁.计算机网络(第五版).北京: 电子工业出版社,2008.
[2] 艾德. 计算机系统的TCP性能?.北京:机械工业出版社,2009.
简述TCP传输机制