1、理论简析:

以太网交换机的通信是基于端口的通信,其端口类型分为Trunk port(干道端口)、Access port(接入端口)、Hybird port(混合端口)三种。Access port一般用于交换机和用户PC主机相连,连接用户主机和交换机的链路称为接入链路(Access Link);而Trunk port一般用于连接交换机,通过Trunk port相连的链路称为干道链路。Hybird port可以连接交换机和用户主机,也可以连接交换机和交换机(暂不考虑Hybird port)。

其中Access和Trunk是比较常用的端口模式。

Access port只属于一个VLAN,Access链路上的数据帧是不带VLAN tag的帧(因为Access链路要么是PC->Access port,PC本身不会识别VLAN tag,所以PC->Access port是不会带VLAN tag的;要么是Access port->PC,由于出端口目标是明确的,不存在需要带VLAN Tag去区别VLAN,所以Access port->PC也是不需要带VLAN tag的)

而Trunk port可以属于多个VLAN,Trunk上的帧也是带tag的帧,目的就是为了区分不同的VLAN,实现不同交换机的同一VLAN间以及跨VLAN的数据通信。

③带VLAN tag的数据帧(802.1Q)格式如下所示(除去VLAN tag便是标准以太帧格式),其主要的字段是优先级和VLAN ID字段:

trunk端口和access端口的区别 端口类型access与trunk_数据帧

以下例(如图所示)来说明以太网数据帧在进入和离开Access、Trunl两种不同类型端口时,添加与剥离VLAN tag的步骤。

trunk端口和access端口的区别 端口类型access与trunk_trunk端口和access端口的区别_02

SW1和SW2各有三个端口,其端口类型与链路类型如图所示,SW1:port3和SW2:port3都是trunk port,SW1:port3属于一个VLAN,而SW2:port3属于两个VLAN。

入端口和出端口都是Access port:
①当A要给B发送消息,则A发送一个不带tag的数据帧(源MAC:A,目标MAC:B)到达SW1:port1;
②SW1:port1接收到不带tag的数据帧,根据port1所在所在VLAN(VLAN 1),进入交换机之后便加上VLAN tag,标识了该数据帧属于VLAN 1;
③在经过查找FDB表,知道了要将数据帧送给B则必须从SW1:port 2转发出去,但是SW1:port 2并不在VLAN 1中,所以该报文是不能直接由交换功能转发到SW1:port 2的,即B是不能直接通过二层转发收到来自A的数据帧的;
④那么直接通过FDB转发不行,该报文就不能转发成功了吗?当然不是,假设交换机具备三层功能,并且存在VLAN1~VLAN2的路径,数据帧通过解析出目标IP,借助三层转发表匹配出接口MAC并找到出接口对应端口,或者路由表(初次)找到下一跳的出接口,从而从目标端口SW1:port2转发出去到达B【注:在讲Trunk、Access、Hybrid端口类型时,是忽略三层转发功能的,仅从二层来讲,A发送的报文确实不能到达B】。

入端口和出端口都有Access port与Trunk port:
①当A要给C发送消息,同样A发送一个不带tag的数据帧(源MAC:A,目标MAC:C)到达SW1:port1;
②SW1:port1接收到不带tag的数据帧,根据port1所在所在VLAN(VLAN 1),进入交换机之后便加上VLAN tag,标识了该数据帧属于VLAN 1;
③经过查找FDB表,知道了要将数据帧送给C则必须从SW1:port 3转发出去,经过交换机内部交换芯片处理后到达SW1:port 3即将转发;
④由于SW1:port 3是Trunk端口,则先检查VLAN tag的VLAN ID是否等于PVID,检查不等于则直接发送【如果VID==PVID则剥离tag再转发】。
⑤SW2:port3接收到从Trunk link上收到的带VLAN tag的数据帧,先解析是否带VLAN tag【如果不带则加上tag信息,tag中的VLAN ID设为PVID】,如果带tag则判断,端口是否允许该tag所标识的VLAN数据进入,允许则进入交换机内部进行交换转发,不允许则丢弃;
⑥在交换机内部通过tag信息的标识,查找FDB表数据到达SW2:port1,由于SW2:port1是一个Access port,所以在数据转发前先将tag剥离掉,在转发给C,则C收到一个不带tag的来自A的数据帧。

由上面分析可知:
①凡是和PC打交道的数据帧都是不带VLAN tag的(因为VLAN是二层交换机的概念,不牵扯PC);
②凡是和进入交换机的数据帧都需要加上VLAN tag,以实现能够在交换机内部交换转发是能够识别不同VLAN;

2、搭建实验环境:

实验环境如下图所示:

trunk端口和access端口的区别 端口类型access与trunk_trunk端口和access端口的区别_03

两个接入层交换机Switch0和Switch1其FE0/1~FE0/24均设置为Access 口,且FE0/1~FE0/12均加入VLAN 1,而FE0/13~FE0/24均加入VLAN 2。因此各PC与Server所处VLAN就如图所示清晰明了:PC0、PC2、Server2处于VLAN1;PC1、PC3、Server3处于VLAN2;另外顶端的直接连接在Multilayer Switch0的FE0/1类型为Access port上的Server1属于VLAN3。

配置如下:

//Multilayer Switch0配置:

//配置gigabitEthernet 0/1为trunk口
Switch>enable 
Switch#configure terminal 
Switch(config)#interface gigabitEthernet 0/1
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk 
Switch(config-if)#exit

//配置gigabitEthernet 0/2为trunk口
Switch(config)#interface gigabitEthernet 0/2
Switch(config-if)#switchport trunk encapsulation dot1q
Switch(config-if)#switchport mode trunk 
Switch(config-if)#exit
Switch(config)#

//配置VLAN interface
Switch(config)#interface vlan 1
Switch(config-if)#ip address 192.168.10.1 255.255.255.0
Switch(config-if)#no shutdown 
Switch(config)#interface vlan 2
Switch(config-if)#ip address 192.168.20.1 255.255.255.0
Switch(config-if)#no shutdown 
Switch(config)#interface vlan 3
Switch(config-if)#ip address 128.255.240.1 255.255.0.0
Switch(config-if)#no shutdown 

//开启VLAN间路由
Switch(config)#ip routing
Switch(config)#exit
Switch#copy running-config start-config
//Switch0和Switch1配置一致:
Switch>enable 
Switch#configure terminal 
Enter configuration commands, one per line.  End with CNTL/Z.	

//新建VLAN
Switch(config)#vlan 1
Switch(config-vlan)#exit
Switch(config)#vlan 2
Switch(config-vlan)#exit

//指定fastEthernet 0/1 - fastEthernet 0/12端口属于VLAN1,且均是Access port
Switch(config)#interface range fastEthernet 0/1 - fastEthernet 0/12
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 1
Switch(config-if-range)#exit
//指定fastEthernet 0/13 - fastEthernet 0/24端口属于VLAN2,且均是Access port
Switch(config)#interface range fastEthernet 0/13 - fastEthernet 0/24
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 2
Switch(config-if-range)#exit

//配置gigabitEthernet 0/1为trunk口
Switch(config)#interface gigabitEthernet 0/1
Switch(config-if)#switchport mode trunk 
Switch(config-if)#exit 
Switch(config)#exit
Switch#copy running-config startup-config 
Switch#

测试步骤如下:

①在三台服务器上搭建我们的三个Web网站;

②开启三层交换机的ip routing功能,则任何一个主机可以访问任何一台服务器(由于trunk链路的存在,才可以实现跨交换机实现同一VLAN间通信);

trunk端口和access端口的区别 端口类型access与trunk_链路_04


③但是当关闭三层交换机的ip routing功能,则主机只能访问本VLAN内Server,不同VLAN的主机不能跨VLAN访问服务器(由于Trunk链路与路由二者均存在,才可以实现不同交换机上不同VLAN间的任意通信)。

trunk端口和access端口的区别 端口类型access与trunk_trunk端口和access端口的区别_05


通过上例,我们就可以明确Trunk 链路的实际作用了。