gPTP(802.1AS )的主要思想
AVB域中的都有一个主时钟,作为时间标准,其他都是从时钟
可以看的出来gPTP是slave和master是一一对应,主master和各端点之间有bridge,所以要求bridge必须支持gptp,也就是p2p。
1588v2(PTP)报文通用格式
IEEE 1588v2协议附录D定义了1588V2 over IPv4的报文封装,
附录E定义了1588V2 over IPv6的报文封装,
附录F定义了1588v2 over IEEE 802.3 /Ethernet的报文封装。
其他如1588v2 over MPLS封装,业界还没有成熟的标准。除此之外,在实际应用中还可能携带VLAN。
- PTP over Ethernet
- PTP over UDP over IPv4
- PTP over UDP over IPv6
- PTP over MPLS
PTP通用消息格式PTP General Message Format
图1 以太封装PTP报文 PTP over Ethernet
IPv4封装PTP报文,EVENT消息头的UDP目的端口号是319,General消息的UDP目的端口号是320。
PTP消息头格式 Format of a PTP header
1588v2消息必须包含消息头、消息体和消息扩展字节,扩展字节长度可能为0。
字段 | 长度 | 含义 |
---|---|---|
TranSpec | 4比特 | 传送相关。0表示PTP消息由1588协议使用,1表示PTP消息由802.1as协议使用 |
MsgType | 4比特 | 表示消息类型。1588V2消息分为两类:事件消息(EVENT Message)和通用消息(General Message)。事件报文是时间概念报文,进出设备端口时需要打上精确的时间戳,而通用报文则是非时间概念报文,进出设备不会产生时戳。类型值03的为事件消息,8D为通用消息 0x00: Sync 0x01: Delay_Req 0x02: Pdelay_Req 0x03: Pdelay_Resp 0x04-7: Reserved 0x08: Follow_Up 0x09: Delay_Resp 0x0A: Pdelay_Resp_Follow_Up 0x0B: Announce 0x0C: Signaling 0x0D: Management 0x0E-0x0F: Reserved |
Reserved | 4比特 | 保留字段。 |
VerPTP | 4比特 | 表示1588协议的版本。 |
MsgLength | 2字节 | PTP消息的长度,即PTP消息的全部字节数目。计入字节始于报头的第一个字节,同时包含并收尾于任何尾标的最后一个字节,或是无尾标成员时收尾于消息的最后一个字节。 |
DomainNumber | 1字节 | 域编号,表示发送该消息时钟所属的域。 |
Reserved | 1字节 | 保留字段。 |
FlagField | 2字节 | 标志域,取值请参见表2。 |
CorrectionField | 64比特 | 修正域,各报文都有,主要用在Sync报文中,用于补偿网络中的传输时延,E2E的频率同步。 |
Reserved | 32比特 | 保留字段。 |
SourcePortIdentity | 源端口标识符,发送该消息时钟的ID和端口号。 | |
SequenceID | 2字节 | 序列号ID,表示消息的序列号,以及关联消息的对应关系。 |
ControlField | 1字节 | 控制域,由消息类型决定:0x00:Sync 0x01:Delay_Req 0x02:Follow_Up 0x03:Delay_Resp 0x04:Management 0x05:All others 0x06-0xFF:reserved |
LogMsgInterval | 1字节 | 录入消息周期,PTP消息的发送时间间隔,由消息类型决定。 |
PTP Specified Message Field | 变长 | PTP消息体和消息扩展字节。 |
字节 | 比特位 | 消息类型 | 消息名 | 说明 |
---|---|---|---|---|
0 | 0 | Announce, Sync, Follow_Up, Delay_Resp | alternateMasterFlag | 如果发送侧端口处于MASTER状态,则为FALSE。 |
0 | 1 | Sync, Pdelay_Resp | twoStepFlag | 对于一步时钟,twoStepFlag取值要求为FALSE。对于双步时钟,twoStepFlag取值要求为TRUE。 |
0 | 2 | ALL | unicastFlag | 如果此消息发送到的传送层协议地址是一个单播地址,则置为TRUE。如果此消息发送到的传送层协议地址是一个多播地址,则置为FALSE。 |
0 | 5 | ALL | PTP profile Specific 1 | 由一个备选PTP模板定义;否则置为FALSE。 |
0 | 6 | ALL | PTP profile Specific 2 | 由一个备选PTP模板定义;否则置为FALSE。 |
0 | 7 | ALL | Reserved | 此比特保留用于实验性安全机制. |
1 | 0 | Announce | leap61 | - |
1 | 1 | Announce | leap59 | - |
1 | 2 | Announce | currentUtcOffsetValid | - |
1 | 3 | Announce | ptpTimescale | - |
1 | 4 | Announce | timeTraceable | - |
1 | 5 | Announce | frequencyTraceable | - |
gptp配置文件
gptp.cfg
需要打开gptp,将transpecific 变量设置为0x1
#
# 802.1AS example configuration containing those attributes which
# differ from the defaults. See the file, default.cfg, for the
# complete list of available options.
#
[global]
gmCapable 1
priority1 248
priority2 249
#logAnnounceInterval 0
#logSyncInterval -3
#syncReceiptTimeout 3
neighborPropDelayThresh 2000
min_neighbor_prop_delay -20000000
assume_two_step 1
twoStepFlag 1
#path_trace_enabled 1
follow_up_info 1
transportSpecific 0x1
tx_timestamp_timeout 9
ptp_dst_mac 01:80:C2:00:00:0E
p2p_dst_mac 01:80:C2:00:00:0E
network_transport L2
delay_mechanism P2P
两个设备,一个做主,一个做从,分别执行下面的命令
ptp4l -P -2 -H -i <网卡> -p /dev/ptp0 -m -f gptp.cfg
ptp4l -P -2 -H -i <网卡> -p /dev/ptp0 -m -s -f gptp.cfg