【发布时间】:2016-08-26 21:13:16
【问题描述】:
我正在学习 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 相除并与第一个 rtt 相减。我无法找到他们为什么这样计算 rtt。 谁能解释一下为什么它们在开始时与 8 相乘,然后为什么它们与 8 相除并与之前计算的 rtt 相减。 以下链接包含 ping 实现的完整代码。
提前致谢。
【问题讨论】:
-
我想这是一种对 la 累计 8 个值进行平均的方法。第一个数据包是平均累加器的初始化(
triptime*8)。之后,仅将上次计算的平均值的变化(差异)添加到累加器中。 -
BTW 像往常一样的 linux mudules:无耻地缺乏 cmets,每次都是无处不在...