1. 标准答案
报文类型 源 MAC 地址 说明
Sync FPGA-PL Port12 的单播 MAC 发送端口的物理 MAC
Follow_Up FPGA-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:5e
4.2 FPGA 板卡的 MAC 地址来源
来源 说明
EEPROM/Flash 出厂烧录的 OUI + 唯一序列号
FPGA 设计 通过 RTL 代码硬编码
软件配置 启动脚本通过 ifconfig 设置
Bootloader U-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. 交换机如何处理源 MAC?
SWITCH1 (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-0E**(PTP 多播)。交换机在转发过程中不会改变源 MAC,只会更新 CF 字段。**