作者:网络之路一天 首发公众号:网络之路博客(ID:NetworkBlog)
VLAN在数据包中如何体现?
在上一篇实际测试了,从PC2访问PC1的时候,ARP请求广播包,只从E0/0/2发送给E0/0/3,这是因为两个口都配置成了accessvlan 10里面,那一个数据包过来交换机它具体是如何处理的呢?,这就要了解下VLAN以及access处理规则了。
VLAN在数据包中的体现
正常情况下,终端(个人电脑、手机、平板)服务器(非虚拟化场景)发出的数据包是不带VLAN标签的,叫做Untagged帧,以太网头部发出是什么样,就是什么样。
如果交换机的接口由管理员定义了某一个vlan,比如上图的vlan 10,那么当数据进入的时候它会执行一个操作,给这个以太网头部加入一个VLAN标签进去,这样交换机在转发的时候就知道,原来这个数据包是带有VLAN标签的,它就知道怎么进行转发操作了。为了保证所有厂商的交换机之间能够去识别带有VLAN的数据帧,并且进行对VLAN标签的处理,,IEEE组织推出了一个标准,叫做802.1Q。
vlan标签(vlan tag)字段由4个字节组成,内容
上一篇内容中,正式因为使用了VLAN技术,交换机利用VLAN标签中的VID来识别数据帧所属的VLAN,带有VLAN标签的数据帧只在同一个VLAN内转发,所以不管是ARP请求的广播报文还是未知单播帧这种泛洪操作,都被限制在了同一个VLAN内了。下面来了解下交换机具体是如何处理的。
接口链路类型access处理规则
交换机在收到一个数据的时候,根据接口不同的链路类型会有不一样的操作,目前我们接触到的第一个链路类型是access,处理规则上面列出来了,可能第一次看理解不了,我们先看第一个规则,对接收不带Tag的报文处理,指的就是终端发出数据包的时候没有打VLAN标签的数据,标准的以太网头部,当这样一个数据抵达交换机的时候,交换机怎么处理呢?
PC2访问PC1的过程
(1)PC2想访问PC1,首先要知道PC1的MAC,于是发送ARP请求。二层头部:| 源MAC PC2 |目的MAc 全F | 类型(ARP)| ARP请求 PC1的MAC
(2)交换机E0/0/2收到包的时候,由于接口配置了类型为access,根据规则
PC2发出的数据是不带Tag,这服务器托管网时候交换机会在二层以太网头部打上对应的VLAN TAG,这个时候以太网头部变成了:| 源MAC PC2 | 目的MAC 全F | VLAN TAG 10| ARP请求 PC1 MAC
(3)交换机查看以太网头部,读取源MAC用于记录在MAC表中,体现为 PC2的MAC地址,从E0/0/2学习到,该接口属于VLAN 10;读取目的
MAC发现是全F,于是在除源接口所在VLAN内其他接口泛洪(存活接口),目前就E0/0/3属于VLAN 10,并且在线,所以数据包会从E0/0/3发出。
(4)交换机发现从E0/0/3发出,接口属于access模式,PVID=10,这个时候交换机会做一件事情,将数据帧包含的TAG剥离,然后在发送出去。
(5)PC1收到来数据包后,就是一个正常的以太网头部,读取处理后,进行ARP回应。
试想下,如果交换机不做剥离标签的处理,PC1会收到一个有标签的数据包,通常的PC终端是没办法处理带有标签的以太网头部的,最终会丢弃。
(1)PC1收到来自于PC2的请求后,PC1开始进行回应。 二层头部:| 源MAC PC1|目的MAc PC2| 类型(ARP)| ARP回应
(2)交换机E0/0/3收到该包后,由于该接口配置了类型为access,根据规则
PC1发出的数据是不带Tag,这时候交换机会在二层以太网头部打上对应的VLAN TAG,这个时候以太网头部变成了:| 源MAC PC1 | 目的MAC PC2 | VLAN TAG 10 | ARP回应
(3)交换机查看以太网头部,读取源MAC用于记录在MAC表中,体现为 PC1的MAC地址,从E0/0/3学习到,该接口属于VLAN 10;读取目的
MAC发现为PC2,查询MAC表,走E0/0/2发出。
(4)交换机发现从E0/0/2发出,接口属于access模式,PVID=10,将数据帧包含的TAG剥离,然后在发送出去。
(5)PC2收到数据包后,读取untag的以太网头部,就得到了PC1的MAC了,后续的交互就跟这个流程一样。
通过上面的分析,在回过头来看这个处理规则是不是就容易懂了,这里在说下缺省的VLAN ID 在access中则为接口配置的ID(比如上面配置的default vlan 10),缺省VLAN ID=接口下配置的defaultvlan 对应的 id (对应华三的access vlanid),缺省VLAN ID有一个简称,叫做PVID。
总结:当交换机的接口处于Access模式时,收到一个untag(不打标签的数据帧时)会打上PVID,当带有VLAN的数据帧准备从接口发出去的时候,根据该接口也是access模式,会对数据帧的标签进行剥离标签,发送出去,最终PC收到的数据是untag的数据。
很多人可能会钻进一个牛角尖,出去的时候需要不需要检查数据包的VID与PVID一致吗?这个是不需要的,因为交换机在发送一个数据帧的时候,会查询MAC表,只有在该VLAN内的,它才会去发送,也就是说,交换机的MAC表转发机制就已经把相同VLAN一致的要求给检验了,所以从该接口出去的数据帧 VID肯定是等于PVID的,所以直接剥离PVID的Tag才不会出错。
如果收到一个tag的报文后,该如何处理呢?
正常情况PC是无法发出打有tag的数据的,有的企业级网卡支持这个功能,假设某个客户端误设置了一个VLAN ID,那交换机会怎么处理呢?
对于规则,其实上面也提到了,但是光看不去感受,是不是觉得很抽象,正好eNSP模拟器支持这个功能,来测试下。(这里说下,并不是我偏爱eNSP,在搭建实验以及抓包、PC测试这块,eNSP确实要方便一些,大家学习起来更加容易理解,HCL的话都会有实验演示,所以学习华三的朋友不用担心。)
按照上图介绍,开启抓包、然后设置好PC2的参数(模拟器自带一个UDP发包工具,可以打VLAN。)点击发送
两边都收到包了。
在发一次VLAN ID是100的
这次PC1是没有收到这个UDP包的。
得到的结论是:当接口收到一个有TAG的数据包时,交换机会检查该tag的vid是否与接口配置的PVID一致,如果一致则通过,比如这里发出打上tag 10,接口属于VLAN 10是一致的,则通过,PC1收到了,如果不相同,比如后面发出打上tag 100,接口属于vlan 10,不一致,则丢弃,最终pc1没收到。
- 抓包看看802.1Q
上面已经抓包了,直接来看看它的字段。
抓包跟字段介绍有点点不一样,是因为抓包给优化了
- 第一个type其实就是TPID字段为 0x8100,
- 第二个type才是以太网头部中的类型,上层为IPV4(0800)
- priority=5,PC设置的5,所以这里抓包看到的也是5
- DEI就是上面说的CFI,以太网值为0
- id=10,指的就是vid,数据的TAG
熟悉华三交换机配置
以一个小实验,来熟悉下华三的配置,G0/1与G0/3属于VLAN 10(同一个网段),G0/2的主机是另外一个网段,实现网段之间互不影响,进行VLAN划分隔离。
[H3C]vlan 10 |
[H3C-vlan10]vlan 20 |
[H3C-vlan20]quit |
[H3C]interface range g1/0/1 g1/0/3 |
[H3C-if-range]port access vlan 10 |
[H3C-if-range]quit |
[H3C]interface g1/0/2 |
[H3C-GigabitEthernet1/0/2]port access vlan 20 |
看来这个配置是不是有点奇怪,华三这边使用了一个便捷的方式,比如这里1口与3口都是要配置同样的属性,加入到VLAN 10里面,可以使用一个批量配置功能,interface range后面跟需要的端口号就行,这样配置一个参数,匹配的端口号都会进行配置,华三另外一个不太一样的地方就是不需要配置,因为华三接口类型默认就是工作在access,最后一个不太一样的是华三是port access vlan,华为是port default vlan
来测试验证下(开启PC4的抓包,注意PC手动设置地址)
可以发现,抓包PC4是收不到任何的报文的,原理上面讲过了
看MAC地址表也是一样,学习到2个MAC地址,G1/0/1以及G1/0/3接口,VLAN是10,所以它是不会给PC4发送的,因为PC4默认属于VLAN20里面。
实用的命令(细节部分建议看视频)
(1)查看当前VLAN有哪些
华为:display vlan查看存在的VLAN以及对应接口;display vlansummary 查看当前创建了哪些VLAN。
华三:display vlan查看当前创建了哪些VLA服务器托管网N;display vlan brief查看存在的VLAN以及对应接口
(2)查看接口当前属于哪个VLAN,以及什么接口链路类型
华为:display port vlan显示接口的链路类型以及属于的VLANID
华三:display interface brief 显示接口的链路状态、速率、链路类型与属于的VLAN ID
通用:display current-configuration interface:可以看到该接口当前的配置
(3)恢复接口配置
华为:某个接口想还原出初始化的状态,进入对应的接口下(1)undo port default vlan去掉对应的VLAN (2) undo port link-type,去掉配置的链路类型,还原成默认
华三:进入对应接口下default直接还原成默认配置(注意这个只有V7版本才支持)通用版本(V5 V7)可以使用undo portaccess vlan
(4)批量配置
华为华三有分老版本跟新版本,老版本,这里都介绍下。
新版本:华为华三都一样,可以通过 interface range来实现,华三上面的实验已经演示过,华为模拟器版本不支持,需要V2R5以后的版本。
老版本:
容易遇到的故障(经验分享)
对于access模式来说,容易出错的地方在于接口加入VLAN的时候,把ID写错了,导致无法在同一个VLAN内进行传递,以及出去的时候无法剥离标签,另外建议多去做实验跟抓包,能够感受到数据包在整个转发过程中的变化,从而更容易理解access处理数据时候的规则。
作者:网络之路一天,公众号:网络之路博客(ID:NetworkBlog)。让你的网络之路不在孤单,一起学习,一起成长。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
先说下今天的心情吧,今天看的课感觉真的是开始上难度了,有一些逻辑复杂的地方要把视频反复看四五遍才能明白,不知道我这种笨蛋能不能学好C语言。。。还是对自己得有点信心,肯定能学好!下面是今天的内容啦! For循环 之前不是很明白for循环和while循环的区别,这…