在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协议的端口有如下几种状态:
- Access mode
- 这是一种静态模式,当端口被手动配置为access时,那么它将永远停留在这个模式下。access模式的端口用于连接终端设备,例如计算机、打印机等。access端口同一时刻只能属于一个VLAN,只有当接口是access模式时,才能够配分配到具体的vlan当中。这些内容在VLAN的文章中都有讲到,这里就不再赘述。
- Trunk mode
- 这同样是一种静态模式,当端口被手动配置为trunk时,它也会永远停留在这个模式下。
- Dynamic Auto
- 这是一种动态模式,当端口被手动配置为auto时,它会和对端的端口协商来决定工作模式是access还是trunk。
- 这个协商的过程,和谈恋爱很相似。我们可以理解为 auto 它比较被动害羞,如果对方主动一些(desirable),或者明确表白(trunk),那么它也就顺从对方的意愿,成为trunk。如果对方明确拒绝 (access),或者对方和自己一样也很被动害羞(auto),那么它会成为access模式。
- Dynamic Desirable
- 另一种动态模式,和 auto 的被动不同,desirable(渴望) 是一种主动模式,只有当对方明确拒绝(access),也就是对方是access模式时,它会成为access模式。除此以外,如果对方是trunk,desirable或者auto时,那么该接口就会成为trunk。
- 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” 表示协商后的封装类型为 native,native实际上就对应 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
| Mode | negotiate | dot1q | ISL |
| negotiate | ISL显示为native | dot1q | ISL |
| dot1q | dot1q | dot1q | ISL显示为native |
| ISL | ISL | ISL显示为native | ISL |
我们来验证一下两端封装标签不一致后的结果,我们将SW1的标签改为 isl



上面的图中看到SW1被设定为 isl,SW2为dot1q,但是最终的工作模式为native,对应isl,毕竟这是Cisco的主场,所以isl压过dot1q并不奇怪 -_-‘
在我的课程中,包含更多详细内容。理论讲解、实验演示、命令文档等内容多维一体。助您一次通过Cisco认证考试!课程优惠券请点击这里