交换机属于二层设备,只能通过MAC
地址表进行转发且转发范围受VLAN
限制
若我们想跨VLAN
进行通信,通常方法有两种
- 利用路由器实现单臂路由
- 通过三层交换机的虚拟接口
Vlanif
进行转发,Vlanif
接口编号必须与VLAN
编号一一对应
实验目的
- 理解
Vlanif
接口的作用 - 了解数据的转发过程
- 了解
OSPF
在三层交换机上的特殊形式
实验拓扑
实验步骤
-
手动为各个
PC
分配好图示IP
地址,掩码与网关,在S1
上创建VLAN 10
,在S2
上创建VLAN 20
,并将两个接口分别配置为Access
类型与Trunk
类型S1: <Huawei>sys [Huawei]undo info-center en [Huawei]sysname S1 [S1]vlan batch 10 [S1]int e0/0/1 [S1-Ethernet0/0/1]port link-type access [S1-Ethernet0/0/1]port default vlan 10 [S1-Ethernet0/0/1]int g0/0/1 [S1-GigabitEthernet0/0/1]port link-type trunk [S1-GigabitEthernet0/0/1]port trunk allow-pass vlan all S2: <Huawei>sys [Huawei]undo info-center en [Huawei]sysname S2 [S2]vlan batch 20 [S2]int e0/0/1 [S2-Ethernet0/0/1]port link-type access [S2-Ethernet0/0/1]port default vlan 20 [S2-Ethernet0/0/1]int g0/0/2 [S2-GigabitEthernet0/0/2]port link-type trunk [S2-GigabitEthernet0/0/2]port trunk allow-pass vlan all
-
将
R1
的e0/0/1
设置为PC3
的网关,将g0/0/3
设置为10.255.255.254/8
R1: <Huawei>sys [Huawei]undo info-center en [Huawei]sysname R1 [R1]int e0/0/1 [R1-Ethernet0/0/1]ip address 192.168.3.254 24 [R1-Ethernet0/0/1]int g0/0/3 [R1-GigabitEthernet0/0/3]ip address 10.255.255.254 8
-
此时我们应当想一想
S3
该如何配置才能保证跨路由通信?我们不妨假设此时PC1 ping PC2
,看看需要哪些操作-
首先
PC1
将PC2
的IP
地址与自身掩码相与,发现PC2
与自己不处于同一个网段,所以直接发送ARP
请求报文【经由S1
的e0/0/1
接口,因此会携带VLAN 10
标签】希望能够得到PC1
网关的MAC
地址,而二层交换机作为数据链路层设备是没有IP
地址的,此时便需要用到三层交换机的Vlanif
接口了 -
我们在
S3
上配置Vlanif 10
逻辑接口,接口的IP
地址设置为PC1
的网关。此时若再有携带VLAN 10
标签的ARP
请求信息时,交换机便会将ARP
的目的地址与Vlanif 10
接口的IP
地址进行比较,若相同,则将交换机的MAC
地址返回给PC1
,意思为:你要找的网关地址在这里!由Vlanif接口接收数据时会剥离Vlanif接口编号对应的Vlan标签;由Vlanif接口发送出数据时会打上Vlanif接口编号对应的VLAN标签,Vlanif接口地址通常为网关地址
-
PC1
得知了目的MAC
地址后便会发送原本想发送的ICMP
报文,由Vlanif 10
接口进行接收,接收后会剥离原本数据携带的VLAN 10
标签。接着交换机查看自己的路由表,看看要把这从网关接收到的数据发往何处 -
此时我们还未帮助
PC2
网段设立Vlanif 20
逻辑接口,所以此时路由表上仅仅只有设置过Vlanif 10
逻辑接口的PC1
网段。因此我们设置Vlanif 20
接口,与Vlanif 10
接口同理S3: [S3]vlan batch 10 20 //创建vlanif前要确保交换机存在对应的VLAN [S3]int vlanif 10 [S3-Vlanif10]ip address 192.168.1.254 24 [S3-Vlanif10]int vlanif 20 [S3-Vlanif20]ip address 192.168.2.254 24
我们可用
display ip route-table
查询此时S3
的路由表情况,发现不管是去往PC1
网段还是去PC2
网段都已经有了直连通路,下一跳地址为Vlanif
逻辑接口 -
此时
PC1 ping PC2
能通么?答案当然是不行的,因为我们还未配置S3
的g0/0/1
与g0/0/2
端口类型,无法处理携带VLAN
标签的信息,那么应该将这两个端口设置Access
还是Trunk
呢?答案是
Trunk
。假设S3
的g0/0/1
为Access
接口,默认VLAN
为10
,则当信息从S3
的g0/0/1
接口发出来时便会被剥离VLAN 10
标签,从而导致无法通过S1
的e0/0/1
接口,自然也就无法到达PC1
S3: [S3]int g0/0/1 [S3-GigabitEthernet0/0/1]port link-type trunk [S3-GigabitEthernet0/0/1]port trunk allow-pass vlan all [S3-GigabitEthernet0/0/1]int g0/0/2 [S3-GigabitEthernet0/0/2]port link-type trunk [S3-GigabitEthernet0/0/2]port trunk allow-pass vlan all
此时
PC1
与PC2
可相互连通
-
-
我们如何令
PC3
与PC1,PC2
相互连通呢?我们不妨假设此时有PC3 ping PC1
-
PC3
通过掩码计算得出PC1
与自身不处于同一网段,因此询问网关地址,而R1
的e0/0/1
接口正好为PC3
的网关,因此数据顺利到达R1
-
R1
接着查询路由表,试图寻找关于PC1
的路由,由于我们并未静态配置任何路由,也没有动态学习路由,因此此时路由表中仅有直连链路。我们配置OSPF
,使S3
与R1
能够相互学习路由信息,同时我们还需要打通S3
的g0/0/3
与R1
的g0/0/3
,以便能够顺利交流链路信息,打通的方法依旧是Vlanif
接口S3: [S3]vlan batch 100 [S3-Vlanif20]int vlanif 100 [S3-Vlanif100]ip address 10.0.0.1 8 [S3]ospf [S3-ospf-1]area 0 [S3-ospf-1-area-0.0.0.0]network 192.168.1.0 0.0.0.255 [S3-ospf-1-area-0.0.0.0]network 192.168.2.0 0.0.0.255 [S3-ospf-1-area-0.0.0.0]network 10.0.0.0 0.255.255.255 R1: [R1]ospf [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 192.168.3.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]network 10.0.0.0 0.255.255.255
此时仍然还不能达到我们的要求,因为
Vlanif 100
只有接收到带有VLAN 100
标签的数据才能发挥作用,进入三层转发,而经由路由器转发的数据是不携带VLAN
标签的,解决这个问题的办法就是Access
接口S3: [S3]int g0/0/3 [S3-GigabitEthernet0/0/3]port link-type access [S3-GigabitEthernet0/0/3]port default vlan 100
此时,经由
g0/0/3
发送至路由器的信息会被剥离VLAN 100
标签,而从路由器发送过来的数据又会被打上VLAN 100
的标签,完美满足我们的需求
-
-
至此,
PC3
与PC2
,PC1
都可互通