TCP iRTT 和 ICMP Ping 有什么区别?

网络工程 通讯协议 线鲨 潜伏
2021-07-11 09:18:40

我正在尝试估计我的 PC 与其交互的任何服务器/客户端之间的延迟。由于各种原因,我不想使用 Ping(需要两端都允许,需要额外的流量来确定延迟等),并且想使用任何 TCP ACK RTT 测量来估计延迟。

我从使用 Wireshark 开始,但我发现到 IP 的 RTT 明显低于我 Ping 同一目的地时报告的延迟。(例如 55ms TCP ACK RTT vs 168ms Ping)

我认为这些值应该相似是错误的吗?有人可以解释一下两者之间的区别是什么,以及为什么值会截然不同?

2个回答

TCP iRTT 和 ICMP Ping 有什么区别?

真正的区别在于所使用的协议。Ping 是一个使用 ICMP 的应用程序,ICMP 是 IP 的一个组成部分。ICMP 的一个问题是 ICMP 消息生成是一项低优先级的任务。设备旨在执行 ICMP 消息生成以外的任务,这些任务被降级为低优先级,以便设备可以最佳地执行其主要任务,并在有空闲时间时生成 ICMP 消息。

TCP 是一种传输协议,它在主机操作系统中进行了优化,以便为使用其服务的应用程序提供良好的服务。TCP 的性能应该总是比 ICMP 好。

许多人犯了一个错误,即通过 ping 依赖延迟报告来确定网络延迟和性能。Ping 是一种工具,旨在确定主机是否在网络上启动并运行,而不是确定使用其他协议的应用程序的网络延迟或性能。

我认为这些值应该相似是错误的吗?

是的,它们是完全独立的协议。

有人可以解释一下两者之间的区别是什么,以及为什么值会截然不同?

往上看。

在不同层中实现的协议之间存在差异。操作系统也可能在响应传入的数据包时采取故意的优先级。您可能会发现更高的 RTT ping 某个路由器,但通过同一路由器到更远主机的良好吞吐量和低延迟。

还必须记住,由于在已建立的 TCP 连接中使用了管道技术,RTT 值可能与传入和先前发送的数据包重叠(累积确认),而 PING 的值可能会单独回答,因此需要单独的cpu注意,缓冲区分配,数据结构等每个数据包来回答。

此外,必须考虑到wireshark(库、DNS 查找等)的可能延迟以及您解释其输出的方式。

PS,ping不需要两边都打开。只是应答方应该让 ping(icmp echo request)数据包进入。