了解交换口的链路类型以及实际使用场景(access篇)
  xpmJefiPD9zg 2023年11月20日 20 0


作者:网络之路一天  首发公众号:网络之路博客(ID:NetworkBlog)

VLAN在数据包中如何体现?


了解交换口的链路类型以及实际使用场景(access篇)_抓包


在上一篇实际测试了,从PC2访问PC1的时候,ARP请求广播包,只从E0/0/2发送给E0/0/3,这是因为两个口都配置成了accessvlan 10里面,那一个数据包过来交换机它具体是如何处理的呢?,这就要了解下VLAN以及access处理规则了。


VLAN在数据包中的体现

正常情况下,终端(个人电脑、手机、平板)服务器(非虚拟化场景)发出的数据包是不带VLAN标签的,叫做Untagged帧,以太网头部发出是什么样,就是什么样。

了解交换口的链路类型以及实际使用场景(access篇)_抓包_02

如果交换机的接口由管理员定义了某一个vlan,比如上图的vlan 10,那么当数据进入的时候它会执行一个操作,给这个以太网头部加入一个VLAN标签进去,这样交换机在转发的时候就知道,原来这个数据包是带有VLAN标签的,它就知道怎么进行转发操作了。为了保证所有厂商的交换机之间能够去识别带有VLAN的数据帧,并且进行对VLAN标签的处理,,IEEE组织推出了一个标准,叫做802.1Q。 

了解交换口的链路类型以及实际使用场景(access篇)_抓包_03

vlan标签(vlan tag)字段由4个字节组成,内容

了解交换口的链路类型以及实际使用场景(access篇)_数据_04

上一篇内容中,正式因为使用了VLAN技术,交换机利用VLAN标签中的VID来识别数据帧所属的VLAN,带有VLAN标签的数据帧只在同一个VLAN内转发,所以不管是ARP请求的广播报文还是未知单播帧这种泛洪操作,都被限制在了同一个VLAN内了。下面来了解下交换机具体是如何处理的。


接口链路类型access处理规则



了解交换口的链路类型以及实际使用场景(access篇)_数据帧_05

交换机在收到一个数据的时候,根据接口不同的链路类型会有不一样的操作,目前我们接触到的第一个链路类型是access,处理规则上面列出来了,可能第一次看理解不了,我们先看第一个规则,对接收不带Tag的报文处理,指的就是终端发出数据包的时候没有打VLAN标签的数据,标准的以太网头部,当这样一个数据抵达交换机的时候,交换机怎么处理呢?


PC2访问PC1的过程



了解交换口的链路类型以及实际使用场景(access篇)_数据帧_06

(1)PC2想访问PC1,首先要知道PC1的MAC,于是发送ARP请求。二层头部:| 源MAC PC2 |目的MAc  全F | 类型(ARP)| ARP请求 PC1的MAC

(2)交换机E0/0/2收到包的时候,由于接口配置了类型为access,根据规则

了解交换口的链路类型以及实际使用场景(access篇)_抓包_07

PC2发出的数据是不带Tag,这时候交换机会在二层以太网头部打上对应的VLAN TAG,这个时候以太网头部变成了:| 源MAC  PC2 | 目的MAC 全F | VLAN TAG 10| ARP请求 PC1 MAC

了解交换口的链路类型以及实际使用场景(access篇)_抓包_08

(3)交换机查看以太网头部,读取源MAC用于记录在MAC表中,体现为 PC2的MAC地址,从E0/0/2学习到,该接口属于VLAN 10;读取目的

MAC发现是全F,于是在除源接口所在VLAN内其他接口泛洪(存活接口),目前就E0/0/3属于VLAN 10,并且在线,所以数据包会从E0/0/3发出。

了解交换口的链路类型以及实际使用场景(access篇)_数据帧_09

(4)交换机发现从E0/0/3发出,接口属于access模式,PVID=10,这个时候交换机会做一件事情,将数据帧包含的TAG剥离,然后在发送出去。

(5)PC1收到来数据包后,就是一个正常的以太网头部,读取处理后,进行ARP回应。

试想下,如果交换机不做剥离标签的处理,PC1会收到一个有标签的数据包,通常的PC终端是没办法处理带有标签的以太网头部的,最终会丢弃。

了解交换口的链路类型以及实际使用场景(access篇)_数据_10

(1)PC1收到来自于PC2的请求后,PC1开始进行回应。  二层头部:| 源MAC PC1 |目的MAc  PC2| 类型(ARP)| ARP回应

(2)交换机E0/0/3收到该包后,由于该接口配置了类型为access,根据规则

了解交换口的链路类型以及实际使用场景(access篇)_抓包_11

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发出。

了解交换口的链路类型以及实际使用场景(access篇)_数据_12

(4)交换机发现从E0/0/2发出,接口属于access模式,PVID=10,将数据帧包含的TAG剥离,然后在发送出去。

(5)PC2收到数据包后,读取untag的以太网头部,就得到了PC1的MAC了,后续的交互就跟这个流程一样。

了解交换口的链路类型以及实际使用场景(access篇)_抓包_13

通过上面的分析,在回过头来看这个处理规则是不是就容易懂了,这里在说下缺省的VLAN ID 在access中则为接口配置的ID(比如上面配置的default vlan 10),缺省VLAN ID=接口下配置的default vlan 对应的 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,那交换机会怎么处理呢?

          

了解交换口的链路类型以及实际使用场景(access篇)_数据_14

对于规则,其实上面也提到了,但是光看不去感受,是不是觉得很抽象,正好eNSP模拟器支持这个功能,来测试下。(这里说下,并不是我偏爱eNSP,在搭建实验以及抓包、PC测试这块,eNSP确实要方便一些,大家学习起来更加容易理解,HCL的话都会有实验演示,所以学习华三的朋友不用担心。)

了解交换口的链路类型以及实际使用场景(access篇)_数据帧_15

按照上图介绍,开启抓包、然后设置好PC2的参数(模拟器自带一个UDP发包工具,可以打VLAN。)点击发送

了解交换口的链路类型以及实际使用场景(access篇)_数据_16

两边都收到包了。

了解交换口的链路类型以及实际使用场景(access篇)_数据_17

在发一次VLAN ID是100的

了解交换口的链路类型以及实际使用场景(access篇)_数据帧_18

这次PC1是没有收到这个UDP包的。

得到的结论是:当接口收到一个有TAG的数据包时,交换机会检查该tag的vid是否与接口配置的PVID一致,如果一致则通过,比如这里发出打上tag 10,接口属于VLAN 10是一致的,则通过,PC1收到了,如果不相同,比如后面发出打上tag 100,接口属于vlan 10,不一致,则丢弃,最终pc1没收到。


  • 抓包看看802.1Q

 上面已经抓包了,直接来看看它的字段。

了解交换口的链路类型以及实际使用场景(access篇)_抓包_19

抓包跟字段介绍有点点不一样,是因为抓包给优化了

  • 第一个type其实就是TPID字段为 0x8100,
  • 第二个type才是以太网头部中的类型,上层为IPV4(0800)
  • priority=5,PC设置的5,所以这里抓包看到的也是5
  • DEI就是上面说的CFI,以太网值为0
  • id=10,指的就是vid,数据的TAG


熟悉华三交换机配置

了解交换口的链路类型以及实际使用场景(access篇)_数据_20


以一个小实验,来熟悉下华三的配置,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手动设置地址)

了解交换口的链路类型以及实际使用场景(access篇)_数据帧_21


可以发现,抓包PC4是收不到任何的报文的,原理上面讲过了

了解交换口的链路类型以及实际使用场景(access篇)_数据_22

看MAC地址表也是一样,学习到2个MAC地址,G1/0/1以及G1/0/3接口,VLAN是10,所以它是不会给PC4发送的,因为PC4默认属于VLAN20里面。


实用的命令(细节部分建议看视频)

(1)查看当前VLAN有哪些

 华为display vlan  查看存在的VLAN以及对应接口; display vlan summary  查看当前创建了哪些VLAN。

 华三display vlan  查看当前创建了哪些VLAN;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篇)_数据帧_23

容易遇到的故障(经验分享)

 对于access模式来说,容易出错的地方在于接口加入VLAN的时候,把ID写错了,导致无法在同一个VLAN内进行传递,以及出去的时候无法剥离标签,另外建议多去做实验跟抓包,能够感受到数据包在整个转发过程中的变化,从而更容易理解access处理数据时候的规则。

 

了解交换口的链路类型以及实际使用场景(access篇)_数据帧_24

 作者:网络之路一天,公众号:网络之路博客(ID:NetworkBlog)。让你的网络之路不在孤单,一起学习,一起成长。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月20日 0

暂无评论

推荐阅读
xpmJefiPD9zg