《TCP/IP详解-协议》(21)TCP的超时与重传

本文详细介绍了TCP的超时与重传机制,包括4个定时器的作用,重传时间间隔的指数退避策略,以及RTO的动态更新。还探讨了拥塞避免和处理方法,如慢启动门限、拥塞窗口调整。当收到3个重复ACK时,TCP会执行快速重传。此外,文章还提到了TCP对ICMP差错的响应以及重新分组提高传输效率的策略。

超时与重传

对于每个连接,TCP管理4个定时器:

  • 重传定时器
  • 坚持(persist)定时器
  • 保活(keepalive)定时器
  • 2MSL定时器

指数退避:同一分组的重传时间间隔成指数增长(1.5、3、6、12、24、48、64、...秒)

RTO(Retransmission TimeOut 重传超时时间):进行下一次重传的等待时间

RTO的值根据RTT历史值和最新测量值来动态更新(公式省略)

重传多义性问题:如果某分组重传多次,返回的ACK是对哪次的确认?这种情况下无法确定起始时间,也就无法计算RTT,按照Karn算法不更新RTO值,除非没被重传的分组收到确认;


RTT是如何计算的?

TCP设定固定时长(500ms)的定时器,并不断累计定时次数(因此RTT的值是500ms的倍数)

上图中的报文段4、7、9不能被计时,因为定时器已经被使用


拥塞避免

拥塞处理

按照上图,发生拥塞后分组45丢失,但是后续分组仍继续发送;因失序,46~59被保存至接收方的缓存中,接收到重传分组63后,将所有内存数据一起重组后提交给应用程序;

当分组45丢失后,回复重复确认(ack 6657),直到接收到丢失分组后才更新(ack 8961);

拥塞避免算法

拥塞避免算法是一种处理丢失分组的方法

如何知道丢失分组?发生超时或接收到重复确认

现在除了拥塞窗口,还需要增加一个慢启动门限(ssthresh)的指标;刚开始传输时进入慢启动状态,如果超时,cwnd=1且ssthresh=当前窗口/2(>=2),重新开始慢启动(cwnd呈指数增加),但当cwnd>ssthresh时,进入拥塞避免(cwnd+=1/cwnd);

快速重传

当收到3个或以上重复ACK时,立即重传丢失报文,不用等待超时定时器的溢出;这时会进入拥塞避免状态;


ICMP差错

TCP最常收到的ICMP差错及处理:

  • 源站抑制:cwnd被置1发起慢启动(ssthresh不变)
  • 主机不可达/网络不可达:忽略

重新分组

TCP超时并重传,不一定重传同样的报文;TCP允许重新分组而发送一个较大的报文,提高性能;

上图中“hello there\0”(12字节)发送后收到确认,但发送“line number 2\0”(14字节)时掉线,引起不断重发,但当键入第三行“and 3\0”(6字节)后,被重新分组(20字节)一起发送;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值