Untag 就是普通的 ethernet 报文,普通 PC 机的网卡是可以识别这样的报文进行通讯。 Tag 报文结构的变化是在源 mac 地址和目的 mac 地址之后,加上了 4bytes 的 vlan 信息,也就是 vlan tag 头,一般来说这样的报文普通 PC 机的网卡是不能识别的。
带 802.1Q 的帧是在标准以太网帧上插入了 4 个字节的标识,其中包含:
1) 2 个字节的协议标示符( TPID ),当前置 0X8100 的固定值,表明该帧带有 802.1Q 的标记信息。
2) 2 个字节的标记控制信息( TCI ),包含了三个域:
l priority 域,占 3bits ,表示报文的优先级,取值 0 到 7 , 7 为最高优先级, 0 为最低优先级,该域被 802.1Q 采用;
l 规范格式指示符域( CFI ),占 1bits , 0 表示规范格式,应用于以太网, 1 表示非规范格式,应用于 Token Ring 。
l VLAN ID 域,占 12bits ,用于标识 VLAN 的归属。
以太网端口的三种链路类型: access, trunk, hybrid
Access 类型的端口只能属于 1 个 VLAN ,一般用于连接计算机的端口;
Trunk 类型的端口可以允许多个 VLAN 通过,可以接收和发送多个 VLAN 的报文,一般用于交换机之间连接的端口;
Hybrid 类型的端口可以允许多个 VLAN 通过,可以接收的发送多个 VLAN 的报文,可以用于交换机之间连接,也可以用于连接用户的计算机。
Hybrid 端口可以允许多个 VLAN 的数据不带 tag ,而 802.1Q 的 trunk 只能是 native vlan (即 pvid )对应的 vlan 的数据不带 tag ,应该说 hybrid 可以实现 trunk 端口的特性。实际使用时都可以用 hybrid 端口,而不用 trunk 。
Hybrid 端口和 Trunk 端口在接收数据时,处理方法是一样的,唯一的不同之处在于发送数据时, hybrid 端口可以允许多个 VLAN 的报文发送时不打标签,而 trunk 端口只允许缺省 VLAN 的报文发送时不打标签。
交换机接口出入数据处理过程:
接收:
1. Access 端口
1) 收到一个二层帧
2) 判断是否有 VLAN 标签,没有转到第 3 步,有则转到第 4 步
3) 打上端口的 PVID ,并进行交换转发
4) 若 VLAN 标签和 PVID 一致,转发 VLAN 帧,否则直接丢弃
2. Trunk 端口
1) 收到一个二层帧
2) 判断是否有 VLAN 标签,没有转到第 3 步,有则转到第 4 步
3) 打上端口的 PVID ,并进行交换转发
4) 判断该 trunk 端口是否允许该 VLAN 帧进入,允许则转发,否则直接丢弃
注意: trunk 口允许或不允许 VLAN 帧,是对进入的帧而言的,对出去的帧没有限制
3. hybrid 端口
1) 收到一个二层帧
2) 判断是否有 VLAN 标签,没有转到第 3 步,有则转到第 4 步
3) 打上端口的 PVID ,并进行交换转发
4) 判断该 hybrid 端口是否允许该 VLAN 帧进入,允许则转发,否则直接丢弃。
可以看到, trunk 和 hybrid 口对接收到得数据帧的处理规则是一样的。
发送:
1. Access 端口
将报文的 VLAN 信息剥离,直接发送出去
2. Trunk 端口
比较端口的 PVID 和将要发送报文的 VLAN 信息,如果两者相等则剥离 VLAN 信息,再发送;如果不相等则直接发送
3. Hybrid 端口
判断该 VLAN 在本端口的属性( disp interface 即可看到该端口对哪些 VLAN 是 untag ,哪些 VLAN 是 tag ),如果是 untag 则剥离 VLAN 信息,再发送;如果是 tag 则直接发送。