DTP详解

在Cisco的交换机之上,默认会启用一个名为 DTP(Dynamic Trunking Protocol) 动态中继的协议。该协议可以用于协商端口的工作状态是access还是trunk。并且还可以用于协商,当端口处于trunk时,封装的vlan标签类型,本文就请大家跟着Simon一起来解读 DTP。



DTP 的核心作用

DTP(Dynamic Trunking Protocol)是 Cisco 私有协议,用于在两台Cisco交换机之间自动协商链路是Trunk还是Access模式,并确定 Trunk 的封装类型(如 802.1Q 或 ISL)。它解决了手动配置 Trunk 时可能出现的两端模式不匹配问题,确保 VLAN 标签(如 802.1Q 标签)被正确识别,极大降低了管理员的配置工作以及人为失误造成的故障。


DTP 的状态

运行DTP协议的端口有如下几种状态:

  1. Access mode
    • 这是一种静态模式,当端口被手动配置为access时,那么它将永远停留在这个模式下。access模式的端口用于连接终端设备,例如计算机、打印机等。access端口同一时刻只能属于一个VLAN,只有当接口是access模式时,才能够配分配到具体的vlan当中。这些内容在VLAN的文章中都有讲到,这里就不再赘述。
  2. Trunk mode
    • 这同样是一种静态模式,当端口被手动配置为trunk时,它也会永远停留在这个模式下。
  3. Dynamic Auto
    • 这是一种动态模式,当端口被手动配置为auto时,它会和对端的端口协商来决定工作模式是access还是trunk。
    • 这个协商的过程,和谈恋爱很相似。我们可以理解为 auto 它比较被动害羞,如果对方主动一些(desirable),或者明确表白(trunk),那么它也就顺从对方的意愿,成为trunk。如果对方明确拒绝 (access),或者对方和自己一样也很被动害羞(auto),那么它会成为access模式。
  4. Dynamic Desirable
    • 另一种动态模式,和 auto 的被动不同desirable(渴望) 是一种主动模式,只有当对方明确拒绝(access),也就是对方是access模式时,它会成为access模式。除此以外,如果对方是trunkdesirable或者auto时,那么该接口就会成为trunk
  5. Nonegotiate
    • 关闭DTP功能,但首先需要手动设定端口的状态为access或者trunk之后才可以使用该命令,并且需要注意,不是所有的IOS版本都支持该命令。

下图是DTP协商后结果的对应表


查看设备端口的默认DTP状态

接下来我们通过实验来学习一下DTP协议的配置,拓扑图如下,SW1和SW2之间通过e0/0接口相连(实验环境为GNS3,设备的系统版本为IOS-XE 17.15.1)

首先我们在特权模式下,使用如下命令来查看一下指定端口的二层状态

Switch#show interfaces e0/0 switchport

比如在SW1上查看一下e0/0接口,会输出如下信息

我们主要聚焦红框中内容,这些部分都是关于DTP的默认设定:

  • 先看最后一行 “Negotiaion of Trunking: On” 表示DTP的状态是开启的,这也是DTP的默认状态:
    • 在对应的接口下,使用命令 ”Switch(config-if)#switchport nonegotiate“ 可以关闭DTP,但首先需要手动设定端口的状态为access或者trunk之后才可以使用该命令,并且需要注意,不是所有的IOS版本都支持该命令。
  • 我们在回到红色部分的前两行:
    • 这两行为一组,需要结合在一起看。
    • 第一行 “Administrative Mode: dynamic auto” 表示这个端口当前的DTP模式为 “dynamic auto” 不同IOS版本中端口的默认模式会不一样,有的为auto,有的为desirable
    • 第二行 “Operational Mode: static access” 表示端口协商后当前的工作模式为 access
  • 再来看下面两行信息:
    • 同样这两行为一组,需要结合在一起看。
    • “Administrative Trunking Encapsulation: negotiate” 表示这个接口如果为Trunk,那么封装标签(8021.Q 或者 ISL)的方式为协商决定。还记得DTP的作用吗?它可以协商决定两点内容,1.端口的状态是access或者trunk;2.如果为trunk,那么确定 Trunk 的封装类型(如 802.1Q 或 ISL)。
    • “Operational Trunking Encapsulation: native” 表示协商后的封装类型为 nativenative实际上就对应 ISL(Inter-Switch Link) ,Cisco私有的协议 – 交换机间链路。

PS. 习惯性的查看,以及能看懂设备的当前配置信息是一项重要的技能,我们的所有配置都是基于当前状态下进行的,所以一定要养成这个查看当前状态的习惯。


通过调整DTP状态来影响端口的模式

端口的操作模式(access or trunk)

在指定的接口下,我们可以使用如下配置命令来更改端口DTP的模式:

  • access(静态access)
Switch(config-if)#switchport mode access
  • trunk(静态trunk)
Switch(config-if)#switchport trunk encapsulation dot1q    //设定trunk前,首先需要手动指定标签类型

Switch(config-if)#switchport mode trunk
  • auto(动态自动)
Switch(config-if)#switchport mode dynamic auto
  • desirable(动态渴望)
Switch(config-if)#switchport mode dynamic desirable
  • nonegotiate(关闭DTP)
Switch(config-if)#switchport nonegotiate      //使用该命令之前必须先将端口状态指定为access或者trunk

我们查看一下SW2的e0/0端口状态

可以发现和SW1的默认状态是一样的,两端都为 auto,所以协商后的结果就为 “static access”,表示SW1和SW2的e0/0端口工作模式为access

我们保持SW1不变,调整SW2的e0/0为 “desirable”,然后查看端口的状态

看到SW2的DTP管理员模式为desirable,SW1的还是为auto,但是协商后的工作模式变为了trunk。

其他的协商结果就算是作业留给大家去验证。但结果一定是符合这张表格

我们在看一下DTP协商对于trunk标签的影响,上面的图中可以看到SW1和SW2的Administrative Trunking Encapsulation方式为negotiate,协商后的结果为isl。

我们在SW2上将封装标签类型改为802.1Q,看一下协商的结果。

可以看到SW2的Administrative Trunking Encapsulation方式为 dot1q,SW1没有更改还是 negotiate,但是协商后的结果变为了dot1q,而不是之前的isl。

当端口为Trunk时封装的协议(802.1Q or ISL)

针对turnk上标签的类型的协商结果,DTP遵循下面的逻辑:

  • Administrative Trunking Encapsulation 方式都为negotiate时,结果为isl(显示native)
  • 一端为 dot1q 另一端为negotiate时,结果为 dot1q
  • 一端为 isl 另一端为negotiate时,结果为 isl
  • 一端为 dot1q,另一端为 isl 时,结果为 isl (是不是有点出乎意料?),实际显示为native
Modenegotiatedot1qISL
negotiateISL显示为nativedot1qISL
dot1qdot1qdot1qISL显示为native
ISLISLISL显示为nativeISL

我们来验证一下两端封装标签不一致后的结果,我们将SW1的标签改为 isl

上面的图中看到SW1被设定为 isl,SW2为dot1q,但是最终的工作模式为native,对应isl,毕竟这是Cisco的主场,所以isl压过dot1q并不奇怪 -_-‘


在我的课程中,包含更多详细内容。理论讲解、实验演示、命令文档等内容多维一体。助您一次通过Cisco认证考试!课程优惠券请点击这里