TCP/IP 第21章 TCP超时和重传

本章节深入探讨了TCP超时重传的过程,包括慢启动、拥塞避免、快速重传和快速回复算法。重点阐述了如何通过RTT计算超时时间,以及在不同情况下如何调整拥塞窗口(cwnd)和慢启动门限(ssthresh)。此外,还详细解释了TCP对ICMP差错的处理策略,如源站抑制和主机不可达处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第21章 TCP超时和重传




慢启动、拥塞避免、快速重传、快速回复算法过程:
1、对一个给定的连接,初始化cwnd为1个报文段, ssthresh为65535个字节。
2、TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。
3、当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半 (cwnd和接收方通告窗口大小的最小值,但最少为2个报文段)。

4、如果是超时引起了拥塞,则cwnd被设置为1个报文段。
5、当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免。如果
cwnd小于或等于ssthresh,则正在进行慢启动,否则正在进行拥塞避免。(这个过程后面图片表达更明确)


4、如果快速重传(所谓快速重传,就是不等待定时器超时,而是如果收到重复的ack,则很可能报文丢失,直接重传),当收到第3个重复的ACK时,重传丢失的报文段。设置cwndssthresh加上3倍的报文段大小。
5、每次收到另一个重复的ACK时, cwnd增加1个报文段大小并发送1个分组(如果新的cwnd允许发送)。
6、当下一个确认新数据的ACK到达时,设置cwndssthresh。这个ACK应该是对重传数据的确认,并且也是在重传之前所发送数据的确认。注意这个时候,没有将cwnd设置为1,而是设置为了ssthresh,这就决定了后面的处理时拥塞避免(这个就是快速回复,因为cwnd大,发送数据也大,如果设置为1,则只能发送一个MTU,这个则可以发送多个)


这个图前面是慢启动,后面则是拥塞避免。可见拥塞避免其cwnd增长速度下降,而cwnd直接影响能够发送数据块的大小。

TCP对ICMP差错处理
源站抑制:一般如果接收速度比处理速度快,则有可能返回这个错误,如果接收到源站抑制错误,则会降拥塞窗口cwnd置为1,慢启动门限ssthresh不发生变化。
主机不可达或网络不可达:直接忽略。

总结:本章主要讲了3点,
1、超时重传,这个地方有个RTT的计算,就是往返时间的计算,用该计算来得出多长时间超时,从而进行重传,当然这个RTT的计算有点复杂,不是十分理解;同时如果是超时重传,cwnd置为1,执行慢启动;
2、快速重传和快速恢复,这个就不需要管RTT什么了,直接收到3个ack,则认为丢包,直接重传,快速重传,同时重传过程中,继续发包,并且cwnd继续增长,当收到丢失包的确认ack包时,cwnd并不置为1,而是置为ssthresh,快速恢复
3、慢启动和拥塞避免,cwnd既为本端能发送的包的大小,如果增长迅速,很容易造成拥塞,所以如果之前发生过丢包重传,则ssthresh被设置为当前窗口大小的一半 (cwnd和接收方通告窗口大小的最小值,但最少为2个报文段),而后cwnd的增长会根据ssthresh值来设置慢启动还是拥塞避免。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值