VLAN虚拟局域网知识笔记之(二) VLAN端口类型和基础配置
VLAN虚拟局域网知识笔记之(二)
VLAN端口类型和基础配置
VLAN(Virtual Local Area Network)即虚拟局域网,是将一个物理的局域网在逻辑上划分成多个广播域的技术。通过在交换机上配置VLAN,可以实现在同一个VLAN内的用户可以进行二层互访,而不同VLAN间的用户被二层隔离。这样既能够隔离广播域,又能够提升网络的安全性。
书接上一回,本节笔记主要介绍VLAN的端口类型以及配置方法,然后通过抓包查看现象。
PVID
PVID表示端口在缺省情况下所属的VLAN(缺省情况下,华为系列的交换机每个端口的PVID都为1)。
PVID即Port VLAN ID,代表端口的缺省VLAN。
交换机从对端设备收到的帧有可能是Untagged的数据帧,但所有以太网帧在交换机中都是以Tagged的形式来被处理和转发的,因此交换机必须给端口收到的Untagged数据帧添加上Tag。为了实现此目的,必须为交换机配置端口的缺省VLAN。当该端口收到Untagged数据帧时,交换机将给它加上该缺省VLAN的VLAN Tag。
以上图中的主机A为例。主机A向外发送数据:
①一般情况下,主机A向外发送的数据帧是不带有Tag的。
②交换机SWA接收到该数据帧时,发现其不带有Tag。然后会根据接收到该数据帧的端口上配置的PVID,为该数据帧打上一个Tag,使其能够在交换机之间传输数据。
Tips:缺省情况下,交换机每个端口的PVID都为1。若没有配置VLAN,交换机会为没有打上Tag(即Untagged)的数据帧打上这个缺省的VLAN Tag。
端口类型 -- Access
Access端口在收到数据后会添加VLAN Tag,VLAN ID和端口的PVID相同。
Access端口在转发数据前会移除VLAN Tag。
如上图所示,交换机的G0/0/1,G0/0/2,G0/0/3端口分别连接三台主机,都配置为Access端口。其中G0/0/1和G0/0/2的端口PVID为10(即VLAN 10),G0/0/3的端口PVID为20(即VLAN 20)。
(一)Access端口基本原理
Access端口是交换机上用来连接用户主机的端口,它只能连接接入链路,并且只能允许唯一的VLAN ID通过本端口。
Access端口收发数据帧的规则如下:
①如果该端口接收对端设备发送的帧是untagged(不带VLAN标签),交换机将强制加上该端口的PVID。
②如果该端口接收对端设备发送的帧是tagged(带VLAN标签),交换机会检查该标签内的VLAN ID。当VLAN ID与该端口的PVID相同时,接收该报文。当VLAN ID与该端口的PVID不同时,丢弃该报文。
③Access端口发送数据帧时,总是先剥离帧的Tag,然后再发送。Access端口发往对端设备的以太网帧永远是不带标签的帧。
(二)示例解释
在本示例中,交换机的G0/0/1,G0/0/2,G0/0/3端口分别连接三台主机,都配置为Access端口。
主机A把数据帧(不带VLAN标签)发送到交换机的G0/0/1端口,再由交换机发往其他目的地。收到数据帧之后,交换机根据端口的PVID给数据帧打上VLAN标签 10。
由于G0/0/2端口的PVID也是10,与VLAN标签中的VLAN ID相同,于是决定从G0/0/2端口转发数据帧。交换机移除VLAN标签 10,把数据帧发送到主机B。
连接主机C的端口的PVID是20,与VLAN 10不属于同一个VLAN,因此此端口不会接收到VLAN 10的数据帧。
(三)Access端口配置方法
Step 1:创建VLAN
在交换机上划分VLAN时,需要首先创建VLAN。
命令:vlan <vlan-id>
如本例所示,执行vlan 10命令后,就创建了VLAN 10,并进入了VLAN 10视图。
VLAN ID的取值范围是1到4094。
Tips:当需要创建多个VLAN时
可以在交换机上执行命令:vlan batch { vlan-id1 [ to vlan-id2 ] },以创建多个连续的VLAN。
如本例所示,执行命令后,创建了VLAN 10到VLAN 20连续10个VLAN。
也可以执行vlan batch { vlan-id1 vlan-id2 }命令,创建多个不连续的VLAN,VLAN号之间需要有空格。
如本例所示,执行命令后,创建了VLAN 10,20,30,40一共4个VLAN。
Step 2:对创建的VLAN进行配置验证
创建VLAN后,可以执行display vlan命令验证配置结果。如果不指定任何参数,则该命令将显示所有VLAN的简要信息。
缺省情况下,交换机所有端口都属于VLAN 1中。
查看刚创建的VLAN
Tips:更多的查看VLAN命令
执行display vlan [ vlan-id [ verbose ] ]命令,可以查看指定VLAN的详细信息,包括VLAN ID、类型、描述、VLAN的状态、VLAN中的端口、以及VLAN中端口的模式等。
执行display vlan vlan-id statistics命令,可以查看指定VLAN中的流量统计信息。
执行display vlan summary命令,可以查看系统中所有VLAN的汇总信息。
Step 3:配置Access端口
使用命令:port link-type <type>
配置端口类型。其中type可以配置为Access,Trunk或Hybrid。
以下示例为将交换机SWA的G0/0/1,G0/0/2和G0/0/3的端口设置为
需要注意的是,如果查看端口配置时没有发现端口类型信息,说明端口使用了默认的hybrid端口链路类型。当修改端口类型时,必须先恢复端口的默认VLAN配置,使端口属于缺省的VLAN 1。
Tips:华为系列交换机默认的端口类型是hybrid。
端口类型Trunk和Hybrid将会在下面笔记中进行详细的介绍。
Step 4:将端口添加到VLAN中
可以使用两种方法把端口加入到VLAN。
第一种方法是进入到VLAN视图,执行port <interface>命令,把端口加入VLAN。
以下示例为将交换机SWA的G0/0/1和G0/0/2端口加入到VLAN 10中。
第二种方法是进入到接口视图,执行port default <vlan-id>命令,把端口加入VLAN。vlan-id是指端口要加入的VLAN。
以下示例为将交换机SWA的G0/0/3端口加入到VLAN 20中。
Step 5:对刚才的配置进行验证
执行display vlan命令,可以确认端口是否已经加入到VLAN中。
在本示例中,端口G0/0/1和G0/0/2加入了VLAN 10,G0/0/3加入了VLAN 20。
其中UT表明该端口发送数据帧时,会剥离VLAN标签,即此端口是一个Access端口或不带标签的Hybrid端口。U或D分别表示链路当前是Up状态或Down状态。
通过主机A分别访问主机B和主机C,查看结果。(IP配置已省略)
主机A正常访问主机B
主机A无法访问主机C,因为他们处于不同的VLAN中,当交换机SWA知道两台主机对应的端口PVID不一致时,SWA将不会把主机A发送的报文转发给主机C。
端口类型 -- Trunk
当Trunk端口收到帧时,如果该帧不包含Tag,将打上端口的PVID;如果该帧包含Tag,则不改变。
当Trunk端口发送帧时,且该帧的VLAN ID在Trunk的允许发送列表中时:若与端口的PVID相同时,则剥离Tag发送;若与端口的PVID不同时,则直接发送。
如上图所示,是从Access端口例子的基础上增加了一台交换机B以及两台主机(D和E),主机D属于VLAN 10,主机E属于VLAN 20。现需求VLAN 10的主机A和B可以访问VLAN 10的主机D,同时VLAN 20的主机C可以访问VLAN 20的主机E,那么我们要怎么配置交换机A和交换机B之间的链路和端口G0/0/4的端口类型呢?
可以配置为Access端口类型吗?我们可以从上面的笔记知道,Access端口类型只能允许唯一的VLAN ID通过本端口。若交换机A和交换机B的G0/0/4端口均配置为PVID为10的Access端口,那么交换机A和B之间只能传输属于VLAN 10的数据帧,而不能传输VLAN 20的数据帧。若反之配置了PVID为20的Access端口,那么也不能传输VLAN 10的数据帧。
所以这个时候,就可以用到Trunk端口了。
(一)Trunk端口基本原理
Trunk端口是交换机上用来和其他交换机连接的端口,它只能连接干道链路。Trunk端口允许多个VLAN的帧(带Tag标记)通过。
Trunk端口收发数据帧的规则如下:
①当接收到对端设备发送的不带Tag的数据帧时,会添加该端口的PVID,如果PVID在允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。
②当接收到对端设备发送的带Tag的数据帧时,检查VLAN ID是否在允许通过的VLAN ID列表中。如果VLAN ID在接口允许通过的VLAN ID列表中,则接收该报文。否则丢弃该报文。
③端口发送数据帧时,当VLAN ID与端口的PVID相同,且是该端口允许通过的VLAN ID时,去掉Tag,发送该报文。当VLAN ID与端口的PVID不同,且是该端口允许通过的VLAN ID时,保持原有Tag,发送该报文。
(二)示例解释
在本示例中,SWA和SWB连接主机的端口均为Access端口,并将SWA和SWB互连的端口配置为Trunk端口。在缺省情况下,端口的默认PVID都为1。配置Trunk链路允许VLAN 10和20的流量通过。
Step 1:当SWA从PVID为10的G0/0/1接收到VLAN 10的主机A的报文时,会为该报文打上VLAN ID为10的标签。
Step 2:接着SWA在端口G0/0/4转发该报文时,由于该报文的VLAN ID(为10)与此端口的PVID(缺省为1)不相同,且检查VLAN ID在允许通过的VLAN ID列表中后,则会在转发报文时不剥离VLAN标签,然后直接转发到Trunk链路上。
Ex:若端口G0/0/4的PVID为10,与VLAN ID(为10)相同,则会剥离VLAN标签,然后发送到Trunk链路上。
Step 3:对端的SWB接收到带有VLAN ID(为10)的报文,由于VLAN ID(为10)与此端口的PVID(缺省为1)不相同,且检查VLAN ID在允许通过的VLAN ID列表中后,会保持原有的VLAN ID标签,并转发该报文。
Step 4:SWB向端口PVID为10的G0/0/1转发报文,先剥离VLAN标签,再转发给主机D。由于SWB的G0/0/2的端口PVID为20,所以不会向这个端口转发报文。
同理,VLAN 20的报文转发过程大致相同,这里不再赘述。
(三)Trunk端口配置
SWB上的创建VLAN和Access端口配置省略,创建VLAN 10和VLAN 20,G0/0/1为VLAN 10的Access端口,G0/0/2为VLAN 20的Access端口。
Step 1:配置SWA和SWB的G0/0/4(干道链路的端口)为Trunk端口
配置Trunk时,应先使用
命令:port link-type trunk
修改端口的类型为Trunk。
配置Trunk端口允许哪些VLAN的数据帧通过。
命令:port trunk allow-pass vlan { { vlan-id1 [ to vlan-id2 ] } | all }
配置端口允许通过的VLAN,all表示允许所有VLAN的数据帧通过。
SWB的G0/0/4端口配置相同,故省略。
在本示例中,将SWA和SWB的G0/0/4端口配置为Trunk端口,该端口PVID默认为1。配置port trunk allow-pass vlan 10 20命令之后,该Trunk端口允许VLAN 10和VLAN 20的数据流量通过(不剥离VLAN Tag)。
此外,还可以通过命令修改Trunk端口的PVID
命令:port trunk pvid vlan vlan-id
修改Trunk端口的PVID。
Tips:修改Trunk端口的PVID之后,缺省VLAN不一定是端口允许通过的VLAN。
只有使用命令port trunk allow-pass vlan { { vlan-id1 [ to vlan-id2 ] } | all }允许缺省VLAN数据通过,才能转发缺省VLAN的数据帧。交换机的所有端口默认允许VLAN1的数据通过。
Step 2:配置验证
执行display vlan命令可以查看修改后的配置。TG表明该端口在转发对应VLAN的数据帧时,不会剥离标签,直接进行转发。该端口可以是Trunk端口或带标签的Hybrid端口。
分别用主机A访问主机D,主机C访问主机E,访问成功。
对SWA的G0/0/4端口进行抓包分析。
当使用VLAN 10的主机A访问同为VLAN 10的主机D时,G0/0/4抓取到报文:
可以看到打上VLAN标签(Tag)为10的报文。
同理,使用VLAN 20的主机C访问VLAN 20的主机E时,G0/0/4也可以抓取到报文:
本示例中可以证明,SWA和SWB在G0/0/4转发VLAN 10和VLAN 20的报文时,由于与PVID不相同,所以不剥离标签,直接转发。
Tips:附加的小问题
若使用VLAN 10的主机A访问VLAN 20的主机E,抓取SWA的G0/0/4的数据包会发生什么呢?
由于主机A并不知道主机E的MAC地址,所以会发送一个ARP Request报文广播出去询问主机E。这个ARP Request会在SWA的G0/0/1端口打上VLAN 10的标签,到达G0/0/4端口时,在不剥离标签的情况下转发。到达SWB时保留VLAN 10标签,由于Access端口规定,只发送VLAN标签与自己的PVID一致的报文。
我们可以知道,SWB连接主机E的G0/0/2的PVID应为20,与发送来的ARP Request的报文的VLAN标签(为10)不一致,因为会丢弃该ARP报文。那么主机A就无法访问到处于不同VLAN的主机E了。
就是因为这个原理,VLAN可以隔离广播域,从而减少广播流量而消耗的带宽,也保证了网络中一定程度上的信息安全。
端口类型 -- Hybrid
Hybrid端口既可以连接主机,又可以连接交换机。
Hybrid端口可以以Tagged 或Untagged方式加入VLAN 。
Access端口发往其他设备的报文,都是Untagged数据帧,而Trunk端口仅在一种特定情况下才能发出untagged数据帧,其它情况发出的都是Tagged数据帧。
Hybrid端口是交换机上既可以连接用户主机,又可以连接其他交换机的端口。Hybrid端口既可以连接接入链路又可以连接干道链路。Hybrid端口允许多个VLAN的帧通过,并可以在出端口方向将某些VLAN帧的Tag剥掉。华为设备默认的端口类型是Hybrid。
在本示例中,要求主机A和主机B都能访问服务器,但是它们之间不能互相访问。此时交换机连接主机和服务器的端口,以及交换机互连的端口都配置为Hybrid类型。交换机连接主机A的端口的PVID是10,连接主机B的端口的PVID是20,连接服务器的端口的PVID是100。
(一)Hybrid端口基本原理
Hybrid端口收发数据帧的规则如下:
①当接收到对端设备发送的不带Tag的数据帧时,会添加该端口的PVID,如果PVID在允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。
②当接收到对端设备发送的带Tag的数据帧时,检查VLAN ID是否在允许通过的VLAN ID列表中。如果VLAN ID在接口允许通过的VLAN ID列表中,则接收该报文,否则丢弃该报文。
③Hybrid端口发送数据帧时,将检查该接口是否允许该VLAN数据帧通过。如果允许通过,则可以通过命令配置发送时是否携带Tag。
配置port hybrid tagged vlan vlan-id命令后,接口发送该vlan-id的数据帧时,不剥离帧中的VLAN Tag,直接发送。该命令一般配置在连接交换机的端口上。
配置port hybrid untagged vlan vlan-id命令后,接口在发送vlan-id的数据帧时,会将帧中的VLAN Tag剥离掉再发送出去。该命令一般配置在连接主机的端口上。
(二)示例解释和配置方法
本例介绍了主机A和主机B发送数据给服务器的情况。为了更清楚解释数据传输途中VLAN Tag的添加与剥离情况,将解释和配置方法放在一起介绍。
Step 1:将两台交换机的所有端口的端口类型声明为Hybrid类型。(注:主机的基本配置,交换机的创建VLAN均已省略)
命令:port link-type hybrid
将端口的类型配置为Hybrid。
其他端口配置方法相同,故省略。
默认情况下,华为系列交换机的端口类型是Hybrid。因此,只有在把Access口或Trunk口配置成Hybrid时,才需要执行此命令。
Step 2:为交换机SWA和SWB各端口配置PVID。
按照拓扑图,应为交换机SWA的G0/0/1配置PVID为10,G0/0/2配置为20;SWB的G0/0/1配置为100。
Step 3:在交换机连接主机的端口配置以Untagged的方式允许指定VLAN通过。
命令:port hybrid untagged vlan{ { vlan-id1 [ to vlan-id2 ] } | all }
用来配置允许哪些VLAN的数据帧以Untagged方式通过该端口。
(1)主机A可以访问服务器,不能访问主机B。
在SWA连接主机A的端口G0/0/1上配置允许VLAN 10和VLAN 100的数据帧报文以Untagged的形式通过。VLAN 10和VLAN 100的数据帧在通过该端口时都不携带标签。
(2)主机B可以访问服务器,不能访问主机A。
在SWA连接主机B的端口G0/0/2上配置允许VLAN 20和VLAN 100的数据帧报文以Untagged的形式通过。VLAN 20和VLAN 100的数据帧在通过该端口时都不携带标签。
(3)服务器可以同时被主机A和主机B访问。
在SWB连接服务器的端口G0/0/1上配置允许VLAN 10,VLAN 20和VLAN 100的数据帧报文以Untagged的形式通过。VLAN 10,VLAN 20和VLAN100的数据帧在通过该端口时都不携带标签。
Step 4:在交换机连接交换机的端口配置以Tagged的方式指定VLAN通过。
命令:port hybrid tagged vlan{ { vlan-id1 [ to vlan-id2 ] } | all }
用来配置允许哪些VLAN的数据帧以Tagged方式通过该端口。
在交换机SWA和SWB连接的端口G0/0/3上配置允许VLAN 10,20和100的数据帧报文以Tagged的形式通过。VLAN 10,20和100的数据帧在通过该端口时都携带标签。
到此,所有配置完成。
Step 5:示例解析
配置方法介绍完成之后,我们开始解析数据帧报文在局域网中的转发过程(对应配置方法的步骤):
当主机A(VLAN 10)访问服务器(VLAN 100)时:
(1)数据帧从主机A -》交换机SWA
主机A发送出来的数据帧不带VLAN Tag。所以交换机SWA接收到该数据帧时,会按照(Step2)配置为该数据帧打上端口的PVID 10。然后查看(Step 3)配置的允许VLAN 10通过,则接收此数据帧并转发。
(2)数据帧从交换机SWA -》 交换机SWB
交换机SWA通过端口G0/0/3向交换机SWB发送带VLAN 10标签的数据帧。查看(Step 4)配置的允许VLAN 10以携带标签的形式通过端口,则不剥离标签转发数据帧。
交换机SWB接收到该数据帧后,查看(Step 4)配置的允许VLAN 10以携带标签的形式通过端口,则也不剥离标签转发数据帧。
下图验证数据帧是以携带VLAN 10标签的情况下从SWA转发到SWB的。
(3)数据帧从交换机SWB -》 服务器
交换机SWB将带有VLAN 10标签的数据帧通过端口G0/0/1发送给服务器,查看(Step 3)配置的允许VLAN 10以不携带标签的形式通过端口,则剥离标签转发数据帧给服务器。
同理,属于VLAN 20的主机B访问服务器也相同,故省略。
Tips:解答一些额外的问题。
①VLAN 10的主机A会将数据帧发送到VLAN 20的主机B吗?
其实这个问题在上面介绍Trunk端口时也提到过,由于主机A发送的ARP Request报文也会打上VLAN 10的标签,所以不会发送给PVID为20的端口。
②访问是双向的,主机A访问服务器,势必说明服务器会回复一个数据帧给主机A,那么这个数据帧又是如何打VLAN标签的呢?
根据配置可以知道,服务器向主机A回复的数据帧,会根据SWB的端口G0/0/1的PVID打上100的标签,该标签会在SWA的G0/0/1端口剥离并转发给主机A。
Step 6:配置验证
主机A可以访问服务器,不能访问主机B:
同样的,主机B能访问服务器,不能访问主机A:
说明实验成功。
下一节笔记会介绍VLAN的划分方法和Voice VLAN。敬请期待。