【TCP-IP详解卷一:协议】ch21 TCP的超时与重传

1. 引言

TCP通过在发送时设置一个定时器来解决数据和确认可能丢失的问题,若定时器溢出时还未收到确认就重传数据。

TCP管理的4个定时器

  1. 重传定时器
  2. 坚持定时器。使窗口大小信息保持不断流动,即使另一端关闭了接收窗口。
  3. 保活定时器。检测到一个空闲连接的另一端何时崩溃或重启。
  4. 2MSL定时器。测量一个连接处于TIME_WAIT状态的时间。

在这里插入图片描述

2. 往返时间测量

发送一个带有特别序号的字节和接收到包含该字节的确认之间的RTT。

2.1 只使用被平滑的RTT的倍数的计算方法

在这里插入图片描述
该方法在RTT变化范围很大时无法跟上,会引起不必要的重传,而网络饱和时不必要的重传会增加网络的负载。

2.2 Jacobson计算方法

重传超时时间依赖于被平滑的RTT以及被平滑的均值偏差。
在这里插入图片描述
该方法在RTT变化时,较大的偏差增益会使得RTO快速上升。

2.3 Karn算法

针对重传多义性 (重传后无法确定收到的ack是针对的哪一个分组)提出的规定,当一个超时和重传发生时,在重传数据的确认最后到达之前,不能更新RTT估计器。对一个没有被重传的报文段而言,除非收到了一个确认,否则不计算新的RTO。

2.4 举例

在这里插入图片描述
在这里插入图片描述

3. 拥塞举例

在这里插入图片描述
在这里插入图片描述
目前TCP无法告诉对方缺少一个报文段,也无法确认失序数据,只能继续发送ACK

4. 拥塞避免算法

假定分组损坏引起的丢失非常少,分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。
有两种分组丢失的指示 :发生超时和接收到重复的确认。
拥塞避免算法通常与慢启动算法一起实现 ,需要对每个连接维持两个变量——拥塞窗口 cwnd 和慢启动门限 ssthresh,算法工作过程:

  1. 对于给定连接,初始化cwnd为1个报文段,ssthresh为65535个字节
  2. TCP输出不能超过cwnd和接收方通告窗口大小(取两者中的较小值为上限,即当前窗口),前者为发送方的流量控制,后者为接收方的流量控制。
  3. 拥塞发生时(超时/收到重复确认)ssthresh置为当前窗口大小的一半;若是超时引起的拥塞,cwnd置为1报文段
  4. 新的数据被确认时cwnd增加,处于慢启动状态时(cwnd小于等于ssthresh)每次加1,处于拥塞避免状态时(cwnd大于ssthresh)每次加 1/cwnd

在这里插入图片描述

4. 快速重传与快速恢复算法

快速恢复算法过程:

  1. 收到第3个重复的ACK时,将ssthresh置为当前拥塞窗口cwnd的一半,重传丢失的报文段。cwnd置为ssthresh加上3倍的报文段大小
  2. 每收到另一个重复的ACK,cwnd就增加一个报文段大小并发送一个分组
  3. 下一个确认新数据的ACK到达时,置cwnd为ssthresh,该ACK是在重传后的一个RTT内对步骤1中重传的确认。

快速重传算法重传后使用的是慢启动,而快速恢复算法随后使用的是拥塞避免。

5. 按每条路由进行度量

若一个TCP连接关闭时已经发送了16个窗口的数据,且目的结点的路由表项不是默认表项的话,路由表项中就会保存被平滑的RTT、被平滑的均值偏差、慢启动门限、MTU、输出的带宽时延乘积以及输入的带宽时延乘积。

6. ICMP的差错

  1. 源站抑制:引起拥塞窗口cwnd被置为1个报文段大小发起慢启动,但ssthresh没有变化,故窗口会打开直到发生拥塞或开放了所有的通路。
  2. 主机不可达或网络不可达:实际上会被看作短暂现象而被忽略

7. 重新分组

TCP超时重传时不一定要重传同样的报文段,允许重新分组然后发送一个较大的报文段(不超过接收方声明的MSS),这有助于提高性能。因为TCP是使用 字节序号 而不是报文段序号来进行识别它所要发送的数据和进行确认。

8. 小结

  1. 往返时间计算,利用维护的被平滑的RTT估计器和被平滑的均值偏差估计器来计算下一个重传时间。
  2. Karn算法解决重传的二义性问题
  3. 慢启动、拥塞避免、快速重传、快速恢复算法
  4. ICMP差错对TCP连接的影响
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值