1) 什么是三层交换?
答:三层交换机把路由器的功能加到交换机,使得交换机能同时转发第二层的帧 (MAC地址),及第三层的数据包 (IP地址)。
2) 为什么要有三层交换?
答:交换机是个第二层的网络设备,可以把一个局网划分为几个虚拟局网 (VLAN), 互不干扰。但这也造成一个问题:怎么在不同的VLAN间转发数据包?
最初的解决方法是单臂路由器,这个路由器只有一条连线,用来和交换机相连,交换机接收前往另一个VLAN的数据包时,将其送往单臂路由器,路由转发到目的VLAN后,单臂路由器在把数据包交还给交换机,让它在第二个VLAN发送。但这样做又麻烦又贵,干脆把路由器的主要功能 (在第三层路由转发数据包)加到交换机。这就是三层交换机。
3)三层交换机的主要结构是什么?
答:三层交换机和二层交换机有两个地方不同:
- 路由功能。通常三层交换机把路由器的路由功能用硬件实现 (ASIC chip), 使得路由转发速度和二层交换速度一样快。
- VLAN虚拟接口。这个虚拟接口模拟VLAN trunk. 二层交换机配置了几个VLAN, 三层交换机就生成几个虚拟接口,换言之,每个VLAN都有一个相应的VLAN虚拟接口。但所有的虚拟接口共用一个虚拟MAC地址,起的骨干接口 (trunk link) 的作用。(二层交换机的骨干接口属于所有的VLAN, 但只有一个MAC地址。
4) Arp代理和三层交换有什么关系?
答:如图所示,当H1要ping H4 (分别在VLAN 2, 3) 而又不知道H4的MAC地址,得先发送ARP Request 查询。但Arp request查询的对象在不同的网段时,Arp request 无法被对象收到、这是因为在不同网段的主机得经路由器相连,而路由器会终止洪泛。Arp代理解决了这个问题,方法是让连接第一个网段的接口代表第二个网段,而连接第二个网段的接口代表第一个网段。三层交换机有路由器的功能,第一个局网的Arp request洪泛时不能逾越三层交换机到达第二个网段。三层交换用Arp代理来解决跨网段的问题。
5) H1 发Arp request 查H4的Mac,为什么三层交换后H4仍然没收到, 只有H2收到?
答: 作为三层交换机,S3也能二层交换。当S3收到H1的Arp request时,S3先用二层交换把此包洪泛到Vlan 2的两个接口,F0/2, Vlan2。以下我们兵分两路追踪下去:
- F0/2是个trunk接口,Arp request经S3.F0/2传送到S2, 又在S2的Vlan 2洪泛,经F0/1抵达H2.。H4在 Vlan 3, 不会收到这个的Arp request。
- Vlan2是个虚拟接口,Arp request经Vlan2交给三层交换,然后三层交换扮演了Arp代理,代表H4发送Arp reply给H1。(三层交换有路由器的功能,而路由器能做Arp代理)。 这两个活动都在Vlan 2之内发生。
附上三个交换机的配置:(以 Cisco 交换机为例)
1) 配置二层交换机S1
S1#conf t
Enter configuration commands, one per line. End with CNTL/Z.
S1(config)#inter f0/1
S1(config-if)#switchport access vlan 2
S1(config-if)#inter f0/2
S1(config-if)#switchport access vlan 3
S1(config-if)#inter f0/3
S1(config-if)#switchport mode trunk
S1(config-if)#switchport trunk allow vlan all
S1(config-if)#exit
S1(config)#exit
S1#
2)配置二层交换机S2
S2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
S2(config)#inter f0/1
S2(config-if)#switchport access vlan 2
S2(config-if)#inter f0/2
S2(config-if)#switchport access vlan 3
S2(config-if)#inter f0/3
S2(config-if)#switchport mode trunk
S2(config-if)#switchport trunk allow vlan all
S2(config-if)#exit
S2(config)#exit
S2#3)配置三层交换机
3.1) 配置两个trunk接口, 分别连接到两个二层交换机。
S3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
S3(config)#inter f0/1
S3(config-if)#switchport mode trunk
S3(config-if)#switchport trunk allow vlan all
S3(config-if)#inter f0/2
S3(config-if)#switchport mode trunk
S3(config-if)#switchport trunk allow vlan all
S3(config-if)#exit
S3(config)#exit
S3#
3.2)配置两个虚拟VLAN接口: Vlan2, Vlan3
S3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
S3(config)#inter vlan 2
S3(config-if)#ip address 10.0.2.100 255.255.255.0
S3(config-if)#no shutdown
S3(config-if)#inter vlan 3
S3(config-if)#ip address 10.0.3.100 255.255.255.0
S3(config-if)#no shutdown
S3(config-if)#exit
S3(config)#exit
S3#
3.3)启动路由
S3#conf t
Enter configuration commands, one per line. End with CNTL/Z.
S3(config)#ip routing
S3(config)#exit
S3#
S3#sh ip route
10.0.0.0/24 is subnetted, 2 subnets
C 10.0.2.0 is directly connected, Vlan2
C 10.0.3.0 is directly connected, Vlan3
S3#