目录
工作中需要计算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 (两个连续上行包间隔20ms以内)当前上行包之前已有连续多次下行冗余的ACK, 同时当前上行包的seq == 之前下行包的ack,就记录到重传里。重传包+=1, 重传流量+= gtp内层流量;
否则是乱序和其他重传
乱序:TCP_A_OUT_OF_ORDER (两个连续上行包间隔3ms以内),seq_num + len != 上一个包的seq_num + len (不是重复发送的的数据包), 就是乱序,记录相应的乱序数据。
都不是的话全都归类到重传。记录相应的重传数据。
凡是过往,即为序章