
1. 标准答案报文类型源 MAC 地址说明SyncFPGA-PL Port12 的单播 MAC发送端口的物理 MACFollow_UpFPGA-PL Port12 的单播 MAC与 Sync 相同结论Sync 和 Follow_Up 的源 MAC 地址相同都是发送该报文的物理端口FPGA-PL Port12的单播 MAC 地址。2. 报文结构对比gPTP 报文帧结构 (Ethernet Layer 2): ┌─────────────────┬─────────────────┬─────────────┬──────────────────┐ │ 目的 MAC │ 源 MAC │ EtherType │ PTP Payload │ ├─────────────────┼─────────────────┼─────────────┼──────────────────┤ │ 01-80-C2-00-00- │ FPGA-PL Port12 │ 0x88F7 │ Sync / Follow_Up │ │ 0E │ 的单播 MAC │ (PTP协议) │ / Announce ... │ │ (多播地址) │ (例如: 00-1A...)│ │ │ └─────────────────┴─────────────────┴─────────────┴──────────────────┘关键区别目的 MAC 01-80-C2-00-00-0E多播所有 PTP 设备接收源 MAC 发送端口的单播 MAC标识具体的 Master 设备3. 在当前拓扑中的对应关系FPGA-PL (gPTP Master) ├─ Port12 (XFI 10Gbps) │ ├─ MAC 地址: 00:1A:2B:3C:4D:5E (示例) │ │ ↑ 这是源 MAC │ │ │ └─ 发送 Sync/Follow_Up │ │ │ ▼ SWITCH1 Port12 (接收) ├─ 识别源 MAC: 00:1A:2B:3C:4D:5E ├─ 识别目的 MAC: 01-80-C2-00-00-0E ├─ 判断: 这是 PTP 报文 → 转发到所有 PTP 使能端口 └─ 更新 CF (Correction Field)4. 源 MAC 的具体值4.1 如何查看 FPGA-PL 的 MAC 地址# 方法1: 通过 ethtool 查看永久 MAC $ ethtool -P eth0 Permanent address: 00:1a:2b:3c:4d:5e # 方法2: 通过 ifconfig/ip 查看当前 MAC $ ip link show eth0 2: eth0: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 link/ether 00:1a:2b:3c:4d:5e brd ff:ff:ff:ff:ff:ff # 方法3: 读取 sysfs $ cat /sys/class/net/eth0/address 00:1a:2b:3c:4d:5e4.2 FPGA 板卡的 MAC 地址来源来源说明EEPROM/Flash出厂烧录的 OUI 唯一序列号FPGA 设计通过 RTL 代码硬编码软件配置启动脚本通过 ifconfig 设置BootloaderU-Boot 传递的设备树参数5. 为什么 Sync 和 Follow_Up 源 MAC 相同时间轴: T1 ─┤ FPGA-PL 发送 Sync (源 MAC 00:1A:2B:3C:4D:5E) │ │ │ └── 报文内容: │ ├─ 目的 MAC: 01-80-C2-00-00-0E │ ├─ 源 MAC: 00:1A:2B:3C:4D:5E ← 同一个端口 │ └─ PTP 类型: Sync (0x0) │ T1─┤ FPGA-PL 发送 Follow_Up (源 MAC 00:1A:2B:3C:4D:5E) │ │ │ └── 报文内容: │ ├─ 目的 MAC: 01-80-C2-00-00-0E │ ├─ 源 MAC: 00:1A:2B:3C:4D:5E ← 同一个端口 │ └─ PTP 类型: Follow_Up (0x8) │ └─ 携带 T1 精确时间戳原因Sync 和 Follow_Up 是一对报文由同一个端口发送在 two-step 模式下Follow_Up 紧接着 Sync 发送两个报文的目的 MAC 相同源 MAC 也相同6. 交换机如何处理源 MACSWITCH1 (BCM89586) 接收到 Sync/Follow_Up 后的处理: 1. 读取目的 MAC 01-80-C2-00-00-0E └─ 判断: 这是 PTP 多播地址需要特殊处理 2. 读取源 MAC 00:1A:2B:3C:4D:5E └─ 记录: 这是 PTP GrandMaster 的 MAC └─ 用于: 后续构建转发表/过滤表 3. PTP 引擎处理: ├─ Port12 (Slave Port) 接收 ├─ 测量进入时间 (t_rx) ├─ 计算驻留时间 (residence t_tx - t_rx) ├─ 更新 CF (Correction Field) └─ 泛洪到所有 Master 端口 (Port0~11, 16, 14) 4. 转发时: ├─ 源 MAC 保持不变 (还是 00:1A:2B:3C:4D:5E) ├─ 目的 MAC 保持不变 (还是 01-80-C2-00-00-0E) └─ CF 值被更新 (加上本交换机的驻留时间)重要交换机在转发时不会修改源 MAC只是更新 CF 字段。7. 抓包验证# 抓取 gPTP 报文显示源/目的 MAC $ tcpdump -i eth0 -e -vvv ether proto 0x88f7 # 预期输出: # 14:30:01.123456 00:1a:2b:3c:4d:5e 01:80:c2:00:00:0e, ethertype PTP (0x88f7), length 64 # PTPv2, Sync message, length 44 # domain 0, correction 0ns # # 14:30:01.123500 00:1a:2b:3c:4d:5e 01:80:c2:00:00:0e, ethertype PTP (0x88f7), length 64 # PTPv2, Follow_Up message, length 44 # domain 0, originTimestamp: 1725123456.123456789 # 注意: # - 源 MAC 始终是 00:1a:2b:3c:4d:5e (FPGA-PL 的 MAC) # - 目的 MAC 始终是 01:80:c2:00:00:0e (PTP 多播)8. 常见误区误区正确理解9. 一句话总结gPTP Master (FPGA-PL) 发送的 Sync 和 Follow_Up 报文源 MAC 地址都是 FPGA-PL Port12 端口的单播 MAC 地址如00:1A:2B:3C:4D:5E目的 MAC 地址都是01-80-C2-00-00-0EPTP 多播。交换机在转发过程中不会改变源 MAC只会更新 CF 字段。