鮑中,鮑廣建,劉嬌
(中科芯集成電路有限公司,江蘇無錫,214072)
在現代通信網絡中,無論是汽車電子還是電信行業中的通信終端設備之間頻率、時間差異都要求保持在嚴格要求的范圍內,甚至達到ns級別,即時鐘同步。精確時間協議PTP(Precision Time Protocol)是一種對標準以太網終端設備進行時間和頻率同步的成熟協議,行業內也稱IEEE 1588 協議。
通信網絡中如果需要實現時鐘同步,一定需要支持精確時鐘同步協議的分布式(DSA)交換機。在linux驅動體系中,分布式交換機驅動是linux內核的一個子系統,主要用于支持使用Linux系統的特定供應商的交換機。分布式交換機設計的理念就是能夠使用不需要經修改的常用Linux網絡工具,如bridge、ifconfig等。
時鐘同步網網絡架構由GM(Grand master)、BC(Boundary Clock)和OC(Ordinary Clock)組成,至少需要分為2級,2級節點以下被分為端節點,網絡架構示意圖如圖1所示。

圖1 分級時鐘同步網絡架構圖
在時間同步協議網絡中,所有節點按照主從關系進行劃分,下一級的節點為上一級節點地從,上一級節點為下一級節點的主,最高等級的節點為Grandmaster,即所有節點的主時鐘,整個同步網絡中所有節點都參照Grandmaster的時鐘。時間同步網絡中的各個節點之間主從關系要么人為設置,要么采用 BMC(Best Master Clock)算法進行實時的選舉。
OC(Ordinary Clock)普通時鐘一般為端節點,即需要同步的各個終端設備;BC(Boundary Clock)一般為網絡中的交換設備,負責網絡Grandmaster時鐘的下發。Grandmaster時鐘主要通過PTP報文進行下發數據。IEEE 1588 v2定義了PTP報文基于IPv4 和 Ethernet的報文格式,具體格式見圖2和圖3。

圖2 基于 IPv4 的 PTP 報文

圖3 基于Ethernet的PTP報文
精確時間同步協議網絡通過端口收發Announce(通告)報文,實現了端口數據集與端口狀態機之間的信息交互。為了在不增加系統開銷的情況下提高協議處理能力,需要對端口狀態進行控制。BMC(Best Master Clock)算法將端口數據集與端口狀態機進行對比,實現時鐘的主從關系。主從關系通常按照如下步驟實現主從關系的建立:
1)接收和解析來自網絡設備中的Announce報文;
2)利用BMC(最佳主時鐘)算法,對最優時鐘和端口的推薦狀態進行決策,包括Master(主), Slave(從)或者是Passive(被動)狀態 ;
3)基于端口協商后的狀態對端口數據集合進行更新;
4)根據所述推薦狀態及所述狀態進行事件決策,基于所述端口狀態機,確定端口的真實狀態,實現了時鐘同步網絡。狀態判定事件包括Announce(通告)報文的接收事件和接收Announce(通告)報文的超時結束事件,接口收到Announce(通告)消息的間隔時間大于超時時間間隔時,將此精確時間同步協議接口的狀態設置為Master。
當主從關系建立后,即可以進行頻率同步和時間同步。PTP本來只是用戶設備之間的高精度時間同步,但也可以被用來進行設備之間的頻率同步。
精確時間同步協議記錄了主從設備間在事件報文交換過程中生成的時間戳,對主從設備間路徑延遲及時間偏移進行計算,實現了主從設備在時間與頻率上的同步,設備需要支持2種模式搭載時間戳,分別是單步(One step)時鐘模式和兩步(Two step)時鐘模式。
PTP根據計算路徑延時機制劃分可以分為兩種方式:Delay以及Pdelay方式
1)E2E(End to End)延時請求 - 請求響應 :基于主從時鐘之間的總體路徑延時時間,計算時間差;
2)P2P(Peer to Peer)對端延時 :根據主從時鐘之間的整條鏈路延時時間計算時間差。
以太網交換機一般由多個前置面板接口,一個CPU管理接口。DSA子系統在硬件上依賴于管理接口。管理接口從交換機中接收以太網幀,經過Linux網絡協議棧的分析處理。對于每個前面板端口,DSA子系統創建專門的以太網節點(可設置IP地址),使用Linux網絡協議棧控制端節點,這些虛擬出來的網絡節點被稱為“從屬”節點。
分布式交換機硬件需要支持“交換機標簽”,這些標簽的插入位置由交換機芯片廠商決定。這些標簽是為了讓CPU管理接口獲取信息:
(1)幀來自的物理端口
(2)幀轉發原因
(3)CPU發起的流量轉發到特定端口
DSA實現的軟硬件拓撲如圖4所示。

圖4 Linux DSA 拓撲圖
交換機會把圖5中的以太網PTP報文發到管理端口上,其中標簽協議的確切格式是特定于交換機提供商,但是一般Tag包含以太網幀來自/應該發送到哪個端口等信息。

圖5 switch on PTP over Ethernet
在Linux DSA分布式子系統中,所有的標記協議都在net/dsa/tag_*.c文件中。為了處理包含Tag的網絡幀需要在協議棧中添加Hook函數,Hook對于接收到的網絡數據幀處理如圖6所示。

圖6 Hook 處理流程圖
在應用層進行ptp測試的軟件主要采用開源的ptpd、ptp4l或者gptp軟件,三者在ubuntu下都可以方便地通過apt安裝。數據幀在Linux下的數據幀流向如圖7所示。

圖7 DSA子系統驅動原理圖
目前支持PTP協議的標準協議棧有3種:gptp, ptp4l和ptpd,三者主要工作在linux系統下,其中ptpd較早也容易移植到裸機下,此次采用ptpd進行測試驗證:

圖8 實驗網絡架構圖

圖9 實驗記錄
在linux 系統下,使用PTPd協議棧進行時鐘同步驗證,同步10秒后,時鐘端節點和主時鐘節點實現了時鐘同步,同步精度可達到35ns,小于MAC層規定的100ns,實驗取得了預期的效果。
本文對現代通信網絡中常用的PTP(Precision Time Protocol)協議進行了綜合分析,分別對基本的時鐘同步原理及主從關系建立的步驟進行了分析。接著對時鐘同步網絡中的關鍵節點交換機在Linux下的驅動程序進行了分析,包括數據幀的格式和數據幀的流向,最后運用PTPd協議棧對PTP協議進行了時鐘同步驗證,通過主時鐘向在交換機的作用下向從節點發送同步消息,成功進行了網絡時鐘同步。