协议:802.1AS-2020.pdf(这个有多域的概念)
802.1AS,2020版本的-网络基础文档类资源-CSDN下载
802.1AS的SystemIdentity理解_cao849861802的博客-CSDN博客
802.1AS的BMCA(最佳主时钟选举)理解_cao849861802的博客-CSDN博客
802.1AS 延迟测量理解_cao849861802的博客-CSDN博客
内容只作为我自己的理解;红色为自我理解内容,绿色和黑色为原文
这里只看媒体相关层的MD实体部分的11.1.3,不管媒体无关层的10.2的部分内容
11.1.3 Transport of time-synchronization information
注意:一定要注意时钟同步整个系统都是相对于主时钟的时基来计算的;
PTP 实例使用 Sync 和 Follow_Up(或只是 Sync)消息传输时间同步信息,如图 11-2 所示。 该机制在数学上等同于 IEEE Std 1588-2019 中描述的用于同步的对等透明时钟的机制(参见 IEEE Std 1588-2019 的 10.1、10.3、11.1 和 11.4)。 然而,通过同步的对等透明时钟和边界时钟传输同步的过程在数学和功能上是等效的。 两种时钟的主要功能区别是边界时钟参与最佳主机选择并调用 BMCA,而对等透明时钟不参与最佳主机选择并且不调用 BMCA(以及两种类型的时钟可以不同)。
图 11-2 显示了三个相邻的 PTP 实例,索引为 i-1、i 和 i+1。同步使用两步时间同步从 PTP 实例 i-1 传输到 PTP 实例 i,然后使用单步时间同步传输到 PTP 实例 i+1。 PTP Instance i-1 在时间 ts,i-1 向 PTP Instance i 发送一条相对于 PTP Instance i-1 的 LocalClock 实体的Sync 消息。稍后(因为它使用两步时间传输),PTP 实例 i-1 向 PTP 实例 i 发送关联的 Follow_Up 消息,其中包含preciseOriginTimestamp、correctionFieldi-1 和 rateRatioi-1。preciseOriginTimestamp包含Grandmaster Clock 最初发送此同步信息时的时间。它没有在此处编制索引,因为它通常不会随着 Sync 和 Follow_Up 消息穿越网络而改变。变量correctionFieldi-1包含发送Sync消息时的同步时间(即与本地时间ts,i-1对应的同步时间)与precisionOriginTimestamp之间的差异。 PrecisionOriginTimestamp 和 CorrectionFieldi-1 的总和给出了对应于 ts,i-1 的同步时间。 rateRatioi–1 是 Grandmaster Clock 频率与 PTP Instance i–1 的 LocalClock 实体频率的比值
precisionOriginTimestamp是来源与GM的source clock实体,一直在报文中传输
rateRatio:这个比值是Grandmaster Clock 频率: localclock频率
rateRatioi-1:是主时钟频率与PTP实例i-1的LocalClock实体的频率之比
rateRatio在Follow_Up 消息(或同步消息,如果启用了可选的一步处理)中传输
本PTP实例的rateRatio值的计算来源为neighborRateRatio,neighborRateRatio和接收到的Follow_Up 消息或同步消息中的rateRatio进行乘积得到本地相对于grandmaster的rateRatio
neighborRateRatio=端口另一侧的ptp的localclock的频率:本地的localclock频率
neighborRateRatio这个值的计算:802.1AS 延迟测量理解_cao849861802的博客-CSDN博客
PTP实例i在时间tr,i相对于其LocalClock实体从PTP实例i–1接收同步消息。它为同步消息的接收加上时间戳,时间戳值为tr,i。它在一段时间后接收相关的后续消息
PTP 实例 i 最终将在时间 ts,i 相对于其 LocalClock 实体发送一条新的同步消息。 时间 ts,i 发生在从 PTP 实例 i-1 接收到 Follow_Up 消息之后。 它必须计算 CorrectionFieldi,即对应于 ts,i 的同步时间与PrecisionOriginTimestamp 之间的差异。 要进行此计算,它必须计算 ts,i–1 和 ts,i 之间的时间间隔值,以主时钟时基表示。 此间隔等于以下量的总和:
a) PTP 实例 i-1 和 i 之间 PTP 链路上的传播延迟,以主时钟时基表示,和
b) ts,i 和 tr,i 之间的差异(即停留时间),以主时钟时基表示
这里就是说从ts,i-1到ts,i经过的时间为两个时间的和即延迟测量得到的时间和报文停留时间;并且目的是计算得到CorrectionFieldi
PTP 实例 i-1 和 i 之间的 PTP 链路上的平均传播延迟,相对于 PTP 实例 i-1 的 LocalClock 实体,等于 meanLinkDelay(见 10.2.5.8)。 这必须乘以 rateRatioi–1 以在超主时钟时基中表示。 总传播延迟等于平均传播延迟加上量 delayAsymmetry(见 8.3 和 10.2.5.9); delayAsymmetry 已在主时钟时基中表示。 停留时间 ts,i–tr,i 必须乘以 rateRatioi 以在大师时钟时基中表示。
驻留时间指的是tsi到tri就是从端口进来到下一个端口出去用的时间即传输过程中的非延迟测量的时间;驻留时间也是相对于localclock的,所以也要在表示的时候*rateRatioi来以grandmaster的时基来表示时间值;meanLinkDelay(延迟测量)也需要乘以 rateRatioi–1来表示相对于主时钟的时基
前面的计算在 11.2.14 和 11.2.15 的状态机中的组织方式略有不同。 不是在主时钟时基中明确表达 PTP 链路传播延迟,而是计算对应于 ts,i-1 的 PTP 实例 i 的本地时间; 这是 MDSyncReceive 结构的 upstreamTxTime 成员(见 10.2.2.2.7;记得 ts,i-1 是相对于 PTP 实例 i-1 的 LocalClock 实体)。 upstreamTxTime 等于量 tr,i 减去相对于 PTP 实例 i 的 LocalClock 实体表示的 PTP 链路传播延迟。 相对于 PTP 实例 i 的 LocalClock 实体表示的 PTP 链路传播延迟等于以下各项之和:
c) 变量meanLinkDelay(见 10.2.5.8)除以 neighborRateRatio(见 10.2.5.7),和
d) 变量 delayAsymmetry(见 10.2.5.9)除以 rateRatioi。
这里描述了在状态机中计算correctionFieldi 的时候并不是依据meanLinkDelay+停留时间的方式来计算的而是用的upstreamTxTime 这种方式来计算;但是原理一致;
这里其实就只按照meanLinkDelay来表示传播延迟就行,这个delayAsymmetry表征的是非对称的链路的传播延迟建模的时候用到的,我们这里可以不采用这个值,如果是对称的那么这个值为0
delayAsymmetry建模的话如下:
meanLinkDelay = ( tir + tri) / 2
tir = meanLinkDelay – delayAsymmetry
tri = meanLinkDelay + delayAsymmetry
upstreamTxTime:这个值的计算目的是为了填充correctionField,这个值是用来计算当前接收到sync报文的上个ptp系统的发送时候的时间戳;correctionField是在Sync报文中体现的
delayAsymmetry 除以 rateRatioi 是在 rateRatioi 更新后执行的。 upstreamTxTime 的计算由函数中的 MDSyncReceiveSM 状态机完成 setMDSyncReceiveMDSR()(见 11.2.14.2.1)。 当 PTP Instance i 向 PTP Instance i+1 发送 Sync 消息时,它计算 PTP Link 传播延迟和停留时间的总和,以 Grandmaster Clock 时基表示,如 e) 项所示。
e) The quantity (ts,i – upstreamTxTime)(rateRatioi).
与本条中的 d) 项一样,该计算是在更新 rateRatioi 之后执行的。 e)项的数量加到correctionFieldi-1中,得到correctionFieldi。 e) 项和 CorrectionFieldi 的计算由函数 setFollowUp() 中的 MDSyncSendSM 状态机完成(见 11.2.15.2.3)。 在 PTP Instance i 发送的 Sync 消息中插入变量 CorrectionFieldi。
correctionFieldi = correctionFieldi-1 + (ts,i – upstreamTxTime)(rateRatioi)
整个时间同步的过程其实是为了计算出correctionFieldi 用来添加到往下同步的同步报文中,而每个同步报文中其实带着的都是grandmaster时钟和correctionField,也就是PrecisionOriginTimestamp +correctionField就是相对与grandmaster的时基的时间;
在本小节的第一段中指出,通过同步的对等透明时钟和边界时钟传输同步的过程在数学和功能上是等效的。这种等价的原因是,到目前为止,本小节中描述的计算计算了 PTP 实例发送 Sync 消息时的同步时间。如果 PTP 实例 i 发送 Sync 消息而没有收到新的 Sync 消息,即如果发生 Sync 接收超时(见 10.7.3.1),则进行相同的计算。在这种情况下,PTP 实例 i 使用最近从 PTP 实例 i–1 接收到的时间同步信息,这将在 PTP 实例 i 发送其最近的同步消息之前。发送Sync消息对应的同步时间等于precisionOriginTimestamp和correctionField之和。通常,边界时钟将整个值(除了任何亚纳秒部分)放在精确原始时间戳中,而透明时钟保留精确原始时间戳并更新校正字段。但是,这两个字段的和等于两种情况下发送 Sync 消息时的同步时间
主时钟频率与 PTP 实例 i 处的 LocalClock 实体的频率之比 rateRatioi 等于 PTP 实例 i–1 处的相同数量 rateRatioi–1 乘以 LocalClock 实体在 PTP 实例 i 处的频率之比PTP Instance i–1 到 PTP Instance i 处 LocalClock 实体的频率,neighborRateRatio(见 10.2.5.7)。如果neighborRateRatio 足够小,这大约等于rateRatioi–1 和数量neighborRateRatio –1 的总和,即PTP Instance i–1 相对于PTP Instance i 的频率偏移。该计算由 PortSyncSyncReceive 状态机完成(见 10.2.8)。
一步法和两步法的区别
一步法和两步法的报文头:
两步法的follow_up报文头:
一步法要求在发送同步报文发送的时候就将时间戳填到报文中,这个需要硬件去支持,对硬件性能有要求,而两步法是第一次发送同步报文,然后利用后面的follow_up报文把之前发送的同步报文的时间戳带过去,这样对硬件要求比较低;