VLAN及Trunk,重要!看瑞哥如何讲的明明白白!

2020-11-04 15:34:36 浏览数 (1)

  • VLAN 的基本概念
  • Access 类型的接口
  • Trunk 类型的接口
  • 接口类型小结
    • 1. 以太网交换机的二层接口类型
    • 2. Access口接收帧
    • 3. Access口发送帧
    • 4. Trunk口接收帧
    • 5. Trunk口发送帧
    • 6. Hybrid口接收帧
    • 7. Hybrid口发送帧
  • VLAN 及 Trunk 的基础配置
    • 1. VLAN相关的基础配置命令
    • 2. VLAN基础配置示例
    • 3. VLAN及Trunk基础实验
  • Hybrid 接口的配置
    • 1. Hybrid接口用于连接终端PC
    • 2. Hybric接口用于连接交换机
    • 3. 基于IP地址识别VLAN的功能
  • QinQ
  • 二层接口、三层接口、以及 PVID、VLAN-ID 等概念杂谈

VLAN 的基本概念

对于一台二层交换机来说,缺省时整机的所有接口属于一个广播域。这意味着,只要连接到这个交换机的PC都配置在同一个IP子网内,即可直接进行互相访问,而且更重要的一点是,处于同一个广播域内的某个节点只要发送一个广播数据帧,在这个广播域内的所有其他节点都会收到这个数据帧,并且耗费资源来处理(即使它可能并不需要这个数据帧)。当这个广播域变得特别大(交换机上连接的用户数量特别多)时网络就非常有可能被大量的广播消耗掉大量资源。

另一方面,实际的网络中经常存在这样的需求:连接在同一个交换机上的用户有可能是不同的业务单元或者部门的,用户希望对它们进行隔离,或者以独立的网络单元进行管理。

基于上述需求,引入了VLAN的概念,所谓VLAN,也即Virtual LAN,是一个虚拟的、逻辑的LAN,通过VLAN技术,可以在交换机上,根据接口等信息进行VLAN的划分,从而实现设备的隔离。

在上图中,用户在交换机上创建了2个VLAN,然后将相应的接口添加到指定的VLAN中——将接口1、2添加到了VLAN10,将接口23、24添加到了VLAN20。这样一来,接口1、2所连接的PC就加入了VLAN10,它俩处于同一个LAN、同一个广播域内,这些PC只要配置同一个网段的IP地址,就能够直接进行互访了(我们将这种通信称为二层互通)。而接口23、24处于VLAN20,即处于另一个LAN、另一个广播域。属于VLAN20的PC之间能够直接进行互访。不同的VLAN之间,用户是被隔离的(除非借助路由设备,此时,这种这种通信行为就是三层通信了),当然,一个VLAN内的广播数据帧并不会被泛洪到另一个VLAN,因为它们属于不同的广播域。

有了VLAN技术,网络设计将更加灵活。VLAN是一个虚拟的LAN,不受地理环境的限制。我们可以根据实际的业务需要,灵活地进行VLAN的规划,例如将不同的业务部门规划到不同的VLAN中。另外,VLAN还可以跨交换机实现,因此VLAN的成员,例如业务PC,所处的位置就非常灵活了。

下面做一个小结:
  1. 一个VLAN中所有设备都在同一广播域内,不同的VLAN为不同的广播域;
  2. 相同的VLAN内的用户可以直接进行通信,这种通信被称为二层通信,而不同的VLAN之间互相隔离,广播数据不能跨越VLAN传播,因此不同VLAN之间的设备一般无法直接互访,需通过具备三层路由功能的设备(例如路由器、三层交换机或防火墙等)实现相互通信;
  3. 一个VLAN一般使用一个逻辑子网(或者说一个IP子网);
  4. VLAN中成员多基于交换机的接口分配,此时划分VLAN就是将交换机的接口分配到特定的VLAN中;另外,华为交换机也支持基于IP地址划分VLAN等其他VLAN划分方式。
  5. VLAN工作于OSI参考模型的第二层;
  6. VLAN是交换机的一个非常基本的工作机制。

Access 类型的接口

交换机的物理接口缺省都是二层接口,所谓的二层接口,简单的说就是不能直接配置IP地址、不能隔绝广播、无法直接处理IP数据包三层头部的接口,这种接口只能根据数据帧的头部信息进行帧处理。在华为的交换机上,二层接口的链路类型(Link type)有:Access、Trunk和hybrid三种,以S9300交换机为例,其接口缺省为hybrid类型。

VLAN是二层交换机的一个底层技术,二层交换机工作的方方面面都可能与VLAN有关系,包括接口的工作。我们需要根据实际需要,将交换机的接口设置为适当的类型。

Access类型的接口只能加入一个VLAN,这种类型的接口一般用于连接PC、服务器等终端设备,或者连接路由器、防火墙等设备,如下图所示。Access接口只能发送不带标记的数据帧(也就是untagged帧),通常也只接收untagged帧。

Trunk 类型的接口

在一台交换机上,可以创建多个VLAN以便对应不同的业务,然后基于交换机的接口,将不同的接口划分给不同的VLAN。

如果分别在两台交换机上部署了VLAN,并且做了统一性的VLAN规划,这时两台交换机对接的时候就需要谨慎,因为这两台交换机之间互联的链路需要承载多个VLAN的数据,如果某个特定VLAN的数据从一台交换机发送出来,经过交换机之间的链路到达另一台交换机,后者如何判定这个数据到底应该放入哪一个VLAN呢?

这里就需要一种“标记”手段。在将数据送出这个互联接口前,给数据做上相应的标记(Tag)来标记这个数据是从哪一个VLAN跑出来的(如上图所示),这样,对端交换机在收到这个数据之后,就能够根据前者对数据所做的标记来识别数据究竟是属于哪一个VLAN的。此时,我们称两台交换机之间的互联链路为一段干道链路。这里提到的“标记”手段,常被称为干道协议,一个众所周知的公有标准是802.1q,或者叫Dot1q,由于是公有标准,因此所有的交换机厂商都遵循该标准。

Dot1q针对数据帧的处理方式很简单,就是在原始的以太网数据帧头中插入一个Dot1q的字段,同时重新做CRC校验。在插入的Dot1q字段中,就有VLAN-ID字段用来指示这个数据帧所属的VLAN,我们将没有携带Dot1q Tag的数据帧称为原始以太网数据帧或无标记帧(Untagged Frame),将携带了Dot1q Tag字段的数据帧称为标记帧(Tagged Frame),如下图所示:

接口类型小结

1. 以太网交换机的二层接口类型

华为交换机的二层接口支持三种链路类型(Link type),当接口工作在二层模式时,必须使用这三种类型中的一种:

1) Access:

Access接口常用于连接PC、服务器或其他终端,或路由器等设备。Access接口只能加入一个VLAN,一旦加入特定VLAN后,该接口所连接的设备也就加入了该VLAN。

2) Trunk:

Trunk接口一般用于交换机之间连接的端口,trunk口可以加入多个VLAN,可以接收和发送多个VLAN的Tagged帧。当交换机的接口连接的对端设备(例如路由器或防火墙)的接口部署了以太网子接口,那么在这种场景下,交换机的接口也需配置为trunk类型(或者Hybrid类型)。

3) Hybrid:

可以用于交换机之间连接,也可以用于接用户的计算机,hybrid口可以属于多个VLAN,可以接收和发送多个VLAN的Tagged帧。可根据需求灵活设置特定VLAN的数据帧在发送时是否打标记(Trunk接口只能设置一个VLAN在发送数据帧时不打标记,而hybrid接口则可设置多个VLAN在发送数据帧时不打标记)。

接下来,我们看看各种类型的接口在收、发数据帧时的特点。

❝注:本节中,所谓的接口接收帧的行为,指的是一个数据帧从外部进入交换机接口的过程,而发送帧的行为则是交换机将一个数据帧从交换机内部发送出去的行为。值得注意的是,所有的数据帧在交换机内部都是携带Tag的,这有助于交换机区分数据帧所属的VLAN。

2. Access口接收帧

  1. 如果该帧是Untagged帧,则接收帧并打上接口的PVID(也就是该Access接口的default vlan或缺省VLAN);
  2. 如果该帧是Tagged帧,则当其VLAN-ID与接口PVID相同时,接收该帧,否则丢弃。

❝注意:上图中,白色的大方框指的是交换机内部。

无论是Access、Trunk还是Hybrid类型的接口,都会有一个PVID属性与接口绑定,PVID也即缺省VLAN-ID(是一个具体的VLAN),对于Access接口而言,PVID就是接口视图下port default vlan命令所指定的VLAN-ID,也就是该接口加入的VLAN。而Trunk接口也拥有PVID(缺省时为VLAN1),并且可以通过命令修改,Hybric接口同理。

3. Access口发送帧

在发送数据帧时,剥离其Tag,发出的帧为原始以太网帧,也就是Untagged帧

由于Access接口通常用于连接终端设备,而终端设备通常是只能够识别Untagged帧的,因此Access接口在发送数据帧时,始终是不会携带标记的。

4. Trunk口接收帧

若收到的数据帧是Untagged帧,则为数据帧打上接口PVID的标记,然后,如果PVID在接口允许通行(Allow-pass)的VLAN列表里,则接收该帧,若PVID不在允许通行的VLAN列表里,则丢弃。

缺省时,Trunk接口的PVID为1,而且VLAN1缺省已经在允许通行的VLAN列表中。

若收到的数据帧是Tagged帧,且其VLAN-ID在接口允许通行的VLAN列表里,则接收该帧。否则丢弃。

5. Trunk口发送帧

若该帧的VLAN-ID与接口PVID相同,且该VLAN在允许通行的VLAN列表中,则去掉Tag,发送数据帧。

若该帧的VLAN-ID与接口PVID不同,且该VLAN在允许通行的VLAN列表中,则保持原有Tag,发送该Tagged帧,而如果数据帧的VLAN-ID不在允许通行的VLAN列表中,则禁止从该接口发出。

6. Hybrid口接收帧

若数据帧是Untagged帧,则将其打上PVID的Tag,然后,若PVID在接口允许通行的VLAN列表里则接收,否则丢弃。

若数据帧是Tagged帧,且其VLAN-ID在接口允许通行的VLAN列表里则接收该帧,否则丢弃。

7. Hybrid口发送帧

当该帧的VLAN-ID是接口允许通行的VLAN时,发送该帧,此时可以通过命令设置发送时是否携带Tag。

VLAN 及 Trunk 的基础配置

1. VLAN相关的基础配置命令

在交换机上创建VLAN10并进入VLAN10的配置视图:

代码语言:javascript复制
[Quidway] vlan 10
[Quidway-vlan10]

(可选)在特定的VLAN视图下添加VLAN描述:

代码语言:javascript复制
[Quidway-vlan10] description TechVLAN

将特定的接口配置为access类型,并加入特定VLAN。下面以将GE0/0/1配置为access类型并加入 VLAN10为例:

代码语言:javascript复制
[Quidway] interface gigabitEthernet0/0/1
[Quidway-GigabitEthernet0/0/1] port link-type access
[Quidway-GigabitEthernet0/0/1] port default vlan 10

将特定接口配置为trunk类型,然后配置trunk接口允许通行的VLAN:

代码语言:javascript复制
[Quidway] interface gigabitEthernet0/0/24
[Quidway-GigabitEthernet0/0/24] port link-type trunk
[Quidway-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20  #将VLAN10、20添加到该接口允许通过的VLAN列表

❝注意:缺省的情况下除了VLAN1之外,所有的VLAN的流量都不允许通过Trunk接口。

(可选)配置Trunk接口的PVID。PVID所对应VLAN的流量从trunk接口发送出去时不会打Tag(也就是以Untagged帧发送),另外,如果Trunk接口收到Untagged帧,也认为是属于PVID所对应的VLAN。缺省时PVID是1。以下将GE0/0/24接口(该接口已经被配置为Trunk类型)的PVID修改为99:

代码语言:javascript复制
[Quidway-gigabitEthernet0/0/24] port trunk pvid vlan 99

2. VLAN基础配置示例

在交换机上创建VLAN10及VLAN20,将PC1(所在接口)划入VLAN10,将PC2划入VLAN20。SW1的配置如下:

代码语言:javascript复制
#创建VLAN10及VLAN20,使用batch关键字可批量创建vlan:
[SW1] vlan batch 10 20
#将GE0/0/1配置为access类型,并加入vlan10:
[SW1] interface gigabitEthernet0/0/1
[SW1-GigabitEthernet0/0/1] port link-type access
[SW1-GigabitEthernet0/0/1] port default vlan 10
#将GE0/0/2配置为access类型,并加入vlan20:
[SW1] interface gigabitEthernet0/0/2
[SW1-GigabitEthernet0/0/2] port link-type access
[SW1-GigabitEthernet0/0/2] port default vlan 20

完成配置后,在SW1上可进行相应的查看:

代码语言:javascript复制
[SW1] display vlan
The total number of vlans is : 3
--------------------------------------------------------------------------------
U: Up; D: Down; TG: Tagged; UT: Untagged;
MP: Vlan-mapping; ST: Vlan-stacking;
#: ProtocolTransparent-vlan; *: Management-vlan;
--------------------------------------------------------------------------------
VID Type Ports
--------------------------------------------------------------------------------
1 common UT: GE0/0/3(D) GE0/0/4(D) GE0/0/5(D) GE0/0/6(D)
GE0/0/7(D) GE0/0/8(D) GE0/0/9(D) GE0/0/10(D)
GE0/0/11(D) GE0/0/12(D) GE0/0/13(D) GE0/0/14(D)
GE0/0/15(D) GE0/0/16(D) GE0/0/17(D) GE0/0/18(D)
GE0/0/19(D) GE0/0/20(D) GE0/0/21(D) GE0/0/22(D)
GE0/0/23(D) GE0/0/24(D)
10 common UT: GE0/0/1(U)
20 common UT: GE0/0/2(U)
VID Status Property MAC-LRN Statistics Description
--------------------------------------------------------------------------------
1 enable  default enable disable VLAN 0001
10 enable default enable disable VLAN 0010
20 enable default enable disable VLAN 0020

另外,使用display port vlan命令也能查看每个接口的link type以及所加入的VLAN等信息。

3. VLAN及Trunk基础实验

在SW1、SW2上创建VLAN10及VLAN20,将交换机连接PC的接口配置为Access类型并添加到如图所示的VLAN。然后,将两台交换机互联的接口配置为Trunk类型,并放通相应的VLAN,使得相同VLAN内的PC能够直接通信。

SW1的配置如下:

代码语言:javascript复制
#创建VLAN10及VLAN20:
[SW1] vlan batch 10 20
#将GE0/0/1配置为access类型,并加入VLAN10:
[SW1] interface gigabitEthernet0/0/1
[SW1-GigabitEthernet0/0/1] port link-type access
[SW1-GigabitEthernet0/0/1] port default vlan 10
#将GE0/0/2配置为access类型,并加入VLAN20:
[SW1] interface gigabitEthernet0/0/2
[SW1-GigabitEthernet0/0/2] port link-type access
[SW1-GigabitEthernet0/0/2] port default vlan 20
#将GE0/0/24口配置为trunk类型,并且放行VLAN10及VLAN20:
[SW1] interface gigabitEthernet0/0/24
[SW1-GigabitEthernet0/0/24] port link-type trunk
[SW1-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20

SW2的配置如下:

代码语言:javascript复制
[SW2] vlan batch 10 20
[SW2] interface gigabitEthernet0/0/1
[SW2-GigabitEthernet0/0/1] port link-type access
[SW2-GigabitEthernet0/0/1] port default vlan 10
[SW2] interface gigabitEthernet0/0/2
[SW2-GigabitEthernet0/0/2] port link-type access
[SW2-GigabitEthernet0/0/2] port default vlan 20
[SW2] interface gigabitEthernet0/0/24
[SW2-GigabitEthernet0/0/24] port link-type trunk
[SW2-GigabitEthernet0/0/24] port trunk allow-pass vlan 10 20

完成上述配置后,同一个VLAN内的用户就能够互相通信了,例如PC1可以ping通PC3,而PC2也能够ping通PC4。但是不同的VLAN之间是无法互访的。

Hybrid 接口的配置

Hybrid是一种特殊的二层接口类型。与trunk类型的接口类似,hybrid类型的接口也能够承载多个VLAN的数据帧,而且它能够灵活的设置接口在发送数据帧时,是否携带tag。另一方面,hybrid类型的接口还能用于部署基于IP地址的VLAN划分。下面我们将针对几种使用场景,讲讲hrbrid接口的配置。

1. Hybrid接口用于连接终端PC

在上图中,PC1连接在SW1的GE0/0/1接口上,现在将SW1的GE0/0/1接口做如下配置:

代码语言:javascript复制
[SW1] interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1] port link-type hybrid

以上命令将GE0/0/1接口配置为hybrid类型,以S5300交换机为例,接口缺省即为该类型,而且缺省将VLAN1设置为PVID(缺省VLAN),并且接口已经放通VLAN1(缺省就配置了port hybrid untaggedvlan 1)。因此在这个场景中,如果为SW1的Vlanif1配置一个192.168.10.0/24网段的IP地址,则PC1与SW1即可实现互通。此时PC1被认为属于VLAN1。

如果我们期望将PC1规划在VLAN10中,那么配置修改如下:

代码语言:javascript复制
[SW1] interface GigabitEthernet 0/0/1
[SW1-GigabitEthernet0/0/1] port link-type hybrid
[SW1-GigabitEthernet0/0/1] port hybrid pvid vlan 10
[SW1-GigabitEthernet0/0/1] port hybrid untagged vlan 10
[SW1] interface Vlanif 10
[SW1-Vlanif10] ip address 192.168.10.3 24

上面配置中port hybrid pvid vlan 10命令用于将接口的PVID修改为10,这样当该接口收到PC1发送出来的untagged帧时,就会认为这些帧来自于VLAN10;

port hybrid untagged vlan 10命令则用于将该接口加入VLAN10,使得PC1所发送的数据帧能够进入GE0/0/1接口(被该接口接收)从而进入交换机,另外,这条命令还使得交换机在从GE0/0/1接口向外发送VLAN10的数据帧时,以untagged的方式发送。

因此完成上述配置后,PC1被认为属于VLAN10,并且能够ping通SW1的vlanif10接口IP地址:192.168.10.3。

值得注意的是,在PC1发送的数据帧进入交换机SW1之后,如果SW1将数据帧透传处理,那么该帧从GE0/0/15发出时,是否携带tag,则要根据GE0/0/15接口的配置而定。

2. Hybric接口用于连接交换机

在上图中,SW1及SW2分别连接着PC1及PC2,我们将两台交换机的GE0/0/1配置为access类型,并且都加入VLAN10。现在SW1的GE0/0/15被配置为trunk类型,并且放通了VLAN10:

代码语言:javascript复制
[SW1-GigabitEthernet0/0/15] port link-type trunk
[SW1-GigabitEthernet0/0/15] port trunk allow-pass vlan 10

现在,来看看如果SW2的GE0/0/15接口采用hybrid类型该如何配置(纯粹为了讲解hybrid的配置而举例,通常我们会为链路两端的接口配置相同的类型)。

由于对端接口(SW1的GE0/0/15)以tagged的方式发送VLAN10的数据帧,因此SW2的GE0/0/15接口也必须将VLAN10以tagged的方式处理:

代码语言:javascript复制
[SW2-GigabitEthernet0/0/15] port link-type hybrid
[SW2-GigabitEthernet0/0/15] port hybrid tagged vlan 10

port hybrid tagged vlan 10命令用于将GE0/0/15接口加入VLAN10,并且该VLAN的帧以Tagged方式通过接口。

现在考虑另一种情况,如下图所示:

SW1左侧连接着VLAN10、20以及1000,现在SW1的GE0/0/15做了如下配置:

代码语言:javascript复制
[SW1-GigabitEthernet0/0/15] port link-type trunk
[SW1-GigabitEthernet0/0/15] port trunk allow-pass vlan 10 20 1000
[SW1-GigabitEthernet0/0/15] port trunk pvid vlan 1000

也即SW1在通过GE0/0/15往外发送数据帧时,对于VLAN10及VLAN20采用tagged帧的方式发送,而对于VLAN1000则采用untagged帧的方式发送,那么如果SW2采用hybrid接口与其对接,此时该接口的配置应该如下:

代码语言:javascript复制
[SW2-GigabitEthernet0/0/15] port link-type hybrid
[SW2-GigabitEthernet0/0/15] port hybrid tagged vlan 10 20
[SW2-GigabitEthernet0/0/15] port hybrid pvid vlan 1000
[SW2-GigabitEthernet0/0/15] port hybrid untagged vlan 1000

3. 基于IP地址识别VLAN的功能

通常我们在划分VLAN时,是采用基于接口划分VLAN的方式,也就是通过命令,将交换机的接口加入某个特定的VLAN。某局点遇到个较为“特殊”的需求:在下图所示的网络中,SW2下挂着三台服务器,其中SW2连接Server1、Server2的接口是Access类型接口,而且接口加入了VLAN1;连接Server3的接口也是Access类型,但是加入了VLAN30。而SW2上联SW1的上行口则是Trunk类型接口,该接口放通了VLAN1及VLAN30,并且PVID为1。

如此一来,SW1将会在GE6/0/15接口上收到三种类型的流量,分别是源地址为10.10.10.0/24网段的无标记帧、源地址为10.10.20.0/24网段的无标记帧,以及VLAN30的标记帧。现在需求是,根据规划,将上述各个网段在核心交换机CoreSwitch上对应到不同的VLAN,并且实现服务器之间的相互通信。由于某种原因,SW2是无法被直接管理的,因此只能在SW1及CoreSwitch上完成配置。

实际的需求是,在SW1上完成相应的配置,使得其在GE6/0/15接口上收到源地址为10.10.10.0/24网段的数据时,将其识别为VLAN10的数据,收到源地址为10.10.20.0/24的数据时,将其识别为VLAN20的数据,而VLAN30的数据需为标记帧。因此需在SW1上部署基于IP地址的VLAN划分。当然,这个接口在发送VLAN10及VLAN20的数据帧时,不能打标记,而在发送VLAN30的数据帧时,则需要打标记。

SW1的配置如下:

代码语言:javascript复制
[SW1] vlan batch 10 20 30
[SW1] vlan 10
[SW1-vlan10] ip-subnet-vlan ip 10.10.10.0 24 #配置子网与VLAN的对应关系:
[SW1] vlan 20
[SW1-vlan20] ip-subnet-vlan ip 10.10.20.0 24 #配置子网与VLAN的对应关系:
[SW1-GigabitEthernet6/0/15] port link-type hybrid
[SW1-GigabitEthernet6/0/15] port hybrid untagged vlan 10 20 #以无标记帧的方式发送VLAN10、20的数据
[SW1-GigabitEthernet6/0/15] port hybrid tagged vlan 30 #以标记帧的方式发送VLAN30的数据
[SW1-GigabitEthernet6/0/15] ip-subnet-vlan enable #配置基于IP地址划分VLAN
[SW1] interface GigabitEthernet 6/0/22
[SW1-GigabitEthernet6/0/22] port link-type trunk
[SW1-GigabitEthernet6/0/22] port trunk allow-pass vlan 10 20 30

CoreSwitch的配置如下:

代码语言:javascript复制
[CoreSwitch] vlan batch 10 20 30
[CoreSwitch] interface Vlanif 10
[CoreSwitch-Vlanif10] ip address 10.10.10.254 255.255.255.0
[CoreSwitch] interface Vlanif 20
[CoreSwitch-Vlanif20] ip address 10.10.20.254 255.255.255.0
[CoreSwitch] interface Vlanif 30
[CoreSwitch-Vlanif30] ip address 10.10.30.254 255.255.255.0
[CoreSwitch] interface GigabitEthernet 6/0/22
[CoreSwitch-GigabitEthernet6/0/22] port link-type trunk
[CoreSwitch-GigabitEthernet6/0/22] port trunk allow-pass vlan 10 20 30

QinQ

在上图中,CE1及CE2两台交换机都部署了VLAN10。两台交换机分别接入了SW1及SW2。SW1及SW2是两台公网交换机,且连接着其他设备,为了保证CE1及CE2能够在VLAN10中实现二层通信,而且不与其他设备产生冲突,公网为该业务分配了外层VLAN160。

在SW1及SW2上部署QinQ使得CE1能够访问CE2。图中的交换机以S5700 V2R1C00版本为例。SW1的配置如下:

代码语言:javascript复制
vlan batch 160
interface GigabitEthernet0/0/1
port link-type dot1q-tunnel
port default vlan 160
interface GigabitEthernet0/0/24
description Link to SW2
port link-type trunk
port trunk allow-pass vlan 160
qinq protocol 8100 #缺省情况下,外层VLAN Tag的TPID值为0x8100

SW2的配置如下:

代码语言:javascript复制
vlan batch 160
interface GigabitEthernet0/0/1
port link-type dot1q-tunnel
port default vlan 160
interface GigabitEthernet0/0/24
description Link to SW1
port link-type trunk
port trunk allow-pass vlan 160
qinq protocol 8100 #缺省情况下,外层VLAN Tag的TPID值为0x8100

CE1的配置如下:

代码语言:javascript复制
vlan batch 10
interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10
interface Vlanif10
ip address 10.1.1.1 255.255.255.0

CE2的配置如下:

代码语言:javascript复制
vlan batch 10
interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10
interface Vlanif10
ip address 10.1.1.2 255.255.255.0

完成上述配置后,从CE1即可ping通10.1.1.2。在SW1及SW2之间可捕获如下ICMP Request报文:留意到该报文携带两层VLAN-Tag,其中外层VLAN-ID为160,而内层为10。

在不同的网络规划或不同厂商设备的QinQ报文中,VLAN-Tag的TPID字段可能被设置为不同的值。为了和现有网络规划兼容,设备提供了QinQ报文外层VLAN-Tag的TPID值可修改的功能。用户通过配置TPID的值,使得发送到公网中的QinQ报文携带的TPID值与当前网络配置相同,从而实现与现有网络的兼容。

再看另一个例子,拓扑如下图所示。网络中的需求是,CE1发往SW1的数据帧中,携带VLAN-Tag 10的流量增加一层VLAN-Tag,外层VLAN-Tag为160;携带VLAN-Tag 20的流量增加一层VLAN-Tag,外层VLAN-Tag为170。

SW1的配置如下:

代码语言:javascript复制
vlan batch 160 170
interface GigabitEthernet0/0/1
qinq vlan-translation enable
port hybrid untagged vlan 160 170
port vlan-stacking vlan 10 stack-vlan 160
port vlan-stacking vlan 20 stack-vlan 170
interface GigabitEthernet0/0/24
description Link to SW2
port link-type trunk
port trunk allow-pass vlan 160 170
qinq protocol 8100

SW2的配置如下:

代码语言:javascript复制
vlan batch 160 170
interface GigabitEthernet0/0/1
qinq vlan-translation enable
port hybrid untagged vlan 160 170
port vlan-stacking vlan 10 stack-vlan 160
port vlan-stacking vlan 20 stack-vlan 170
interface GigabitEthernet0/0/24
description Link to SW1
port link-type trunk
port trunk allow-pass vlan 160 170
qinq protocol 8100

CE1的配置如下:

代码语言:javascript复制
vlan batch 10 20
interface GigabitEthernet0/0/24

port link-type trunk
port trunk allow-pass vlan 10 20
interface Vlanif10
ip address 10.1.1.1 255.255.255.0
interface Vlanif20
ip address 20.1.1.1 255.255.255.0

CE2的配置如下:

代码语言:javascript复制
vlan batch 10 20
interface GigabitEthernet0/0/24
port link-type trunk
port trunk allow-pass vlan 10 20
interface Vlanif10
ip address 10.1.1.2 255.255.255.0
interface Vlanif20
ip address 20.1.1.2 255.255.255.0

二层接口、三层接口、以及 PVID、VLAN-ID 等概念杂谈

  • 二层接口,可以简单理解为只具备二层交换能力的接口,例如二层交换机的物理接口,或者三层交换机的物理接口(一般而言,这些接口缺省时为二层模式,某些款型具备切换为三层模式的能力)。
  • 二层接口不能直接配置IP地址,并且不直接终结广播帧(目的MAC地址为广播MAC地址FFFF-FFFF-FFFF的数据帧)。二层接口收到广播帧后,会将其从同属一个广播域(VLAN)的所有其他接口泛洪出去。
  • 三层接口维护IP地址与MAC地址。
  • 三层接口会终结广播帧,三层接口在收到广播帧后,不会进行泛洪处理。
  • 二层接口在收到单播帧后,会在MAC地址表中查询该数据帧的目的MAC地址,然后依据表项指引进行转发,如果没有任何表项匹配,则进行泛洪。三层接口在收到单播帧后,首先判断其目的MAC地址是否为本地MAC地址,如果是,则将数据帧解封装,并解析出报文目的IP地址,然后进行路由查询及转发。因此二层接口与三层接口在数据处理行为上也存在明显差异。
  • 二层接口有几种类型(这里说的是以太网二层接口):access、trunk、hybrid。三层接口则没有上述类型。
  • 三层接口有物理形态的,也有逻辑形态的,典型的物理接口如路由器的三层物理端口;逻辑接口如VLANIF,以及以太网子接口,例如GE0/0/1.1。等等。VLANIF与其关联的VLAN的VLAN-ID对应,而以太网子接口,通常也会绑定相应的VLAN-ID,从而与相应的VLAN对接。这两种典型的三层接口均可以直接配置IP地址。

此外:

  • 在以太网二层交换网络里,VLAN是一个非常基础的东西。每个VLAN都是一个逻辑的广播域,每个VLAN都使用对应的ID进行标识,这是VLAN-ID。
  • 接口缺省VLAN标识,即PVID(Port Default VLAN ID),指的是二层接口上的缺省VLAN-ID(每个二层接口上有且只有一个VLAN-ID作为PVID),也就是说,PVID必定是某一个具体VLAN的VLAN-ID。PVID的作用是,当这个二层接口收到了流量,并且该流量不携带任何802.1Q Tag(VLAN-ID信息),该接口便认为这些流量属于PVID对应的VLAN。当然,PVID还会影响接口发送数据帧,这里不再赘述。缺省情况下,所有接口的PVID均为VLAN1。
    • 对于Access接口,缺省VLAN就是它允许通过的VLAN,修改接口允许通过的VLAN即可更改接口的缺省VLAN。
    • 对于Trunk接口和Hybrid接口,一个接口可以允许多个VLAN通过,但是只能有一个缺省VLAN,修改接口允许通过的VLAN不会更改接口的缺省VLAN。
  • 三层接口未必一定对应VLAN-ID。例如路由器的三层物理接口,这种类型的接口无需配置VLAN-ID。
  • 在三层交换机上(路由器或防火墙等设备,也有支持VLANIF的款型),每个VLAN都有对应的VLANIF,VLANIF指的是VLAN对应的逻辑三层接口,这个三层接口在VLAN被创建后,可以直接赋予IP地址,且具备路由转发能力。一个VLAN对应一个VLANIF,VLAN与VLANIF的标识相同。VLAN内的终端设备,可以与该VLAN对应的VLANIF直接进行二层通信。

0 人点赞