手册下载
|
|
H3C S6805 & S6825 & S6850 & S9850系列交换机 |
高清音视频数据传输场景 |
组播NAT和PTP配置指导 |
|
新华三技术有限公司 http://www.h3c.com
资料版本:6W100-20230203 |
Copyright © 2023 新华三技术有限公司及其许可者 版权所有,保留一切权利。
未经本公司书面许可,任何单位和个人不得擅自摘抄、复制本书内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
由于产品版本升级或其他原因,本手册内容有可能变更。H3C保留在没有任何通知或者提示的情况下对本手册的内容进行修改的权利。本手册仅作为使用指导,H3C尽全力在本手册中提供准确的信息,但是H3C并不确保手册内容完全没有错误,本手册中的所有陈述、信息和建议也不构成任何明示或暗示的担保。
目 录
3.4 PTP(SMPTE ST 2059-2)配置任务简介
3.13.1 配置Announce报文发送的时间间隔和接收超时倍数
3.14.1 配置采用UDP封装格式的组播PTP报文的源IP地址
在大规模音视频传输场景(如电视台、演播室、转播车)下,为实现高质量、高可靠性的数据传输,可基于SMPTE ST 2110/2022标准的IP化协议和SMPTE ST 2059-2标准的PTP协议来部署一套SDN架构的组播NAT组网。
在此架构下,媒体调度平台通过SDN控制器对交换机网络下发标准Openflow协议,由网络NAT功能来完成媒体流的调度控制,对周边IP化设备没有任何依赖,无需协议交互,只需要其发送或接收的数据格式符合相关标准,例如SMPTE 2022、2110等。方案实现了IP化终端和调度系统的解耦,让系统具备更强的开放性和可扩展性。
图1-1 基于SDN的组播NAT组网
本文重点介绍高清音视频数据传输场景组播NAT和PTP的相关配置,有关基础配置中需要用到的以太网接口、VLAN的相关配置,请参考《H3C S6805 & S6825 & S6850 & S9850系列以太网交换机 配置指导-Release 66xx》或《H3C S6805 & S6825 & S6850 & S9850系列以太网交换机 配置指导-Release 67xx》中的如下手册。
· 有关以太网接口的具体介绍(特别是要关注25GE接口的使用限制和配置指导),请参见“二层技术-以太网交换配置指导”中的“以太网接口”。
· 有关VLAN功能的具体介绍,请参见“二层技术-以太网交换配置指导”中的“VLAN”。
与传统组播网络架构不同,MC-NAT(Multicast Network Address Transform,组播NAT)无需PIM、IGMP等组播协议的交互,MC-NAT通过控制器下发OpenFlow流表和组表,控制来自公网源端设备的组播流量按需转发到私网不同的终端上,并且在转发报文之前根据组表将报文的IP、端口、VLAN和MAC修改为与私网终端匹配的值。
组播NAT的主要功能是将组播流复制到不同的出端口,同时可修改组播流的目的组播IP地址和UDP目的端口号,并进行转发,由此完成对组播流的调度控制。组播NAT转发报文流程图如图2-1所示。
图2-1 组播NAT转发报文流程图
通过Group表项修改组播报文时,可以修改源MAC地址、源IP地址、UDP源端口号、目的MAC地址、目的IP地址、UDP目的端口号的组合,通常情况下仅需修改目的IP地址和UDP目的端口号。
组播NAT配置分为设备侧配置和控制器配置。本文控制器配置以SeerEngine-DC控制器为例。
MC-NAT设备侧配置任务如下:
(1) 创建OpenFlow实例
(2) 配置OpenFlow实例的类型
(3) (可选)配置带内管理VLAN
(4) (可选)配置流表和流表项
(5) (可选)配置控制器连接模式
(6) (可选)配置禁止上送控制器的端口类型
(7) 激活OpenFlow实例
(8) 配置连接控制器
(1) 进入系统视图。
system-view
(2) 创建OpenFlow实例,并进入OpenFlow实例视图。
openflow instance instance-id
(3) (可选)配置OpenFlow实例的Datapath ID。
datapath-id id
缺省情况下,OpenFlow实例的Datapath ID由实例ID与设备桥MAC组成,其中前16个比特为实例ID,后48个比特为设备桥MAC。
Datapath ID用来在唯一标识OpenFlow实例,不同OpenFlow实例的Datapath ID不能相同。
(4) (可选)配置OpenFlow报文的DSCP值。
tcp dscp dscp-value
缺省情况下,未配置OpenFlow报文的DSCP值。
对于VLAN类型的OpenFlow实例,需要注意的是:
· 一个VLAN仅能属于一个OpenFlow实例,否则会导致流量无法正确处理。
· 如果配置的对应VLAN不存在,在激活实例时,设备将会自动创建该VLAN。
· 同一个接口所属VLAN必须属于同一OpenFlow实例,否则,控制器下发的不同实例的接口状态消息会相互覆盖。
· VLAN对应的VLAN接口不能配置BFD MAD检测功能。有关BFD MAD功能的具体介绍,请参见“虚拟化技术配置指导”中的“IRF”。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置OpenFlow实例的类型。
classification global
缺省情况下,未配置OpenFlow实例的类型。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置OpenFlow实例的类型。
classification vlan vlan-id [ mask vlan-mask ] [ loosen ]
缺省情况下,未配置OpenFlow实例的类型。
带内管理VLAN内的流量进行正常转发,用于OpenFlow设备与控制器建立安全通道。
控制器通过管理用以太网接口(带外管理口)连接交换机时可以不配置带内管理VLAN。推荐通过管理用以太网接口连接控制器。
仅在带内管理VLAN的接口不属于OpenFlow接口。
对于VLAN类型的OpenFlow实例,带内管理VLAN必须是OpenFlow实例配置的对应VLAN的子集。
对于全局类型的OpenFlow实例,通过管理以太网接口之外的接口连接控制器时,需要将该接口所属VLAN配置为带内管理VLAN或者配置default table-miss permit。对于VLAN类型的OpenFlow实例,通过管理以太网接口之外的接口连接控制器时,需要将该接口所属VLAN配置为带内管理VLAN。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置带内管理VLAN。
in-band management vlan vlan-id-list
缺省情况下,未配置带内管理VLAN。
Ingress-vlan流表和Egress-vlan流表与MAC-IP流表、Extensibility流表同时配置时,Ingress-vlan流表必须为第一个流表,Egress-vlan流表必须为最后一个流表。
Ingress-vlan流表和Egress-vlan流表仅在配置QINQ模式,且设备处于Standalone模式时生效。
Extensibility流表ID必须大于MAC-IP流表ID。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置流表类型和流表ID。
flow-table { ingress-vlan ingress-table-id | mac-ip mac-ip-table-id | extensibility extensibility-table-id&<1-2> | egress-vlan egress-table-id }*
缺省情况下,流表类型为Extensibility,流表ID为0。
(4) 配置QINQ模式,使带有双层VLAN Tag的报文通过Extensibility流表后仍然为双层VLAN Tag。
qinq-network enable
缺省情况下,未配置QINQ模式,带有双层VLAN Tag的报文通过Extensibility流表后只带一个内层的VLAN Tag。
QINQ表和Extensibility流表配合使用时,必须配置本功能。
(5) 配置Extensibility的流表项的最大值。
flow-entry max-limit limit-value
Extensibility表的流表项的最大个数为65535。
控制器下发的流表表项数量超过最大值时,向控制器返回失败。
(6) 配置允许动态ARP表项覆盖OpenFlow ARP表项。
precedence dynamic arp
缺省情况下,禁止动态ARP表项覆盖OpenFlow ARP表项。
仅MAC-IP流表支持本功能。
(7) 允许控制器下发的流表中包含聚合接口的成员端口。
permit-port-type member-port
缺省情况下,禁止控制器下发的流表中包含聚合接口的成员端口。
(8) 配置丢弃慢速协议报文。
protocol-packet filter slow
缺省情况下,未配置丢弃慢速协议报文。
慢速协议目前支持LACP和OAM协议。
(9) 配置Table Miss流表项的缺省动作为正常转发。
default table-miss permit
缺省情况下,Table Miss流表项的缺省动作为丢弃。
在MC-NAT应用场景中,配置动作为正常转发后未知流量会在VLAN内广播。影响预期效果,所以不建议配置为正常转发。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置控制器连接模式。
controller mode { multiple | single }
缺省情况下,控制器连接模式为Multiple模式。
配置该功能后,交换机不再向控制器上送对应三层以太网接口、三层聚合接口、VLAN接口的信息。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置禁止上送控制器的端口类型。
forbidden port { l3-physical-interface | vlan-interface | vsi-interface } *
缺省情况下,未配置禁止上送控制器的端口类型,即所有接口类型都上送控制器。
设备暂不支持vsi-interface参数。
新配置或修改OpenFlow实例后,需要激活实例使配置生效。重新激活实例时,交换机会断开与所有控制器的连接,清除已下发的流表,更新能力集,重新与控制器建立连接。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 激活OpenFlow实例。
active instance
缺省情况下,OpenFlow实例处于未激活状态。
辅助连接配置和主连接配置不做配置冲突检查,如果辅助连接与主连接配置冲突,则无法建立辅助连接。
(1) 进入系统视图。
system-view
(2) 进入OpenFlow实例视图。
openflow instance instance-id
(3) 配置主连接。
controller controller-id address { ip ipv4-address | ipv6 ipv6-address } [ port port-number ] [ local address { ip local-ipv4-address | ipv6 local-ipv6-address } [ port local-port- number ] ] [ ssl ssl-policy-name [ access-control-policy acp-policy-name ] ] [ vrf vrf-name ]
源IP地址必须为OpenFlow实例中端口的IP地址,否则交换机和控制器之间无法建立连接。
仅Release 6635及以上版本支持配置access-control-policy参数。
(4) (可选)配置辅助连接。
controller controller-id auxiliary auxiliary-id transport { tcp | udp | ssl ssl-policy-name } [ address { ip ipv4-address | ipv6 ipv6-address } ] [ port port-number ]
辅助连接中未配置IP地址或接口号时,则IP地址或接口号与主连接一致。
(5) (可选)配置连接中断模式。
fail-open mode { secure | smart | standalone }
缺省情况下,连接中断模式为Secure。
(6) (可选)开启OpenFlow连接备份功能。
tcp-connection backup
缺省情况下,OpenFlow连接备份功能处于开启状态。
开启连接备份功能后,设备发生主备倒换时,OpenFlow实例仍然保持与控制器的连接。
本功能仅支持IRF只有两台成员设备进行主备倒换的场景。
仅基于TCP的OpenFlow连接支持开启连接备份功能。
控制器侧配置以SeerEngine-DC控制器为例。
# 控制器下发连接命令。
[root@openflowvm:~/controller1]# ./ovs-controller ptcp: -v &
Meter Table由Meter表项组成,Meter表项被流表项所引用,为所有引用Meter表项的流表项提供报文限速的功能。
配置限制和指导:
· meter_id不能与之前下发的meter相同,否则会返回失败。
· 想要配置的burst_size的值生效,需要在flag中添加burst;flag中无burst时,实际下发的burst_size为rate的一半。
· Rate的最小颗粒为8。
控制器侧配置举例:
# 在控制器上创建Meter表1、报文限速1024kps、报文尺寸1024000kb。
[root@openflowvm:~/controller1]# ./ovs-appctl send_meter_mod 'command(add),flags
(kbps,burst),meter_id(1),bands(drop(rate(1024),burst_size(1024000)))'
20:54:48|tcp:172.16.144.135:33603: sent (Success): OFPT_METER_MOD (xid:9, len:32
)
20:54:48|OFPT_METER_MOD (xid:9)
|- command = add
|- flags = kbps|burst
|- meter_id = 1
|- bands
|- drop, rate(1024), burst_size(1024000)
设备侧验证效果:
[Sysname] display openflow instance 1 meter
Meter flags: KBPS -- Rate value in kb/s, PKTPS -- Rate value in packet/sec
BURST -- Do burst size, STATS -- Collect statistics
Instance 1 meter table information:
Meter entry count: 1
Meter entry 1 information:
Meter flags: KBPS|BURST
Band 1 information:
Type: drop, rate: 1024kbps, burst size: 1024000kb, prec_level:--
Byte count: 0, packet count: 0
Referenced information:
Count: 0
# 在控制器上创建Meter表2、报文限速1024kps、报文尺寸1024kb。
[root@openflowvm:~/controller1]# ./ovs-appctl send_meter_mod 'command(add),flags
(kbps),meter_id(2),bands(drop(rate(1024),burst_size(1024)))'
23:58:33|tcp:172.16.144.135:33611: sent (Success): OFPT_METER_MOD (xid:7, len:32
)
23:58:33|OFPT_METER_MOD (xid:7)
|- command = add
|- flags = kbps
|- meter_id = 2
|- bands
|- drop, rate(1024), burst_size(1024)
设备侧验证效果:
[Sysname] display openflow instance 1 meter
Meter flags: KBPS -- Rate value in kb/s, PKTPS -- Rate value in packet/sec
BURST -- Do burst size, STATS -- Collect statistics
Instance 1 meter table information:
Meter entry count: 1
Meter entry 2 information:
Meter flags: KBPS
Band 1 information:
Type: drop, rate: 1024kbps, burst size: 512kb, prec_level:--
Byte count: 0, packet count: 0
Referenced information:
Count: 0
配置限制和指导:
Meter_id必须是已经存在的meter流表的id。
控制器侧配置举例:
# 在控制器上修改Meter表1、报文限速2048kps、报文尺寸2048kb。
[root@openflowvm:~/controller1]# ./ovs-appctl send_meter_mod 'command(modify),fl
ags(kbps,burst),meter_id(1),bands(drop(rate(2048),burst_size(2048)))'
23:51:10|tcp:172.16.144.135:33611: sent (Success): OFPT_METER_MOD (xid:5, len:32
)
23:51:10|OFPT_METER_MOD (xid:5)
|- command = modify
|- flags = kbps|burst
|- meter_id = 1
|- bands
|- drop, rate(2048), burst_size(2048)
设备侧验证效果:
[Sysname] display openflow instance 1 meter
Meter flags: KBPS -- Rate value in kb/s, PKTPS -- Rate value in packet/sec
BURST -- Do burst size, STATS -- Collect statistics
Instance 1 meter table information:
Meter entry count: 1
Meter entry 1 information:
Meter flags: KBPS|BURST
Band 1 information:
Type: drop, rate: 2048kbps, burst size: 2048kb, prec_level:--
Byte count: 0, packet count: 0
Referenced information:
Count: 0
配置限制和指导:
只需要指定对应的meter_id就可以正确删除。
# 在控制器上删除Meter表1。
[root@openflowvm:~/controller1]# ./ovs-appctl send_meter_mod 'command(delete),me
ter_id(1)'
00:13:09|tcp:172.16.144.135:33612: sent (Success): OFPT_METER_MOD (xid:29, len:1
6)
00:13:09|OFPT_METER_MOD (xid:29)
|- command = delete
|- flags = 0
|- meter_id = 1
|- bands
Group Table由Group表项组成,Group表项被流表项所引用,提供额外的报文转发功能。
配置限制和指导:
· group_id不能与之前的group相同,并需要与group entry对应。
· 一个group下可以有多个bucket、output和setfield,每个bucket、output和setfield不能完全相同。
· output对应端口的index,可在设备Probe视图下使用display system internal ifmgr list命令查询。
· set_field支持源/目的MAC、源/目的IP、源/目的UDP端口号的修改。
· set_field为可选配置。
# 在控制器上创建组表group1,指定bucket1的出端口为368、报文源MAC为00:ff:94:00:00:22、目的MAC为00:ff:94:00:00:33、源IP为100.0.0.8、目的IP为100.0.0.8、源UDP端口为12345、目的UDP端口为12345;
指定bucket2的出端口为367、报文源MAC为00:ff:94:00:00:22、目的MAC为00:ff:94:00:00:33、源IP为100.0.0.8、目的IP为100.0.0.8、源UDP端口为12345、目的UDP端口为12345。
[root@openflowvm:~/controller1]# ./ovs-appctl send_group_str 'command(add),type(
all),group_id(1),bucket(actions(output(368),set_field(eth_src(00:ff:94:00:00:22)
),set_field(eth_dst(00:ff:94:00:00:33)),set_field(ipv4_src(100.0.0.8)),set_field
(ipv4_dst(100.0.0.8)),set_field(udp_src(12345)),set_field(udp_dst(12345)))),buck
et(actions(output(367),set_field(eth_src(00:ff:94:00:00:22)),set_field(eth_dst(0
0:ff:94:00:00:33)),set_field(ipv4_src(100.0.0.8)),set_field(ipv4_dst(100.0.0.8))
,set_field(udp_src(12345)),set_field(udp_dst(12345))))'
00:30:05|tcp:172.16.144.135:33612: sent (Success): OFPT_GROUP_MOD (xid:32, len:2
72)
00:30:05|OFPT_GROUP_MOD (xid:32)
# Group_Mod
|- command = add
|- type = all
|- group_id = 1
|- bucket
|- weight = 0
|- watch_port = any
|- watch_group = any
|- actions
|- output,368 [max_len = 128]
|- set_field,eth_src,00:ff:94:00:00:22
|- set_field,eth_dst,00:ff:94:00:00:33
|- set_field,ipv4_src,100.0.0.8
|- set_field,ipv4_dst,100.0.0.8
|- set_field,udp_src,12345
|- set_field,udp_dst,12345
|- bucket
|- weight = 0
|- watch_port = any
|- watch_group = any
|- actions
|- output,367 [max_len = 128]
|- set_field,eth_src,00:ff:94:00:00:22
|- set_field,eth_dst,00:ff:94:00:00:33
|- set_field,ipv4_src,100.0.0.8
|- set_field,ipv4_dst,100.0.0.8
|- set_field,udp_src,12345
|- set_field,udp_dst,12345
设备侧验证效果:
[Sysname] display openflow instance 1 group
Instance 1 group table information:
Group count: 1
Group entry 1:
Type: All, byte count: 0, packet count: 0
Bucket 1 information:
Action count 2, watch port: any, watch group: any
Byte count 0, packet count 0
Set field:
Ethernet destination MAC address: 00ff-9400-0033
Ethernet source MAC address: 00ff-9400-0022
IPv4 source address: 100.0.0.8
IPv4 destination address: 100.0.0.8
UDP source port: 12345
UDP destination port: 12345
Output interface: WGE3/0/48
Bucket 2 information:
Action count 2, watch port: any, watch group: any
Byte count 0, packet count 0
Set field:
Ethernet destination MAC address: 00ff-9400-0033
Ethernet source MAC address: 00ff-9400-0022
IPv4 source address: 100.0.0.8
IPv4 destination address: 100.0.0.8
UDP source port: 12345
UDP destination port: 12345
Output interface: WGE3/0/47
Referenced information:
Count: 0
配置限制和指导
· group_id需为已存在的group。
· 修改内容可以是output、set_field和增删bucket等。
# 在控制器上修改组表group1,指定bucket1的出端口为368、报文源MAC为00:ff:94:00:00:11、目的MAC为00:ff:94:00:00:44、源IP为200.0.0.8、目的IP为200.0.0.8、源UDP端口为54321、目的UDP端口为54321;
指定bucket2的出端口为366。
[root@openflowvm:~/controller1]# ./ovs-appctl send_group_str 'command(modify),ty
pe(all),group_id(1),bucket(actions(output(368),set_field(eth_src(00:ff:94:00:00:
11)),set_field(eth_dst(00:ff:94:00:00:44)),set_field(ipv4_src(200.0.0.8)),set_fi
eld(ipv4_dst(200.0.0.8)),set_field(udp_src(54321)),set_field(udp_dst(54321)))),b
ucket(actions(output(366)))'
01:25:48|tcp:172.16.144.135:33612: sent (Success): OFPT_GROUP_MOD (xid:33, len:1
76)
01:25:48|OFPT_GROUP_MOD (xid:33)
# Group_Mod
|- command = modify
|- type = all
|- group_id = 1
|- bucket
|- weight = 0
|- watch_port = any
|- watch_group = any
|- actions
|- output,368 [max_len = 128]
|- set_field,eth_src,00:ff:94:00:00:11
|- set_field,eth_dst,00:ff:94:00:00:44
|- set_field,ipv4_src,200.0.0.8
|- set_field,ipv4_dst,200.0.0.8
|- set_field,udp_src,54321
|- set_field,udp_dst,54321
|- bucket
|- weight = 0
|- watch_port = any
|- watch_group = any
|- actions
|- output,366 [max_len = 128]
设备侧验证效果:
[Sysname] display openflow instance 1 group
Instance 1 group table information:
Group count: 1
Group entry 1:
Type: All, byte count: 0, packet count: 0
Bucket 1 information:
Action count 2, watch port: any, watch group: any
Byte count 0, packet count 0
Set field:
Ethernet destination MAC address: 00ff-9400-0044
Ethernet source MAC address: 00ff-9400-0011
IPv4 source address: 200.0.0.8
IPv4 destination address: 200.0.0.8
UDP source port: 54321
UDP destination port: 54321
Output interface: WGE3/0/48
Bucket 2 information:
Action count 1, watch port: any, watch group: any
Byte count 0, packet count 0
Output interface: WGE3/0/46
Referenced information:
Count: 0
配置限制和指导:
只需要指定对应的group_id就可以正确删除。
# 在控制器上删除组表group1。
[root@openflowvm:~/controller1]# ./ovs-appctl send_group_str 'command(delete),ty
pe(all),group_id(1)'
01:49:35|tcp:172.16.144.135:33612: sent (Success): OFPT_GROUP_MOD (xid:36, len:1
6)
01:49:35|OFPT_GROUP_MOD (xid:36)
# Group_Mod
|- command = delete
|- type = all
|- group_id = 1
OpenFlow通过流表(Flow Table)来匹配和处理报文,在同一个流表中按流表项的优先级进行先后匹配。
配置限制和指导:
· table_id值要与flow-table对应;
· 缺省配置下会有一条missrule将实例内所有未击中流表的流量丢弃(协议报文除外);
· match项可自定义设置;
· Instruction项可不配置meter,write_actions可以指定group id也可以指定为具体某一端口output();
# 在控制器上创建flow-table表1,添加acl表、匹配IP报文类型、指定报文源MAC为00:10:94:00:00:22,ff:ff:ff:ff:ff:ff:ff:ff、目的MAC为00:10:94:00:00:44,ff:ff:ff:ff:ff:ff:ff:ff、源IP为192.85.1.2,255.255.255.255、目的IP为192.0.0.1,255.255.255.255、源UDP端口为1024,65535、目的UDP端口为1024,65535、Instruction动作为meter1、write_actions动作为group1。
[root@openflowvm:~/controller1]# ./ovs-appctl send_flow_str 'command(add),table_
id(1),priority(0),match(eth_type(0x0800),ip_proto(0x11),eth_src(00:10:94:00:00:2
2,ff:ff:ff:ff:ff:ff:ff:ff),eth_dst(00:10:94:00:00:44,ff:ff:ff:ff:ff:ff:ff:ff),ip
v4_src(192.85.1.2,255.255.255.255),ipv4_dst(192.0.0.1,255.255.255.255),udp_src(1
024,65535),udp_dst(1024,65535)),instruction(meter(1),write_actions(group(1)))'
01:56:35|tcp:172.16.144.135:33612: sent (Success): OFPT_FLOW_MOD (xid:42, len:16
0)
01:56:35|OFPT_FLOW_MOD (xid:42)
# Flow_Mod (48)
|- cookie = 0x0000000000000000
|- cookie_mask = 0x0000000000000000
|- table_id = 1
|- command = add
|- idle_timeout = 0
|- hard_timeout = 0
|- priority = 0
|- buffer_id = no_buffer
|- out_port = any
|- out_group = any
|- flags = 0
|- match
|- eth_type,0x0800
|- ip_proto,17
|- eth_src,00:10:94:00:00:22[ff:ff:ff:ff:ff:ff]
|- eth_dst,00:10:94:00:00:44[ff:ff:ff:ff:ff:ff]
|- ipv4_src,192.85.1.2[255.255.255.255]
|- ipv4_dst,192.0.0.1[255.255.255.255]
|- udp_src,1024[65535]
|- udp_dst,1024[65535]
|- instructions
|- meter, 1
|- write_actions
|- group,1
设备侧验证效果:
[Sysname] display openflow instance 1 flow-table
Instance 1 flow table information:
Table 1 information:
Table type: Extensibility, flow entry count: 1, total flow entry count: 2
MissRule (default) flow entry information:
cookie: 0x0, priority: 0, hard time: 0, idle time: 0, flags: reset_counts,
byte count: 0, packet count: 0
Create time:04:27:25 01/11/2011, Last modified time:04:27:25 01/11/2011
Match information: any
Instruction information:
Write actions:
Drop
Flow entry 1 information:
cookie: 0x0, priority: 0, hard time: 0, idle time: 0, flags: none,
byte count: 0, packet count: 0
Create time:06:20:06 01/11/2011, Last modified time:06:20:06 01/11/2011
Match information:
Ethernet destination MAC address: 0010-9400-0044
Ethernet destination MAC address mask: ffff-ffff-ffff
Ethernet source MAC address: 0010-9400-0022
Ethernet source MAC address mask: ffff-ffff-ffff
Ethernet type: 0x0800
IP protocol: 17
IPv4 source address: 192.85.1.2, mask: 255.255.255.255
IPv4 destination address: 192.0.0.1, mask: 255.255.255.255
UDP source port: 1024, mask: 0xffff
UDP destination port: 1024, mask: 0xffff
Instruction information:
Set meter: 1
Write actions:
Group: 1
配置限制和指导:
要修改某一条流表,match项需要完全匹配,所以只支持修改instruction和write_actions的内容。
# 在控制器上修改flow-table表1,write_actions动作为output(368)。
[root@openflowvm:~/controller1]# ./ovs-appctl send_flow_str 'command(modify),tab
le_id(1),priority(0),match(eth_type(0x0800),ip_proto(0x11),eth_src(00:10:94:00:0
0:22,ff:ff:ff:ff:ff:ff:ff:ff),eth_dst(00:10:94:00:00:44,ff:ff:ff:ff:ff:ff:ff:ff)
,ipv4_src(192.85.1.2,255.255.255.255),ipv4_dst(192.0.0.1,255.255.255.255),udp_sr
c(1024,65535),udp_dst(1024,65535)),instruction(meter(1),write_actions(output(368
)))'
02:18:05|tcp:172.16.144.135:33612: sent (Success): OFPT_FLOW_MOD (xid:48, len:16
8)
02:18:05|OFPT_FLOW_MOD (xid:48)
# Flow_Mod (48)
|- cookie = 0x0000000000000000
|- cookie_mask = 0x0000000000000000
|- table_id = 1
|- command = modify
|- idle_timeout = 0
|- hard_timeout = 0
|- priority = 0
|- buffer_id = no_buffer
|- out_port = any
|- out_group = any
|- flags = 0
|- match
|- eth_type,0x0800
|- ip_proto,17
|- eth_src,00:10:94:00:00:22[ff:ff:ff:ff:ff:ff]
|- eth_dst,00:10:94:00:00:44[ff:ff:ff:ff:ff:ff]
|- ipv4_src,192.85.1.2[255.255.255.255]
|- ipv4_dst,192.0.0.1[255.255.255.255]
|- udp_src,1024[65535]
|- udp_dst,1024[65535]
|- instructions
|- meter, 1
|- write_actions
|- output,368 [max_len = 128]
设备侧验证效果:
[Sysname] display openflow instance 1 flow-table
Instance 1 flow table information:
Table 1 information:
Table type: Extensibility, flow entry count: 1, total flow entry count: 2
MissRule (default) flow entry information:
cookie: 0x0, priority: 0, hard time: 0, idle time: 0, flags: reset_counts,
byte count: 0, packet count: 0
Create time:04:27:25 01/11/2011, Last modified time:04:27:25 01/11/2011
Match information: any
Instruction information:
Write actions:
Drop
Flow entry 1 information:
cookie: 0x0, priority: 0, hard time: 0, idle time: 0, flags: none,
byte count: 0, packet count: 0
Create time:06:20:06 01/11/2011, Last modified time:06:45:37 01/11/2011
Match information:
Ethernet destination MAC address: 0010-9400-0044
Ethernet destination MAC address mask: ffff-ffff-ffff
Ethernet source MAC address: 0010-9400-0022
Ethernet source MAC address mask: ffff-ffff-ffff
Ethernet type: 0x0800
IP protocol: 17
IPv4 source address: 192.85.1.2, mask: 255.255.255.255
IPv4 destination address: 192.0.0.1, mask: 255.255.255.255
UDP source port: 1024, mask: 0xffff
UDP destination port: 1024, mask: 0xffff
Instruction information:
Set meter: 1
Write actions:
Output interface: WGE3/0/48
配置限制和指导
流表基于match项来区分,删除时可以不需要instruction项。
# 在控制器上删除flow-table表1。
[root@openflowvm:~/controller1]# ./ovs-appctl send_flow_str 'command(delete),tab
le_id(1),priority(0),match(eth_type(0x0800),ip_proto(0x11),eth_src(00:10:94:00:0
0:22,ff:ff:ff:ff:ff:ff:ff:ff),eth_dst(00:10:94:00:00:44,ff:ff:ff:ff:ff:ff:ff:ff)
,ipv4_src(192.85.1.2,255.255.255.255),ipv4_dst(192.0.0.1,255.255.255.255),udp_sr
c(1024,65535),udp_dst(1024,65535)),instruction(meter(1),write_actions(output(368
)))'
02:29:59|tcp:172.16.144.135:33612: sent (Success): OFPT_FLOW_MOD (xid:57, len:16
8)
02:29:59|OFPT_FLOW_MOD (xid:57)
# Flow_Mod (48)
|- cookie = 0x0000000000000000
|- cookie_mask = 0x0000000000000000
|- table_id = 1
|- command = delete
|- idle_timeout = 0
|- hard_timeout = 0
|- priority = 0
|- buffer_id = no_buffer
|- out_port = any
|- out_group = any
|- flags = 0
|- match
|- eth_type,0x0800
|- ip_proto,17
|- eth_src,00:10:94:00:00:22[ff:ff:ff:ff:ff:ff]
|- eth_dst,00:10:94:00:00:44[ff:ff:ff:ff:ff:ff]
|- ipv4_src,192.85.1.2[255.255.255.255]
|- ipv4_dst,192.0.0.1[255.255.255.255]
|- udp_src,1024[65535]
|- udp_dst,1024[65535]
|- instructions
|- meter, 1
|- write_actions
|- output,368 [max_len = 128]
仅F6619及以上版本支持MC-NAT功能。如需升级设备版本,版本升级方法请参考版本说明书。
MC-NAT不支持在三台及三台以上设备组成的IRF设备上使用。
配置OpenFlow实例为全局类型(global)后,当端口有二层转发业务需求时,需要通过default table-miss permit命令配置Table Miss流表项的缺省动作为正常转发。
对于设备侧配置,本文仅介绍MC-NAT相关的OpenFlow基本配置,更多OpenFlow配置介绍,请参考《H3C S6805 & S6825 & S6850 & S9850系列以太网交换机 配置指导-Release 66xx》或《H3C S6805 & S6825 & S6850 & S9850系列以太网交换机 配置指导-Release 67xx》手册“OpenFlow配置指导”。
目前支持的报文编辑类型(smac、dmac不受限制,可以和下面6种随意组合编辑)
· 0:不编辑
· 1:dip
· 2:sip
· 3:sip+dip
· 4:dip+dport
· 5:sip+sport
· 6:sip+sport+dip+dport
如图2-2所示,交换机SwitchA从Internet接收到来自视频源端Source 1的流量。现要求通过SeerEngine-DC控制器下发Openflow流表和Group Table来实现:
· 将从VLAN 4081收到的Source 1发送的公网报文地址转换成私网地址,并按不同主机IP修改报文的目的IP、目的MAC和目的UDP端口;
· 将转换后的报文分别发送给私网主机Host A和Host B。
图2-2 MC-NAT基本功能配置举例组网图
设备名 |
MAC |
IP |
UDP |
Source 1 |
00:02:fc:00:22:2b |
10.110.5.100 |
6457 |
Host A |
00:e0:4c:68:0e:d4 |
192.168.4.2 |
4488 |
Host B |
00:50:56:c0:00:08 |
192.168.5.2 |
2356 |
· 为了使Openflow实例与控制器建立连接,需要配置交换机与控制器之间路由可达,本例中以网管口作为与控制器通信的接口。
· 为了使组播流量能让终端接收到,需要通过控制器下发Group Table,匹配从Source1收到的报文,并修改报文的VLAN ID、目的IP、目的MAC和目的UDP端口,从WGE1/0/4和WGE1/0/5端口发出。
# 创建VLAN,并将对应的以太网接口加入VLAN。
<SwitchA> system-view
[SwitchA] vlan 4 5 4081
[SwitchA] interface twenty-fivegige 1/0/1
[SwitchA-Twenty-FiveGigE1/0/1] port link-type trunk
[SwitchA-Twenty-FiveGigE1/0/1] undo port trunk permit vlan 1
[SwitchA-Twenty-FiveGigE1/0/1] port trunk permit vlan 4081
[SwitchA-Twenty-FiveGigE1/0/1] quit
[SwitchA] interface twenty-fivegige 1/0/4
[SwitchA-Twenty-FiveGigE1/0/4] port link-type trunk
[SwitchA-Twenty-FiveGigE1/0/4] undo port trunk permit vlan 1
[SwitchA-Twenty-FiveGigE1/0/4] port trunk permit vlan 4
[SwitchA-Twenty-FiveGigE1/0/4] quit
[SwitchA] interface twenty-fivegige 1/0/5
[SwitchA-Twenty-FiveGigE1/0/5] port link-type trunk
[SwitchA-Twenty-FiveGigE1/0/5] undo port trunk permit vlan 1
[SwitchA-Twenty-FiveGigE1/0/5] port trunk permit vlan 5
[SwitchA-Twenty-FiveGigE1/0/5] quit
# 配置M-GigabitEthernet 0/0/0接口地址用户和控制器建立连接。
[SwitchA] interface M-GigabitEthernet 0/0/0
[SwitchA-M-GigabitEthernet0/0/0] ip address 172.16.147.136 255.255.0.0
[SwitchA-M-GigabitEthernet0/0/0] quit
# 创建OpenFlow全局实例。
[SwitchA] openflow instance 1
[SwitchA-of-inst-1] classification global
# 配置控制器0的IP地址并激活实例。
[SwitchA-of-inst-1] controller 0 address ip 172.16.147.101
[SwitchA-of-inst-1] active instance
[SwitchA-of-inst-1] quit
# 在控制器上创建组表group1,指定出端口1为WGE1/0/4,修改VLANID为4、目的IP为192.168.4.2、目的MAC为00:e0:4c:68:0e:d4、目的UDP端口为4488;指定出端口2为WGE1/0/5,修改VLANID为5、目的IP为192.168.5.2、目的MAC为00:50:56:c0:00:08、目的UDP端口为2356。
[root@openflowvm:~/controller0]# ./ovs-appctl send_group_str 'command(add),type(
all),group_id(1),bucket(actions(output(742),set_field(vlan_vid(4+1)),set_field(eth_dst(00:e0:4c:68:0e:d4)),set_field(ipv4_dst(192.168.4.2)),set_field(udp_dst(4488)))),bucket(actions(output(743),set_field(vlan_vid(5+1)),set_field(eth_dst(00:50:56:c0:00:08)),set_field(ipv4_dst(192.168.5.2)),set_field(udp_dst(2356))))'
22:46:56|tcp:172.16.147.136:4425: sent (Success): OFPT_GROUP_MOD (xid:31, len:16
0)
22:46:56|OFPT_GROUP_MOD (xid:31)
# Group_Mod
|- command = add
|- type = all
|- group_id = 1
|- bucket
|- weight = 0
|- watch_port = any
|- watch_group = any
|- actions
|- output,742 [max_len = 128]
|- set_field,vlan_vid,4+1
|- set_field,eth_dst,00:e0:4c:68:0e:d4
|- set_field,ipv4_dst,192.168.4.2
|- set_field,udp_dst,4488
|- bucket
|- weight = 0
|- watch_port = any
|- watch_group = any
|- actions
|- output,743 [max_len = 128]
|- set_field,vlan_vid,5+1
|- set_field,eth_dst,00:50:56:c0:00:08
|- set_field,ipv4_dst,192.168.5.2
|- set_field,udp_dst,2356
[root@openflowvm:~/controller0]#
# 将匹配入端口为WGE1/0/1、VLANID为4081、源IP为10.110.5.100、源MAC为00:02:fc:00:22:2b、源UDP端口为6457的报文,执行组表group1的动作。
[root@openflowvm:~/controller0]# ./ovs-appctl send_flow_str 'command(add),table_
id(0),priority(1),match(in_port(739),vlan_vid(4081+1),eth_src(00:02:fc:00:22:2b),eth_type(0x800),ipv4_src(10.110.5.100),ip_proto(17),udp_src(6457)),instruction(write_actions(group(1)))'
23:08:24|tcp:172.16.147.136:4425: sent (Success): OFPT_FLOW_MOD (xid:35, len:120
)
23:08:24|OFPT_FLOW_MOD (xid:35)
# Flow_Mod (48)
|- cookie = 0x0000000000000000
|- cookie_mask = 0x0000000000000000
|- table_id = 0
|- command = add
|- idle_timeout = 0
|- hard_timeout = 0
|- priority = 1
|- buffer_id = no_buffer
|- out_port = any
|- out_group = any
|- flags = 0
|- match
|- in_port,739
|- vlan_vid,4081+1
|- eth_src,00:02:fc:00:22:2b
|- eth_type,0x0800
|- ipv4_src,10.110.5.100
|- ip_proto,17
|- udp_src,6457
|- instructions
|- write_actions
|- group,1
[root@openflowvm:~/controller0]#
在Switch A上进行验证。
# 查看Switch A上Group流表的信息。
[SwitchA] display openflow instance 1 group
Instance 1 group table information:
Group count: 1
Group entry 1:
Type: All, byte count: 0, packet count: 0
Bucket 1 information:
Action count 2, watch port: any, watch group: any
Byte count 0, packet count 0
Set field:
Ethernet destination MAC address: 00e0-4c68-0ed4
VLAN ID: 4
IPv4 destination address: 192.168.4.2
UDP destination port: 4488
Output interface: WGE1/0/4
Bucket 2 information:
Action count 2, watch port: any, watch group: any
Byte count 0, packet count 0
Set field:
Ethernet destination MAC address: 0050-56c0-0008
VLAN ID: 5
IPv4 destination address: 192.168.5.2
UDP destination port: 2356
Output interface: WGE1/0/5
Referenced information:
Count: 1
Flow table: 0
Flow entry: 1
以上信息表明,Group1指定出端口1为WGE1/0/4,指定出端口2为WGE1/0/5,将报文的相关字段修改为与其端口对应的字段。
[SwitchA] display openflow instance 1 flow
Instance 1 flow table information:
Table 0 information:
Table type: Extensibility, flow entry count: 1, total flow entry count: 2
MissRule (default) flow entry information:
cookie: 0x0, priority: 0, hard time: 0, idle time: 0, flags: reset_counts,
byte count: 383689, packet count: 3330
Create time:19:07:20 01/06/2019, Last modified time:19:07:20 01/06/2019
Match information: any
Instruction information:
Write actions:
Drop
Flow entry 1 information:
cookie: 0x0, priority: 1, hard time: 0, idle time: 0, flags: none,
byte count: 0, packet count: 0
Create time:19:30:33 01/06/2019, Last modified time:19:30:33 01/06/2019
Match information:
Input interface: WGE1/0/1
Ethernet source MAC address: 0002-fc00-222b
Ethernet source MAC address mask: ffff-ffff-ffff
Ethernet type: 0x0800
VLAN ID: 4081, mask: 0xfff
IP protocol: 17
IPv4 source address: 10.110.5.100, mask: 255.255.255.255
UDP source port: 6457, mask: 0xffff
Instruction information:
Write actions:
Group: 1
以上信息表明匹配入端口为WGE1/0/1、VLANID为4081、源IP为10.110.5.100、源MAC为0002-fc00-222b 和源UDP端口为6457的报文执行了group1的动作。
· Switch A:
#
interface M-GigabitEthernet0/0/0
ip address 172.16.147.136 255.255.0.0
#
openflow instance 1
classification global
controller 0 address ip 172.16.147.101
active instance
#
interface Twenty-FiveGigE1/0/1
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 4081
#
interface Twenty-FiveGigE1/0/4
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 4
#
interface Twenty-FiveGigE1/0/5
port link-mode bridge
port link-type trunk
undo port trunk permit vlan 1
port trunk permit vlan 5
#
PTP(Precision Time Protocol,精确时间协议)是一种时间同步的协议,可用于设备之间的高精度时间同步和频率同步。PTP的时间同步精度为亚微秒级。
PTP协议标准即PTP profile。不同类型的PTP协议标准可实现不同的PTP功能。PTP协议标准包括以下类型:
· IEEE 1588 version 2:简称1588v2。IEEE 1588规范了网络中用于高精度时钟同步的原理和报文交互处理规范,最初是应用于工业自动化,现主要用于桥接局域网。IEEE 1588对网络环境没有做出强制要求,适用性比较广,可以根据不同的应用环境对该协议标准进行定制,增强或者裁剪特定的功能。最新版本为V2版本,即1588v2。
· IEEE 802.1AS:简称802.1AS。802.1AS是基于IEEE 1588产生的一个协议标准,对IEEE 1588在桥接局域网中的实现进行了细化。802.1AS支持的BMC(Best Master Clock,最佳主时钟)算法和IEEE 1588略有不同,参考了MSTP(Multiple Spanning Tree Protocol,多生成树协议)的实现方式。802.1AS支持的物理介质类型只有点对点全双工以太网链路、IEEE 802.11链路和IEEE 802.3 EPON链路。
· SMPTE ST 2059-2:简称ST2059-2。ST2059-2是基于IEEE 1588产生的一个协议标准,本协议自定义了一些参数,参数的默认值,参数的允许范围的描述。ST2059-2是专门用于专业广播环境中音频、视频设备的时间同步的精准时间协议,其时钟同步精度达到纳秒量级,满足高码率传输情况下时间和频率同步的需求。
· AES67-2015:AES67-2015是基于IEEE 1588产生的一个协议标准,本协议自定义了一些参数,参数的默认值,参数的允许范围的描述。AES67-2015是专门用于专业广播、音乐制作和影视后期制作设备的时间同步的精准时间协议。
本文重点介绍SMPTE ST 2059-2协议标准。
应用了PTP协议的网络称为PTP域。PTP域内有且只有一个时钟源,域内的所有设备都与该时钟保持同步。
当一个网络中存在多种类型的业务流量,这些业务流量对时钟同步的要求不同时,需要将这个网络划分为多个PTP域,同一时钟信号流经的设备加入同一PTP域。一个PTP实例相当于一个PTP参数配置模板,PTP实例下可以配置PTP协议标准、节点类型等参数,不同的实例下可以配置不同的参数。一个PTP实例和一个PTP域绑定,实例之间相互隔离,通过多域多实例来适应不同类型流量对时钟同步的要求。
当单台设备上部署了多个PTP实例,实例不同,其时钟源和时钟信息可能不同。对于每个实例而言,当前自己跟踪的时钟源即为本域最优时钟源,但是对于单台设备而言,需要从多个实例中确定一个最优的实例,以最优实例所跟踪的时钟源来同步本设备的系统时间,这个最优实例所关联的域称为PTP最优域。
PTP域中的节点称为时钟节点,而时钟节点上运行了PTP协议的接口则称为PTP接口。PTP协议定义了以下三种类型的基本时钟节点:
· OC(Ordinary Clock,普通时钟):该时钟节点在同一个PTP域内只有一个PTP接口参与时间同步,并通过该接口从上游时钟节点同步时间。此外,当时钟节点作为时钟源时,可以只通过一个PTP接口向下游时钟节点发布时间。
· BC(Boundary Clock,边界时钟):该时钟节点在同一个PTP域内拥有多个PTP接口参与时间同步,它通过其中一个接口从上游时钟节点同步时间,并通过其余接口向下游时钟节点发布时间。此外,当时钟节点作为时钟源时,可以通过多个PTP接口向下游时钟节点发布时间,如图3-1中的BC 1。
· TC(Transparent Clock,透明时钟):TC有多个PTP接口,但它只在这些接口间转发PTP协议报文并对其进行转发延时校正,而不会通过任何一个接口同步时间。与BC/OC相比,BC/OC需要与其他时钟节点保持时间同步,而TC则不与其他时钟节点保持时间同步。TC包括以下两种类型:
¡ E2ETC(End-to-End Transparent Clock,端到端透明时钟):直接转发网络中所有P2P(Peer-to-Peer,对等)类型的PTP协议报文,参与计算整条链路的延时。
¡ P2PTC(Peer-to-Peer Transparent Clock,对等透明时钟):只直接转发Sync报文、Follow_Up报文和Announce报文,而终结其他PTP协议报文,参与计算整条链路上每一段链路的延时。
如图3-1所示,是上述三种基本时钟节点在PTP域中的位置。
图3-1 基本时钟节点示意图
普通时钟和边界时钟比透明时钟维护的状态更多。当配置PTP多域时,由于硬件资源的限制,可能导致协议同步性能降低、波动,或协议失效。所以在规划PTP和选择节点时,建议在多域设备上配置多透明时钟加一个非透明时钟,利用透明时钟对报文少计算的特性,将多域设备实例间影响降到最低,时间同步性能达到最优,非透明时钟时间同步的性能更高。
主从关系(Master-Slave)是相对而言的,对于相互同步的一对时钟节点来说,存在如下主从关系:
· 主/从节点:发布同步时间的时钟节点称为主节点(Master Node),而接收同步时间的时钟节点则称为从节点(Slave Node)。
· 主/从时钟:主节点上的时钟称为主时钟(Master Clock),而从节点上的时钟则称为从时钟(Slave Clock)。
· 主/从接口:时钟节点上发布同步时间的PTP接口称为主接口(Master Port),而接收同步时间的PTP接口则称为从接口(Slave Port),主接口和从接口均可存在于BC或OC上。
此外,还存在一种既不发布也不接收同步时间的PTP接口,称为被动接口(Passive Port)。
PTP网络中,所有的时钟节点类型(TC除外)通过主从关系联系到一起。各时钟节点之间的主从关系可通过BMC算法自动产生,也可手工指定。
时钟节点支持以下两种时钟源:
· 本地时钟源:由时钟监控模块内部晶体震荡器产生的38.88 MHz时钟信号。
· 外接时钟源(ToD时钟源):由外接时钟设备产生,通过主控板上的专用接口(即1PPS/ToD接口)收发,所以也称ToD时钟源。
如图3-1所示,PTP域内所有的时钟节点都按一定层次组织在一起,整个域的参考时间就是最优时钟(Grandmaster Clock,GM),即最高层次的时钟。各时钟节点间通过交互PTP协议报文,并根据根据PTP协议报文中携带的时钟优先级、时间等级、时钟精度等信息,选举出整个PTP域的最优时钟。最优时钟的时间最终将被同步到整个PTP域内,因此也称其为PTP域的时钟源。
时钟节点使用的时钟源是使用设备内部的由时钟监控模块内部晶体震荡器产生的38.88 MHz时钟信号。
最优时钟可以通过手工指定,也可以通过BMC算法动态选举,动态选举的过程如下:
(1) 各时钟节点之间通过交互Announce报文,根据报文中所携带的最优时钟优先级、时间等级、时间精度等信息,最终选出一个节点作为PTP域的最优时钟,与此同时,各节点之间的主从关系以及各节点上的主从接口也确定了下来。通过这个过程,整个PTP域中建立起了一棵无环路、全连通,并以最优时钟为根的生成树。
(2) 此后,主节点会定期发送Announce报文给从节点,如果在一段时间内,从节点没有收到主节点发来的Announce报文,便认为该主节点失效,于是重新进行最优时钟的选择。
PTP域中的各时钟节点在通过BMC协议动态选举最优时钟时,会依据Announce报文中所携带的时钟的第一优先级、时间等级、时间精度和第二优先级的次序依次进行比较,获胜者将成为最优时钟。比较规则如下:
(3) 第一优先级高者获胜;
(4) 如果第一优先级相同,则时间等级高者获胜;
(5) 如果时间等级也相同,则时间精度高者获胜;
(6) 如果时间精度还相同,则第二优先级高者获胜;
(7) 如果第二优先级依然相同,则接口标识(由时钟编号和接口号共同构成)小者获胜。
选出最优时钟并确认主从关系之后,PTP域中的节点将会进行时钟同步。
如果当前设备仅有一个实例,则当前实例最优,否则,遍历本设备所有实例,按照最优域选举算法进行数据集比较,择出最优实例:
(1) 实例激活者优先;
(2) 如果两个实例均激活,则时钟节点为非透明时钟者获胜;
(3) 如果时间节点类型相同,则第一优先级高者获胜;
(4) 如果第一优先级相同,则时间等级高者获胜;
(5) 如果时间等级也相同,则时间精度高者获胜;
(6) 如果时间精度还相同,则最优时钟的偏差度量小者获胜;
(7) 如果最优时钟的偏差度量还相同,则第二优先级高者获胜;
(8) 如果第二优先级依然相同,则PTP域的编号小者获胜。
配置强制状态后,优先级最低。
PTP同步的基本原理如下:确认了时钟之间的主从关系之后,主、从时钟之间交互PTP协议报文并记录报文的收发时间,通过计算PTP协议报文往返的时间差来计算主、从时钟之间的往返总延时。如果两个方向的传输延时相同,则往返总延时的一半就是单向延时。从时钟根据这个单向延时、主时钟上Sync报文的发送时间和从时钟上接收Sync报文的时间差计算时间偏差,从时钟按照该时间偏差来调整本地时间,就可以实现从时钟与主时钟的同步。
PTP协议定义了两种传输延时测量机制:请求应答(Request_Response)机制和端延时(Peer Delay)机制,且这两种机制都以网络对称为前提。
请求应答机制下主时钟和从时钟根据收发的PTP协议报文计算主、从时钟之间的平均路径延时。如果主时钟和从时钟中间有TC,TC不计算平均路径延时,只传递收到的PTP协议报文,并将Sync报文在本TC上的驻留时间传递给从时钟。
根据是否需要发送Follow_Up报文,请求应答机制又分为双步模式和单步模式两种:
· 在双步模式下,如图3-2所示,Sync报文的发送时间戳t1由Follow_Up报文携带。
· 在单步模式下,Sync报文的发送时间戳t1由Sync报文携带,不发送Follow_Up报文。(本系列产品暂不支持单步模式)
图3-2以双步模式为例来说明请求应答机制的实现过程:
(1) 主时钟向从时钟发送Sync报文,并记录发送时间t1;从时钟收到该报文后,记录接收时间t2。
(2) 主时钟发送Sync报文之后,紧接着发送一个携带有t1的Follow_Up报文。
(3) 从时钟向主时钟发送Delay_Req报文,用于发起对反向传输的延时的计算,并记录发送时间t3;主时钟收到该报文后,记录接收时间t4。
(4) 主时钟收到Delay_Req报文之后,回复一个携带有t4的Delay_Resp报文。
此时,从时钟便拥有了t1~t4这四个时间戳,由此可计算出:
· 主、从时钟间的往返总延时 = (t2 – t1) + (t4 – t3)
· 主、从时钟间的单向延时 = [(t2 – t1) + (t4 – t3)] / 2
· 从时钟相对于主时钟的时钟偏差Offset = (t2 – t1) – [(t2 – t1) + (t4 – t3)] / 2 = [(t2 – t1) – (t4 – t3) ] / 2
端延时机制用于计算两个时钟节点之间的平均路径延时,而且这两个时钟节点会互相发送Pdelay报文,各自计算路径延时。如果主时钟和从时钟中间有TC,TC会将主、从时钟之间的同步路径划分为多段链路,TC会参与计算每段链路的路径延时。每段链路的路径延时累计在同步报文中向下游传递,同时传递的信息还包括Sync报文在TC上的驻留时间。从节点根据累计的链路延时和TC驻留时间,计算主从节点的平均路径延时。
端延时机制也分为双步模式和单步模式两种:
· 在双步模式下,如图3-3所示,Pdelay报文包括Pdelay_Req、Pdelay_Resp和Pdelay_Resp_Follow_UpPdelay报文,Pdelay_Resp报文携带t2,Pdelay_Resp_Follow_Up报文携带t3。
· 在单步模式下,Sync报文的发送时间戳t1由Sync报文自己携带,不发送Follow_Up报文;而t5和t4的差值由Pdelay_Resp报文携带,不发送Pdelay_Resp_Follow_Up报文。(本系列产品暂不支持单步模式)
使用端延时机制的两个时钟节点(可以为BC、TC或OC)会互相发送Pdelay报文,并分别计算这两个时钟节点之间链路的单向时延,两个节点上的报文交互流程和计算原理完全相同。图3-3中只画了Clock node B作为端延时测量发起方的情况来示意端延时机制实现过程。双步端延时机制实现过程如下:
(1) Clock node B向Clock node A发送Pdelay_Req报文,用于发起反向传输延时的计算,并记录发送时间t1;Clock node A收到该报文后,记录接收时间t2。
(2) Clock node A收到Pdelay_Req报文之后,回复一个携带有t2的Pdelay_Resp报文,并记录发送时间t3;Clock node B收到该报文后,记录接收时间t4。
(3) Clock node A回复Pdelay_Resp报文之后,紧接着发送一个携带有t3的Pdelay_Resp_Follow_Up报文。
此时,Clock node B便拥有了t1~t4这四个时间戳,由此可计算出:
· Clock node A和Clock node B间链路的往返总延时 = (t2 – t1) + (t4 – t3)
· 由于网络是对称的,Clock node A和Clock node B间链路的单向延时 = [(t2 – t1) + (t4 – t3)] / 2 = [(t4 – t1) -(t3 – t2)] / 2
· 从时钟相对于主时钟的时钟偏差Offset = 从时钟收到Sync报文的时间 – 主时钟发送Sync报文的时间 – 每段链路单向时延的累计时间 – 链路上所有TC驻留时间和。
SMPTE ST 2059-2:SMPTE Profile for Use of IEEE-1588 Precision Time Protocol in Prefessional Broadcast Applications.
本系列交换机不支持ToD接口,不支持外接时钟源。
使用PTP同步时间的组网中,建议接入PTP时钟源,不要使用NTP或系统时间作为时钟源,否则由于NTP和系统时间的精度较低,可能会造成PTP时间跳变,导致PTP上报失锁。
使用PTP同步时间的组网中,建议将连接时钟源设备的端口和其他业务端口划分到不同的VLAN,否则,时钟源设备可能会将接收的报文反弹回去,导致PTP同步失败。
(1) 配置通过PTP同步系统时间
(2) 配置PTP协议标准
配置PTP协议标准为SMPTE ST 2059-2。
(3) 配置时钟节点
¡ 配置时钟节点类型
¡ (可选)配置OC的工作模式为Slave-only
(4) 配置PTP域
(5) 开启PTP功能。
全局和接口的PTP功能均处于开启状态时,接口的PTP功能才能生效。
(6) 配置PTP接口
¡ (可选)配置PTP接口角色
(7) (可选)调整PTP同步报文的发送和接收
(8) 配置PTP报文参数
(9) (可选)调整及校正时钟同步
(10) (可选)配置时钟优先级参数
(11) (可选)配置PTP日志功能
(1) 进入系统视图。
system-view
(2) 配置通过PTP协议获取系统时间。
clock protocol ptp
缺省情况下,通过NTP协议获取系统时间。
在同一台设备上,编号是PTP实例的唯一标识。为便于记忆和管理PTP实例,用户在创建PTP实例的时候可以同时为实例指定名称。
不同PTP实例的名称不能相同。
当多次执行本命令,指定的编号相同名称不同时,最新配置生效。
缺省实例0不可创建也不可删除,在系统视图下配置的PTP参数,均仅对缺省实例0生效。PTP实例视图下的配置对该实例生效。
(1) 进入系统视图。
system-view
(2) 创建PTP实例。
ptp instance ptp-instance-id [ name ptp-instance-name ]
缺省情况下,存在缺省实例,缺省实例的编号为0,名称为default-instance。
配置PTP功能时必须首先配置设备遵循的协议类型,否则其他PTP配置不允许进行。
改变设备遵循的PTP协议标准,将会清空用户在之前PTP协议标准下的所有PTP配置。
(1) 进入系统视图。
system-view
(2) (可选)进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置设备采用的PTP协议标准。
ptp profile st2059-2
缺省情况下,未配置设备采用的PTP协议标准,PTP协议不运行。
· 每台设备只能配置为OC、BC、E2ETC、P2PTC这四种时钟节点类型中的一种。
· 必须先配置PTP协议标准后,才允许配置时钟节点类型。
· 当协议标准为SMPTE ST 2059-2时,不允许将时钟节点类型设置为E2ETC+OC或P2PTC+OC。
· 改变设备的时钟节点类型,会清空除协议标准类型外的所有PTP配置。
· 在高清音视频数据传输场景中:设备可以配置为BC/TC模式,推荐使用BC模式;IP化终端作为OC。
(1) 进入系统视图。
system-view
(2) (可选)进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置设备的时钟节点类型。
ptp mode { bc | e2etc | oc | p2ptc }
缺省情况下,不存在时钟节点类型。
通常,OC既可作为主时钟发布同步时间,也可作为从时钟接收同步时间。但当OC的工作模式为Slave-only时,OC将只能作为从时钟接收同步时间。
当OC的工作模式为Slave-only时,可以使用ptp force-state命令强制修改PTP接口角色为Master或Passive。
只有当设备的时钟节点类型为OC时才允许进行本配置。
(1) 进入系统视图。
system-view
(2) (可选)进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置OC的工作模式为Slave-only。
ptp slave-only
缺省情况下,OC的工作模式不是Slave-only。
配置设备所属的PTP域。在同一个PTP域中,各设备之间遵循着共同的准则,保证设备之间通信稳定地进行。不同的域中的设备不能直接进行PTP交互。
(1) 进入系统视图。
system-view
(2) (可选)进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
不同实例下配置的PTP域不能相同。
(3) 配置设备所属的PTP域。
ptp domain value
缺省情况下,不存在PTP域。
只有全局PTP功能和接口下的PTP功能均处于开启状态,接口的PTP功能才能运行。
(1) 进入系统视图。
system-view
(2) 配置全局PTP功能开启。
ptp global enable
缺省情况下,全局PTP功能处于开启状态。
在接口上开启了PTP功能之后,该接口就成为了PTP接口。
当设备时钟节点类型为OC时,只允许在一个接口上开启PTP功能。
当需要在三层以太网接口上开启PTP功能,且该接口绑定了VPN,采用IPv4 UDP封装格式组播方式传输PTP报文时,需要配置ptp source ip-address vpn-instance vpn-instance-name命令,其中VPN为接口绑定的VPN,否则该三层以太网接口上配置的PTP功能不生效。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 开启接口的PTP功能。
ptp enable
缺省情况下,接口的PTP功能处于关闭状态。
PTP接口分为:Master、Passive和Slave三种角色。
当OC的工作模式为Slave-only时,可以使用本功能强制修改PTP接口角色为Master或Passive。
建议使用BMC协议自动协商PTP接口角色。如果使用命令强制修改PTP接口的角色,则整个PTP域内的所有PTP接口均需手工使用ptp force-state命令配置角色,否则,会导致PTP域内未配置角色的接口PTP功能不生效,域内时钟不能同步。
一台设备上最多只允许配置一个从接口。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 修改PTP接口角色。
ptp force-state { master | passive | slave }
缺省情况下,PTP接口的角色由BMC协议自动生成。
(5) 退回系统视图。
quit
(6) (可选)进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(7) 激活PTP接口角色修改。
ptp active force-state
缺省情况下,未配置强制状态生效。
时间戳的携带模式分为以下两种:
· 单步模式:即请求应答机制和端延时机制下的Sync报文,以及端延时机制下的Pdelay_Resp报文,都携带本报文被发送时刻的时间戳。(本系列产品暂不支持单步模式)
· 双步模式:即请求应答机制和端延时机制下的Sync报文,以及端延时机制下的Pdelay_Resp报文,都不携带本报文被发送时刻的时间戳,而是由后续的其他报文来携带。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置时间戳的携带模式。
ptp clock-step two-step
缺省情况下,时间戳的携带模式为双步模式。
延时测量机制分为请求应答机制和端延时机制两种,处于同一链路上的接口必须具备相同的延时测量机制,否则无法互通。E2ETC的延时测量机制为请求应答机制,P2PTC的延时测量机制为端延时机制,且不允许改变其延时测量机制。
时钟节点类型为BC或OC时,才允许配置本功能。
时钟节点类型为E2ETC、P2PTC时,不允许配置本功能。E2ETC时钟节点支持请求应答机制和端延时机制,P2PTC仅支持端延时机制。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置BC或OC的延时测量机制。
ptp delay-mechanism { e2e | p2p }
缺省延时测量机制为请求应答机制。
主节点会周期性地发送Announce报文给从节点,如果从节点在报文的超时接收时间内未收到主节点发来的Announce报文,便认为该主节点失效。
超时接收时间=超时接收倍数×从节点配置的报文发送周期。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置Announce报文发送的时间间隔。
ptp announce-interval interval
Announce报文发送的时间间隔为2-2秒。
(5) 配置Announce报文的接收超时倍数。
ptp announce-timeout multiple-value
缺省情况下,Announce报文的接收超时倍数为3。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置Pdelay_Req报文发送的时间间隔。
ptp pdelay-req-interval interval
缺省情况下,Pdelay_Req报文发送的时间间隔为20秒。
当PTP协议标准为SMPTE ST 2059-2时,interval推荐的配置范围为(ptp syn-interval的配置值)~(ptp syn-interval的配置值+5)。
Sync报文发送的时间间隔决定了主时钟向从时钟发送Sync报文的时间间隔。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置Sync报文发送的时间间隔。
ptp syn-interval interval
当PTP协议标准为SMPTE ST 2059-2时,Sync报文发送的缺省时间间隔为2-3秒。
使用本功能可以调整PTP接口上Delay_Req报文的最小发送时间间隔,当收到Sync报文或者Follow_Up报文来触发Delay_Req报文时,发送端需要经过该发送间隔才能发送Delay_Req报文。
对于时钟节点间采用组播通信方式的网络,只有主时钟上配置的本功能生效,在从时钟上配置的不生效。主时钟通过PTP报文将该参数的值传递给从时钟,从而控制从时钟发送Delay_Req报文的时间间隔。在从时钟上使用display ptp interface命令可以查看本命令的实际生效值。
对于时钟节点间采用单播播通信方式的网络,本功能在从时钟本地配置生效,主时钟无法干预。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置Delay_Req报文的最小发送时间间隔。
ptp min-delayreq-interval interval
缺省情况下,Delay_Req报文的最小发送时间间隔为20秒。
当PTP协议标准为SMPTE ST 2059-2时,interval推荐的配置范围为(ptp syn-interval的配置值)~(ptp syn-interval的配置值+5)。
当PTP报文封装格式为UDP,如果时钟节点间采用组播通信方式,即实现点到多点的传输时,需要配置组播PTP报文的源IP地址。
如果同时配置了采用UDP封装格式的组播PTP报文的源IP地址和单播PTP报文的目的IP地址,则优先选择以单播形式发送报文。
(1) 进入系统视图。
system-view
(2) (可选)将接口和PTP实例绑定并进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置采用UDP封装格式的组播PTP报文的源IP地址。
ptp source ip-address [ vpn-instance vpn-instance-name ]
缺省情况下,未配置采用UDP封装格式的组播PTP报文的源IP地址,此时无法以组播形式发送报文。
当PTP报文封装格式为UDP,如果时钟节点间采用单播通信方式,即实现点到点的传输时,需要配置单播PTP报文的目的IP地址为对端PTP接口的IP地址。
如果同时配置了采用UDP封装格式的组播PTP报文的源IP地址和单播PTP报文的目的IP地址,则优先选择以单播形式发送报文。
进行本配置前,要求在当前接口上配置IP地址,并确保当前接口到对端PTP接口的路由可达。
(1) 进入系统视图。
system-view
(2) 进入三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置UDP封装格式的单播PTP报文的目的IP地址。
ptp unicast-destination ip-address
缺省情况下,未配置采用UDP封装格式的单播PTP报文的目的IP地址,此时无法以单播形式发送报文。
DSCP优先级用来体现报文自身的优先等级,决定报文传输的优先程度。通过本配置可以指定PTP报文封装格式为UDP时的DSCP优先级。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置PTP报文封装格式为UDP时的DSCP优先级。
ptp dscp dscp
缺省情况下,PTP报文封装格式为IPv4 UDP时的DSCP优先级为56。
通过本配置可以指定PTP报文携带的VLAN Tag中的VLAN ID及对应的802.1p优先级。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置PTP报文的VLAN Tag。
ptp vlan vlan-id [ dot1p dot1p-value ]
缺省情况下,PTP报文不带VLAN Tag。
PTP协议进行时间同步计算时认为网络延时是对称的,即报文的发送和接收延迟相同,并以此来进行时间同步计算。但实际中的网络延时可能是不对称的,因此,如果知道了报文发送和接收的延迟之差,就可以通过本配置进行非对称延迟的校正,从而更精确地进行时间同步。
(1) 进入系统视图。
system-view
(2) 进入二层以太网接口视图/三层以太网接口视图。
interface interface-type interface-number
(3) (可选)将接口和PTP实例绑定并进入接口PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(4) 配置非对称延迟校正时间。
ptp asymmetry-correction { minus | plus } value
缺省情况下,接口的非对称延迟校正时间为0纳秒,即不进行校正。
UTC(Coordinated Universal Time,国际协调时间),即为格林威治天文台标准太阳时间,也即设备上的显示时间。TAI(International Atomic Time)时间为国际原子时间,二者之间会产生一定的偏差。通过本配置,可以校正UTC和TAI之间的偏差。
请在设备上配置本功能,以便当设备的本地时钟当选为PTP域的最优时钟时,配置的偏移量生效,PTP域内的其他节点能够同步到正确的时间。
(1) 进入系统视图。
system-view
(2) (可选)将接口和PTP实例绑定并进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置UTC相对于TAI的累计偏移量。
ptp utc offset utc-offset
缺省情况下,UTC相对于TAI的累计偏移量为0秒。
校正日期是指在指定日期的23:59对当前设备的UTC时间进行校正。leap59-date使其比TAI慢一秒;leap61-date使其比TAI快一秒。
leap59和leap61的配置不能够同时存在,多次执行这两个参数时,最后一次执行的命令生效。
只有在主时钟节点上配置,且主时钟节点的本地时钟为最优时钟时,配置的UTC校正日期才会生效。
(1) 进入系统视图。
system-view
(2) (可选)将接口和PTP实例绑定并进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置UTC的校正日期。
ptp utc { leap59-date | leap61-date } date
缺省情况下,未配置UTC的校正日期。
时钟优先级用于最优时钟的选举,数值越小优先级越高。
(1) 进入系统视图。
system-view
(2) (可选)进入PTP实例视图。
ptp instance ptp-instance-id
如需配置缺省实例0的参数,请跳过该步骤。
(3) 配置时钟参与BMC算法的优先级参数。
ptp priority clock-source local { priority1 priority1 | priority2 priority2 }
当协议标准为SMPTE ST 2059-2时,时钟第一、二优先级的缺省值均为128。
配置本功能后:
· 当PTP时钟源的时间偏移大于PTP时间失锁阈值时,PTP时间为失锁状态,触发时钟失锁日志。
· 当PTP时钟源的时间偏移由大于PTP时间锁定阈值恢复到小于等于锁定阈值时,PTP时间恢复为锁定状态,触发时钟锁定日志。
(1) 进入系统视图。
system-view
(2) 配置PTP时间锁定阈值和失锁阈值。
ptp alarm-threshold { time-lock lock-value | time-unlock unlock-value } *
缺省情况下,PTP时间锁定阈值为200ns,失锁阈值为300ns。
在完成上述配置后,在任意视图下执行display命令可以显示配置后PTP的运行情况,通过查看显示信息验证配置的效果。
在用户视图下执行reset命令可以清除PTP的统计信息。
表3-1 PTP显示和维护
操作 |
命令 |
显示设备的PTP时钟信息 |
display ptp clock [ all | instance ptp-instance-id ] |
显示从接口时间校正的历史信息 |
display ptp corrections [ all | instance ptp-instance-id ] |
显示外部主节点的信息 |
display ptp foreign-masters-record [ interface interface-type interface-number ] [ all | instance ptp-instance-id ] |
显示接口的详细PTP运行信息 |
display ptp interface [ interface-type interface-number ] [ all | instance ptp-instance-id ] |
显示所有接口的简要PTP运行信息 |
display ptp interface brief |
显示当前PTP设备主节点信息 |
display ptp parent [ all | instance ptp-instance-id ] |
显示PTP接口角色变化的历史信息 |
display ptp port-history [ interface interface-type interface-number ] |
显示PTP统计信息 |
display ptp statistics [ interface interface-type interface-number ] [ all | instance ptp-instance-id ] |
显示PTP时钟节点时间特性 |
display ptp time-property [ all | instance ptp-instance-id ] |
清除PTP的统计信息 |
reset ptp statistics [ interface interface-type interface-number ] [ all | instance ptp-instance-id ] |
· Device A、Device B和Device C采用SMPTE ST 2059-2协议标准以及组播IPv4 UDP封装格式。
· 在由Device A、Device B和Device C组成的PTP域中,Device A和Device C的时钟节点类型都为OC,Device B的时钟节点类型为BC。所有时钟节点都按照各自默认的最优时钟属性通过BMC协议动态选举最优时钟。
图3-4 PTP配置举例组网图(SMPTE ST 2059-2,IPv4 UDP封装格式+组播通信方式)
SMPTE ST 2059-2协议支持IPv4 UDP封装格式,不支持IEEE 802.3/Ethernet封装格式;支持组播通信方式,也支持单播通信方式。
(1) 配置Device A
# 配置协议标准为SMPTE ST 2059-2。
<DeviceA> system-view
[DeviceA] ptp profile st2059-2
# 配置时钟节点类型为OC。
[DeviceA] ptp mode oc
# 配置PTP域。
[DeviceA] ptp domain 0
# 开启全局PTP功能。
[DeviceA] ptp global enable
# 配置组播IPv4 UDP封装的源IP地址。
[DeviceA] ptp source 10.10.1.1
# 配置设备通过PTP协议获取系统时间。
[DeviceA] clock protocol ptp
# 在接口Twenty-FiveGigE1/0/1上开启PTP功能。
[DeviceA] interface twenty-fivegige 1/0/1
[DeviceA-Twenty-FiveGigE1/0/1] ptp enable
# 在接口Twenty-FiveGigE1/0/1上配置Announce报文发送的时间间隔。
[DeviceA-Twenty-FiveGigE1/0/1] ptp announce-interval 0
# 在接口Twenty-FiveGigE1/0/1上配置Sync报文的发送周期。
[DeviceA-Twenty-FiveGigE1/0/1] ptp syn-interval -1
# 在接口Twenty-FiveGigE1/0/1上配置Delay_Req报文的最小发送周期。
[DeviceA-Twenty-FiveGigE1/0/1] ptp min-delayreq-interval -1
[DeviceA-Twenty-FiveGigE1/0/1] quit
(2) 配置Device B
# 配置协议标准为SMPTE ST 2059-2。
<DeviceB> system-view
[DeviceB] ptp profile st2059-2
# 配置时钟节点类型为BC。
[DeviceB] ptp mode bc
# 配置PTP域。
[DeviceB] ptp domain 0
# 开启全局PTP功能。
[DeviceB] ptp global enable
# 配置组播IPv4 UDP封装的源IP地址。
[DeviceB] ptp source 10.10.2.1
# 配置设备通过PTP协议获取系统时间。
[DeviceB] clock protocol ptp
# 在接口Twenty-FiveGigE1/0/1上开启PTP功能。
[DeviceB] interface twenty-fivegige 1/0/1
[DeviceB-Twenty-FiveGigE1/0/1] ptp enable
# 在接口Twenty-FiveGigE1/0/1上配置Announce报文发送的时间间隔。
[DeviceB-Twenty-FiveGigE1/0/1] ptp announce-interval 0
# 在接口Twenty-FiveGigE1/0/1上配置Sync报文的发送周期。
[DeviceB-Twenty-FiveGigE1/0/1] ptp syn-interval -1
# 在接口Twenty-FiveGigE1/0/1上配置Delay_Req报文的最小发送周期。
[DeviceB-Twenty-FiveGigE1/0/1] ptp min-delayreq-interval -1
[DeviceB-Twenty-FiveGigE1/0/1] quit
# 在接口Twenty-FiveGigE1/0/2上开启PTP功能。
[DeviceB] interface twenty-fivegige 1/0/2
[DeviceB-Twenty-FiveGigE1/0/2] ptp enable
# 在接口Twenty-FiveGigE1/0/2上配置Announce报文发送的时间间隔。
[DeviceA-Twenty-FiveGigE1/0/2] ptp announce-interval 0
# 在接口Twenty-FiveGigE1/0/2上配置Sync报文的发送周期。
[DeviceA-Twenty-FiveGigE1/0/2] ptp syn-interval -1
# 在接口Twenty-FiveGigE1/0/2上配置Delay_Req报文的最小发送周期。
[DeviceA-Twenty-FiveGigE1/0/2] ptp min-delayreq-interval -1
[DeviceB-Twenty-FiveGigE1/0/2] quit
(3) 配置Device C
# 配置协议标准为SMPTE ST 2059-2。
<DeviceC> system-view
[DeviceC] ptp profile st2059-2
# 配置时钟节点类型为OC。
[DeviceC] ptp mode oc
# 配置PTP域。
[DeviceC] ptp domain 0
# 开启全局PTP功能。
[DeviceC] ptp global enable
# 配置组播IPv4 UDP封装的源IP地址。
[DeviceC] ptp source 11.10.10.1
# 配置设备通过PTP协议获取系统时间。
[DeviceC] clock protocol ptp
# 在接口Twenty-FiveGigE1/0/1上开启PTP功能。
[DeviceC] interface twenty-fivegige 1/0/1
[DeviceC-Twenty-FiveGigE1/0/1] ptp enable
# 在接口Twenty-FiveGigE1/0/1上配置Announce报文发送的时间间隔。
[DeviceC-Twenty-FiveGigE1/0/1] ptp announce-interval 0
# 在接口Twenty-FiveGigE1/0/1上配置Sync报文的发送周期。
[DeviceC-Twenty-FiveGigE1/0/1] ptp syn-interval -1
# 在接口Twenty-FiveGigE1/0/1上配置Delay_Req报文的最小发送周期。
[DeviceC-Twenty-FiveGigE1/0/1] ptp min-delayreq-interval -1
[DeviceC-Twenty-FiveGigE1/0/1] quit
当网络拓扑稳定后,通过使用display ptp clock命令可以查看设备上PTP时钟信息,display ptp interface brief命令显示简要运行信息。例如:
# 在Device A上显示设备的PTP时钟信息。
[DeviceA] display ptp clock
PTP global state : Enabled
PTP profile : SMPTE ST 2059-2
PTP mode : OC
Slave only : No
Lock status : Unlocked
Clock ID : 000FE2-FFFE-FF0000
Clock type : Local
Clock domain : 0
Number of PTP ports : 1
Priority1 : 128
Priority2 : 128
Clock quality :
Class : 248
Accuracy : 254
Offset (log variance) : 65535
Offset from master : 0 (ns)
Mean path delay : 0 (ns)
Steps removed : 0
Local clock time : Sun Jan 15 20:57:29 2019
# 在Device A上显示PTP的简要运行信息。
[DeviceA] display ptp interface brief
Name InstID State Delay mechanism Clock step Asymmetry correction
WGE1/0/1 0 Master E2E Two 0
# 在Device B上显示设备的PTP时钟信息。
[DeviceB] display ptp clock
PTP global state : Enabled
PTP profile : SMPTE ST 2059-2
PTP mode : BC
Slave only : No
Lock status : Locked
Clock ID : 000FE2-FFFE-FF0001
Clock type : Local
Clock domain : 0
Number of PTP ports : 2
Priority1 : 128
Priority2 : 128
Clock quality :
Class : 248
Accuracy : 254
Offset (log variance) : 65535
Offset from master : 25 (ns)
Mean path delay : 2791000 (ns)
Steps removed : 1
Local clock time : Sun Jan 15 20:57:29 2019
# 在Device B上显示PTP的简要运行信息。
[DeviceB] display ptp interface brief
Name InstID State Delay mechanism Clock step Asymmetry correction
WGE1/0/1 0 Slave E2E Two 0
WGE1/0/2 0 Master E2E Two 0
通过显示信息可以看出,Device A被选为最优时钟,其接口Twenty-FiveGigE1/0/1为主接口,对外发布同步时间。