代码来源Nmap/Scan_engine.cc
1、一次往返时延计算
其中delta是一次rrt,接收时间 recerved 减去发送时间 sent。这个时间差计算的时候,量纲是(a).tv_sec - (b).tv_sec) * 1000000
公式1: delta = TIMEVAL_SUBTRACT(*received, *sent);
if(delta < 0 && delta > -50000) -----由于平台不同,gettimeofday得到的结果可能有不同,所以会出现接收时间看起来比发送时间早的情况,我们接受这样的小时间差。即delta可以小于0,但要大于-50000
struct timeout_info {
int srtt; /* Smoothed rtt estimate (microseconds) */
int rttvar; /* Rout trip time variance */
int timeout; /* Current timeout threshold (microseconds) */
};
struct timeout_info *to
nmap所使用的超时存储的结构
2、估计往返时延EstimatedRTT
一次rtt,不能代表普遍情况,因此需要估计往返时延。srtt(Smoothed rtt)是由rtt取得的加权平均值,这里使用的加权值为0.125
公式2 : srtt = 0.875*srtt+0.125*rtt;
在下面的程序中,
rttdelta = delta -