![如何使用标准Linux命令计算网线的物理长度?](https://linux22.com/image/136827/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%A0%87%E5%87%86Linux%E5%91%BD%E4%BB%A4%E8%AE%A1%E7%AE%97%E7%BD%91%E7%BA%BF%E7%9A%84%E7%89%A9%E7%90%86%E9%95%BF%E5%BA%A6%EF%BC%9F%20.png)
有没有一种简单的方法可以使用 ping、iftop 或其他工具等标准命令来计算网络电缆(以太网、光纤等)的物理长度?最好它应该适用于大多数 Unix/Linux 版本。
答案1
对于 LAN 长度的电缆:
完全取决于电缆的数据包往返延迟部分约为每米 10 纳秒。
要获得实际物理连接电缆的长度,您必须让下一个交换机或网桥应答您的测试数据包;可以通过托管交换机找到合适的协议。
在 10 纳秒的范围内,您需要使用已编译的 C 或汇编代码,并使用循环计数和/或 HPET 计时器。
两端的硬件部分可能会引入未定义的延迟;设备驱动程序也可能如此;因此,内核活动可能会干扰您正在做的事情。所有这些都可以通过采取数千个样本并丢弃异常值和平均来缓解 - 结合校准系统使用已知长度和品牌的电缆。这种校准至多对一对精确的设备模型有效。
如果你想知道数百或数千公里的WAN链路长度,你可以使用普通ping给出的时间来粗略估计;大多数电缆(无论是光纤还是铜缆)的传播速度是空气中光速的 0.5 到 0.9 倍 - 然而,有源设备会引入额外的延迟,并且您无法知道使用哪种电缆。
一些网络硬件(交换机,很少有网卡)具有内置的简单版本的所谓 TDR - 此类硬件将能够相当准确地测量电缆长度。