3. 车载交换机端口镜像配置与丢包捕获
为什么选端口镜像而不是串接抓包
车载交换机通常不具备把业务端口直接拔下来串接分析仪的条件——牵引、制动、TCMS 等业务流不允许中断。端口镜像(Port Mirroring / SPAN)在交换机内部把指定源端口的报文复制一份送到分析端口,业务转发路径不变,只增加一份复制流量。本例的目标是:在可疑端口上建立单向入向镜像,把流量引到空闲端口,用抓包工具过滤出丢包相关报文,并确认镜像本身没有给业务带来额外负担。
关键约束有三个:分析端口必须不参与业务转发(不能是 Trunk 上联口或环网成员口);镜像会话的复制方向要与怀疑方向一致(怀疑上行车厢数据丢失就镜像入向);分析端口带宽必须不小于源端口峰值速率,否则镜像口自身拥塞会造成"假丢包"。
镜像配置的关键参数与命令
以常见的车载工业交换机 CLI 为例(不同厂商命令字不同,但参数语义一致),需要明确四件事:会话号、源端口与方向、目的端口、以及是否限制复制速率。下面给出一个可直接套用的配置骨架,参数按本例场景填写。
# 进入全局配置
configure terminal
# 1) 建立镜像会话 1,源为 Gi0/1 入向,目的为 Gi0/24
monitor session 1 source interface Gi0/1 rx
monitor session 1 destination interface Gi0/24
# 2) 分析口隔离:不参与业务 VLAN 转发,不参与生成树
interface Gi0/24
switchport mode access
switchport access vlan 999
spanning-tree portfast
no shutdown
exit
# 3) 可选:限制镜像复制速率,防止分析口拥塞反压
monitor session 1 rate-limit 200000 # 单位 kbps,示例值
# 4) 保存并核对
write memory
show monitor session 1
show interface Gi0/1 counters
show interface Gi0/24 counters
rx 表示只复制进入 Gi0/1 的报文。若怀疑的是下行方向(交换机发往车厢),应改为 tx;若两个方向都要看,用 both,但复制流量翻倍,需重新核对分析口带宽。抓包侧的准备与过滤表达式
分析终端接入 Gi0/24 后,先做一次不过滤的全量短时捕获,用来确认镜像确实生效:抓 10 秒,看捕获帧数是否与 show interface Gi0/1 counters 中该时段的入向单播/组播增量大致同量级。确认后再加过滤,避免一开始就过滤掉关键证据。
# 全量短时捕获,确认镜像生效(10 秒)
tcpdump -i eth0 -w mirror_check.pcapng -G 10 -W 1
# 定向过滤:只看 VLAN 120 中发往 TCMS 服务器 5000 端口的 UDP
tcpdump -i eth0 -w tcms_loss.pcapng \
'vlan 120 and udp port 5000 and dst host 10.20.3.11'
# 同时观察是否有异常 ARP / 广播风暴混入
tcpdump -i eth0 -nn -c 200 'arp or broadcast'
过滤条件必须与业务实际特征一致:VLAN 号取自交换机 VLAN 表,目的 IP 与端口取自 TCMS 通信矩阵。若过滤后长时间零包,先怀疑过滤条件写错或镜像方向选反,而不是立刻判定"没有丢包"。
镜像对业务影响的验证方法
端口镜像本身会占用交换机内部复制带宽和目的端口带宽。验证思路是镜像前后对比同一组计数,而不是凭感觉判断"网络变慢了"。
| 观察项 | 采集位置 | 镜像前 | 镜像后(示例) | 判读 |
|---|---|---|---|---|
| Gi0/1 入向丢包计数 | show interface Gi0/1 counters | 0 | 0 | 业务口无新增丢弃,镜像未反压 |
| Gi0/1 入向速率峰值 | 端口速率统计 | 约 62 Mbps | 约 62 Mbps | 业务流未受影响 |
| Gi0/24 出向速率 | show interface Gi0/24 counters | 0 | 约 62 Mbps | 副本流量与源一致,未超端口能力 |
| 抓包端丢帧(内核) | tcpdump 结束统计 dropped by kernel | — | 0 | 分析终端未因缓冲不足丢帧 |
dropped by kernel 非零,则捕获结果不可信,应先加大环形缓冲、缩短单次捕获时长或启用速率限制,再重新采集。从捕获文件判读丢包位置
拿到 tcms_loss.pcapng 后,按以下顺序判读,可以把"丢在哪"缩小到具体区段:
- 看序号连续性:若业务为 UDP,检查应用层序号字段是否跳变;跳变处即为丢失报文的时间点。
- 看时间分布:把缺口时间点与列车运行工况(牵引、过分相、解挂重连)对齐,判断是否与特定事件相关。
- 看是否成簇:零星单包丢失偏向物理层误码;成簇丢失(连续数十毫秒无包)偏向链路倒换、端口阻塞或交换机内部拥塞。
- 回查交换机计数:在缺口时间点前后读取 Gi0/1 与环网口的丢弃、CRC、对齐错误计数,区分是"没收到"还是"收到了但没转发"。
完成上述四步后,若确认 Gi0/1 入向已收到报文而下游未转发,问题在交换机转发路径;若 Gi0/1 入向本身就缺包,问题在上游链路或发送端,应把镜像点前移到上一级交换机继续定位。