TCP/IP详解-TCP的超时和重传

来源:互联网 发布:php api 框架 编辑:程序博客网 时间:2024/06/05 04:08

1 超时和重传
TCP在发送数据时设置一个定时器,当定时器溢出时还没有收到确认,它就重传数据。

TCP管理4个不同的定时器:
1)重传定时器适用于希望收到另一端的确认
2)坚持定时器使窗口大小信息保持不断流动,即使另一端关闭了接收窗口
3 )保活定时器可检测到一个空闲连接的另一端何时奔溃或重启
4)2MSL定时器测量一个连接处于TIM_WAIT状态的时间

2 超时与重传的简单例子
这里写图片描述
tcpdump输出:
这里写图片描述

与TFTP每隔5秒进行重传相比。TCP重传时间采用指数退避算法,在后面详细介绍

3 往返时间测量
最初TCP采用低通过滤器来更新一个被平滑的RTT估计器:R← aR+ ( 1-a )M(a值推荐为0.9的平滑因子)

推荐的重传时间RTO的值应该设置为:这里写图片描述
以上方法:会引起不必要的重传,增加网络负荷

Jacobson方法:这里写图片描述
A是被平滑的RTT D是被平滑的均值偏差 Err是刚得到的测量结果与当前的RTT估计器之差 增量g起平均作用,去0.125 偏差的增益是h,取值为0.25

4 往返时间RTT的例子

5 拥塞举例
这里写图片描述
整个传输过程的时间约为45秒,但上图值显示了35秒。此第1个数据报文段是在第1个SYN发送6.3秒后才发送的。而且,在发送最后一个数据报文段和FIN之后,在接收方的FIN到达之前,又花费了另外的4 . 0秒接收来自接收方的最后1 4个ACK。

点向下表示发送了重传

这里写图片描述
这里写图片描述
当连续接收到3个重复ACK,就假定一个报文段已经丢失并重传自那个序号起的一个报文段

重传后,发送方继续正常的数据传输,TCP不需要等待对方确认重传

6 拥塞避免算法
当发送的数据流达到中间路由器的极限,此时分组将被丢弃。拥塞避免算法是一种处理丢失分组的方法

当网络发生拥塞时,通常拥塞避免算法和慢启动算法合作来发挥作用

拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh,过程如下:
1)对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535字节
2)TCP输出例程的输出不能超过cwnd和接收方通告窗口大小
3)当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(cwnd和接收方通告窗口大小的最小值,但最少为2个报文段),此外,如果是超时引起的拥塞,则cwnd设置为1个报文段
4)当新的数据被对方确认时,增加cwnd,但增加的方法取决于是否正在进行慢启动或拥塞避免。如果cwnd小于或等于ssthresh,则进行慢启动,否则进行拥塞避免。蛮启动一直持续到当拥塞发生时所处位置的一半时才停止,然后转为执行拥塞避免

慢启动和拥塞避免的可视化描述:
这里写图片描述

7 快速重传与快速恢复算法
接受端收到一个失序报文段时,TCP立即产生一个ACK(一个重复的ACK),这个ACK不应被延迟,它的目的让发送方知道接收方收到一个失序的报文段,并告诉发送方自己希望收到额序号

当连续收到3个或3个以上的重复ACK,就很有可能是一个报文段丢失了,于是重传丢失的数据报文段,而不需等待超时定时器溢出,这就是快速重传算法。然后为了不减少数据流动,不采用慢启动,而采用快速恢复算法。

快速恢复算法:
1) 当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的报文段。设置c wnd为ssthresh加上3倍的报文段大小。
2) 每次收到另一个重复的ACK时, cwnd增加1个文段大小并发送1个分组(如果新的c w n d允许发送)。
3) 当下一个确认新数据的ACK到达时,设置cwnd为s sthresh(在第1步中设置的值)。这个ACK应该是在进行重传后的一个往返时间内对步骤1中重传的确认。另外,这个ACK也应该是对丢失的分组和收到的第1个重复的ACK之间的所有中间报文段的确认。这一步采用的是拥塞避免,因为当分组丢失时我们将当前的速率减半。

8 ICMP的差错
一个接收到的源站抑制引起拥塞窗口cwnd被置为1个报文段大小来发起慢启动,但是慢启动门限ssthresh没有变化,所以窗口将打开直至它或者开放了所有的通路(受窗口大小和往返时间的限制)或者发生了拥塞

一个接收到的主机不可达或网络不可达实际上都被忽略,因为这两个差错都被认为是短暂现象.这有可能是由于中间路由器被关闭而导致选路协议要花费数分钟才能稳定到另一个替换路由。

这里写图片描述
tcpdump输出:
这里写图片描述
这里写图片描述
这里写图片描述

TCP保存它在连接上接受到的ICMP差错,而不是简单地认为是连接超时

9 重新分组
TCP超时并重传时,允许进行重新分组而发送一个较大的报文段,这将有助于提高性能。
这里写图片描述
tcpdump输出:
这里写图片描述

0 0
原创粉丝点击