3. 车载交换机端口镜像配置与丢包捕获

为什么选端口镜像而不是串接抓包

车载交换机通常不具备把业务端口直接拔下来串接分析仪的条件——牵引、制动、TCMS 等业务流不允许中断。端口镜像(Port Mirroring / SPAN)在交换机内部把指定源端口的报文复制一份送到分析端口,业务转发路径不变,只增加一份复制流量。本例的目标是:在可疑端口上建立单向入向镜像,把流量引到空闲端口,用抓包工具过滤出丢包相关报文,并确认镜像本身没有给业务带来额外负担。

关键约束有三个:分析端口必须不参与业务转发(不能是 Trunk 上联口或环网成员口);镜像会话的复制方向要与怀疑方向一致(怀疑上行车厢数据丢失就镜像入向);分析端口带宽必须不小于源端口峰值速率,否则镜像口自身拥塞会造成"假丢包"。

车载交换机(编组 3 车) Gi0/1 业务·入向 Gi0/2 环网成员 Gi0/24 分析口 镜像会话 1:source Gi0/1 rx → destination Gi0/24 分析口关闭业务转发 / 关闭生成树参与 3 车 TCMS 网关 上行数据 · 疑似丢包源 业务流 抓包分析终端 eth0 混杂模式 环形缓冲 256 MB 时间戳:硬件 过滤:vlan 与 udp.port==5000 输出:pcapng 复制副本 ① 全量捕获 先不过滤,确认镜像生效 核对帧数与端口计数 ② 定向过滤 VLAN + 目的 MAC + 端口 缩小到可疑业务流 ③ 序列判读 UDP 序号跳变 / TCP 重传 定位缺口时间点 ④ 影响核对 业务端口丢包计数 镜像前后是否变化 镜像副本 → 抓包 → 过滤 → 判读

镜像配置的关键参数与命令

以常见的车载工业交换机 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 counters00业务口无新增丢弃,镜像未反压
Gi0/1 入向速率峰值端口速率统计约 62 Mbps约 62 Mbps业务流未受影响
Gi0/24 出向速率show interface Gi0/24 counters0约 62 Mbps副本流量与源一致,未超端口能力
抓包端丢帧(内核)tcpdump 结束统计 dropped by kernel—0分析终端未因缓冲不足丢帧
表中数值为教学示例,实际必须现场采集。若 Gi0/24 出向速率接近端口线速,或抓包端出现 dropped by kernel 非零,则捕获结果不可信,应先加大环形缓冲、缩短单次捕获时长或启用速率限制,再重新采集。

从捕获文件判读丢包位置

拿到 tcms_loss.pcapng 后,按以下顺序判读,可以把"丢在哪"缩小到具体区段:

  1. 看序号连续性:若业务为 UDP,检查应用层序号字段是否跳变;跳变处即为丢失报文的时间点。
  2. 看时间分布:把缺口时间点与列车运行工况(牵引、过分相、解挂重连)对齐,判断是否与特定事件相关。
  3. 看是否成簇:零星单包丢失偏向物理层误码;成簇丢失(连续数十毫秒无包)偏向链路倒换、端口阻塞或交换机内部拥塞。
  4. 回查交换机计数:在缺口时间点前后读取 Gi0/1 与环网口的丢弃、CRC、对齐错误计数,区分是"没收到"还是"收到了但没转发"。

完成上述四步后,若确认 Gi0/1 入向已收到报文而下游未转发,问题在交换机转发路径;若 Gi0/1 入向本身就缺包,问题在上游链路或发送端,应把镜像点前移到上一级交换机继续定位。