14.1 引言
1.T C P 协议提供可靠数据传输服务。为保证数据传输的正确性, T C P 重传其认为已丢失的包o T C P 根据接收端返回至发送端的一系列确认信息来判断是否出现丢包。当数据段或确认信息丢失, T C P 启动重传操作, 重传尚未确认的数据。
2.T C P 拥有两套独立机制来完成重传, 一是基于时间, 二是基于确认信息的构成。第二种方法通常比第一种更高效。(不需要等待时间)
3.两者机制的比较:T C P 在发送数据时会设置一个计时器, 若至计时器超时仍未收到数据确认信息, 则会引发相应的超时或基于计时器的重传操作, 计时器超时称为重传超时( R T O ) 。另一种方式的重传称为快速重传, 通常发生在没有延时的情况下。若T C P 累积确认无法返回新的A C K , 或者当A C K 包含的选择确认信息( S A C K ) 表明出现失序报文段时, 快速重传会推断出现丢丢包。
14.3 设置重传超时
1.重传超时跟随网络资源而进行改变,T C P 先于R T T 开始重传, 可能会在网络中引人不必要的重复数据。反之, 若延迟至远大于R T T 的间隔发送重传数据, 整体网络利用率( 及单个连接吞吐量) 会随之下降。
2.TCP在接受到数据后返回,记录该时间作为一个RTT样本,基于样本估计设置RTO。
14.3.1 经典方法
1.S R T T ← α( S R T T ) 十( 1 一α) R T T s这里, S R T T 是基于现存值和新的样本值R T T s 得到更新结果的。常量α为平滑因子, 推荐值为0 . 8 - 0 . 9 0 每当得到新的样本值, S R T T 就会做出相应的更新。从α的设定值可以看到, 新的估计值有8 0 % 一9 0 % 来自现存值, 1 0 % ~ 2 0 % 来自新测量值。缺点:在TCP网络RTT波动较大的时候,无法得到预期效果。
14.3.2.4 带时间戳选项的RTT测量
1.时间戳值( T S V ) 携带于初始S Y N 的T S O P T 中, 并在S Y N + A C K 的T S O P T 的T S E R部分返回, 以此设定s r t t 、 r t t V a r 与R T O 的初始值。
2.T C P 发送端在其发送的每个报文段的T S O P T 的T S V 部分携带一个3 2 比特的时间戳值。该值包含数据发送时刻的T C P 时钟值。
3.接收端记录接受到的SYN值,并在返回的ACK中带有记录时间的序列号。
4.当一个新报文到达时,其序列号与LastACK的值吻合(上一个报文时间),则将该TSV存入TsRecent
5.接收端发送的任何一个ACK都包含TSOPT。 s R e c e n t 变量包含的时间戳值被写人其T S E R 部分。
6.发送端接受到ACK后,将当前TCP时钟减去TSER。其中的差为新的RTT样本估计值
14.4 基于计时器的重传
1.一旦T C P 发送端得到了基于时间变化的R T T 测量值, 就能据此设置R T O , 发送报文段时应确保重传计时器设置合理。在设定计时器前, 需记录被计时的报文段序列号, 若及时收到了该报文段的A C R , 那么计时器被取消。之后发送端发送一个新的数据包时, 需设定一个新的计时器, 并记录新的序列号。因此每一个T C P 连接的发送端不断地设定和取消一个重传计时器; 如果没有数据丢失, 则不会出现计时器超时。
2.在连接设定的RTO内,若TCP没有收到计时报文ACK,将会触发超时重传。通过降低传输速率来处理超时重传。
3.
第一种方法是基于拥塞控制机制减小发送窗口大小
14.5 快速重传
1.该机制基于接受的反馈信息引发重传,与计时器重传相比更能有效及时修复丢包情况。
2.TCP了解到失序报文时,需快速建立确认信息(丢失报文的ACK),并且失序情况表明在后续数据到达前出现了丢段
3.采用SACK块,可以获知多个空缺。特殊情况:接收端收到当前期盼序号的后续分组时,可能是由于期盼序号延迟到达。
4.TC P 发送端在观测到至少d u p t h r e s h 个重复A C K 后, 即重传可能丢失的数据分组, 而不必等到重传计时器超时。当然也可以同时发送新的数据。
14.6 带选择确认的快速重传
1.T C P 接收端可提供S A C K 功能, 通过T C P 头部的累积A C K 号字段来描述其接收到的数据。
2.用SACK选项可在一个R T T 时间填补3 个空缺。包含一个或多个SACK块的A C K 有时也简单称为SACK。
3.SACK发送端记录着接收到的累计ACK信息当S A C K 发送端执行重传时, 通常是由于其收到了S A C K 或重复A C K , 它可以选择发送新数据或重传旧数据。特殊情况:接收端发送SACK块后,做出“食言”,由于这个原因, S A C K 发送端不能在收到一个S A C K 后立即清空其重传缓存中的数据;
14.7 伪超时与重传
1.特殊情况:没有数据丢失也会出现重传(包的延时)。即伪超时;
2.实际R T T 显著增长, 超过当前R T O 时, 可能出现伪超时。在下层协议性能变化较大的环境中( 如无线环境) , 这种情况出现得比较多
14.8 包失序与包重复
1.在I P 网络中出现包失序的原因在于I P 层不能保证包传输是有序进行的。这一方面是有
利的( 至少对I P 层来说)
2.假设一旦收到重复A C K . , 发送端即启动快速重传, 那么就会导致大量不必要的重传发生。为解决这一间题, 快速重传仅在达到重复阑值( d u p t h r e s h ) 后才会被触发。
3.假设一旦收到重复A C K . , 发送端即启动快速重传, 那么就会导致大量不必要的重传发生。为解决这一间题, 快速重传仅在达到重复阑值( d u p t h r e s h ) 后才会被触发。用S A C K ( 特别是D S A C K ) , 就可以简单地忽略这个问题。
14.9 目的度量
1.T C P 能不断“学习”发送端与接收端之间的链路特征。学习的结果显示为发送端记录一些状态变量, 如s r t t 和r t t v a r o 一些T C P 实现也记录一段时间内已出现的失序包的估计值。一般来说, 一旦该连接关闭, 这些学习结果也会丢失, 即与同一个接收端建立一个新的T C P连接后, 它必须从头开始获得状态变量值。
14.10 重新组包
1.当T C P 超时重传, 它并不需要完全重传相同的报文段。 T C P 允许执行重新组包( r e p a c k e t i z a t i o n ) , 发送一个更大的报文段来提高性能。
2.原因在于TCP是通过字节号来识别发送和接收的数据,而非报文段()。
总结
1.重传的几种方法:基于计时器重传、快速重传(快速发送重复ACK)、选择确认重传SACK块(带有最近接收的报文序列号,防止伪超时)
2.计时器的重传:基于RTT与RTO
3.伪超时与重传(基于快速重传引发)
4.目的度量:不断学习路由路径找到最优解路径。
5.基于重传:将重传的包合入组成一个更大包发送,减少发送次数。
网友评论