一种基于广播通信的时间同步方案猜想

QQ群招募中:646258285(招募中,没几个人说话),
需要交流的朋友可以直接加我微信( DntBeliv )或QQ( 1121864253 )


本方案只是猜想,未验证。

因为网络时延,通常的时间同步方案都是基于双向通信,从而测出网络时延,但显然双向通信相对于广播通信是很复杂的,在一些简单的场景,也许我们不需要建立复杂的双向通信机制,只需要简单的通知网内成员就行了。

那么在广播通信中如何解决时延的问题呢?我们可以总结出,需要被同步的从机只需要知道当前的真实时间,更新自己的系统时间就可以了。而这个真实时间=主机同步时间+时延。主机同步时间是主机广播消息的发送时间,是已知的,而时延是未知的。现在的问题便是是否在某种机制中可以得到这个时延信息?

在这里我们假定数据传播途中的时间都是光速,是可以忽略的,而主要的时延来自于自己的机器发送数据或接收数据的时间,换言之,对于每一个机器而言,他自己的时延都是固定值。如果有中继器,中继器也应当被看作一个从机来管理自己的时间。

假如每台机器都发送两个数据:[timestamp delay],同时在接收到任意其他机器发来的这个数据后做两件事情:

  1. 更新自己的系统时间:timestamp_own = (timestamp_rev + timestamp_own + delay_rev + delay_own)/2;
  2. 所有机器的delay初始值都是0,在接收到数据后更新delay:delay_own = abs(timestamp_rev - timestamp_own)/2;

很显然,我们应该先运行第二步,接下来运行第一步。

我们来考虑一下这样会发生什么:

假设delay全部为0且不被更新,那么如图1所示,主机时间为10,从机时间为0,现在要使所有机器时间一致(不一定是10,与主机时间一致的问题之后再讲),主机将数据[10 0]广播,数据传输到从机A、B、C的时延分别为1、3、2。所有机器都执行上述步骤1,即“更新自己的系统时间:timestamp_own = (timestamp_rev + timestamp_own + delay_rev + delay_own)/2”。那么经过一段时间,所有机器的时间必然是一致的,即使有微小的调动。因为所有timestamp都是收敛的。

图1:
在这里插入图片描述

现在假设只有从机更新时间,主机不更新时间,那么最终从机的时间必然趋于同步,但必然比主机有一个延时,这个延时应该是距离主机最近的从机到主机的延时,即主机到A的延时1。

但这里必然会因为时延对从机的不一致给这个同步机制中带来比刚才更大的抖动因素,而这个抖动来源于从机更新主机时间时主机到该从机时延的不一致,比如对从机A、B来说,主机给出的同步时间都是一样的,但真实时间不一致,因此从机A、B更新的时间不会一致(因为从机自己的系统时钟会将时延计算在内),从而带来抖动。于是我们可以增加一个数据位,从而消除从机对系统的影响,使从机可以很快的与主机时间同步。

我们可以修改数据位为[timestamp delay p],前两个与之前一样,增加一个p表示权重,主机的权重高于从机,比方说主机为9,从机为1,那么在接受到数据后需要做的事情改为:

从机:

  1. 所有机器的delay初始值都是0,在接收到数据后更新delay:delay_own = abs(timestamp_rev - timestamp_own)/2;
  2. 更新自己的系统时间:timestamp_own = (timestamp_rev * p_rev + timestamp_own * p_own + delay_rev * p_rev + delay_own * p_own)/(p_rev + p_own);

主机:

  1. 所有机器的delay初始值都是0,在接收到数据后更新delay:delay_own = abs(timestamp_rev - timestamp_own)/2;

现在考虑时延的问题,在没有时延的情况下从机时间趋于一致稳定,而与主机时间有一个稳定的偏差,那么通过所有机器对delay的更新,必然可以使delay收敛于该偏差,从而消除主机的时延。

最后说明

  1. XX_own表示己方系统变量,XX_rev表示接受数据中的变量。
  2. 本方案只是猜想,没有经过实践检验,同时很可能论证过程中有些地方有问题,所以仅供启发参考使用。
  3. 给出的几个计算公式可能会出现问题,此外很有可能会有更好的计算方法。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朽木白露

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值