我找到了一种方法来同时发现哪个节点是谁(即谁具有更长的消息延迟)并估计单向行程延迟。尽管其他答案是正确的,但它们仅考虑采用直接时钟测量,这当然是行不通的。但是,正如我在这里证明的那样,这只是故事的一部分,因为这是我针对上述情况的有效算法:
假设在现实生活中:
有限带宽的链接b
每个节点都有唯一的地址(例如A和B)
数据包大小p比带宽*延迟乘积小得多
节点A和B能够填充频道
节点具有random()函数
每个节点用自己的数据包(分别标记为A或B)填充通道,或按以下方式转发从其他节点收到的数据包:
Always fill the channel with my own packets except:
if I receive a packet from another node then
Randomly choose to
either forward that packet from the other node
or discard that packet and forward my own packet
直观说明
由于A的带宽*延迟乘积较高(因为延迟较高),因此A将设法接收比B多的数据包,因此每个节点都可以知道它们在图中的身份。
此外,通过在上述算法上运行足够的收敛时间,A与B的数据包比率将表示A与B 的RTT延迟的实际比率,从而表示所需的OTT。
仿真结果跟踪
这是一个证明上述情况的仿真,并演示了A如何成功收敛到3秒延迟,而B如何收敛在1秒延迟附近:
附图说明:
每条线代表1秒的时间(为清楚起见,选择分组大小以具有1秒的传输时间)。请注意,每个节点都可以在任何时间以任何特定顺序或时间启动算法。列如下:
节点A接收:节点A在其接收方看到的内容(以下也是P4)
NODE A注入:节点A发出的内容(请注意,这是A,或者随机是A或B)
P1,P2,P3:在A和B之间(按顺序)传输的三个数据包(1秒传输意味着3个数据包在传输中的等待时间为3)
节点B接收:B在其接收端看到的(这是P3)
NODE B注入:B发出的信息(请注意,这是B,或者根据算法随机地选择A或B)
P4:从B到A的传输数据包(另请参见P1,P2,P3)
A计数A:A对它所看到的A数据包的计数
A计数B:A对其看到的B数据包的计数
B计数A:B对已看到的A数据包进行计数
B计数B:B对其看到的B数据包进行计数
A-> B:A估计的延迟时间B(基于看到的数据包的RTT比率为4秒)
B-> A:B向A估算的延迟(基于看到的数据包的RTT比率为4秒)
正如我们看到的那样,两个节点都收敛并保持在其真实延迟附近(实际上我们看不到A,因为收敛需要更多的时间,但它的收敛行为与B相同)
更好的滤波器收敛速度更快,但是我们可以清楚地看到它们如何在正确的延迟值附近收敛,因此它们可以确切地知道它们的延迟(即使我只是出于说明目的而展示它们的估计)。
同样,即使链路之间的带宽不同,上述方法仍可以通过使用数据包对来计算带宽估计值,然后仍然适用于上述比例方程式(尽管必须更仔细地考虑这一点)。
结论
对于上图,我们为A和B提供了一种算法,以了解A和B在网络中的位置并知道它们到另一个节点的等待时间。我们使用了一种网络测量估计方法,而不是基于时钟的方法,由于递归时钟同步问题,它的确无法解决。
请注意,我现在编辑了提供所有模拟的答案,因为就您在第一条评论中所看到的,没有人相信我可以解决它。希望有了这些结果,可以使某个人更有说服力并愿意帮助每个人至少在此网络测量难题中找到一个错误或正确性!