嘿,朋友。看到你手里攥着这个标题,我就知道你又头疼了。是不是刚才在机房里对着那几台闪着绿光的盒子(华为、H3C、思科)抓耳挠腮?明明日志里显示流量大得离谱,却像无头苍蝇一样找不到源头?别急,把安全帽摘下来,咱们坐下来聊聊。
端口镜像,说白了,就是给你的核心交换机装个“行车记录仪”。当网络出问题时,你不需要把整条光纤都拔下来接个笔记本抓包,只需要让交换机把某个端口的流量复制一份,送到你的分析电脑上。但这事儿听着简单,真动手配置时,不同厂商的“方言”差别挺大,排错更是让人头秃。今天我就把自己压箱底的实战经验掏出来,咱们不讲那些干巴巴的书本定义,直接上干货,从华为、H3C到思科,手把手带你把这个功能玩明白。
先把底子打牢:镜像到底是个啥?
在写代码或者敲命令之前,咱们得先把概念理清楚。有些刚入行的小朋友容易把“镜像”和“聚合”搞混,或者以为镜像就是把流量加倍了。其实不是。
想象一下,你正在监控一个重要的路口(交换机端口)。你不想拦截每一辆车,你只想派一个便衣警察(分析电脑/抓包工具)站在旁边,把路过的车都记下来。这个便衣警察所在的路口,就是目的端口(Destination Port),而被监控的那个实际路口,就是源端口(Source Port)。
这里有个核心原则必须刻在脑子里:镜像流量是单向的复制,目的端口通常只能收、不能发(或者发了也没用,因为那是给分析工具看的)。 所以,别指望通过镜像端口去控制被监控的设备,它只是个“观察者”。
另外,还要区分两种常见的镜像模式:
- 本地端口镜像(Local SPAN/Mirror): 源端口和目的端口都在同一台交换机上。这是最常用的,也是咱们今天要讲的重点。
- 远程端口镜像(RSPAN): 源在A交换机,目的在B交换机,中间通过一条特殊的 trunk 链路传输。这个稍微复杂点,咱们先放一放,等基础打牢了再回头看,否则容易消化不良。
第一站:华为交换机(Huawei)——严谨的国企风格
华为的命令行(VRP系统)给我的感觉就像它的产品一样:逻辑严密,层级分明,有点“强迫症”式的规范。如果你习惯了思科的自由随性,刚开始用华为可能会觉得有点啰嗦,但一旦习惯了,你会发现它的好处是“不容易出错”。
基础语法与配置步骤
在华为设备上配置端口镜像,核心命令是 mirror-to。我们来看一个经典的场景:监控交换机 GE0/0/1 端口的入方向流量,把镜像数据送到 GE0/0/2 端口,然后用电脑接在 GE0/0/2 上做抓包。
首先,你得进入系统视图,这是所有配置的起点:
<Huawei> system-view
[Huawei] sysname Switch-H3C-Huawei
[Switch-H3C-Huawei]
接下来是重头戏。华为的配置逻辑是:先创建流行为模板(traffic classifier 和 traffic behavior),或者直接基于端口配置。对于简单的端口镜像,我们可以直接使用 mirrored-to 命令。
# 进入被监控的源端口
[Switch-H3C-Huawei] interface GigabitEthernet 0/0/1
# 配置入方向镜像到目的端口 GE0/0/2
# 注意:华为的命令结构通常是 mirror direction to interface
[Switch-H3C-Huawei-GigabitEthernet0/0/1] mirror inbound to interface GigabitEthernet 0/0/2
# 退出保存
[Switch-H3C-Huawei-GigabitEthernet0/0/1] quit
[Switch-H3C-Huawei] quit
<Switch-H3C-Huawei> save
等等,这里有个坑!如果你直接这么配,可能会发现数据包丢包严重。为什么呢?因为带宽。源端口的流量全部复制一份发到目的端口,如果源端口是 1G,镜像流量也可能接近 1G,而目的端口如果也是 1G,一旦流量 bursts,就会发生拥塞丢包。
所以,专家的做法是:
- 确保目的端口带宽足够:最好用万兆口做目的端口,监控千兆口。
- 使用 ACL 过滤:别全量镜像,只抓你需要的流量。比如只抓 TCP 80 端口的流量。
# 创建一个简单的 ACL,匹配 TCP 80 端口
[Switch-H3C-Huawei] acl number 3000
[Switch-H3C-Huawei-acl-adv-3000] rule 5 permit tcp destination-port eq 80
[Switch-H3C-Huawei-acl-adv-3000] quit
# 在源端口应用 ACL 并镜像匹配到的流量
[Switch-H3C-Huawei] interface GigabitEthernet 0/0/1
[Switch-H3C-Huawei-GigabitEthernet0/0/1] acl 3000 inbound
# 华为支持基于 ACL 的流镜像,但这需要配置流策略
# 更通用的做法是使用流模板(这是华为高级配置的精髓)
注:华为高端交换机(如 CE 系列)支持基于流策略的灵活镜像,配置稍复杂:创建 traffic classifier -> traffic behavior -> traffic policy -> apply。但对于日常排错,上述的基础端口镜像已经够用 80% 的场景。
华为排错指南
当你配完发现抓不到包,或者抓到的包全是乱码时,用这几个命令救命:
display port-mirror:这是万能钥匙。它能告诉你当前所有的镜像配置状态。检查Mirror Group是否存在,Source Interface和Destination Interface是否对应正确。display interface GigabitEthernet 0/0/2:看看目的端口有没有大量的CRC error或者Overrun。如果有,说明带宽爆了,目的端口卡住了,数据包进不来。- 检查 VLAN tagging:华为镜像默认可能只镜像不带 VLAN Tag 的帧,或者根据你的配置决定。如果你的网络环境是纯 VLAN 环境,确保你的分析电脑网卡支持识别 Tag,或者在交换机上做合适的封装配置。
第二站:H3C 交换机——亲切的“中国伙伴”
H3C 的命令行(Comware 系统)其实和华为有很深的渊源,早期版本几乎一模一样,但后来的版本逐渐分化。H3C 的风格更像是一个务实的技术人员,命令简洁,逻辑清晰。对于很多中小企业,H3C 是主力军。
基础语法与配置步骤
H3C 的配置逻辑通常围绕 Mirror Group(镜像组) 展开。这是 H3C 和思科最大的不同点——你必须先把源和目的“绑定”到一个组里,然后再把这个组“应用”到具体端口上。这种设计的好处是解耦,坏处是多了一步。
场景:监控 ME4012 交换机的 Eth-Trunk 1 的入流量,镜像到口 GigabitEthernet 1/0/24。
<H3C> system-view
[H3C] sysname Switch-H3C
第一步:创建镜像组并指定方向 H3C 强制要求你先定义镜像组。你可以定义本地镜像组(Local)或者远程镜像组。
# 创建本地镜像组 1,方向为 inbound(入方向)
[H3C] port mirroring-group 1 local
第二步:指定目的端口 这一步很关键,目的端口一旦加入镜像组,就会自动变成“观察口”,不能再用于普通业务通信。
[H3C] interface GigabitEthernet 1/0/24
# 将这个端口设为镜像组 1 的目的端口
[H3C-GigabitEthernet1/0/24] port mirroring-group 1 monitor-port
[H3C-GigabitEthernet1/0/24] quit
第三步:指定源端口及方向 现在把要监控的口拉进来。你可以监控入方向(inbound)、出方向(outbound)或双向(both)。
[H3C] interface GigabitEthernet 1/0/1
# 将这个端口设为镜像组 1 的源端口,监控入方向
[H3C-GigabitEthernet1/0/1] port mirroring-group 1 monitor-port inbound
[H3C-GigabitEthernet1/0/1] quit
看,是不是比华为稍微直观一点?先建组,再定目标,再定来源。
H3C 的高级技巧:远程镜像(RSPAN)
如果源端口在楼下的交换机,而你的分析电脑在楼上的机房怎么办?这就得用 H3C 的 RSPAN 了。但这需要一台中间交换机来透传镜像流量。
核心思路是:创建一个新的 VLAN,专门用于承载镜像流量。
# 在所有相关交换机上创建用于 RSPAN 的 VLAN
[H3C] vlan 100
[H3C-vlan100] description RSPAN-VLAN
[H3C-vlan100] quit
# 在源交换机上,将 RSPAN VLAN 绑定到镜像组
[H3C] port mirroring-group 2 remote
[H3C] port mirroring-group 2 remote destination vlan 100
# 在核心交换机上,透传这个 VLAN
[H3C] interface GigabitEthernet 1/0/24 # 上联口
[H3C-GigabitEthernet1/0/24] port link-type trunk
[H3C-GigabitEthernet1/0/24] port trunk permit vlan 100
注意:RSPAN 对中间交换机的性能有要求,且配置不当极易引起广播风暴,新手慎用。
H3C 排错指南
display port mirroring-group:查看镜像组的状态。重点看Monitor Port和Source Port是否都正确挂载。- 确认目的端口模式:有时候你会发现配置进去了,但抓不到包。检查一下目的端口是否意外地被加入了某个业务 VLAN,导致流量冲突。H3C 的目的端口通常会自动隔离,但确认一下
display port link-type总是没错的。 - 带宽压力测试:同样,用
display interface看目的端口的输入利用率。如果利用率长期 100%,你的包肯定丢了。
第三站:思科交换机(Cisco)——老炮儿的经典
思科是全球网络设备的霸主,其 IOS/IOS-XE 系统影响了整整一代网络工程师。思科的命令风格比较“自由”,同样的功能可能有多种写法,这让高手觉得灵活,让新手觉得混乱。
基础语法与配置步骤
思科把镜像功能称为 SPAN (Switch Port Analyzer),远程镜像称为 RSPAN。
场景:监控 Switch1 的 Fa0/1 端口的进出流量,镜像到 Fa0/2,分析电脑接在 Fa0/2。
Switch> enable
Switch# configure terminal
思科的 SPAN 配置非常简单,一条命令搞定:
! 创建监控会话 1
! source 是被监控的端口,direction 是方向
! destination 是目的端口
Switch(config)# monitor session 1 source interface FastEthernet 0/1 both
Switch(config)# monitor session 1 destination interface FastEthernet 0/2
Switch(config)# end
Switch# write memory
是不是爽到了?一行命令,有源有目的,还有方向(both 表示双向,rx 表示仅入方向,tx 表示仅出方向)。这就是思科的魅力,简单粗暴。
但是,别高兴太早。 如果你监控的是 VLAN 而不是单个端口呢?思科同样支持 VLAN 镜像:
Switch(config)# monitor session 1 source vlan 10 both
这会镜像 VLAN 10 内所有端口的流量到目的端口。这对于排查“某个 VLAN 内谁在搞破坏”非常有用。
思科的高级特性:ERSPAN
如果你的流量要从 Cisco 交换机镜像到非 Cisco 的设备(比如华三、华为,或者一台 Linux 服务器所在的物理机),标准的 SPAN 可能不支持跨厂商传输。这时候需要 ERSPAN (Encapsulated Remote SPAN)。
ERSPAN 会将镜像流量封装在 GRE 隧道中传输。这需要源交换机和目的设备都支持 ERSPAN 解码。
! 创建 ERSPAN 源会话
Switch(config)# monitor session 2 source interface Gi0/1 both
Switch(config)# monitor session 2 destination gre source 192.168.1.1 destination 192.168.1.2
注意:目的 IP 192.168.1.2 需要是能够解析 GRE 封装的设备,通常是一台运行特殊软件的路由器或服务器。
思科排错指南
show monitor:这是查看 SPAN 配置状态的命令。它会列出所有活跃和未活跃的监控会话。如果会话状态是inactive,通常是目的端口有问题。show monitor detail:如果你需要更详细的信息,比如具体的 ACL 过滤规则、VLAN 标签处理情况等,用这个。- 检查目的端口连接:有时候问题不在配置,而在物理层。确保你的分析电脑网卡开启了混杂模式(Promiscuous Mode)。在 Linux 上用
ifconfig eth0 promisc,在 Windows 上 Wireshark 默认会自动开启,但也要检查网卡驱动设置。 - CPU 负载:SPAN 会消耗交换机的 CPU 资源,尤其是当流量很大时。用
show process cpu看看 CPU 是否被打满。如果 CPU 过高,交换机会主动丢弃镜像包,导致抓包不全。
深度实战:当镜像失效时,如何像侦探一样思考?
配置都配好了,抓包软件也打开了,结果——一片空白,或者全是乱码。这时候,很多新人会慌,或者反复检查配置,发现没问题啊!别急,这时候需要一种结构化思维来排错。
1. 物理层与链路层检查(最基础也最容易被忽视)
- 网线插对了吗? 听起来像笑话,但真的有人把网线插到了交换机的管理口,或者插错了 VLAN 划分错误的端口。
- 光模块匹配吗? 如果源是单模光口,目的也是,但波长不匹配,物理链路就起不来。检查
display interface或show interface看链路状态是否为up。 - 双工匹配吗? 如果目的端口和连接的分析电脑网卡双工不匹配(一个全双工,一个半双工),会产生大量的 CRC 错误和碰撞,导致数据包丢失。
2. 带宽瓶颈分析(最常见的“隐形杀手”)
假设你监控的是一个 1G 的业务端口,镜像到了另一个 1G 的目的端口。理论上没问题,但如果源端口同时有大量入流量和出流量,镜像的流量可能超过 1G 的带宽上限。
- 现象:抓包软件显示数据包数量在增加,但速度明显低于预期,或者有大量丢包计数。
- 排查命令:
- 华为:
display interface GigabitEthernet 0/0/2查看Inbound discards和Output discards。 - H3C:
display interface GigabitEthernet 1/0/24查看Input drop和Output drop。 - 思科:
show interface FastEthernet 0/2查看input errors和output errors。
- 华为:
- 解决方案:
- 加带宽:把目的端口换成 10G 口。
- 加过滤:使用 ACL 只镜像关键流量。比如,只监控 IP 地址为
192.168.1.100的流量,或者只监控 TCP 端口 80 的流量。这会极大地减少镜像流量,避免拥塞。
3. VLAN 标签问题(让小白抓狂的难点)
你的网络里可能既有 Untagged 的业务流量,也有 Tagged 的 VLAN 流量。镜像出来的包,到底带不带 Tag?
- 华为:默认情况下,镜像出去的包会保留原始的 VLAN Tag。如果你的分析电脑网卡不支持处理带 Tag 的包(大多数普通网卡的驱动默认剥离 Tag),你看到的可能是乱码或者抓不到包。
- 解决:在华为上,可以使用
mirror vlan命令来指定镜像特定 VLAN,或者在目的端口配置port hybrid tagged vlan让分析电脑能识别 Tag。
- 解决:在华为上,可以使用
- H3C:H3C 提供了一些选项来控制 Tag 的处理,比如
port mirroring-group 1 local filter-vlan 10,这样可以只镜像 VLAN 10 的流量,并且 H3C 通常会在镜像时保留或剥离 Tag,具体取决于版本和配置。查阅手册中的“VLAN 过滤”部分。 - 思科:思科的 SPAN 有一个特性叫
Encapsulation Native。默认情况下,思科 SPAN 会保留 VLAN Tag。如果你希望镜像出来的包去掉 Tag(模拟一个普通接入端口的行为),可以使用monitor session 1 destination interface Fa0/2 encapsulation native。这在不同厂商间互联时非常有用。
4. 分析工具本身的设置
有时候问题不在交换机,而在你的电脑。
- Wireshark 过滤器写对了吗? 你看到的是空画面,还是满屏幕的红绿数据?如果数据量巨大,Wireshark 可能卡死了。尝试在过滤器里加
tcp或ip.addr == 192.168.1.1来过滤。 - 网卡混杂模式:再次强调