2024-03-24
大学课程
00

目录

1 VLAN 虚拟局域网
1.1 VLAN帧
1.2 链路类型和接口类型
1.3 VLAN内互访
1.4 VLAN间互访
2 三层交换机进行跨VLAN通信配置示例
3 资料来源

主要内容:

  1. VLAN说明
  2. 三层交换机进行跨VLAN通信配置

(内心OS:网上资料怎么这么少啊,华为和思科的设备叫法还不一样,理论上明明用的是一个技术。一开始查的全是华为设备的信息,坑惨我了。)

1 VLAN 虚拟局域网

提示

以下的内容,如果没有特别标注区分华为和思科设备的话,都是通用的。

常见网络设备/概念 && 虚拟机网络三种连接方式说明 && UDP广播 多播这里面提到过,VLAN最主要的目的就是为了划分广播域(这个说法和划分子网个人认为是原理不同但是等效的)。本来一个交换机(如果不明确具体是哪一层工作的交换机,在本文中一律视为二层交换机)只能构建一个广播域,通过VLAN就可以将这个单一网络划分为多个广播域。VLAN的优势在于划分子网和广播域以节省带宽的同时,更加易于管理,网络结构也更加灵活。

1.1 VLAN帧

要使设备能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用以标识VLAN信息。设备利用Tag内的VID来识别数据帧所属的VLAN。

Tag结构如下:

  • TPID:Tag Protocol Identifier,标签协议标识符,表示数据帧类型。如果该字段取值0x8100,则表示这是IEEE 802.1Q协议下的VLAN数据帧,不支持802.1Q协议的设备接收后会将其丢弃。各个设备厂商也可以自定义该字段的值。
  • PRI:Priority,优先级。取值0~7,值越大优先级越高。
  • CFI:Canonical Format Indicator,标准格式指示位,表示MAC地址在不同的传输介质中是否以标准格式进行封装。在以太网中,该字段取值为0。
  • VID:VLAN ID,表示该数据帧所属VLAN的编号,排除掉协议保留的0和4095,该字段有效取值范围为1~4094。

在一个网络中,以太网帧要么是加了Tag的帧(Tagged),要么没加Tag(Untagged)。在网络设备中,用户终端和Hub只能收发Untagged帧;交换机、路由器和AC能够收发Tagged帧和Untagged帧;语音终端,AP能够同时收发一个Tagged帧和一个Untagged帧。

华为设备内部处理的数据帧一律都是Tagged帧,思科设备只有Trunk接口出来的数据帧是Tagged帧。

本文中,设备一般指网络设备,如路由器,交换机等网络中间设备;用户终端一般指个人电脑,服务器等网络末端设备。

AC(Wireless Access Point Controller):接入控制器,负责汇集来自区域内无线网络中的所有AP的数据并接入网络,还负责管理所有AP的网络设备。不严谨的说,可以看作无线网络版本的路由器。

AP(Wireless Access Point):无线网络接入点,是无线网络版本的交换机,是移动设备进入有线网络的接入点。

1.2 链路类型和接口类型

链路类型

  • 接入链路(链路两端是Access接口):只能承载一个VLAN的链路,用于连接设备和用户终端。通常情况下,用户终端并不需要知道自己属于哪个VLAN,也不能识别带有Tag的帧,所以在接入链路上传输的帧都是Untagged帧。
  • 干道链路(Trunk链路,链路两端是Trunk接口):可以承载多个VLAN的链路,用于设备间互连。为了保证其它网络设备能够正确识别数据帧中的VLAN信息,在干道链路上传输的数据帧都必须是Tagged帧。

接口类型

  • Access接口:一般用于和不能识别Tag的用户终端(如用户主机、服务器等)相连,或者不需要区分不同VLAN成员时使用。它只能收发Untagged帧,且只能为Untagged帧添加唯一VLAN的Tag。
  • Trunk接口:一般用于连接交换机、路由器、AP以及可同时收发Tagged帧和Untagged帧的语音终端。它可以允许多个VLAN的帧带Tag通过,但只允许一个VLAN的帧从该类接口上发出时不带Tag。
  • Hybrid接口:Access接口和Trunk接口的使用场景,Hybrid接口都能用。它可以允许多个VLAN的帧带Tag通过,也允许根据配置决定哪些VLAN的帧必须带Tag从该接口发出,哪些VLAN的帧可以不带Tag从该接口发出。

大部分情况下,Hybrid接口和Trunk接口能混用,但是在某些情况下,必须使用Hybrid接口,比如说一个接口连接不同VLAN网段的场景中,因为该接口需要给多个Untagged报文添加Tag,所以必须使用Hybrid接口。 这段目前存疑。

(思科设备不清楚有没有Hybrid接口,就先当是有吧)

缺省VID(PVID):由于设备处理的数据帧都带Tag,当设备收到Untagged帧时,就需要给该帧添加Tag,添加什么Tag,就由接口上的缺省VLAN决定。

  • Access接口:PVID即为它允许通过的VLAN的VID。
  • Trunk接口和Hybrid接口:PVID需要另外配置。一个接口允许多个VLAN通过,但是PVID只能有一个。

本征VLAN(Native VLAN)(仅限思科设备):这个概念和PVID很接近,但是是两个概念。它的目的是为了维护Untagged数据的向下兼容性,是Trunk链路两端的公共标识符,可以通过show interfaces f0/1 switchport来查看。默认情况下,思科设备的Trunk和Hybrid接口的本征VLAN的VID为1。(目前它的具体行为还是未知)

image.png

管理VLAN(仅限思科设备):它是方便远程管理交换机用的,默认是VLAN1。通过它,终端设备可以直接远程对交换机进行配置。也因此,最好不要将自定义的VLAN的VID配置成1。

接口行为

接口类型接收Untagged帧的行为(由用户终端发送)接收Tagged帧的行为(由设备发送)发送帧的具体行为
Access接口接收该数据帧,并且打上PVID对应的Tag当该数据帧的VID和PVID相同时,接收该数据帧;否则丢弃该帧去掉Tag再发送
Trunk接口先打上PVID对应的Tag。如果PVID在允许通过的VID列表里,就接收该帧,反之则丢弃如果Tagged帧的VID在允许通过的VID列表里,就接收该帧,反之则丢弃当发送帧的VID和PVID相同,并且在允许通过的VID列表里,则去掉Tag并且发送该帧;当发送帧的VID和PVID不同,并且在允许通过的VID列表里,则保持原有的Tag再发送
Hybrid接口(这一行仅限华为设备)同Trunk接口同Trunk接口当发送帧的VID在允许通过的VID列表里,就发送该帧。可以通过命令来配置发送时是否携带Tag发送

1.3 VLAN内互访

提示

以下内容对华为设备有效,思科设备不清楚。猜测也仅有在数据帧进入和送出交换机时,是否打Tag有区别。思科设备只会在数据帧从Trunk接口发出时打上Tag,其他部分应该都是一致的。

要是现场有个思科设备让我抓包我也不至于一个劲猜了。

同一VLAN内的用户互访一般会经过以下三个环节:

  1. 用户主机的报文转发:源主机在发起通信之前,会将自己的IP与目的主机的IP进行比较,如果两者位于同一网段,会尝试获取目的主机的MAC地址,并将其作为目的MAC地址封装进报文;如果两者位于不同网段,源主机会获取网关的MAC地址,并将其作为目的MAC地址封装进报文,以将报文递交给网关。
  2. 设备内部的以太网交换
    • 如果目的MAC地址+VID能够匹配自己的MAC表且三层转发标志置位,则进行三层交换,会根据报文的目的IP地址查找三层转发表项,如果没有找到会将报文上送CPU,由CPU查找路由表实现三层转发。
    • 如果目的MAC地址+VID能够匹配自己的MAC表但三层转发标志未置位,则进行二层交换,会直接将报文根据MAC表的出接口发出去。
    • 如果目的MAC地址+VID不能匹配自己的MAC表,则进行二层交换,此时会向所有允许VID通过的接口广播该报文,以获取目的主机的MAC地址。
  3. 设备之间交互时,VLAN标签的添加和剥离:设备内部的以太网交换都是带Tag的,为了与不同设备进行成功交互,设备需要根据接口的设置添加或剥除Tag。不同接口VLAN标签添加和剥离情况不同。

同设备下VLAN内互访:

image.png

当用户主机PC0发送报文给用户主机PC1时,报文的发送过程如下(假设Switch0上还未建立任何转发表项):

  1. PC0判断目的IP地址跟自己的IP地址在同一网段,于是发送ARP广播请求报文获取目的主机PC1的MAC地址,报文目的MAC填写全F,目的IP为PC1的IP地址192.168.1.11。
  2. 报文到达Switch0的接口F0/1,发现是Untagged帧,给报文添加VID=10的Tag(Tag的VID=接口的PVID),然后根据报文的源MAC地址、VID和报文入接口(PC0的MAC地址、10、F0/1)生成MAC表。
  3. 根据报文目的MAC地址+VID查找Switch0的MAC表,没有找到,于是在所有允许VLAN2通过的接口中(比如F0/2)广播该报文。
  4. 接口F0/2在发出ARP请求报文前,根据接口配置(Access),剥离VID=10的Tag。
  5. PC1收到该ARP请求报文,将PC0的MAC地址和IP地址对应关系记录ARP表。然后比较目的IP与自己的IP,发现跟自己的相同,就发送ARP响应报文,报文中封装自己的MAC地址,目的IP为PC0的IP地址192.168.1.10。
  6. Switch0的接口F0/2收到ARP响应报文后,同样给报文添加VID=10的Tag。
  7. Switch0根据报文的源MAC地址、VID和报文入接口(PC1的MAC地址,10,F0/2)生成MAC表,然后根据报文的目的MAC地址+VID(PC0的MAC地址,10)查找MAC地址表,由于前面已记录,查找成功,向出接口F0/1转发该ARP响应报文。
  8. Switch0向出接口F0/1转发前,同样根据接口配置(Access)剥离VID=10的Tag。
  9. PC0收到PC1的ARP响应报文,将PC1的MAC地址和IP地址对应关系记录ARP表。

不同设备间VLAN内互访:

image.png

  1. 经过和同设备下VLAN内互访内第一、二步一样的过程后,报文被广播到Switch0的F0/2接口。
  2. Switch0的F0/2接口在发出ARP请求报文前,因为接口的PVID=1(缺省值),与报文的VID(10)不相等,直接传送该报文到Switch1的F0/1接口,不剥除报文的Tag。
  3. Switch1的F0/1接口收到该报文后,判断报文的Tag中的VID=10是接口允许通过的VLAN,接收该报文。
  4. 经过与同设备VLAN内互访内的第三到六步一样的过程后,Switch1将向其出接口F0/1转发PC2的ARP响应报文,转发前,因为接口F0/1为Trunk接口且PVID=1(缺省值),与报文的VID不相等,直接透传报文到Switch0的F0/2接口。
  5. Switch0的F0/2接口收到PC2的ARP响应报文后,判断报文的Tag中的VID=10是接口允许通过的VLAN,接收该报文。后续处理同同设备VLAN内互访的第七步到第九步一样。

1.4 VLAN间互访

这一段华为和思科的设备说法不一,但是大体的理论基础都是为VLAN设置一个虚拟的接口,然后把网关设置到这个虚拟的接口上,开始路由/三层转发。思科的设备叫这个虚拟接口为SVI(Switched Virtual Interface),华为的可以设置两种接口,一个是VLANIF接口,和思科的SVI接口有点类似;另一个是Dot1q终结子接口,它能把多个VLAN都接到这一个虚拟接口上,不消耗IP地址,但是网络繁忙时有可能会成为通信瓶颈。

以思科的设备为例,一种方法是传统路由来实现,结构是这样子:

image.png

一种方法是单臂路由,拓扑和上面那个方法差不多,就是路由器和交换机之间只有一根线,能同时传多个VLAN的数据。

另一种方法是基于三层交换机来做,结构是这样:

image.png

单臂的理论基础,简单来说就是用户终端网关到路由,由路由表匹配到另一个VLAN对应的路由接口,从该接口再出发去目的地。它的理论足够简单,但是问题在于VLAN间通信一次,单臂的这个“臂”上通信就要传两次数据,还带一次路由的时间,在网络繁忙的时候极其容易成为通信速度的瓶颈。

三层路由的理论基础就是,在三层路由器上配置SVI,然后用户终端网关到这个SVI上。需要VLAN间互访时,数据帧到了实际和这个用户终端相连的物理接口上,会被转给路由模块的虚拟接口上,再路由到另一个VLAN对应的虚拟接口上再转发出去。大体是这样的:

2 三层交换机进行跨VLAN通信配置示例

拓扑图:

image.png

提示

3560三层交换机拖上去就直接开机了。3650不行,必须把电源模块拖上去才行:

image.png

四个PC机配置IP略。

交换机配置示例如下:

enable config t vlan 10 // 创建vlan exit vlan 20 exit interface fa0/1 // 配置fa0/1接口 switchport access vlan 10 // 接口是access模式 允许vlan10通过 exit interface fa0/2 switchport access vlan 20 exit interface fa0/3 switchport mode trunk // 配置接口为trunk模式 switchport trunk allowed vlan all // trunk模式下 允许所有vlan通过

三层交换机配置示例如下:

enable config t vlan 10 exit vlan 20 exit interface g1/0/1 switchport mode trunk // 配置接口为trunk模式 switchport trunk allowed vlan all // trunk模式下 允许所有vlan通过 exit interface vlan 10 // 创建SVI ip address 192.168.10.10 255.255.255.0 // 配置SVI的ip地址 exit interface vlan 20 // 创建SVI ip address 192.168.20.10 255.255.255.0 // 配置SVI的ip地址 exit ip routing // 开启三层交换机的路由功能

配置完成后vlan之间可以互相通信,三层交换机处可以看到路由信息(do show ip route)。

image.png

image.png

3 资料来源

VLAN基础知识

VLAN端口类型详解——Huawei、Cisco

思科Native vlan(本征VLAN)

林一木 Cisco 交换机配置的基本命令

cisco(三层交换和动态路由,不同vlan间的通信,静态路由实现全网互通)

三个案例场景带你掌握Cisco交换机VLAN互通

2万字18图带你详解VLAN技术

Cisco | 使用外部路由器配置 VLAN 间路由

思科vlan与华为vlan 介绍以及配置命令对比

请问这个命令的出处在哪里?(encapsulation dot1Q vlan-id primary~)

本文作者:御坂19327号

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!