目录
工作中需要计算tcp 的rtt和重传连续包,以下是我们计算的方法。
RTT
Round trip time 往返时间 (RTT),是网络请求从起点到达目的地并再次返回起点所需的持续时间。
在tcp中是发送包到与接收到与此数据包对应的ack包的持续时间,在我们的计算中对于下图第三种情况,我们只计算了两次rtt。
下图是一个网络包的情况,在tcp中,当前包的seq + payload_len 即为下一个包的seq值,同时也为当前包的回复包的ack值。图中6、8包为一对rtt计算区间,6包的seq(1341) ,payload(1340), 则next_seq = seq + payload = 2681, 正好与8包的ack等值,所以这是一对rtt计算区间。
乱序重传
先重传乱序包判断:在此以上行为例,当前上行包的seq 不是期望的值(上一个上行包的seq+ payload_len),就认为当前包乱序或者重传。
在此基础上检查 按照优先级检查。
检查快速重传:TCP_A_FAST_RETRANSMISSION ,当前上行包之前已有连续多次下行冗余的ACK, 同时当前上行包的seq == 之前下行包的ack,则认为此包为快速重传包。
如果不是快速重传才检查乱序。
检查乱序:TCP_A_OUT_OF_ORDER ,当前包的seq_num + payload_len!= 上一个包的seq_num + payload_len(不是重复发送的的数据包), 就是乱序。
都不是的话全都归类到其他重传。
凡是过往,即为序章