TCP/IP基础02:TCP超时与重传
文章目录
1 TCP超时
TCP的重传分为超时重传和快速重传。超时重传中主要的参数RTO(ReTransmissionOvertime)。RTO使用RTT作为参数来进行估计(没有别的输入参数),而要知道RTT的下一时刻的值,所以我们需要对RTT进行估计。
1.1 RTT估计
参考文献:
1 https://blog.csdn.net/wdscq1234/article/details/52505191
2 https://blog.csdn.net/yusiguyuan/article/details/39997575
3 移动指数加权平均
平均:总和/总数。
加权平均:给每一项都给予一个权值。然后平均。
移动加权平均:选择最近的几个值来做加权平均。
移动指数加权平均:上一次的估计值与测量值进行移动加权平均,如下公式所示。
2 TCP超时重传
在规定的RTO内没有收到被即时报文段的ACK,将会触发超时重传。当这种情况发送时,它通过降低当前数据发送率来对此进行快速响应。主要有两种方法,
1 基于拥塞控制机制减小发送窗口大小。
2 增大RTO的退避因子。
TSER值,只有在发送窗口前移之后才会被采用
Q:超时重传在wireshark中如何查看?
analyze->expert info composit
3 TCP快速重传
快速重传机制基于接受端的反馈信息来引发重传。
3.1 快速重传的目的
如果全部指望超时重传来去解决重传问题,那么效率会大打折扣。所以引入快速重传。
如果在超时重传定时器溢出之前,接收到连续的三个重复冗余ACK(其实是收到4个同样的ACK,第一个是正常的,后三个才是冗余的),发送端便知晓哪个报文段在传输过程中丢失了,于是重发该报文段,不需要等待超时重传定时器溢出,大大提高了效率。这便是快速重传机制。
以下BLOG讲的是SACK的快速重传,
1 https://blog.csdn.net/whgtheone/article/details/80983882
其中每次client发送包的时候,server才会回ack,快速重传中,server回复的是server接收窗口中丢失的ack seqence。
一般在client和 server建立 连接发送SYN的时候, 会相互协商双方是否SACK , 在重发第二个包之前,client 已经把3,5,6,7,8都发送给server端了,如果不支持 SACK机制, client就会重复发送2.3.5.6.7.8,所以,这种选择性的发送丢失的数据包是比较高效的,这种在ip层分段的时候,由于网络/路由的原因,导致server端收到的包是乱序的。如果再穿插丢失几个包,SACK效率会比较高效。
3.2 SACK(选择确认)
1 https://blog.csdn.net/wdscq1234/article/details/52503315
2 SACK实现
3 D-SACK
D-SACK还是带了诸多的好处,能否让发送方了解是ACK丢了还是发送的数据包丢了,重复发送就说明是ACK丢了
Q:怎么判断TCP Option的大小?
TCP头中有一个TCP头长度的字段。范围为20-60Byte。
Q:为什么快速重传是三次ACK?
1 https://www.zhihu.com/question/21789252
2 https://blog.csdn.net/whgtheone/article/details/80983882
3 总结:因为网络包有时候会乱序,乱序的包一样会出发重复的ACK,但是为了乱序而重传没有必要。从概率上来说,一般乱序的距离相差并不会太大。