《TCP/IP详解 卷1:协议》 读书笔记 第21章 TCP的超时与重传
2016-09-06 17:16
846 查看
TCP的超时与重传
TCP的超时与重传引言
超时
往返时间测量
Karn算法
拥塞
拥塞避免算法
快速重传和快速恢复算法
ICMP的差错
重新分组
引言
TCP提供可靠的运输层,方法之一就是确认从另一端收到的数据。但是数据和确认都有可能会丢失。如果当定时器溢出时还没有收到确认,它就重传该数据。
对每个连接,TCP管理4个不同的定时器:
重传定时器适用于当希望收到另一端的确认。
坚持(persist)定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
保活(keepalive)定时器可检测到一个空闲连接的另一端何时崩溃或重启。
2MSL定时器测量一个连接处于TIME_WAIT状态的时间。(2MSL在结束一个连接的时候说过)
超时
连续重传之间的时间差是不同的,每次重传时增加1倍,直至64秒,超出一定时间之后选择放弃重传。这个倍乘关系称为“指数退避”。往返时间测量
RTT的测量是超时重传中最重要的部分。路由器和网络流量均会改变,TCP应该跟踪这些变化并相应改变其超时时间。
最初的RTT估计器:
R←αR+ ( 1- α)M
式中M表示测量到的RTT,α为权重,一般为0.9.
后来提出了一个RTO(重传超时时间)
RTO=Rβ
这里β一般为2。
但是以上的方法在RTT变化范围很大的时候,显然跟不上这种变化,会引起不必要的重传。于是提出了新的方案:
除了被平滑的RTT估计器,所需要做的还有跟踪RTT的方差。在往返时间变化起伏很大时,基于均值和方差来计算RTO,将比作为均值的常数倍数来计算RTO能提供更好的响应。
Err = M-A
A←A + g Err
D←D + h( | Err |-D)
RTO = A + 4D
这里的A是被平滑的RTT(均值的估计器)而D则是被平滑的均值偏差。E rr是刚得到的测量结
果与当前的RTT估计器之差。A和D均被用于计算下一个重传时间(RTO)。增量g起平均作用,取为1/8(0.125)。偏差的增益是h,取值为0.25。当RTT变化时,较大的偏差增益将使RTO快速上升。
Karn算法
当一个超时和重传发生时,在重传数据的确认最后到达之前,不能更新RTT估计器,因为我们并不知道ACK对应哪次传输(也许第一次传输被延迟而并没有被丢弃,也有可能第一次传输的ACK被延迟)。在任何时候对每个连接仅测量一次RTT值。在发送一个报文段时,如果该连接的定时器已经被使用,则该报文段不会被计时。
对一个没有被重传的报文段来说,也要在收到一个ACK之后才能计算新的RTO。
拥塞
分组丢失的指示:超时、收到重复的确认ACK(3次重复)。拥塞避免算法
拥塞避免算法是一种处理丢失分组的方法。拥塞避免算法和慢启动算法是两个不同目的、独立的算法。但是这两个算法经常一起实现。
拥塞避免算法和慢启动算法需要2个变量:拥塞窗口cwnd和一个慢启动门限ssthresh。
工作流程如下:
初始化cwnd为1个报文段,ssthresh为65535字节。
TCP输出例程的输出不能超过cwnd和接收方通告窗口的大小。(慢启动说过了)
拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口的一半(cwnd和通告窗口大小的最小值,但至少为2个报文段)。此外,如果是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动)。
如果cwnd <= ssthresh,则正在进行慢启动,否则正在进行拥塞避免. 当慢启动过程cwnd大小到达ssthresh,就变为拥塞避免,每次只增加1报文段.
快速重传和快速恢复算法
在收到一个失序的报文段的时候,TCP立即返回一个ACK,告诉对方希望收到的序号。当收到3个以上的重复ACK时,判断一个报文段丢失了。无需等待定时器溢出,马上重传丢失的数据报文段,这就是快速重传。接下来执行的不是慢启动算法,而是拥塞避免算法的话,这就是快速恢复算法。
没有执行慢启动的原因:收到重复ACK告诉我们两端还有流动的数据,不想用慢启动来突然减少数据流。
流程:
收到3个重复ACK之后,将ssthresh设置为cwnd的一半。重传丢失的报文段,设置cwnd为ssthresh加上3倍的报文段大小。
每次收到另一个重复的ACK,cwnd就增加1个报文段大小并发送一个分组。
当下一个确认新数据的ACK到达时,设置cwnd为ssthresh(第1步中设置的值)。
ICMP的差错
TCP能够遇到的最常见的ICMP差错就是源站抑制、主机不可达和网络不可达。收到源站抑制,会引起慢启动,但是ssthresh没有变化。
主机不可达和网络不可达都会被忽略。
重新分组
当TCP超时重传时,不一定要重传相同的报文段。比如可以重新分组,发送一个较大的报文段。相关文章推荐
- 《TCP/IP详解 卷1:协议》 读书笔记 第21章 TCP的超时与重传
- 《TCP/IP详解 卷1:协议》 读书笔记 第21章 TCP的超时与重传
- 《TCP/IP详解 卷1:协议》 第21章 TCP的超时与重传
- 《TCP/IP详解 卷1:协议》 读书笔记 第十九章 TCP的交互数据流
- 《TCP/IP详解 卷1:协议》 读书笔记 第22章 TCP的坚持定时器
- 《TCP/IP详解 卷1:协议》 读书笔记 第二十章 TCP的成块数据流
- 《TCP/IP详解 卷1:协议》 读书笔记 第23章 TCP的保活定时器
- 《TCP/IP详解 卷1:协议》 读书笔记 第十七章 TCP:传输控制协议
- 【TCP/IP详解】第21章 TCP的超时与重传
- 《TCP/IP详解 卷1:协议》 读书笔记 第十八章 TCP连接的建立与终止
- 《TCP/IP详解 卷1:协议》 读书笔记 第17章 TCP:传输控制协议
- 《TCP/IP详解 卷1:协议》 读书笔记 第22章 TCP的坚持定时器
- TCP/IP详解卷1 读书笔记:第二十一章 TCP超时与重传
- 《TCP/IP详解 卷1:协议》 读书笔记 第23章 TCP的保活定时器
- 《TCP/IP详解》读书笔记(21章)-TCP的超时与重传
- 《TCP/IP详解 卷1:协议》 读书笔记 第23章 TCP的保活定时器
- 【TCP/IP详解 卷一:协议】第二十一章 TCP的超时与重传
- 《TCP/IP详解 卷一》读书笔记-----TCP超时重传
- 《TCP/IP详解 卷1:协议》 读书笔记 第十七章 TCP:传输控制协议
- 《TCP/IP详解 卷1:协议》 读书笔记 第18章 TCP连接的建立与终止