TRUNK

TRUNK

Scroll Down

一、端到端VLAN为什么需要TRUNK技术

端到端的VLAN特点就是某个VLAN分布在不同的交换机上。比如说VLAN 10,如何连接两台交换机,使得两台交换机上的VLAN 10可以通信?可以通过在每台交换机上单独划分出一个接口,设置归属为VLAN 10端口,然后将两个端口连接起来,这样就能够实现端到端VLAN的通信需求。但是会造成一个问题,端到端VLAN的VLAN数目越多,所需要的连接两台交换机的端口就越多,比如说每台交换机上得配置2个接口,一个接口用于下联接入端点,一个接口用于连接另一台交换机,2个接口都属于VLAN 10,如果需要创建VLAN 20,又得划分两个接口给VLAN 20,一个用于下联接入端点,另一个用于连接另一台交换机用于多台交换机间的VLAN 20通信。这会导致扩展性差、端口利用率低的缺点。

那么就需要一种技术,使得某个端口可以传递多个VLAN的流量,这样端到端VLAN的部署将会非常灵活,多台交换机之间仅需要一条链路即可传递多个VLAN的流量,提高了端口利用率,这就是trunk技术。

二、TRUNK

Trunk是一条可以承载多个VLAN流量的点到点物理链路,比如两台交换机之间的链路。Trunk可以将2层操作扩展到整个网络中。不同交换机之间可以通过trunk链路传输多个VLAN的流量。连接两台交换机之间的switchport想要承载多个VLAN流量就得配置成trunk模式,构成trunk链路

access只能承载单个VLAN的流量,无法满足交换机之间相连接

trunk1.png

当有VLAN的数据帧穿越trunk链路时,trunk协议会在数据帧上打上tag,可以识别出数据帧所属VLAN id。接收的交换机通过帧上携带的tag得知帧的VLAN id。在接收交换机上,将数据帧发给对应VLAN的access链路时,会将帧上的VLAN id删除掉。

1、DTP

catalyst交换机会在trunk端口上使用动态trunk协议(即DTP),来和对端自动协商trunk状态。DTP会进行trunk链路的邻居端口协商,包括工作模式、trunk协议等。工作模式包括:

  • access:永久access模式,端口忽略DTP协商结果
  • trunk:永久trunk模式,端口忽略DTP协商结果
  • auto:默认ethernet为auto,被动接收,如果邻居端口工作模式是trunk/desirable,那么就协商成trunk链路
  • nonegotiate:阻止端口发送DTP帧,适合本地/邻居端口手动配置为trunk模式
  • desirable:主动尝试建立trunk链路,如果邻居端口工作模式是trunk/desirable/auto,那么就协商成trunk链路
autodesirabletrunkaccess
autoaccesstrunktrunkaccess
desirabletrunktrunktrunkaccess
trunktrunktrunktrunk不建议
accessaccessaccess不建议access

当对端交换机的状态无法确定,或者日后状态可能发生变化,就可以启用DTP协议

2、TRUNK协议&原理

1)协议

在单链路上承载多个VLAN流量的trunk协议有ISL和802.1q两种,其中ISL为cisco私有协议,802.1q是公有协议,且802.1q应用广泛,一般都采用802.1q。802.1q帧在ethernet V2帧格式基础上增加了4bytes的tag字段,该字段中包括ethertype、PRI、VLAN id等更加细微的字段。
trunk2.png
因为增加了字段,所以8021.q帧长度会达到1518+4=1522bytes,交换机需要支持该帧。需要注意的是802.1q帧只在trunk链路上存在,而普通以太网帧在access链路上存在。

ethertype:2bytes;标识802.1q标签
PRI:3bits;标识VLAN优先级
VLAN id:12bits;即VID,标识802.1q帧所属VLAN,支持最多4096个VID,最大支持可配置的VID=4094,VID=0表示优先级帧

本征VLAN

trunk3.jpg
配置802.1q标准的trunk时,必须在trunk链路两端定义一个native VLAN。正常情况下,除了native VLAN外的所有数据帧在trunk链路传输时都会插入一个包含VID的tag来标识所属VLAN。

关于本征VLAN的注意项:

  • native VLAN是思科定义的缺省VLAN/本征VLAN,也可以叫做PVID,这一概念在华为设备原理中经常出现
  • 默认的native VLAN=1
  • native VLAN的定义只存在于trunk端口上

trunk4.png

如果存在trunk链路两端交换机native VLAN不同,那么就会造成VLAN流量互串VLAN跳转攻击等问题,所以建议设置一个偏僻的VLAN为native vlan。所谓的VLAN跳转攻击就是trunk链路两端native VLAN没配置成一样的VLAN id,导致的不同VLAN互通情况。

2)原理

trunk1.png
access不会对tag做任何处理(包括tag和untag),通过trunk跨越交换机时,才会涉及到对tag处理,本地交换机的通讯仅会执行查表转发,而与tag无关!802.1q帧的封装工作由802.1q协议来完成。

本地交换机帧转发

本地交换机转发都是收到access接口的帧后,提取帧中的dst MAC查询CAM表进行对应的转发。

跨交换机帧转发

802.1q封装
access端口发送ethernet帧到交换机,根据ethernet帧的src MAC所属的VID和设置的PVID判断是否为native VLAN:

  • 是,是否允许通过trunk链路
    • 允许,则802.1q协议不会插入任何tag字段入帧,转发802.1q帧到trunk链路上
    • 不允许,丢弃
  • 否,是否允许通过trunk链路
    • 允许,则802.1q协议插入tag字段入帧(根据ethernet帧中的src MAC所属VID查询),重新计算FCS,转发802.1q帧到trunk链路上
    • 不允许,丢弃

再次提醒:

  • trunk端口运行的802.1q协议负责802.1q帧封装
  • access端口收到802.1q帧,会将tag忽略并当作普通ethernet帧处理

802.1q解封装
对端交换机从trunk链路上收到802.1q帧后,判断该帧是否有tag:

  • 有,则根据tag信息判断是哪个VID,然后untag形成ethernet帧,然后根据dst MAC查找CAM表转发
  • 无,则根据配置的PVID和dst MAC查找CAM表转发

3)TRUNK配置

1st. 创建TRUNK

进入接口配置模式:int g0/0/0
配置trunk封装协议:switchport trunk en dot1q
端口模式:switchport mode trunk
关闭DTP:switchport nonegotiate

接口设置为nonegotiate(即非协商)后,不会发送DTP帧,如果配置为非协商后,就必须使用手动配置接口为trunk或者access

2nd. TRUNK链路属性

设置native VLAN:switchport trunk native vlan x
允许trunk链路承载的VLAN:switchport trunk allowed vlan {add | except | all | remove } x
查看trunk链路:show int trunk

trunk链路两端交换机接口都需要修改

4)VLAN&TRUNK部署推荐方式

trunk5.png
VLAN&TRUNK部署注意:

  • VLAN隔离:将语音VLAN、数据VLAN、管理VLAN、native VLAN、黑洞VLAN保持隔离
  • 对于本地VLAN来说,每个接入区域上部署1-3个VLAN,将VLAN限制在接入层交换机和汇聚层交换机之中
  • 管理VLAN启用SSH协议,不采用telnet协议
  • 黑洞VLAN:将不用的端口划入到偏僻VLAN中,而不是默认VLAN 1
  • trunk放通:手动配置trunk链路允许通过的VLAN
  • trunk端口:关闭DTP,手动配置trunk,采用802.1q方便qos

层次化设计方案中,接入层和汇聚层之间的链路应当是trunk链路,因为需要承载多个VLAN;汇聚层和核心层的链路采用3层链路。为了避免生成树问题,不建议在两台汇聚层交换机之间部署2层链路,或者不部署互联链路,因为汇聚层链路一旦出现故障后,无环V型拓扑会导致接入层交换机重新计算生成树。