学习思考:一日三问(学习篇)之匹配VLAN

学习思考:一日三问(学习篇)之匹配VLAN

  • 一、学了什么(是什么)
    • 1.1 理解LAN与"V"的LAN
    • 1.2 理解"V"的LAN怎么还原成LAN
    • 1.3 理解二层交换机眼中的"V"的LAN
  • 二、为何会产生需求(为什么)
    • 2.1 局域网肆意扩张后的"分地运动"
  • 三、有什么用(怎么做)
    • 3.1 理解并灵活使用交换机对标签的处理方式
    • 3.2 用代码逻辑来理解VLAN匹配方式

一、学了什么(是什么)

1.1 理解LAN与"V"的LAN

家用路由器接口总能看到"LAN"的字样,中文翻译过来称为局域网,我们是否可以将家用路由器功能拆分为以下拓扑?

倘若我们直接理解为LAN为交换机直连的链路就好处理了,理解为仅需二层提供通讯,无需三层路由的一块区域,在此区域下可实现广播、组播与无目的MAC的单播帧泛洪区域。

那进一步,我们再理解"V"的LAN就好理解了,V就是虚拟的,理解为逻辑上的,组织一下语言就是"逻辑上的局域网",意味着这块区域不管长啥样,逻辑上就是个局域网,逻辑上和上面的LAN没啥区别,三个电脑中的一台发广播帧,其余两台都能收到,OK,理论存在,实践开始。

上面是个乱七八糟的VLAN分配图,咱们可以按照"V"的LAN的逻辑思维,可以整理成底下这样,"V"的LAN和实际LAN在逻辑上一致,我们这里可以想象各自LAN被路由器隔离广播域,如果需要"V"的LAN间互通,我们按照三层路由逻辑做通就行,假设我们有三层交换机,则每个连接LAN的接口此时改名为"V"的LAN的Interface,简称vlanif,默认一个vlanif绑定着对应编号的"V"的LAN,例如vlan 5逻辑上连接下图"路由器"的接口叫vlanif 5,在此接口上配置IP作为vlan 5的网关,再走路由互访就行,更为复杂的路由方式那就起个OSPF或者静态就行。

1.2 理解"V"的LAN怎么还原成LAN

"V"的LAN在原有LAN的帧头中加了一个字段,帧字段区别可见此篇文章:没别的,就聊聊VLAN

所以交换机收到时,把帧头的"标签"贴上,再转手传给其他交换机。扔给路由器或者计算机的时候把"标签"撕掉就行。就想象咱们平常送礼前撕标签的感觉就行。

1.3 理解二层交换机眼中的"V"的LAN

在二层交换机中,"V"的LAN也是LAN,但是要同贴上一样标签的LAN才是一个LAN,不同标签的LAN就是不同LAN,所以此时交换机按道理来说,还需要在收发接口上维系一个标签清单,允许哪些标签的帧从哪个接口出去,而且对于没有标签的帧,为了保持格式统一性,应当打上接口的默认标签(默认标签为1),所有帧在交换机内都是带标签的,遇到同为接口的默认标签号的接口发出就撕掉标签,整理一下,交换机需要这些东西:

  • 接口默认标签号
  • 接口允许通过标签清单

二、为何会产生需求(为什么)

2.1 局域网肆意扩张后的"分地运动"

局域网设备扩大后。广播范围也会越来越大,有些敏感部门需要隔离其他业务部门,所以在原有的庞大LAN范围内,期望能利用一些二层的字段相互隔离不同类型的数据帧,所以不妨把帧都打上标签,用交换机匹配帧,实现放行或拒绝带特定标签的帧。

三、有什么用(怎么做)

3.1 理解并灵活使用交换机对标签的处理方式

交换机常见的两种"V"的LAN接口:Access和Trunk,而我们实现的目标是:终端发出的无标签帧,带上指定标签,准确到达同标签区域,并以无标签的形式,将帧发给目标主机 。所以从需求来看,两种接口类型可以想象成一种接口,即:带有标签放行清单与默认贴撕标签能力的接口。我们以Trunk接口为例来想象一下流程:

  1. 若不标签的帧进入交换机前,先打上接口默认标签,带标签的帧进下一步;
  2. 此时匹配接口的标签清单,清单里有就收到交换机内,没有就把帧拦下来(俗称丢弃);
  3. 查交换机MAC地址表,选择接口转发;
  4. 此时匹配接口的标签清单,清单有就发到对应接口处,没有就不让帧出去(俗称丢弃);
  5. 此时比对接口默认标签,默认标签与帧的标签相同就拆掉标签,如果不同就保持标签扔出去;

OK此时就有人疑惑了,假如是Access接口呢,那就意味着接口默认标签号=接口唯一允许通过标签清单=指定VLAN标号,此时代入上述过程再看看,结果如下:

收/发数据帧 有无标签 是否为接口默认标签 动作
贴默认标签,匹配清单唯一放行项,收入交换机
匹配清单唯一放行项,收入交换机
不匹配清单唯一放行项,丢弃
匹配清单唯一放行项,转至出接口,撕掉标签
不匹配清单唯一放行项,丢弃

因为交换机内部都是带标签的,所以不存在发数据帧的时候有无标签帧

3.2 用代码逻辑来理解VLAN匹配方式

相信有些朋友看上述分析文字比较枯燥,所以可以参考下面这些伪代码,逻辑上还是比较清楚的:

python 复制代码
# 当模式为Access时,VLAN列表仅有一个允许项,即接口标签号,默认为1
if InPort.mode == "Access":
	InPort.allow_vlan_list = [Inport.default_tag]
if OutPort.mode == "Access":
	OutPort.allow_vlan_list = [Outport.default_tag]
# 对齐带Tag的帧格式(Port.default_tag默认为1)
if Frame.tag == null:
	Frame.add(InPort.default_tag)
# 如果帧标签在in接口允许清单中,则进行下一步,无则丢弃
if Frame.tag in InPort.allow_vlan_list:
	InPort.pass(Frame)
	# 查询MAC地址表,有表项则丢到对应接口,进行下一步,无则丢弃
	OutPort = Switch.search(Frame)
	if OutPort != null:
		# 如果帧标签在out端口允许清单中,则进行下一步,无则丢弃
		if Frame.tag in OutPort.allow_vlan_list:
			# 如果帧标签和out接口默认标签一致,则撕掉标签转发;
			# 如果不一致则直接转发
			if Frame.tag == OutPort.default_tag:
				Frame.take_off_tag()
			# out接口转发帧
			OutPort.forward(Frame)
		else:
			OutPort.discard(Frame)
	else:
		Switch.discard(Frame)
else:
	InPort.discard(Frame)
相关推荐
虾球xz1 分钟前
游戏引擎学习第194天
c++·学习·游戏引擎
残诗28 分钟前
ar头显和眼镜图像特效处理
网络·网络协议
xinxiyinhe29 分钟前
GitHub上免费学习工具的精选汇总
学习·github
。puppy1 小时前
HCIA—— 31 HTTP的报文、请求响应报文、方法、URI和URL
网络·网络协议·http
傍晚冰川1 小时前
【STM32】WDG看门狗(学习笔记)
c语言·笔记·科技·stm32·单片机·嵌入式硬件·学习
Moonnnn.2 小时前
运算放大器(三)运算放大器的典型应用
笔记·学习·硬件工程
为什么要内卷,摆烂不香吗2 小时前
HCIP之VRRP
网络
技术小齐2 小时前
网络运维学习笔记(DeepSeek优化版)026 OSPF vlink(Virtual Link,虚链路)配置详解
运维·网络·学习
秋名RG3 小时前
HTTP 1.0和2.0 有什么区别?
网络·网络协议·http
mex_wayne3 小时前
强化学习课程:stanford_cs234 学习笔记(2)introduction to RL
笔记·学习