我正在学习ping实现。
因为我有一个疑问。令人怀疑的是,他们如何计算往返时间。
他们做了一些计算来计算往返时间。我无法理解这个计算。
以下是往返时间计算的代码。
tsum += triptime;
tsum2 += (long long)triptime * (long long)triptime;
if (triptime < tmin)
tmin = triptime;
if (triptime > tmax)
tmax = triptime;
if (!rtt)
rtt = triptime*8;
else
rtt += triptime-rtt/8;
tsum,tsum2,triptime,tmax变量最初为0。 tmin最初包含值2147483647。 跳闸时间由数据包发送之前计算,记录一次。在目的地,收到数据包,在发送重播之前,它会记录一次并填写回复数据包并发送回复。 减去两次并将减去的时间转换为微秒。 triptime变量包含微秒。
例如,使用以下输出计算rtt。
第一个数据包的跳闸时间是42573,第二个数据包43707,第三个数据包48047和第四个数据包42559。
使用它们如何计算往返时间。为什么他们在开始时乘以8,然后用8除以第一rt减去。我无法找到为什么他们这样计算rtt。 任何人都可以解释一下为什么他们在开始时乘以8,之后为什么他们除以8并用之前计算的rtt减去。 以下链接包含ping实现的完整代码。
提前致谢。
答案 0 :(得分:0)
rtt
Modified Moving Average triptime
个值,乘以
N==8
,便于计算。
答案 1 :(得分:0)
rtt
在输出中不一定是 rtt - 而这里不是。
您显示的实施中的“平均往返延迟”是tsum
/数据包数。当你看rtt
时,你实际上在寻找不同的东西。只有在自适应模式下使用ping
时才会显示。
答案 2 :(得分:-1)
因为你正在处理比特。比特率和传输时间不是一回事,所以你需要做一点点算术来转换。公式是:
数据包传输时间=数据包大小/比特率
假设100 Mbit / s和数据包大小为1526字节,您得到:
1526字节x 8位/(100 x 10 6 位/秒))= 116微秒
位单元取消,你剩下几秒钟。
现在是另一个例子。假设您的往返时间为225毫秒,吞吐量为32千字节。你得到:
32,000字节* 8位/0.255 =每秒1,003,921位