一, 背景介绍
交换是疏通领域另一个知识块, 与路由一样有着举足轻重的地方, 本片就通过不同 vlan 间通信的三个实现方式来讲解交换的通信过程.
二, 不同 vlan 间通信实现方法
1. 使用二层设备实现
如下图所示, 两个交换机之间使用端口绑定的方式以 trunk 连接, 下联 2 台同网段的 pc, 但不属于同一个 vlan, 大部分的案例都是不同的 vlan 属于不同网段通过子接口进行通信, 本示例则以纯二层网络设备进行通信, 顺便说明通信的过程.
(1) 创建 vlan2, 并将连接 pc 的端口加入 vlan2
- [SW1]vlan 2
- [SW1-vlan2]q
- [SW1]int e0/0/1
- [SW1-Ethernet0/0/1]port link-type access
- [SW1-Ethernet0/0/1]port default vlan 2
(2) 创建 eth-trunk 接口, 并将 10/11 接口加入 eth-trunk
- [SW1]int Eth-Trunk 1
- [SW1-Eth-Trunk1]int e0/0/10
- [SW1-Ethernet0/0/10]eth-trunk 1
- [SW1-Ethernet0/0/10]int e0/0/11
- [SW1-Ethernet0/0/11]eth-trunk 1
(3) 将 eth-trunk 口类型设置为 trunk, 并将 SW1 上 eth-trunk 口 pvid 改为 2
- [SW1]int Eth-Trunk 1
- [SW1-Eth-Trunk1]port link-type trunk
- [SW1-Eth-Trunk1]port trunk pvid vlan 2
(4) 通过 display interface brief 命令查看端口都已激活
(5) 再通过 display port vlan 查看每个端口的 vlan 信息, 此时可以看到 eth-trunk1 的 pvid 虽然已经为 2, 但是默认放通 vlan 仍为 1,1 为默认放通的管理 vlan, 所有端口默认 pvid 也为 1
此时 ping 操作发现 pc1 与 pc2 之间无法正常通信, 原因就在于尽管 sw1 的 eth-trunk 口 pvid 是 2, 但是他并没有放通 vlan 2,sw2 也是没有放通 vlan 3, 只有当使用命令
- [SW1]int Eth-Trunk 1
- [SW1-Eth-Trunk1]undo port trunk allow-pass vlan 1 #取消默认放通的 vlan 1, 可省略
- [SW1-Eth-Trunk1]port trunk allow-pass vlan 2
再查看 sw1 确认 vlan2 已经放通, 两个 pc 间才能正查光通信, sw2 上的配置类似, 不再赘述.
通过本实例可以总结出数据通信的过程为:
(1)pc1 发出报文从 sw1 的 e0/0/1 口进入, 再通过 e0/0/1 口时被打上该端口的 default vlan
(2) 报文再通过 eth-trunk 1 口发出前先判断是否允许通过, 如果没有放通, 即使 tag 等于该端口的 pvid 也会丢弃, 本例中 pvid 与 tag 相同, 所以从 eth-trunk 1 口出来时剥离 tag 变为纯以太网帧
(3) 报文进入 sw2 的 eth-trunk 1 口时打上该端口的 pvid
(4) 从 sw2 的 e0/0/1 流出时, 因为 tag 等于该端口的 pvid 所以脱掉 tag 变为纯以太网帧发送给 pc2.tag 是由交换机添加的信息, pc 并不能识别, pc 只能识别纯以太网帧
这样, 尽管没有借用三层设备但最终 pc1 和 oc2 实现了通信.
2. 借助路由器子接口
拓扑如下图所示, 此时交换机上联路由器, 属于不同 vlan 的 pc1 和 pc2 将通过路由器子接口的方式进行通信.
(1) SW1 上的配置
创建 vlan10,20
[SW1]vlan batch 10 20
将 e0/0/1 口加入 vlan 10
- [SW1]int e0/0/1
- [SW1-Ethernet0/0/1]port link-type access
- [SW1-Ethernet0/0/1]port default vlan 10
将 e0/0/1 口加入 vlan 20
- [SW1-Ethernet0/0/1]int e0/0/2
- [SW1-Ethernet0/0/2]port link-type access
- [SW1-Ethernet0/0/2]port default vlan 20
将 g0/0/1 口配置成 trunk 模式, 并放通 vlan 10/20
- [SW1]int g0/0/1
- [SW1-GigabitEthernet0/0/1]port link-type trunk
- [SW1-GigabitEthernet0/0/1]port trunk allow-pass vlan 10 20
- [SW1-GigabitEthernet0/0/1]undo port trunk allow-pass vlan 1
检查配置, 至此 SW 上配置完成
(2) 路由器上配置
首先能看到, 在交换机上并没有三层口, g0/0/1 属于二层端口
而在路由器上 g0/0/1 是三层端口, 此时是用交换机的二层口连接路由器的三层口, 且 tag 是二层标签, 三层口无法直接识别, 所以要先进行 dot1q 封装
路由器上创建子接口, 用 dot1q 封装用于终结 vlan 标签, 并将网关地址配置在该端口上
- [R1]interface g0/0/1.10
- [R1-GigabitEthernet0/0/1.10]dot1q termination vid 10
- [R1-GigabitEthernet0/0/1.10]ip add 192.168.10.254 24
- [R1-GigabitEthernet0/0/1.10]arp broadcast enable
- [R1]interface g0/0/1.20
- [R1-GigabitEthernet0/0/1.20]dot1q termination vid 10
- [R1-GigabitEthernet0/0/1.20]ip add 192.168.20.254 24
- [R1-GigabitEthernet0/0/1.20]arp broadcast enable
至此, R1 的配置完成, 此时 pc1 与 pc2 就能正常通信了, 需要注意的是: 当开启子接口后, 物理接口的功能就将小时此时的物理接口只是接收数据, 子接口默认情况下不启用 arp 广播, 所以需要手动开启.
3. 使用 vlanif 子接口实现
方法 2 的方法固然能实现不同 vlan 间通信, 但实际生产环境中很少会用到, 原因是: 单臂路由引入了单点故障, 尽管可以通过 eth-trunk 的方式将多跟链路绑定做冗余, 但 vlan 的 1 次间通信会在该链路上一进一出, 该链路的负载较大, 所以常见的方式是使用三层交换机完成, 如下图所示:
创建 vlan10/20, 并加入对应 vlan
- SW1]vlan batch 10 20
- [SW1]int e0/0/1
- [SW1-Ethernet0/0/1]port link-type access
- [SW1-Ethernet0/0/1]port default vlan 10
- [SW1-Ethernet0/0/1]int e0/0/2
- [SW1-Ethernet0/0/2]port link-type access
- [SW1-Ethernet0/0/2]port default vlan 20
创建 vlanif 子接口, 并将网关配置到该接口上
- [SW1]interface Vlanif 10
- [SW1-Vlanif10]ip address 192.168.10.254 24
- [SW1-Vlanif10]int vlanif 20
- [SW1-Vlanif20]ip add 192.168.20.254 24
至此, SW1 配置完成 pc1 与 pc2 之间能够正常通信, 此时有几个需要注意的地方:
(1)vlanif 的子接口必须要跟 vlan 号保持一致
(2)vlanif 是一个三层逻辑端口, 使用三层交换机进行多 vlan 间通信时, 不需要进行 dot1q 封装, 因为二层的 tag 信息在交换机的物理口就已经被剥离
来源: http://www.bubuko.com/infodetail-3280346.html