我正在尝试 ping,看看我的 ping 比屏幕刷新速度还快(有时确实如此)并且我决定 ping 本地主机。
我运行一个 Apache Web 服务器,它在 localhost 上出现 403 错误。当我 ping 它时,延迟为 0.058 毫秒。有时延迟高达 0.10 2 毫秒
这个延迟代表什么——从我的计算机到我的计算机应该是即时的,为什么会有这样的变化——从 0.027 到 0.102 几乎是 400% 的变化。
答案1
当然我的电脑到我的电脑应该是立即的
0.102 毫秒等于 0.102x10^(-3) 秒或 0.000102 秒。没有比这更“即时”的了。
在这千分之一秒内,您的系统必须:
- 从 rxqueue 读取 ICMP 回应请求*环回设备的
- 构建相应的 ICMP 回应应答数据包
- 将回复包写入 txqueue*环回接口
- 从 rxqueue 读回数据包*用于 ping 计算 RTT。
您担心的是这个 RTT 不是恒定的。这是因为您的系统在执行此过程时正在执行大量其他操作。
我运行了一个 Apache Web 服务器,它在 localhost 上出现 403 错误。当我 ping 它时,
如果您使用该ping
命令,那么是否运行 Web 服务器其实并不重要。如果您使用 Web 服务器响应时间作为“ping”,则数据包需要经过相当多的额外层。
(*):这并不完全正确,第 3 层以下的任何逻辑显然都是短路的,但重点是它将穿过整个堆栈
答案2
除了信号传输的物理距离之外,还有许多因素会影响延迟,其中包括:
- 处理延迟:处理数据包以确定其应发送到何处或执行错误检查以确保其在传输过程中未损坏所需的时间。在 CPU 准备好处理数据包之前,数据包也可能被保存在队列中。
- 传输延迟:数据包的位物理地“传输”所需的时间。
- 传播延迟:数据包在网络中的传输时间。光速和数据包传输所经过的材料是最重要的。
ICMP 数据包通常被视为低优先级,并且都必须由系统 CPU 处理,而延迟的变化就是由此引入的。