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

第21章 TCP超时和重传

TCP/IP 第21章 TCP超时和重传_第1张图片


慢启动、拥塞避免、快速重传、快速回复算法过程:
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,这个则可以发送多个)

TCP/IP 第21章 TCP超时和重传_第2张图片
这个图前面是慢启动,后面则是拥塞避免。可见拥塞避免其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值来设置慢启动还是拥塞避免。


你可能感兴趣的:(TCP/IP 第21章 TCP超时和重传)