ping的实现如何计算往返时间?

我正在学习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,tmaxvariables最初为0. tmin最初包含的值为2147483647。 这个三元组是通过发送数据包之前计算出来的。 在目的地,数据包被接收,在它发送重放之前,它注意到一次,它填充了回复数据包,并发送回复。 两次被扣除,并将扣除的时间转换成微秒。 triptimevariables包含微秒。

例如,用下面的输出来计算rtt。

第一个分组的行程时间是42573,第二个分组43707,第三个分组48047和第四个分组42559。

用他们如何计算往返时间。 为什么它们和8乘以8和8之后用第一个rtt减去。 我无法find他们为什么计算这样的rtt。 可以有谁解释我为什么用8乘以8和8之后为什么用8除以前计算的rtt。 下面的链接包含了ping实现的完整代码。

ping_common.c

ping.c

提前致谢。

rtt是修正移动平均 triptime值,乘以8为了便于计算, N==8

rtt中的程序变量名不一定是rtt中的输出 – 而这里不是。

你显示的实现中的“平均往返延迟”是在数据包的tsum / count中。 当你看rtt ,你实际上是在寻找不同的东西。 只有在自适应模式下使用ping时才会显示。

因为你在处理位。 比特率和传输时间是不一样的,所以你需要做一点点算术转换。 公式是:

分组传输时间=分组大小/比特率

假设100Mbit / s和1526字节的数据包大小,你会得到:

1526字节×8位/(100×10 6位/秒))= 116微秒

位单元取消,你剩下几秒钟。

现在又是一个例子。 假设您的往返时间为225毫秒,吞吐量为32千字节。 你得到:

32,000字节* 8位/ 0.255 = 1,003,921位/秒