计算两台主机之间的网络距离

时间:2011-08-30 00:46:04

标签: sockets networking udp metrics ping

我想计算一些与网络应用上两台主机之间的“距离”相关的指标。我想出了ping启发的以下天真解决方案。

  1. 发送不同大小的UDP包。
  2. 等待另一个节点的响应。
  3. 计算发送和接收之间的时间。
  4. 规范化此数据并计算我的指标。
  5. 我想避免管理原始套接字,但如果这是一个更好的选择,请告诉我。

    你会推荐另一种解决方案吗?

    编辑:

    我想我对此并不清楚。我知道什么是TTL和traceroute,这不是我要搜索的内容。

    我正在寻找的是一个更好的指标,它结合了延迟,带宽和是,主机之间的传统距离(因为我认为仅traceroute对管理协议没有用)。这就是使用ping类似措施的动机。

5 个答案:

答案 0 :(得分:3)

问题变成你不能修改现有协议或更勤奋并从现有的请求 - 回复消息中捕获RTT详细信息吗?

如果您修改现有协议,请添加传输时间戳,您可以执行其他分析服务器端。如果从服务器到客户端有请求 - 回复,您可能仍然可以推断时间。

主要思想是为路径延迟测量明确添加其他消息通常是高度冗余的,只会增加网络抖动和复杂性。

答案 1 :(得分:3)

您正在寻找的指标的定义取决于它的目的 - 您可以通过多种方式实现,哪种方式最好取决于目的。

通常,您正在寻找一些函数distance(A, B)。通常,这将是A和B之间带宽和延迟的函数:

distance(A, B) = f(bandwidth(A, B), latency(A, B))

函数f()的形状将取决于应用程序的目的 - 您真正需要优化的内容。最简单的是使用线性函数:

distance(A, B) = alpha * bandwidth + beta * latency

再次,系数alpha和beta将取决于您要优化的内容。 如果您测量了一些衡量系统性能的变量,则可以进行统计分析(回归)以找到最佳参数:

performance(A, B) ~ alpha * bandwidth(A, B) + beta * latency(A, B)

当您谈论指标时也要小心。每个指标必须满足以下条件:

distance(A, B) + distance(B, C) >= distance(A, C)

在计算机网络中并非总是如此,因为它取决于路由器的决策。

答案 2 :(得分:2)

在网络中,“距离”通常以跳数来衡量。时间并不能准确地代表距离,因为它容易出现短期拥塞和其他网络问题。看一下traceroute,看看如何通过发送TTL增加的数据包来测量跳数。

编辑:现在您的问题还有其他详细信息 - 延迟和带宽永远无法有意义地组合成一个通用指标。您可能希望根据应用程序的喜好来设置权重(延迟与带宽)。

在我看来,平滑的RTT会更好地为您服务。类似于TCP维护的东西,RTT的长时间平均值,具有平滑因子以解决异常。没有一种好方法可以做到这一点,所以你可能想要搜索“RTT平滑”并试验其中的一些。

答案 3 :(得分:2)

恕我直言,这在很大程度上取决于您申请的具体细节。

  • 有些应用更敏感“延迟”,而失去某些数据包被接受 - 就像VOIP一样。比你需要测量响应时间,忽略丢失的数据包
  • 其他人需要快速转发(“延迟”敏感),丢失的数据包需要重新传输,但数据量低 - 超出您需要测量的范围,就像你做的那样
    • 取决于重新传输如何影响您的应用,您需要计算:平均值,variance或其他 - 让它为 d
    • 根据冗余是否可接受,您可以发送每个数据包 n 次以减少重传。比make函数 d = f(n),并比较函数。
  • 某些应用需要主要是速度,而延迟可能很长(如小时)。您可能有兴趣在给定的时间段内制作“滑动窗口”统计数据,以了解在“最后 t 分钟”期间传输的数据量,并不断更新值。

可靠性优先时,可能会有许多其他指标,也包括主机之间的冗余连接。所以它在很大程度上取决于应用。

答案 4 :(得分:1)

我认为你想要的是使用数据包的time-to-live字段:

  

生存时间(TTL)

     

8位生存时间有助于预防   数据报来自互联网上的持久性(例如,进入圈子)。这个   字段限制数据报的生命周期。它以秒为单位指定,但是   小于1秒的时间间隔向上舍入为1.在延迟中   在实践中,它已成为一个跳数领域。每个路由器   数据报交叉将TTL字段减1。当TTL   如果字段命中为零,则数据包不再由分组交换机转发   并被丢弃。通常,ICMP消息(特别是时间   超出)被发送回发件人通知它该数据包有   被丢弃了。这些ICMP消息的接收是核心   跟踪路由如何工作。

简而言之,您可以发送连续的IP数据包,减少您发送的每个数据包的生存时间。一旦停止获得响应,您就会大致知道源主机和目标主机之间必须存在多少跳。

如果您不想自己使用套接字,只需使用ping命令,该命令提供了一个选项,允许您指定用于ping数据包的生存时间值。