我正在编写一个程序,允许用户提供主机名或 IP 列表,然后我将找出哪个主机连接速度更快并连接到它。
就在我输入标题中的问题时,我认为 ping 可能是可行的,但由于并非所有主机都会响应 ping,我还可以使用哪些其他方法?
有很多网站可以计算两个 IP 之间的距离,它们是如何工作的?
答案1
网络距离以跳数来衡量。像 这样的工具traceroute
会发送具有不同 TTL 值的 ICMP 数据包。每当它被另一跳(路由器)转发时,TTL 值就会减少。当 TTL 达到零时,发送者会收到另一个 ICMP 数据包的通知(超时错误)。看看这一页。
另一种选择是测量两个节点之间的延迟。这在很大程度上取决于所使用的协议,并且由于多种原因,并非所有协议都会给出相同的结果。例如,不同的协议没有相同的优先级。此外,不同的协议具有不同的连接性质(无连接与面向连接)等等。
答案2
我认为你绕了一大圈才解决问题。如果你要获取用户提供的 IP 列表,然后找出哪个 IP 的延迟最低,那么你必须决定要使用这些主机上的哪些服务。我猜是 Ping,但正如你所指出的,它们可能不会对此做出响应。那么它们对什么做出响应呢?HTTP?然后计时。