一次VLAN标签引发的网络事件的处置
一、背景介绍
事件背景:
HZ某分公司新装一套业务系统,通过一条专线和BJ总公司连通。分配给HZ公司的ip地址为:a.b.c.X,掩码24位,网关a.b.c.1。BJ总公司网络管理员无法联系、相关配置未知。
故障现象:
HZ分公司端光猫下来网线直连某台服务器(ip、掩码、网关设置好),能ping通网关a.b.c.1。
光猫下来网线连接到二层Hub,所有服务器也连到该Hub,所有服务器能正常ping通网关a.b.c.1。Hub网口不够,且性能不佳,未采用。
光猫下来网线连接UNIS S5600 Series交换机,该交换机为出厂配置,所有服务器之间能互通,但是均无法ping通网关。
二、原因分析
光猫下来网线直接连接服务器,服务器能ping通网关。光猫下来网线连接S5600以太口G1/0/1(access模式,vlan 1),服务器连接S5600以太口G1/0/2(access模式,vlan 1),ping网关不通。
从服务器直连光猫到达BJ对端交换机端口的数据包未带vlan tag,从S5600以太口G1/0/1(access模式)连接BJ对端交换机端口的数据包也未带vlan tag,所以出去的数据包是一样的。
那么很可能接收到的数据包携带了vlan tag,服务器收到带vlan tag的数据包正常处理了。傻瓜机是不具备任何处理(修改,封装,处理封装等)数据的能力的,所以傻瓜交换机的转发原则,收到什么转发什么。而S5600以太口G1/0/1的PVID默认为1,如果收到数据包vlan tag不为1,S5600收到后直接丢弃。
三、wireshark抓包查看vlan tag
将光猫网线直连电脑,wireshark抓包,查看接收到的数据包vlan tag为1016,说明这个C类段的vlan为1016。具体过程如下:
(一)先设置Wireshark
1、打开Wireshark,点击 编辑–>首选项
2、选择 外观 --> 列(中文版),对应appearance–>columns,并点击下方 + 按钮。
3、添加命名 “Vlan”(大小写皆可),选择802.1Q VLAN id,并确认保存。
(二)修改电脑注册表
1、打开电脑 网络和Internet设置,点击 以太网–>更改适配器设置。
选择抓包的网口,右键 点击“属性”。
选择Microsoft网络客户端,点击配置
选择高级,找到Priority & VLAN(中文版为优先级和VLAN)并选择Enabled(中文版为使能),确定保存。
选择详细信息,属性找到驱动程序关键字,记录值。
2、在windows运行下查找regedit,进入注册表编辑器。
进入HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}\0007
查看 MonitorModeEnabled的值是否为1,PreserveVlanInfoInRxPacket的值是否为1。若不存在,则新建 DWORD(32位),文件名分别为MonitorModeEnabled 、PreserveVlanInfoInRxPacket,设置值为1。设置完后重启电脑。
(三)wireshark抓包查看vlan tag
数据包分析:
IEEE 802.1Q标准对Ethernet帧格式进行了修改,在源MAC地址字段和协议类型字段之间加入4字节的802.1Q Tag。VLAN帧最小帧长为64字节。
VLAN帧格式:
1、Destination address:6字节,目的MAC地址。
2、Source address:6字节,源MAC地址。
3.1、Type:2字节,长度为2字节,表示帧类型。取值为0x8100时表示802.1Q Tag帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃。
3.2、PRI:3比特,Priority,长度为3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。用于当阻塞时,优先发送优先级高的数据包。
如果设置用户优先级,但是没有VLANID,则VLANID必须设置为0x000。
3.3、CFI:1比特,CFI (Canonical Format Indicator),长度为1比特,表示MAC地址是否是经典格式。CFI为0说明是标准格式,CFI为1表示为非标准格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0。
3.4、VID:12比特 ,VLAN ID,长度为12比特,表示该帧所属的VLAN。在VRP中,可配置的VLAN ID取值范围为1~4094。0和4095协议中规定为保留的VLAN ID。三种类型:Untagged帧:VID 不计;Priority-tagged帧:VID为 0x000;VLAN-tagged帧:VID范围0~4095。三个特殊的VID:0x000:设置优先级但无VID;0x001:缺省VID;0xFFF:预留VID。
4、Length/Type:2字节/指后续数据的字节长度,但不包括CRC检验码。
5、Data:42~1500字节/负载(可能包含填充位)。
6、CRC:4字节/用于帧内后续字节差错的循环冗余检验(也称为FCS或帧检验序列)。
0x81 00时表示802.1Q Tag帧,0x 3f8为VLAN ID,转换成十进制为1016。如下图:
四、解决方法
(一)H3C交换机设备上access、trunk、hybrid端口的处理流程
(1)access端口
发送(从交换机内部往外发送):
带有vlan tag:删除tag后,发送
不带vlan tag:不可能出现
接收:
带有vlan tag:若该tag等于该access端口的pvid,则可以接收,进入交换机内部
不带vlan tag:添加该access端口的pvid,进入交换机内部
(2)trunk端口(允许发送native VLAN数据的时候,可以不加tag)
发送(从交换机内部往外发送):
带有vlan tag:若tag等于该trunk端口的pvid,则删除tag后发送;否则保留tag直接发送
不带vlan tag:不可能出现
接收:
带有vlan tag:保留该tag,进入交换机内部
不带vlan tag:添加该trunk端口的pvid,进入交换机内部
(3)hybrid端口(允许发送多个VLAN数据的时候,可以不加tag)
发送(从交换机内部往外发送):
带有vlan tag:是否带tag进行发送,取决于用户配置(用户可以配置tagged list,untagged list)
不带vlan tag:不可能出现
接收:
带有vlan tag:保留该tag,进入交换机内部
不带vlan tag:添加该hybrid端口的pvid,进入交换机内部
注:数据帧在交换机内部处理时,均带有vlan tag。
(二)对端互联端口配置分析
对端交换机和我互联端口不可能为access口(access口删除tag后再发送出去)。
若为trunk口:(1)trunk口发送规则为:若tag等于该trunk端口的pvid,则删除tag后发送;否则保留tag直接发送。说明该端口的pvid不可能为1016。(2)其接收规则为:不带vlan tag的包添加该trunk端口的pvid,进入交换机内部 。而电脑直连能和网关通又要求trunk端口的pvid为1016。所以不成立。
对端和我互联交换机端口则为hybrid端口。该端口pvid为1016(接收不带vlan tag时添加该hybrid端口的pvid,进入交换机内部)。1016在tagged list中(发送带有vlan tag时是否带tag进行发送,取决于用户配置)。
(三)我端交换机S5600配置。
满足:(1)对端发过来的vlan tag 1016能接得住;(2)发过去的要么不带vlan tag,要带就带1016即可。
连接服务器的端口配置:access模式,vlan 1016。
与对端交换机互联口配置:(1)若为access模式,该端口pvid设置为1016即可。(2)若为trunk模式,该端口pvid不为1016,且允许1016过即可。(3)若为hybrid模式,将vlan 1016配置为tagged list,允许1016过即可。