虚拟局域网---VLAN Trunk
VLAN Trunk
通过前面的学习,我们已经能在交换机上划分VLAN了。但是当网络中有多台交换机时,位于不同交换机上的相同VLAN的主机之间是如何通信的呢?现在我们就来学习如何解决这个问题,即跨交换机的VLAN通信。
1、Trunk的作用
如下图所示,在两台交换机SW1和SW2上分别创建了VLAN 10、VLAN 20和VLAN 30,那么,如何才能让连接在不同交换机上的相同VLAN的主机进行通信呢?

如果为每个VLAN都连接一条物理链路,如下图所示,那么两台交换机之间有几个VLAN通信,就需要在两台交换机之间连接几条物理链路。

这种连接方式的扩展性有很大的问题,即随着VLAN数量的增加,就需要在两台交换机之间连接多条物理链路,从而占用很多交换机端口,这显然是不可取的。
类似现实生活中运送货物的例子,为了使货物在到达目的地后被正确的区分开,通常的做法是在货物上贴上不同的标识。那么在VLAN中,由于不同VLAN的VLAN号不同,实际上可以只使用一条中继链路,将属于不同VLAN的数据帧打上不同的标识即可,如下图所示:

在交换网络中,链路有两种类型:接入链路和中继链路。
1)接入链路:通常属于一个VLAN。如上图中的主机与交换机之间连接的链路就是接入链路。
2)中继链路:可以承载多个VLAN。如上图中的SW1和SW2之间的链路就是中继链路。中继链路常用来将一台交换机连接到其他交换机上,或将交换机连接到路由器上。
Trunk(干道、中继)的作用就是使同一个VLAN能够跨交换机通信。如下图所示,在VLAN跨交换机通信的过程中,数据帧有什么变化呢?

(1)当VLAN 30中的主机PC2发送数据帧给主机PC5时,主机PC1发送的数据帧是普通的数据帧。
(2)交换机SW1接收到数据帧,知道这个数据帧来自VLAN 30且要转发给SW2,于是就会在数据帧中打上VLAN 30的标识,然后发送给SW2。
(3)SW2接收到带有VLAN 30标识的数据帧后,根据目标MAC地址,得知数据帧是发送给主机PC5的,就删除VLAN标识还原为普通的数据帧,然后转发给主机PC5。
2、VLAN的标识
1)ISL(Inter-Switch Link,交换机间链路)是Cisco私有的标识方法,ISL帧的封装如下图所示:

ISL报头封装26字节,CRC尾部是4字节,总共30字节。
ISL只是对帧进行封装,而没有修改帧中的任何内容。
2)IEEE 802.1q
IEEE 802.1q是公有的标识方法,其他厂商的产品也支持这种标识方法。
无论采用哪种标识方法,链路双方的设备都要使用相同的标识方法。
3)Native VLAN
IEEE 802.1q在设计时,为了兼容与不支持VLAN的交换机混合部署,特地设计了一个Native VLAN,它允许交换机从Trunk端口上转发未被标识的帧。在Cisco Catalyst交换机上,默认的Native VLAN是VLAN 1,但是可以配置。Native VLAN的数据帧在Trunk链路中是未被识别的,如下图所示:

对于两台设备之间的Trunk端口,要求链路两侧具有相同的Native VLAN配置。
4)Trunk模式和协商

Catalyst 3560交换机支持ISL和IEEE 802.1q封装;Catalyst 2960只支持IEEE 802.1q封装,不支持ISL封装。
3、Trunk的配置
1)配置步骤与命令
(1)进入接口配置模式的命令如下:

(2)选择封装类型的命令如下:

如果选择negotiate,就是指明端口与邻接端口进行协商。根据邻接端口的配置,本地端口可以协商成为ISL或IEEE 802.1q干道。
(3)将接口配置为Trunk,具体命令如下:

(4)指定Native VLAN(可选),具体命令如下:

另外,如果不需要Trunk传送某一个VLAN的数据,则可以从Trunk中删除这个VLAN,具体命令如下:

同样,也可以在Trunk上添加某个VLAN,具体命令如下:

使用show命令验证接口模式,具体命令如下:

4、实例配置
如下图所示,两台交换机SW1和SW2各划分了三个VLAN,端口分配如下:
VLAN 10:F0/1~F0/3;
VLAN 20:F0/4~F0/10;
VLAN 30:F0/11~F0/23

两台交换机的配置类型,现以SW1为例,做Trunk配置与验证的过程。
(1)在交换机上添加VLAN,具体命令如下:

(2)将接口添加套相应的VLAN中,具体命令如下:

(3)配置交换机之间互连的端口为Trunk模式,具体命令如下:

(4)在SW2交换机上执行类似的配置,配置完成后,使用show命令进行验证,具体命令如下:

在上面的命令输出中可以看出,在端口F0/24上配置接口模式为Trunk,并且工作模式也是Trunk。Trunk封装的协议是IEEE 802.1q,Trunk可以承载所有的VLAN。
(5)如果不需要在Trunk上传输出VLAN 20的数据,可以在Trunk上移除VLAN 20,命令如下:

然后在观察Trunk的信息,有点尴尬,可能是我这个模拟器有问题,删除了VLAN 20并没显示出来。不过效果可以通过两边的主机互ping即可验证。