假设您从设备 1 向设备 2 发送 ping。结果将为您提供 RTT。
从理论上讲(因为现实中存在许多变量),从设备 2 ping 设备 1,RTT 会相同吗?
答案1
当一切按预期进行时,延迟将由光速决定。如果两个端点非常接近(例如在同一栋建筑中),路径上任何路由器和交换机上的处理时间可能比光速导致的延迟更大。
然而,只要两个方向的数据包采用相同的路径,这些因素就会相同。
当数据包可以采用多条路径时,路由器和交换机通常会使用等价多路径 (ECMP) 来决定每个数据包的发送方向。这通常使用所选报头字段的哈希来选择路径。使用的报头字段通常是以下内容的子集:
- 源MAC地址
- 目标 MAC 地址
- 源 IP
- 目标 IP
- IP 协议
- 流标签
- 源端口
- 目的端口
无论您从哪个方向运行 ping 命令,前五个都是相同的。
流标签可能会有所不同,并可能导致数据包采用不同的路由。但是该字段仅存在于 IPv6 中,并非所有路由器在选择路径时都会考虑它。
ICMP 没有端口号,因此不会考虑这些字段。路由器可以使用 ID 字段来代替,但是似乎不太可能只为 ICMP 回显请求/回复数据包实现这种特殊情况。
因此总体而言,数据包不太可能采用不同的路由。
导致两个方向往返时间不同的另一个更可能的原因是两个端点本身的处理时间。据我所知,每个操作系统的内核都会接收回显请求并做出回显回复,因此这个过程非常快。但是 ping 命令本身在用户模式下运行,如果在繁忙的机器上运行,则会出现更大的延迟。如果两台机器的负载不相等,那么繁忙机器上的 ping 命令的往返时间可能会略长一些。
答案2
是的,在任何显著的精度下,RTT 始终相同。行进距离是延迟的主要因素,这也应该始终相同。行进距离不相同的极端情况非常罕见,但一个值得注意的例外可能是负载平衡的变化。一些路由器可以使用高级功能来决定将流量放在哪条路由上,这可能会在两次测量之间发生变化。如果有基于代理的自适应负载平衡,您可能会根据路由上使用各种可用路径的流量大小选择不同的路由。这些通常是很小的差异,但在拥堵或一天中的不同时间,它们可能会变得显着。
答案3
是的,即使每个方向都采用完全不同的路径,L3 设备(路由器)也不会考虑数据包是否是 ICMP 回显请求而不是 ICMP 回显答复,也不会考虑数据包是否是 TCP SYN 或 TCP SYN-ACK。
仅供说明之用,我们假设数据包从 A 到 B 需要经过 5 跳,耗时 12 毫秒,而数据包从 B 到 A 需要经过 12 跳,耗时总计 22 毫秒。无论选择从哪一侧开始测量,在此场景下测量的 RTT 均为 34 毫秒(12 毫秒 + 22 毫秒)。