“Vlan 技术 802.1Q”
——华为交换机处理方式之我见
不管在学习过程还是在实际的项目工作中,大家对 vlan 技术都不陌生而且都可 以灵活运用,虽然会用但对于数据桢在何时打上 vlan tag,如何在 trunk 链路上 传输、何时剥离 vlan tag 以及在华为交换机的交换机制又是怎样的呢?大家可能 有这方面的困惑,今天有我和大家一块儿探讨一下数据桢交换的详细过程:
特别简单的环境:如上图所示有两台华为的 S3700 交换机分别是 SW1 和 SW2,各创建一个 vlan 10,然后起一个 vlanif 10,它们在同一个网段互联地址为 10.1.12.1 和 10.1.12.2,现在问 题来了,要想让这两个地址相互通信,SW1 和 SW2 的 E0/0/1 口的链路类型因为配置成哪种 模式呢?我这有三个选项:A:两端的链路类型都为 access、B:两端的链路类型都为 trunk, 并允许 vlan 10 通过、C:一端为 access 一端为 trunk,具体哪个可以实现通信以及是如何实 现通信的呢,我们通过实验验证来分析一下:
一、两端的链路类型都为 access
通过测试两端的链路类型都为 access 时可以相互通信,分析通信过程:SW1 向 SW2 发 ping 包,假如 SW1 已知 SW2 的 MAC 地址,在这里我们不去过多讨论 ARP,SW1 和 SW2 在同一个网段可以完成三层封装,创建了 vlan 并起了 vlanif 10,二层封装时就由 Ethernet2 帧添加了 vlan tag 10 变成了 802.1q 的帧格式,交换机查找 MAC 地址表需要 从 SW1 的 E0/0/1 口发出,E0/0/1 的链路类型为 access 在发送数据帧时需要剥离 tag, 这时在链路上传输时二层帧是 Ethernet2 型(如图 2),到达 SW2 的 E0/0/1 口,此端口 的链路的类型也为 access,access 在接收到没有打 tag 的数据帧时打上接口的 PVID 10, 再交由 vlanif 10 的三层接口剥离 vlan tag 10 数据包到达了 SW2,通信是一个双向的过程 一去一回,反之毅然,从而实现了双方通信。 图 2:
二、两端的链路类型都为 trunk
通过测试两端的链路类型都为 trunk 时可以相互通信,分析通信过程:SW1 向 SW2 发 ping 包,假如 SW1 已知 SW2 的 MAC 地址,在这里我们不去过多讨论 ARP,SW1 和 SW2 在同一个网段可以完成三层封装,创建了 vlan 并起了 vlanif 10,二层封装时就由 Ethernet2 帧添加了 vlan tag 10 变成了 802.1q 的帧格式,交换机查找 MAC 地址表需要 从 SW1 的 E0/0/1 口发出, E0/0/1 的链路类型为 trunk 在发送数据帧时查看该帧的 VLAN ID 10 在 Trunk 的允许发送列表中,在我们没有修改 trunk 端口 pvid 时默认为 1,则直接 发送,这时在链路上传输时二层帧是打上 vlan tag 的 802.1q 帧格式(如图 3),到达 SW2 的 E0/0/1 口,此端口的链路的类型也为 trunk,trunk 口在接收到打 tag 的数据帧时不做 改变,再交由 vlanif 10 的三层接口剥离 vlan tag 10 数据包到达了 SW2,通信是一个双向 的过程一去一回,反之毅然,从而实现了双方通信。 图 3:
三、一端为 access 一端为 trunk
通过测试一端为 access 一端为 trunk 不能相互通信,分析原因:SW1 向 SW2 发 ping 包, 由于 SW1 不知道 SW2 的 MAC 地址,需要发送 ARP 请求,创建了 vlan 并起了 vlanif 10, ARP 的封装在 Ethernet2 帧添加了 vlan tag 10 变成了 802.1q 的帧格式,从 SW1 的 E0/0/1 口发出,E0/0/1 的链路类型为 trunk 在发送数据帧时查看该帧的 VLAN ID 10 在 Trunk 的 允许发送列表中,在我们没有修改 trunk 端口 pvid 时默认为 1,则直接发送,这时在链路 上传输时二层帧是打上 vlan tag 的 802.1q 帧格式(如图 4),到达 SW2 的 E0/0/1 口,此 端口的链路的类型access,access口在收到一个打vlan tag的数据帧时会丢弃此数据帧, 所以双方无法通信。 图 4:
3.1、一端为 access 一端为 trunk 在某些情况下是可以通信,这种情况是什么情况呢?
当 trunk 口的 PVID 为 10 时,SW1 在从 trunk 口发送数据帧时查看该帧的 VLAN ID 10 在 Trunk 的允许发送列表中,而端口的 pvid 和 vlan tag 一致时,则剥离 vlan tag 发送,这时 在链路上传输时二层帧是 Ethernet2 型(如图 5) ,到达 SW2 的 E0/0/1 口,此端口的链 路的类型也为 access,access 在接收到没有打 tag 的数据帧时打上接口的 PVID 10,再交 由 vlanif 10 的三层接口剥离 vlan tag 10 数据包到达了 SW2,通信是一个双向的过程一去 一回,反之毅然,从而实现了双方通信。 图 5:
上述实验里提到了 PVID,大家对 PVID 了解多少呢,通过以下实验来巩固一 下吧!
情况一、
AR1 可以和 AR2 通信吗?
答案是不通,分析原因: AR1 上首次和 AR2 通信没有对端的 MAC 地址无法完成二层封装,首先由 AR1 发起 ARP 请求,到达 SW1 的 E0/0/2 口,E0/0/2 口为 access 在收到一个没有打 vlan tag 的数据帧 是打上端口的 pvid 10,在交换机内泛洪,从 E0/0/1 口发出,E0/0/1 口的链路类型为 trunk 在发送数据帧时查看该帧的 VLAN ID 10 在 Trunk 的允许发送列表中, trunk 端口 pvid 为 20,则直接发送,到达 SW2 的 E0/0/1 口,此端口的链路的类型也为 trunk,trunk 口在 接收到打 tag 的数据帧时不做改变,交换机内部需要交由 vlan10 的端口去处理,SW2 上 E0/0/2 不属于 vlan10 不做处理,最终是 ARP 请求失败无法通信(如图 6) 图 6:
情况二、
答案是不通,但可以实现 AR1 到 AR2 的单向通信,分析原因: AR1 上首次和 AR2 通信没有对端的 MAC 地址无法完成二层封装,首先由 AR1 发起 ARP 请求,到达 SW1 的 E0/0/2 口,E0/0/2 口为 access 在收到一个没有打 vlan tag 的数据帧 是打上端口的 pvid 10,在交换机内泛洪,从 E0/0/1 口发出,E0/0/1 口的链路类型为 trunk 在发送数据帧时查看该帧的 VLAN ID 10 在 Trunk 的允许发送列表中, trunk 端口 pvid 为 20,则直接发送,到达 SW2 的 E0/0/1 口,此端口的链路的类型也为 trunk,trunk 口在 接收到打 tag 的数据帧时不做改变,交换机内部需要交由 vlan10 的端口去处理,E0/0/2 端口类型为 access,在发送数据帧是剥离 vlan tag 到达 AR2,实现了单向通信,但是 AR2 在 ARP 请求时以单播形式到达 SW2 的 E0/0/2 口打上 pvid 10 ,从 E0/0/1 口发出时查看 该帧的VLAN ID 10在Trunk的允许发送列表中, trunk端口pvid和vlan tag相同,剥离vlan tag 发送,到达 SW1 的 E0/0/1 口为 trunk,该帧不包含 Tag,将打上端口的 PVID 20,交 换机内部需要交由 vlan20 的端口去处理,SW1 上 E0/0/2 不属于 vlan20 不做处理,最终 是 ARP reply 失败,无法通信。(如图 7)
图 7:AR2 收到了 AR1 的 ARP 请求
情况三、
答案是可以互通,分析原因:
假设 AR1 已知 AR2 的 MAC 地址,AR1 发送 ping 包,到达 SW1 的 E0/0/2 为 access,在 收到一个没有打 vlan tag 的数据帧打上端口的 pvid 10,交换机内部交由 E0/0/1 口发送, E0/0/1 为 trunk 链路,该帧的 VLAN ID 10 在 Trunk 的允许发送列表中, trunk 端口 pvid 和 vlan tag 相同,剥离 vlan tag 发送,在 trunk 链路上传输时此数据帧为 Ethernet2 型(如 图 8),到达 SW2 的 E0/0/1 口时,E0/0/1 口为 trunk 链路,该帧不包含 Tag,将打上端 口的 PVID 20,交换机内部需要交由 vlan20 的端口去处理,SW2 上 E0/0/2 为 access,在 发送数据帧时剥离 tag 发送,数据成功到达 AR2,通信是一个双向的过程一去一回,反 之毅然,从而实现了双方通信。
图 8:
讲到这里大家对 vlan 技术的掌握又加深了多少呢?如果还对其它通信技术的技术细节 感兴趣,请加入我们 YESLAB 吧!
如果有兴趣欢迎加入YESLAB团队
专属课程顾问,请联系她V:13676251281.(立即在线沟通)
|