学习思考:一日三问(学习篇)之匹配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接口为例来想象一下流程:
- 若不标签的帧进入交换机前,先打上接口默认标签,带标签的帧进下一步;
- 此时匹配接口的标签清单,清单里有就收到交换机内,没有就把帧拦下来(俗称丢弃);
- 查交换机MAC地址表,选择接口转发;
- 此时匹配接口的标签清单,清单有就发到对应接口处,没有就不让帧出去(俗称丢弃);
- 此时比对接口默认标签,默认标签与帧的标签相同就拆掉标签,如果不同就保持标签扔出去;
OK此时就有人疑惑了,假如是Access接口呢,那就意味着接口默认标签号=接口唯一允许通过标签清单=指定VLAN标号,此时代入上述过程再看看,结果如下:
收/发数据帧 | 有无标签 | 是否为接口默认标签 | 动作 |
---|---|---|---|
收 | 无 | 否 | 贴默认标签,匹配清单唯一放行项,收入交换机 |
收 | 有 | 是 | 匹配清单唯一放行项,收入交换机 |
收 | 有 | 否 | 不匹配清单唯一放行项,丢弃 |
发 | 有 | 是 | 匹配清单唯一放行项,转至出接口,撕掉标签 |
发 | 有 | 否 | 不匹配清单唯一放行项,丢弃 |
因为交换机内部都是带标签的,所以不存在发数据帧的时候有无标签帧
3.2 用代码逻辑来理解VLAN匹配方式
相信有些朋友看上述分析文字比较枯燥,所以可以参考下面这些伪代码,逻辑上还是比较清楚的:
# 当模式为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)
原文地址:https://blog.csdn.net/qq_26879323/article/details/144634756
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!