Tag 和 untag
untag 就是普通的 Ethernet 报文,普通 PC 机的网卡是可以识别这样的报文进行通讯;
tag 报文结构的变化是在源 mac 地址和目的 mac 地址之后,加上了 4bytes 的 vlan 信息,也就是 vlan tag 头;一般来说这样的报文普通 PC 机的网卡是不能识别的。
带 802.1Q 的帧是在标准以太网帧上插入了 4 个字节的标识。其中包含:
2 个字节的协议标识符( TPID) ,当前置 0x8100 的固定值,表明该帧带有 802.1Q 的标记信息。
2 个字节的标记控制信息( TCI ),包含了三个域。
Priority 域,占 3bits ,表示报文的优先级,取值 0 到 7 , 7 为最高优先级, 0 为最低优先级。该域被 802.1p 采用。
规范格式指示符( CFI) 域,占 1bit , 0 表示规范格式,应用于以太网; 1 表示非规范格式,应用于 Token Ring 。
VLAN ID 域,占 12bit ,用于标示 VLAN 的归属。
以太网端口有三种链路类型: Access 、 Hybrid 和 Trunk 。
Access 类型的端口只能属于 1 个 VLAN ,一般用于连接计算机的端口;
Trunk 类型的端口可以允许多个 VLAN 通过,可以接收和发送多个 VLAN 的报文,一般用于交换机之间连接的端口;
Hybrid 类型的端口可以允许多个 VLAN 通过,可以接收和发送多个 VLAN 的报文,可以用于交换机之间连接,也可以用于连接用户的计算机。
Hybrid 端口和 Trunk 端口在接收数据时,处理方法是一样的,唯一不同之处在于发送数据时: Hybrid 端口可以允许多个 VLAN 的报文发送时不打标签,而 Trunk 端口只允许缺省 VLAN 的报文发送时不打标签。
在这里先要向大家阐明端口的缺省 VLAN 这个概念
Access 端口只属于 1 个 VLAN ,所以它的缺省 VLAN 就是它所在的 VLAN ,不用设置;
Hybrid 端口和 Trunk 端口属于多个 VLAN ,所以需要设置缺省 VLAN ID 。缺省情况下, Hybrid 端口和 Trunk 端口的缺省 VLAN 为 VLAN 1
如果设置了端口的缺省 VLAN ID ,当端口接收到不带 VLAN Tag 的报文后,则将报文转发到属于缺省 VLAN 的端口;当端口发送带有 VLAN Tag 的报文时,如果该报文的 VLAN ID 与端口缺省的 VLAN ID 相同,则系统将去掉报文的 VLAN Tag ,然后再发送该报文。
注: 对于华为交换机缺省 VLAN 被称为“ Pvid Vlan ”,对于思科交换机缺省 VLAN 被称为“ Native Vlan ”
交换机接口出入数据处理过程如下:
Acess 端口收报文 :
收到一个报文 , 判断是否有 VLAN 信息:如果没有则打上端口的 PVID ,并进行交换转发 , 如果有则直接丢弃(缺省)
Acess 端口发报文:
将报文的 VLAN 信息剥离,直接发送出去
trunk 端口收报文:
收到一个报文,判断是否有 VLAN 信息:如果没有则打上端口的 PVID ,并进行交换转发,如果有判断该 trunk 端口是否允许该 VLAN 的数据进入:如果可以则直接转发,否则丢弃(因为不是该端口 permit 的 vlan )
trunk 端口发报文:
比较端口的 PVID 和将要发送报文的 VLAN 信息,如果两者相等则剥离 VLAN 信息,再发送,如果不相等则直接发送
hybrid 端口收报文:
收到一个报文 , 判断是否有 VLAN 信息:如果没有则打上端口的 PVID ,并进行交换转发,如果有则判断该 hybrid 端口是否允许该 VLAN 的数据进入:如果可以则转发,否则丢弃 ( 此时端口上的 untag 配置是不用考虑的, untag 配置只对发送报文时起作用 )
hybrid 端口发报文:
1 、判断该 VLAN 在本端口的属性( disp interface 即可看到该端口对哪些 VLAN 是 untag ,哪些 VLAN 是 tag )
2 、如果是 untag 则剥离 VLAN 信息,再发送,如果是 tag 则直接发送
以下案例可以帮助大家深入理解华为交换机的 hybrid 端口模式
[Switch-Ethernet0/1]int e0/1
[Switch-Ethernet0/1]port link-type hybrid
[Switch-Ethernet0/1]port hybrid pvid vlan 10
[Switch-Ethernet0/1]port hybrid vlan 10 20 untagged
[Switch-Ethernet0/1] int e0/2
[Switch-Ethernet0/2]port link-type hybrid
[Switch-Ethernet0/2]port hybrid pvid vlan 20
[Switch-Ethernet0/2]port hybrid vlan 10 20 untagged
此时 inter e0/1 和 inter e0/2 下的所接的 PC 是可以互通的,但互通时数据所走的往返 vlan 是不同的。
以下以 inter e0/1 下的所接的 pc1 访问 inter e0/2 下的所接的 pc2 为例进行说明
pc1 所发出的数据,由 inter0/1 所在的 pvid vlan10 封装 vlan10 的标记后送入交换机,交换机发现 inter e0/2 允许 vlan 10 的数据通过,于是数据被转发到 inter e0/2 上,由于 inter e0/2 上 vlan 10 是 untagged 的,于是交换机此时去除数据包上 vlan10 的标记,以普通包的形式发给 pc2
---------------------------------------------------------------------------------------------------------------------
对于划分了 vlan 的交换机而言,
当交换机的端口工作在 access 模式时:
接受数据包:当 access 端口接收到数据包时,检查数据包是否打有 vlan 标签,如果没有就打上段都的 pvid ,如果有的话就直接丢弃。
发送数据包:当 access 端口发送数据包时,将数据包的标记直接剥离然后转发。
当交换机的端口工作在 trunk 模式时:
接受数据包:当 trunk 端口接收到数据包时,检查数据包是否打有 vlan 标签,如果没有就打上端口的 pvid ,如果有标签,检查标签是否允许通过,如果允许就转发,否则丢弃。
发送数据包:当 trunk 端口发送数据包时,首先检查数据包的标签,如果数据包的标签和端口标签一样则去掉标签然后发送,如果不一样则直接发送。