我想计算一些与网络应用上两台主机之间的“距离”相关的指标。我想出了ping
启发的以下天真解决方案。
我想避免管理原始套接字,但如果这是一个更好的选择,请告诉我。
你会推荐另一种解决方案吗?
编辑:
我想我对此并不清楚。我知道什么是TTL和traceroute
,这不是我要搜索的内容。
我正在寻找的是一个更好的指标,它结合了延迟,带宽和是,主机之间的传统距离(因为我认为仅traceroute
对管理协议没有用)。这就是使用ping
类似措施的动机。
答案 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)
恕我直言,这在很大程度上取决于您申请的具体细节。
当可靠性优先时,可能会有许多其他指标,也包括主机之间的冗余连接。所以它在很大程度上取决于应用。
答案 4 :(得分:1)
我认为你想要的是使用数据包的time-to-live字段:
生存时间(TTL)
8位生存时间有助于预防 数据报来自互联网上的持久性(例如,进入圈子)。这个 字段限制数据报的生命周期。它以秒为单位指定,但是 小于1秒的时间间隔向上舍入为1.在延迟中 在实践中,它已成为一个跳数领域。每个路由器 数据报交叉将TTL字段减1。当TTL 如果字段命中为零,则数据包不再由分组交换机转发 并被丢弃。通常,ICMP消息(特别是时间 超出)被发送回发件人通知它该数据包有 被丢弃了。这些ICMP消息的接收是核心 跟踪路由如何工作。
简而言之,您可以发送连续的IP数据包,减少您发送的每个数据包的生存时间。一旦停止获得响应,您就会大致知道源主机和目标主机之间必须存在多少跳。
如果您不想自己使用套接字,只需使用ping命令,该命令提供了一个选项,允许您指定用于ping数据包的生存时间值。