4、同步以太网(SyncE)技术:SyncE工作原理、ESMC消息、SyncE与1588v2的协同

好,咱们接着聊时钟同步。前面讲了1588v2,那是基于包交换的。今天说的同步以太网,简称SyncE,走的是另一条路——物理层同步。

说白了,SyncE就是利用以太网物理层的时钟信号来传递频率。你想想看,传统以太网跑数据,收发两端靠的是本地晶振,频率漂移是常有的事。SyncE干的事,就是把上游设备的时钟频率,通过物理层比特流直接传递给下游。嗯,这里要注意,它只传递频率,不传递时间。

4.1 SyncE工作原理

SyncE的核心思想,我总结为四个字:频率跟踪。它工作在OSI模型的物理层,跟数据内容无关。每个以太网端口在发送数据时,都会有一个连续的比特流。这个比特流的时钟频率,就是SyncE要传递的宝贝。

具体怎么干?我画个简图给你看:

上游设备(时钟源)
    │
    │ 物理层比特流(带时钟频率)
    ▼
下游设备(从时钟)
    │
    ├─ 提取时钟(从接收信号中恢复)
    ├─ 锁相环(PLL)锁定频率
    └─ 输出同步时钟(给本设备使用)

我在项目中遇到过这样的情况:某运营商新建的PTN网络,所有设备都支持SyncE,但开局时发现下游设备始终无法锁定上游时钟。查了半天,原来是中间某段光纤的物理层信号衰减太大,导致时钟恢复失败。后来换了光模块,问题就解决了。所以啊,SyncE对物理层质量要求很高,光模块、线缆、接口都得靠谱。

SyncE的时钟同步链,说白了就是一条频率传递链。上游设备作为时钟源,下游设备逐级跟踪。每一级设备都会从接收信号中提取时钟,然后用自己的锁相环(PLL)锁定这个频率,再把这个频率传递给下一级。

关键点:SyncE只保证频率同步,不保证相位同步。也就是说,所有设备的频率一致,但时间点可能不同。这跟1588v2有本质区别。

4.2 ESMC消息

ESMC,全称是Ethernet Synchronization Messaging Channel。你把它理解成SyncE的“信令通道”就行。它负责传递时钟质量信息,让下游设备知道上游的时钟到底靠不靠谱。

ESMC消息长什么样?我直接给你看个实际抓包:

Ethernet II, Src: xx:xx:xx:xx:xx:xx, Dst: 01-80-c2-00-00-02
    Destination: 01-80-c2-00-00-02 (LLDP Multicast)
    Source: xx:xx:xx:xx:xx:xx
    Type: Slow Protocols (0x8809)
Slow Protocols
    Subtype: ESMC (0x0A)
    Flags: 0x00
    ITU-T OUI: 0x00-19-A7
    ITU-T Subtype: 0x01
    Event/QL TLV
        Type: Event/QL TLV (0x01)
        Length: 4
        QL: PRC (0x02)

这里有个关键字段——QL(Quality Level)。它表示时钟质量等级。ITU-T G.781标准定义了多个等级,我整理成表格:

QL值 时钟等级 说明
0x02 PRC 主参考时钟,精度最高(±1×10⁻¹¹)
0x04 SSU-A 二级时钟,精度次之
0x08 SSU-B 三级时钟
0x0B SEC SDH设备时钟,精度较低
0x0F DNU 不可用,表示该时钟不能用于同步

ESMC消息每秒钟发送一次。下游设备收到后,会根据QL值判断是否要切换时钟源。比如,上游的QL从PRC降到了SSU-A,下游就会自动寻找更优的时钟源。我曾经在现网中遇到过一个问题:某台设备频繁切换时钟源,导致业务出现短暂中断。查了半天,发现是ESMC消息在传输过程中被丢弃了,下游设备收不到QL信息,就认为时钟不可用,于是开始瞎切换。后来在中间设备上配置了ESMC透传,问题才解决。

避坑指南:我曾经在调试时发现,有些设备默认不发送ESMC消息,需要手动开启。如果你发现SyncE链路不通,先检查ESMC是否使能。另外,ESMC的组播MAC地址是01-80-c2-00-00-02,别搞错了。

4.3 SyncE与1588v2的协同

SyncE和1588v2,一个管频率,一个管时间。你想想看,如果只靠1588v2,频率同步的精度受网络负载影响很大。如果只靠SyncE,时间同步又做不到。所以,最佳方案是两者协同工作。

我个人的习惯是这么搭配的:

  • 频率同步:用SyncE。物理层传递频率,精度高、不受网络负载影响。
  • 时间同步:用1588v2。在频率已经同步的基础上,只传递时间偏移量,精度更高。

说白了,SyncE给1588v2打了一个好底子。频率先对齐了,1588v2只需要做时间偏移的修正,工作量小很多,精度也更高。

实际部署时,我建议这样配置:

  1. 先开启SyncE,确保全网频率同步。
  2. 再开启1588v2,在频率同步的基础上做时间同步。
  3. 配置时钟源选择策略:优先选择SyncE的时钟源,再考虑1588v2的时钟源。

我在一个大型城域网项目中就是这么干的。全网200多台PTN设备,全部开启SyncE+1588v2。最终测试结果:频率同步精度优于±1×10⁻¹¹,时间同步精度优于±100ns。客户很满意。

注意:SyncE和1588v2的时钟源必须一致。如果SyncE跟踪的是A时钟源,1588v2跟踪的是B时钟源,那两者就会打架,最终导致时钟混乱。我见过有人踩过这个坑,结果全网设备时钟都乱了,业务中断了半小时。

另外,还有一点要提醒你:SyncE和1588v2的时钟链可以不一样。比如,SyncE走物理层链路,1588v2走网络层路径。但最终,两者的时钟源必须追溯到同一个主时钟。否则,你想想看,一个设备收到两个不同源的时钟,它该听谁的?

嗯,关于SyncE和1588v2的协同,我就说这么多。记住一句话:SyncE管频率,1588v2管时间,两者配合,天下无敌。