首页 > 网络 > 网络协议 > 正文
TCP/IP详解:协议(TCP)
2016-10-25 09:21:59       个评论    来源:Sjming  
收藏    我要投稿

@本系列文章是在阅读TCP/IP协议:详解的过程中,根据稳重内容,对重要知识点做的总结,不包含个人观点,插图均来自书中。

第17章:TCP:传输控制协议

T C P提供一种面向连接的、可靠的字节流服务。T C P连接中,仅有两方进行彼此通信。广播和多播不能用于 T C P。 如果必要, T C P将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 T C P对字节流的内容不作任何解释。 T C P不知道传输的数据字节流是二进制数据,还是A S C I I字符、E B C D I C字符或者其他类型数据。对字节流的解释由 T C P连接双方的应用层

解释。 可靠传输、超时重发、流量控制 TCP首部

 

这里写图片描述

 

 

这里写图片描述

 

一个 I P地址和一个端口号也称为一个插口( s o c k e t) 序号用来标识从 T C P发端向T C P收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节. 当建立一个新的连接时, S Y N标志变1。序号字段包含由这个主机选择的该连接的初始序号I S N(Initial Sequence Number)。该主机要发送数据的第一个字节序号为这个 I S N加1,因为S Y N标志消耗了一个序号.F I N标志也要占用一个序号 A C K标志为 1时确认序号字段才有效,发送A C K无需任何代价.一旦一个连接建立起来,确认序号字段总是被设置, A C K标志也总是被设置为1。 T C P可以表述为一个没有选择确认或否认的滑动窗口协议 4位首部长度给出首部中 32 bit字的数目,因此T C P最多有6 0字节的首部。 标志比特多个可同时被设置为 1

 

这里写图片描述
窗口大小用来进行TCP的流量控制, 只有当U R G标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。 最常见的可选字段是最长报文大小,又称为 MSS (Maximum Segment Size)。每个连接方通常都在通信的第一个报文段(为建立连接而设置 S Y N标志的那个段)中指明这个选项。它指明本端所能接收的最大长度的报文段。 在一个连接建立和一个连接终止时,双方交换的报文段仅有 T C P首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。

 

第18章:TCP连接的建立与终止

三次握手与四次握手

 

这里写图片描述
连接建立的超时

 

现第一次超时时间在 5 . 5 9秒~ 5 . 9 3秒之间变化。然而,第二次超时时间则总是 2 4 . 0 0秒

定时计数器大约每隔 500 ms减1,但在第1个500 ms内是可变的,当滴答计数器为 0时,6秒的定时器便会超时(见图 1 8 - 7),这个定时器会在以后的 2 4秒(4 8个滴答)重新复位。之后的下一个定时器将更接近 2 4秒,因为当T C P的500 ms定时器被内核调用时,它就会被修改一次。

 

这里写图片描述
最大报文段长度(MSS)

 

当一个连接建立时,连接的双方都要通告各自的 M S S,这个I P数据报通常是 4 0字节长:2 0字节的T C P首部和2 0字节的I P首部。MSS默认值 5 3 6字节。 TCP的半关闭 TCP的状态变迁

 

这里写图片描述

 

TCP连接正常建立和终止

 

这里写图片描述
2MSL等待状态

 

每个具体 T C P实现必须选择一个报文段最大生存时间M S L(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。我们知道这个时间是有限的,因为 T C P报文段以I P数据报在网络内传输,而 I P数据报则有限制其生存时间的T T L字段。

当 T C P执行一个主动关闭,并发回最后一个 A C K,该连接必须在 T I M E _ WA I T状态停留的时间为 2倍的M S L。这样可让 T C P再次发送最后的A C K以防这个A C K丢失(另一端超时并重发最后的 F I N)。

在连接处于 2 M S L等待时,任何迟到的报文段将被丢弃。因为处于 2 M S L等待的、由该插口对(socket pair)定义的连接在这段时间内不能被再用 平静时间

指出T C P在重启动后的 M S L秒内不能建立任何连接。这就称

为平静时间 (quiet time),但大多数主机重启动的时间都比MSL秒要长(表明此情况不必专门强调)。 复位报文段

T C P首部中的 R S T比特是用于“复位”的。一般说来,无论何时一个报文段发往基准的连接( referenced connection)出现错误, T C P都会发出一个复位报文段 检测半打开

T C P的处理原则是接收方以复位作为应答。 同时打开

 

这里写图片描述

 

T C P是特意设计为了可以处理同时打开,对于同时打开它仅建立一条连接而不是两条连接(其他的协议族,最突出的是 O S I运输层,在这种情况下将建立两条连接而不是一条连接)  同时关闭

 

这里写图片描述
TCP 选项

 

新的R F C,主要是 RFC 1323 [Jacobson, Braden和Borman 1992],定义了新的 T C P选项,这些选项的大多数只在最新的 T C P实现中才能见到。

 

这里写图片描述
TCP 服务器的设计

 

TCP服务器端口号 限定的本地IP地址 限定的远端IP地址 呼入连接请求队列

正等待连接请求的一端有一个固定长度的连接队列,该队列中的连接已被T C P接受(即三次握手已经完成),但还没有被应用层所接受。注意区分 T C P接受一个连接是将其放入这个队列,而应用层接受连接是将其从该队列中移出。

第19章:TCP的交互数据流

如果按照分组数量计算,约有一半的 T C P报文段包含成块数据(如 F T P、电子邮件和 U s e n e t新闻),另一半则包含交互数据(如Te l n e t和R l o g i n)。如果按字节计算,则成块数据与交互数据的比例约为 9 0 %和1 0 %。这是因为成块数据的报文段基本上都是满长度( f u l l - s i z e d)的(通常为 5 1 2字节的用户数据),而交互数据则小得多(上述研究表明 Te l n e t和R l o g i n分组中通常约 9 0 %左右的用户数据小于 1 0个字节)。 通常每一个交互按键都会产生一个数据分组,也就是说,每次从客户传到服务器的是一个字节的按键(而不是每次一行)。比如R l o g i n需要远程系统(服务器)回显我们(客户)键入的字符

 

这里写图片描述

 

我们一般可以将报文段 2和显示3进行合并 — 按键确认与按键回显一起发送 经受时延的确认

通常T C P在接收到数据时并不立即发送 A C K;相反,它推迟发送,以便将 A C K与需要沿该方向发送的数据一起发送(有时称这种现象为数据捎带 A C K)。绝大多数实现采用的时延为 200 ms,也就是说, T C P将以最大200 ms 的时延等待是否有数据一起发送。 Nagle算法

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

该算法的优越之处在于它是自适应的:确认到达得越快,数据也就发送得越快 关闭Nagle

有时我们也需要关闭 N a g l e算法。一个典型的例子是 X窗口系统服务器:小消息(鼠标移动)必须无时延地发送,以便为进行某种操作的交互用户提供实时的反馈。

第20章:TCP成块数据流

T F T P使用了停止等待协议,本章我们将介绍 T C P所使用的被称为滑动窗口协议的另一种形式的流量控制方法,该协议允许发送方在停止并等待确认前可以连续发送多个分组,因此该协议可以加速数据的传输。 滑动窗口协议

 

这里写图片描述

 

1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。 2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发生在另一端的接收进程读取已经确认的数据并释放了 T C P的接收缓存时。 3) 当右边沿向左移动时,我们称之为窗口收缩。 Host Requirements RFC强烈建议不要使用这种方式。但 T C P必须能够在某一端产生这种情况时进行处理。 PUSH标志

发送方使用该标志通知接收方将所收到的数据全部提交给接收进程。 慢启动

该算法通过观察到新分组进入网络的速率应该与另一端返回确认的速率相同而进行工作 慢启动为发送方的 T C P增加了另一个窗口:拥塞窗口 (congestion window),记为c w n d。发送方开始时发送一个报文段,然后等待 A C K。当收到该 A C K时,拥塞窗口从 1增加为2,即可以发送两个报文段。当收到这两个报文段的 A C K时,拥塞窗口就增加为 4。这是一种指数增加的关系。在某些点上可能达到了互联网的容量,于是中间路由器开始丢弃分组。 紧急方式

U R G比特被置 1

第21章:TCP的超时与重传

对每个连接,T C P管理4个不同的定时器

1) 重传定时器使用于当希望收到另一端的确认。 2) 坚持( p e r s i s t )定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。 3) 保活( k e e p a l i v e )定时器可检测到一个空闲连接的另一端何时崩溃或重启。 4) 2MSL定时器测量一个连接处于 T I M E _ WA I T状态的时间. 连续重传之间不同的时间差,它们取整后分别为 1、3、6、1 2、2 4、4 8和多个6 4秒。这个倍乘关系被称为“指数退避 (exponential backoff )”。 往返时间测量

T C P超时与重传中最重要的部分就是对一个给定连接的往返时间( RT T)的测量。由于路由器和网络流量均会变化,因此我们认为这个时间可能经常会发生变化, T C P应该跟踪这些变化并相应地改变其超时时间。 拥塞避免算法

有时我们会达到中间路由器的极限,此时分组将被丢弃。拥塞避免算法是一种处理丢失分组的方法。 有两种分组丢失的指示:发生超时和接收到重复的确认。

 

这里写图片描述
  快速重传与快速快速回复算法

 

到在收到一个失序的报文段时, T C P立即需要产生一个 A C K(一个重复的 A C K)。这个重复的 A C K不应该被迟延。该重复的 A C K的目的在于让对方知道收到一个失序的报文段,并告诉对方自己希望收到的序号。由于我们不知道一个重复的 A C K是由一个丢失的报文段引起的,还是由于仅仅出现了几个报文段的重新排序,因此我们等待少量重复的 A C K到来。假如这只是一些报文段的重新排序,则在重新排序的报文段被处理并产生一个新的 A C K之前,只可能产生 1 ~ 2个重复的 A C K。如果一连串收到 3个或3个以上的重复 A C K,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。这就是快速重传算法。接下来执行的不是慢启动算法而是拥塞避免算法。这就是快速恢复算法。  按每条路由进行度量

一个 T C P连接关闭时,如果已经发送了足够多的数据来获得有意义统计资料,且目的结点的路由表项不是一个默认的表项,那么下列信息就保存在路由表项中以备下次使用,用这些度量来对相应的变量进行初始化。 ICMP差错

T C P能够遇到的最常见的I C M P差错就是源站抑制、主机不可达和网络不可达:

一个接收到的源站抑制引起拥塞窗口 c w n d被置为1个报文段大小来发起慢启动,但是慢启动门限 s s t h re s h没有变化,所以窗口将打开直至它或者开放了所有的通路(受窗口大小和往返时间的限制)或者发生了拥塞。 一个接收到的主机不可达或网络不可达实际上都被忽略,因为这两个差错都被认为是短暂现象。 重新分组

当T C P超时并重传时,它不一定要重传同样的报文段。相反, T C P允许进行重新分组而发送一个较大的报文段,这将有助于提高性能。

TCP的坚持定时器

T C P通过让接收方指明希望从发送方接收的数据字节数(即窗口大小)来进行流量控制。如果窗口大小为 0会发生什么情况呢?这将有效地阻止发送方传送数据,直到窗口变为非 0为止。A C K的传输并不可靠,也就是说, T C P不对A C K报文段进行确认, T C P只确认那些包含有数据的A C K报文段。 如果一个确认丢失了,则双方就有可能因为等待对方而使连接终止:接收方等待接收数据(因为它已经向发送方通告了一个非 0的窗口),而发送方在等待允许它继续发送数据的窗口更新。为防止这种死锁情况的发生,发送方使用一个坚持定时器 (persist timer)来周期性地向接收方查询,以便发现窗口是否已增大。这些从发送方发出的报文段称为窗口探查 ( w i n d o w p r o b e )。 坚持定时器总是在 5 ~ 6 0秒之间 糊涂窗口综合症 S W S(Silly Window Syndrome)

糊涂窗口综合症是指当发送端应用进程产生数据很慢、或接收端应用进程处理接收缓冲区数据很慢,或二者兼而有之;就会使应用进程间传送的报文段很小,特别是有效载荷很小; 极端情况下,有效载荷可能只有1个字节;传输开销有40字节(20字节的IP头+20字节的TCP头) 这种现象。 该现象可发生在两端中的任何一端:接收方可以通告一个小的窗口(而不是一直等到有大的窗口时才通告),而发送方也可以发送少量的数据(而不是等待其他的数据以便发送一个大的报文段)。可以在任何一端采取措施避免出现糊涂窗口综合症的现象: 1) 接收方不通告小窗口。通常的算法是接收方不通告一个比当前窗口大的窗口(可以为0),除非窗口可以增加一个报文段大小(也就是将要接收的 M S S)或者可以增加接收方缓存空间的一半,不论实际有多少。 2) 发送方避免出现糊涂窗口综合症的措施是只有以下条件之一满足时才发送数据: ( a )可以发送一个满长度的报文段; ( b )可以发送至少是接收方通告窗口大小一半的报文段; ( c )可以发送任何数据并且不希望接收 A C K(也就是说,我们没有还未被确认的数据)或者该连接上不能使用N a g l e算法。

第23章:TCP的保活定时器

可以存在一个没有任何数据流通的空闲的TCP连接,TCP协议不适用其他网络协议中常用的轮询。TCP连接建立很长一段时间(如数个月),中间路由器可以崩溃和重启,电话线可以被挂断再连通,但是只要两端的主机没有被重启,则连接依然保持建立。这意味着两个应用进程—客户进程或服务器进程—都没有使用应用级的定时器来检测非活动状态,而这种非活动状态可以导致应用进程中的任何一个终止其活动。 保活定时器要实现的场景是:一个服务器希望知道客户主机是否崩溃并关机或者崩溃又重新启动。保活并不是T C P规范中的一部分。 如果一个给定的连接在两个小时之内没有任何动作,则服务器就向客户发送一个探查报文段。通常的四种情况:

1) 客户主机依然正常运行,并从服务器可达。客户的 T C P响应正常,而服务器也知道对方是正常工作的。服务器在两小时以后将保活定时器复位。如果在两个小时定时器到时间之前有应用程序的通信量通过此连接,则定时器在交换数据后的未来 2小时再复位。 2) 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的 T C P都没有响应。服务器将不能够收到对探查的响应,并在 7 5秒后超时。服务器总共发送 1 0个这样的探查,每个间隔 7 5秒。如果服务器没有收到一个响应,它就认为客户主机已经关闭并终止连接。 3) 客户主机崩溃并已经重新启动。这时服务器将收到一个对其保活探查的响应,但是这个响应是一个复位,使得服务器终止这个连接。 4) 客户主机正常运行,但是从服务器不可达。这与状态 2相同,因为T C P不能够区分状态4与状态2之间的区别,它所能发现的就是没有收到探查的响应。

第24章:TCP的未来和性能

路径MTU发现

这是当前在两个主机之间的路径上任何网络上的最小M T U。路径 M T U发现在 I P首部中继承并设置“不要分片( D F)”比特,来发现当前路径上的路由器是否需要对正在发送的 I P数据报进行分片。我们观察到如果一个待转发的 I P数据报被设置 D F比特,而其长度又超过了 M T U,那么路由器将返回 I C M P不可达的差错;我们显示了某版本的 t r a c e r o u t e程序使用该机制来决定目的地的路径 M T U;我们看到 U D P是怎样处理路径 M T U发现的。 T C P的路径 M T U发现按如下方式进行:在连接建立时, T C P使用输出接口或对端声明的M S S中的最小 M T U作为起始的报文段大小。路径 M T U发现不允许 T C P超过对端声明的 M S S。如果对端没有指定一个 M S S,则默认为 5 3 6。一旦选定了起始的报文段大小,在该连接上的所有被 T C P发送的 I P数据报都将被设置 D F比特。 长肥管道(long fat pipe)

带宽时延乘积

 

这里写图片描述

 

当这个乘积变得越来越大时, T C P的某些局限性就会暴露出来。

 

这里写图片描述

 

具有大的带宽时延乘积的网络被称为长肥网络( Long Fat Network ,即 L F N,发音为“e l e f a n ( t ) s”),而一个运行在 L F N上的T C P连接被称为长肥管道。 窗口扩大选项

窗口扩大选项使 T C P的窗口定义从16 bit增加为32 bit。这并不是通过修改 T C P首部来实现的, T C P首部仍然使用 16 bit ,而是通过定义一个选项实现对 16 bit 的扩大操作 ( s c a l i n g o p e r a t i o n )来完成的。 时间戳选项。

时间戳选项使发送方在每个报文段中放置一个时间戳值。接收方在确认中返回这个数值,从而允许发送方为每一个收到的 A C K计算 RT T(往返传输时间) PAWS:防止回绕的序号 T/TCP:为事务用的TCP扩展

出现其他的应用进程被设计成使用事务服务,一个事务 ( t r a n s a c t i o n )就是符合下面这些特征的一个客户请求及其随后的服务器响应:

1) 应该避免连接建立和连接终止的开销,在可能的时候,发送一个请求分组并接收一个应答分组。 2) 等待时间应当减少到等于 RT T与S P T之和。其中 RTT (Round-Trip Ti m e )为往返时间,而SPT (Server Processing Ti m e )则是服务器处理请求的时间。 3) 服务器应当能够检测出重复的请求,并且当收到一个重复的请求时不重新处理事务(避免重新处理意味着服务器不必再次处理请求,而是返回保存的、与该请求对应的应答)。 一个使用这种类型服务的应用就是域名服务 T / T C P通过使用加速打开来避免三次握手,并缩短了 T I M E _ WA I T状态,其方法是为每个主机高速缓存少量的信息,这些信息曾用来建立过一个连接。它还在包含数据报文段中使用S Y N和F I N标志。 T C P的最高运行速率的真正上限是由 T C P的窗口大小和光速决定的

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 TCP
上一篇:【RIP协议】RIP路由协议及工作原理
下一篇:HTTP协议学习(上)
相关文章
图文推荐
文章
推荐
热门新闻

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站