前文我们主要聊了下交换机的工作原理和以太网接口的速率和双工相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15088183.html;今天我们主要来聊一聊二层交换技术vlan相关话题;
在二层交换技术中vlan的概念是相当重要的,我们知道交换机天生就有隔离冲突域的特点,但它不隔离广播域;如果在一个大型的网络环境中,接入的终端设备过多,那么对于二层网络来讲,广播报文可能成为影响网络性能的“罪魁祸首”;为了解决广播域带来的广播风暴,vlan技术由此诞生;什么是vlan呢?vlan就是virtual local area network的首字母缩写;翻译成中文就是虚拟局域网;它可以将一台物理交换机逻辑的划分为多个不同广播域;从而实现隔离广播域;
vlan技术
提示:vlan工作在二层,所以它更不看ip地址,所以不管是不是同一网段,默认情况下只要不再同一vlan都不可通信,其原因就在于vlan隔离了广播域,那么对于不同vlan的两个设备通信,首先A设备发送arp请求广播,设备B收不到,从而设备A也无法拿到设备B的mac地址,没有mac地址在以太网环境中就无法封装以太网协议包;这里必须提醒一下,在同一vlan中的两个设备通信,必须是同一网段;可能有的同学会感到奇怪,二层通信不是不看ip地址的吗?怎么在同一vlan下两者的ip地址必须是同一网段才能通信呢?其实两个网络设备通信时,首先会看ip地址是不是同一网段,如果是同一网段,那么在以太网环境中,二层封装就封装对方的mac地址,如果本端没有对方的mac地址,则本端发送arp请求广播;如果有,则直接封装对方的mac地址;如果不在同一网段,那么二层封装就会封装网关的mac地址;如果有网关的mac就直接封装,如果没有就发送arp请求广播;
提示:有了vlan,其实我们可以理解为把一个物理交换机逻辑的划分了多个交换机;只有在同一vlan下的接口可以相互收到广播,不同vlan下的接口是收不到对方的广播;如上f0/1发送一条arp请求广播,那么就只能在f0/2接口上收到此广播,对于f0/3和f0/4这两个接口,它们是无法收到f0/1发送到arp请求广播;
提示:对于不同交换机来讲,只要vlan相同的接口都可以通信;比如A交换机上的vlan3是可以和B交换机上的vlan3通信的;同样的道理一个大型网络里,只要vlan相同,都可以互相逻辑的组织成一个局域网;从上面的示例可以看到,有了vlan,我们就可以根据业务和现场网络环境的不同来划分对应的vlan;从而提高网络性能,隔离广播域的同时也为网络管理员带来了管理上的方便;
总结:vlan的优点
1、有效控制广播域的范围;
2、增强局域网的安全性(这个安全性主要是从有vlan和没有vlan,受攻击的范围来讲);
3、灵活构建虚拟工作组(我们可以根据不同业务,不同部门等来划分vlan,从而实现在二层彼此隔离);
4、简化网络管理(这个有点主要体现在二层网络出现故障,能快速找到原因);
VLAN范围
提示:vlan范围是0-4095,0和4095为保留,默认是vlan 1 ;
vlan标签
不带标签的数据包格式
提示:不带标签的数据包在二层以太网封装就只有目标mac和源mac地址以及type,后面就是ip头部和数据;
带标签的数据包格式
提示:带标签的数据包在原有没有标签的数据包多了一个802.1q的头部,其中里面有vlan id,后面接type 和ip头部和数据;
提示:IEEE 802.1q:dot1q,是VLAN的正式标准,对 Ethernet 帧格式进行了修改,在源 MAC 地址字段和协议类型字段之间加入 4 字节的 802.1q Tag每台支持 802.1q 协议的交换机发送的数据包都会包含 VLAN ID,以指明交换机属于哪一个 VLAN。因此,在一个 VLAN 交换网络中,以太网帧有以下两种形式有标记帧(tagged frame)和无标记帧(untagged frame);
vlan链路类型
1、接入链路(access link): 用于连接主机和交换机的链路。接入链路上传输的帧都是untagged帧。
2、干道/中继链路(trunk link):用于交换机间的互连或交换机与路由器之间的链路。干道链路上传输的帧几乎都是tagged帧用于两端识别。只有对应数据包的标签和trunk的pvid相等时,干道链路之间就是以untagged帧;
PVID
PVID是Port Vlan ID 的缩写,代表端口的缺省VLAN;X7系列交换机每个接口PVID=1
VLAN端口类型
1、access(接入端口):用于连接主机,该端口有收到数据后会添加VLAN Tag,VLAN ID和端口的PVID相同。转发数据前会移除VLAN Tag。
提示:正常情况下主机和主机的通信,其数据包里是没有标签的,如果有标签主机是无法识别的;所以在主机A和主机C通信,最后到达主机c的数据包一定是没有标签的,否则两者不可能互通;上图主机A向主机C通信,首先主机A发送一个无标签的数据包给交换机;交换机的g0/0/1口收到该数据包以后,会根据其端口的属性(如access类型),它会把主机A发送到数据包打上标签,以表示该端口属于那个VLAN;打好标签以后,交换机会查找mac地址表,看看有没有主机C的mac地址,如果有,就直接将数据包转发给对应的接口,如果没有泛洪(这里泛洪只是在同一vlan里泛洪,不是同一vlan的接口是收不到对应的数据包);当数据包从g0/0/3转发时,交换机又会根据g0/0/3的端口属性(如access端口,在转发数据时,它会看对应数据包里是否有标签,如果有,然后对比是否和本端口的pvid相同,如果相同则剥离该标签,然后将数据包发送出去);最后主机C就收到主机A的数据包;回包也是一样的过程;
2、Trunk(干道端口):用于连接交换机或路由器,干道端口有如下特点,收到帧时,如果该帧不包含Tag,将打上端口的PVID;如果该帧包含Tag,则不改变。发送帧时,该帧的VLAN ID在Trunk的允许发送列表中:若与端口的PVID相同时,则剥离Tag发送;若与端口的PVID不同时,则直接发送。
提示:主机A和主机C通信,首先主机A发送的数据包是不带标签的,在交换机收到主机A发送的数据包是首先会将其打上对应端口的pvid的标签(与主机相连的接口是access,收到没有标签的数据包会打上对应端口的pvid的标签),在打好标签以后,交换机会根据mac地址表进行数据包转发,然后从swa的trunk口发送,在发送之前,交换机会查看转发的数据包是否带标签,如果带标签,它会再查看对应标签是否允许在trunk口通过,如果在允许的列表里,它会和trunk口的pvid做比较,看看是否和trunk的pvid相等,如果相等就把对应标签给剥离了,然后在发送;如果不相等则直接发送;如果不被允许则丢弃;所以主机A和主机C通讯,在trunk之间传输就是以untagged的形式传输;而主机B和主机D通讯就不一样了,在trunk允许类表里,但不和对应trunk的pvid相同,所以主机B和主机D的通信是以有标签的形式传输;
3、Hybrid(混杂端口):该类型端口既可以连接主机,又可以连接其他交换机。既可以连接接入链路又可以连接干道链路。允许多个 VLAN 的帧通过,并可以在出接口方向将某些 VLAN 帧的Tag剥掉(由命令决定);
提示:hybrid端口可以根据实际的网络环境设置是否带标签,它可以实现特定的访问需求;它可以允许多个vlan在一条链路上以untagged的形式通过,而对应trunk端口只能允许缺省vlan以untaged的形式通过;
配置vlan
实验:如下拓扑,配置vlan
配置sw1
sys sys sw1 vlan batch 10 20 int g0/0/2 port link-type access port default vlan 10 int g0/0/3 port link-type access port default vlan 20 int g0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 port trunk pvid vlan 10
配置sw2
sys sys sw2 vlan batch 10 20 int g0/0/2 port link-type access port default vlan 10 int g0/0/3 port link-type access port default vlan 20 int g0/0/1 port link-type trunk port trunk allow-pass vlan 10 20 port trunk pvid vlan 10
验证sw1上的vlan
提示:可以看到在sw1上有三个vlan,vlan 10和20是我们刚才新建的,vlan1是默认就有的;其中vlan 10有两个端口,其中g0/0/1和g0/0/2口untagged不带标签;vlan20 中g0/0/3是untagged不带标签,但在g0/0/1口是以带标签通过;第二条命令中可以看到g0/0/2和g0/03口是access接口,并且各自属于不同的vlan;g0/0/1口为trunk口,缺省vlan10 ,允许vlan 1 10 20 通过;
验证sw2上的vlan
验证:配置好各主机的ip地址,看看pc1是否能ping 通pc2,pc3 或pc4 ?
pc1 ping pc2
提示:pc1 ping pc2 直接提示我们目标主机不可达;其原因是pc1 和pc2不再同一网段,所以它会找网关,而我们在主机上又没有配置网关;
pc1 ping pc3
提示:可以看到pc1能够正常ping通pc3,其原因是pc1 和 pc3是同一网段,并且两者都属于vlan10(在同一广播域),所以pc1发送的arp请求广播,pc3能够正常收到并回复;
pc2 ping pc4
提示:可以看到pc2也是可以正常ping通pc4;
配置hybrid
实验:如下拓扑,实现主机5不能访问主机6,主机5和主机6可以正常访问主机7
配置sw3
sys sys sw3 vlan batch 5 to 7 int g0/0/2 port link-type hybrid port hybrid pvid vlan 5 port hybrid untagged vlan 5 7 int g0/0/3 port link-type hybrid port hybrid pvid vlan 6 port hybrid untagged vlan 6 7 int g0/0/1 port link-type hybrid port hybrid tagged vlan 5 6 7
配置sw4
sys sys sw4 vlan batch 5 to 7 int g0/0/2 port link-type hybrid port hybrid pvid vlan 7 port hybrid untagged vlan 5 6 7 int g0/0/1 port link-type hybrid port hybrid tagged vlan 5 6 7
验证:在sw3上查看对应接口vlan信息
提示:可以看到在sw3上创建了3个vlan,分别为vlan 5,vlan 6,vlan 7;在vlan5里,g0/0/2是以untagged不打标签的形式通过数据包;在g0/0/1口是以打标签的方式通过;在vlan6里,g0/0/3口是不打标签的方式通过,g0/0/1口是打标签的方式通过;在vlan7里g0/0/2口和g0/0/3口都是以不打标签的方式通过;在g0/0/1口是以打标签的方式通过;以上描述数据包通过该接口是从该接口出去时是否带标签;
验证:查看sw3的接口类型
提示:可以看到g0/0/1,2,3口的类型都为hybrid接口;其实从上面的的截图也可以看到,g0/0/1接口有点类似trunk接口,允许带有vlan 5,6,7标签的数据包通过;
验证:查看sw4上的vlan信息
提示:可以看到在sw4上不管是vlan5,vlan6,vlan7在g0/0/2口都是以untagged方式通过;在g0/0/1口都是以tagged的方式通过;
验证:pc5 ping pc7和pc 6 看看是否ping通?
提示:可以看到pc5可以正常ping通pc7,ping不同pc6;其原因是pc5发送的数据包在通过g0/0/2口时会被打上vlan 5的标签(pc5发出的数据不带标签,hybrid接口收到一个未打标签的数据包会打上自己pvid的标签,以表示自己属于某个vlan),而连接pc6的g0/0/3接口没有允许带有vlan 5标签的数据包通过,所以对于pc6来说,它根本就收不到pc5的数据包;同样的道理pc6发送的包,pc5也收不到,两者相互隔离;pc5能够ping通pc7的原因是在sw3的g0/0/1口允许带有vlan5标签的数据通过,在sw4的g0/0/1口允许带有vlan5标签的数据包通过;在sw4的g0/0/2口允许带有vlan5标签的数据包,剥离其标签通过,所以pc5的数据包最终达到pc7是剥离其标签,所以pc5能够将数据包送给pc7;当pc7回复pc5的包时,在通过sw4的g0/0/2口时会被打上vlan7的标签;在从g0/0/1接口发送出去也是以tagged方式发送,并且sw4和sw3的g0/0/1接口都允许vlan7通过,所以pc7的数据包达到sw3时,是有vlan7标签的;在数据包从sw3的g0/0/2口发送出去时,vlan7的标签会被剥离掉(sw3的g0/0/2口允许带有vlan5和vlan7的数据包剥离标签发送);所以最终pc7的数据包能够顺利到达pc5,两者实现互通;
验证:pc6 ping pc5 pc7 是否ping通?
提示:可以看到pc6 ping pc5 ping不同,ping pc7可以正常ping通,其通信过程和上述pc5 ping pc6 pc7的过程一样;