一次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过即可。

一次VLAN标签引发的网络事件的处置的更多相关文章

  1. WebView 实现JS效果和a标签的点击事件

    目前很多android app都可以显示web页面的界面,嵌入式开发,这个界面一般都是WebView这个控件加载出来的,学习该控件可以为你的app开发提升扩展性. 先说下WebView的一些优点: 可 ...

  2. img标签中的onerror事件

    img标签中有一个onerror事件.是当我引用的src属性获取不到图片或者网络错误导致无法正常显示我src属性的图片时,显示的提示错误图片或者是可以代替的万能图片. 用法: <img src= ...

  3. 浅析 Nginx 网络事件

    Nginx 是一个事件驱动的框架,所谓事件主要指的是网络事件,Nginx 每个网络连接会对应两个网络事件,一个读事件一个写事件.在深入了解 Nginx 各种原理及在极端场景下的一些错误场景处理时,需要 ...

  4. 关于a标签自身的click事件所带来的一些影响

    众所周知a标签自身带有点击事件<a href="#"></a>从它本身的特性来讲并没有什么不好的影响,但是如果你在a标签里又加入onclick事件则< ...

  5. 利用epoll写一个"迷你"的网络事件库

    epoll是linux下高性能的IO复用技术,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率.另一点原因就是获取 ...

  6. 绝对实用 NAT + VLAN +ACL管理企业网络

    在企业中,要实现所有的员工都能与互联网进行通信,每个人各使用一个公网地址是很不现实的.一般,企业有1个或几个公网地址,而企业有几十.几百个员工.要想让所有的员工使用这仅有的几个公网地址与互联网通信该怎 ...

  7. a标签中有点击事件

    我们常用的在a标签中有点击事件:1. a href="javascript:js_method();" 这是我们平台上常用的方法,但是这种方法在传递this等参数的时候很容易出问题 ...

  8. 深入A标签点击触发事件而不跳转的详解

    本文介绍下,当点击A标签时,触发事件但不跳转的实现方法,有需要的朋友参考下吧. 点击页面上的空链接,点击后页面自动刷新,并会定位到页面顶端. 不过,有时需要点击#页面但不作跳转,可以这样写: < ...

  9. 在js中拼接<a>标签,<a>标签中含有onclick事件,点击无法触发该事件

    我们在<a>标签中添加事件一般是onclick="editUser()" 这样添加,在html页面上是行的通的 但是如何你是在js中拼接<a>标签并在< ...

随机推荐

  1. C++ Primer笔记

    C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...

  2. Java IO 通信 All In One

    Java IO 通信 All In One Netty / WebSocket BIO 通信 BIO 即阻塞 I/O,不管是磁盘 I/O 还是网络 I/O,数据在写入 OutputStream 或者从 ...

  3. windows 10 remote desktop

    windows 10 remote desktop https://support.microsoft.com/en-us/help/4028379/windows-10-how-to-use-rem ...

  4. WiFi & QR Code

    WiFi & QR Code https://github.com/bndw/wifi-card https://wifi.dev.bdw.to/ 扫码登录 WIFI:T:WPA;S:free ...

  5. Apple & iOS & Device Screen Sizes and Orientations & React Native

    Apple & iOS & Device Screen Sizes and Orientations & React Native iOS devices https://de ...

  6. SSO & Single Sign On

    SSO & Single Sign On 单点登录 https://en.wikipedia.org/wiki/Single_sign-on https://cloud.google.com/ ...

  7. Union international inc引进微信线下支付,开启消费无现金时代

    长期以来,Union international inc娱乐集团(公司编号:20151533091)因其客户来自全球各国,特别是除了美国之外的中国用户居多,因此公司一直和中国领先的社交软件微信保持着良 ...

  8. DeFi下半场,除了YFI,还有BGV!

    自今年夏季开始,DeFi市场便已经进入火热态势,且持续至今.其中,去中心化交易所(DEX)以及各种金融衍生品的出现,吸引了大批资金的进入,资本市场的目光已从传统金融移到了DeFi市场,期望着能够从De ...

  9. [Python] 茎叶图和复合饼图的画法

    目录 茎叶图 复合饼图 茎叶图 from itertools import groupby nums2=[225, 232,232,245,235,245,270,225,240,240,217,19 ...

  10. sqlserver日期时间格式转换

    Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM Select CONVERT(varchar(100), GETDATE( ...