知识点讲解
 
       TCP可靠传输
知识路径: > 计算机网络原理 > Internet 协议 > 传输层协议 TCP 与 UDP > TCP 协议 > 
被考次数:1次
被考频率: 低频率
总体答错率: 62%
知识难度系数:
考试要求: 掌握     
相关知识点:7个
        TCP是可靠的传输层协议。这就表示,应用进程把数据交给TCP后,TCP就能无差错地交给目的端的应用进程。TCP使用差错控制机制保证数据的可靠传输,TCP的差错控制机制主要是确认和重传。在介绍TCP差错控制机制之前,下面介绍一下TCP的字节编号。
               字节编号和确认
               前面提到过,TCP提供面向连接的字节流传输服务,也就是说,TCP协议将要传送的数据看成是一个个字节组成的字节流,而且接收方返回给发送方的确认是按字节进行的,而不是按报文段进行。
               每个TCP连接传输字节流数据的第一个字节序号是建立TCP连接时初始序号加1。
               假设某条TCP连接要传送5000字节的文件,分为5个TCP报文段进行传送,每个TCP报文段携带1000字节,TCP对第一个字节的编号从10001开始(假设TCP连接建立随机选择的初始序号x为10000,而数据传送开始序号则从10001开始,也就是说,TCP连接建立过程要用掉一个序号)。那么每个TCP报文段的字节编号如下所示:报文段1的字节序号为10001(范围是从10001~11000);报文段2的字节序号为11001(范围是从11001~12000);报文段3的字节序号为12001(范围是从12001~13000);报文段4的字节序号为13001(范围是从13001~14000),报文段5的字节序号为14001(范围是从14001~15000)。
               TCP采用差错控制机制是字节确认,一般情况下,接收方确认已收到最长的连续的字节计数,TCP报文的每个确认序号字段指出下一个希望接收到的字节,实际上就是对已经收到的所有字节的确认。
               字节确认的优点是即使确认丢失也不一定导致发送方重传。下面来看一个例子,假设接收方TCP发送的ACK报文段的确认序号是1801,表明字节编号为1800前的所有字节都已经收到。如果接收方TCP前面已经发送过确认序号为1601的ACK报文段,但是如果确认序号为1601的这个ACK报文段丢失,也不需要发送方TCP重发这个报文段,这就是所谓的“累计确认”。
               超时重传和重传定时器
               发送方TCP为了恢复丢失或损坏的报文段,必须对丢失或损坏的报文段进行重传。事实上,发送方TCP每发送一个TCP报文段,就启动一个重传定时器,如果在规定的时间之内没有收到接收方TCP返回的确认报文,重传定时器超时,于是发送方重传该TCP报文。
               影响超时重传最关键的因素是重传定时器的定时宽度,但确定合适的宽度是一件相当困难的事情。因为在因特网环境下,不同主机上的应用进程之间的通信可能在一个局域网上进行,也可能要穿越多个不同的网络,端到端传输延迟的变化幅度相当大,发送方很难把握从发送数据到接收确认的往返时间(Round Trip Time,RTT)。为解决上述问题,TCP采用了一种适应性重传算法。下面将描述这个算法并讨论它的改进过程。
               超时重传时间计算算法
               TCP采用下面算法计算超时重传时间。
               原始算法的大致思想是,动态维持往返时延(Round Trip Time,RTT)的平均值,然后把TCP重传定时器的值设为RTT的函数。每当TCP发送一个报文段时,它就记录下发送时刻。当该报文段的ACK回来时,TCP记录下ACK返回时刻,同时把ACK返回时刻和TCP报文发送时刻之间的时间差记为SampleRTT。接着,TCP在前一次的RTT估算值EstimatedRTT和当前的新采样值SampleRTT之间通过加权求和计算出新的RTT估算值EstimatedRTT。具体公式如下:
               EstimatedRTT=α×EstimatedRTT+(1-α)×SampleRTT
               其中,0≤α≤1,α因子决定了EstimatedRTT对延迟变化的反应速度。当α接近1时,当前的采样值SampleRTT对RTT估算值EstimatedRTT几乎不起作用;而当α接近0时,RTT估算值EstimatedRTT紧随延迟的变化而变化,直接采用当前的采样值SampleRTT作为新的RTT估算值EstimatedRTT。作为折中,TCP协议规范推荐α取值为0.8~0.9。
               TCP重传定时器的值通过下列公式计算出来:
               TimeOut=β×EstimatedRTT
               当β接近1时,TCP能迅速检测到报文丢失并及时重传,从而减少等待时间,但可能引起许多不必要的重传。当β太大时,重传报文的数目减少,但等待确认的时间增加。作为折中,TCP协议规范推荐β取2。
               例如,当α取0.9,β取2时,而且当前的EstimatedRTT等于250μs,而现在发送一个报文段并且收到确认的SampleRTT是70μs,则有如下结果:
               EstimatedRTT=0.9×250+0.1×70=232μs
               TimeOut=2×232=464μs
 

更多复习资料
请登录电脑版软考在线 www.rkpass.cn

京B2-20210865 | 京ICP备2020040059号-5
京公网安备 11010502032051号 | 营业执照
 Copyright ©2000-2023 All Rights Reserved
软考在线版权所有