问题的来源
- 问题:Vlan间二层通讯被隔离了,不同VLAN之间的终端无法直接通讯。
解决方法:使用三层路由设备将不同的VLAN打通;
在交换机上划分VLAN后,VLAN间的计算机就无法直接通信了。(Vlan间广播域是隔离的,)VLAN间的通信需要借助第三层设备,我们可以使用路由器来实现这个功能,如果使用路由器通常会采用单臂路由模式。
- 问题:使用路由器打通VLAN间通讯,成本高,性能低
解决方法:使用三层交换机。
实践上,VLAN间的路由大多是通过三层交换机实现的,三层交换机可以看成是路由器加交换机,然而因为采用了特殊的技术,其数据处理能力比路由器要大得多。本章将分别介绍两种方法的具体配置。
回顾一下二层交换流程
交换机的二层转发涉及到两个关键的线程:地址学习线程和报文转发线程。
MAC表学习流程:
- MAC的学习:交换机接收网段上的所有数据帧,利用接收数据帧中的源MAC地址来建立MAC地址表;
- MAC的漂移:交换机如果发现一个包文的入端口和报文中源MAC地址的所在端口不同,就产生端口移动,将MAC地址重新学习到新的端口;
- MAC的老化: 如果交换机在很长一段时间之内没有收到某台主机发出的报文,在该主机对应的MAC地址就会被删除,等下次报文来的时候会重新学习。
**二层报文转发流程: **
- 已知单播-转发:交换机在MAC地址表中查找数据帧中的目的MAC地址,如果找到,就将该数据帧发送到相应的端口,
- 未知单播-泛洪:如果找不到,就向入端口以外的其它所有端口发送;
- 同端口-不转发:如果交换机收到的报文中源MAC地址和目的MAC地址所在的端口相同,则丢弃该报文;
- 组播和广播-泛洪:交换机向入端口以外的其它所有端口转发广播报文。
上面流程是简单的桥交换流程,增加了VLAN以后,所有流量都在VLAN内部交换。
**支持VLAN以后的交换机报文转发线程: **:
- 交换机在MAC地址表中查找数据帧中的目的MAC地址,如果找到(同时还要确保报文的入VLAN和出VLAN是一致的),就将该数据帧发送到相应的端口,如果找不到,就向(VLAN内)所有的端口发送;
- 如果交换机收到的报文中源MAC地址和目的MAC地址所在的端口相同,则丢弃该报文;
- 交换机向(VLAN内)入端口以外的其它所有端口转发广播报文。
简单的VLAN间路由流程
每一个VLAN有一个端口连接到路由器,所有终端以该路由器为默认网关。并由该路由器完成VLAN间报文的转发过程。比如10.1.1.1要与11.1.1.1终端通讯。
单臂路由工作原理
从上面我们看到,如果要通过路由器转发三层流量,在交换机和路由器之间,每一个VLAN需要有一个链路连接,当VLAN很多的时候,这将耗费大量的路由器接口,而路由器接口成本是非常高的。为了节约路由器接口,一个解决方案是路由器支持VLAN子接口。
VLAN子接口
1. 所谓子接口,就是是通过协议和技术将一个物理接口(interface)虚拟出来的多个逻辑接口。
2. VLAN子接口,就是通过VLAN技术,将一个物理接口,虚拟出多个逻辑接口,
VLAN子接口上发送的报文,会打上Vlan-tag,用于区分不同的VLAN链路。
通过配置路由器上的VLAN子接口,路由器和交换机物理上只需要一个端口连接,通过报文上的VLAN-tag区分不同的逻辑链路。这样节省了大量的端口资源。
三层交换机
三层交换机的原理模型可以认为是:三层交换机 = 二层交换机+三层路由器
三层交换机既有二层交换单元,内部还有一个三层路由模块。(原理上可以认为三层交换机就是把一个交换机和一个路由器装在一个盒子里。虽然原理上我们可以这样简单认为,但在具体实现上,特别是报文的转发流程上,还是有很大差异的。所以三层交换机在转发性能和成本上都有很大的优势)
在三层交换机上,可以在一个VLAN配置三层接口(cisco成为交换机虚拟接口 SVI:switch virtual interface),这个SVI接口就是上面原理模型中的那个路由模块对应的接口。它具备普通路由器接口的基本特性,比如:
- 该接口有自己的MAC地址;
- 在该SVI接口上,我们可以进行标准的三层协议的配置,包括IP地址,路由协议等等。
三层交换机的转发流程
交换机的转发行为主要借助于下面几张表:
|表项|KEY|VALUE|
|--||
|二层MAC转发表(硬件) | MAC,VLAN | PORT|
|三层主机路由表(硬件)| IP | NH_IP , NH_MAC,VLAN,PORT|
|三层网段路由表(软件)|Network,Mask|NH_IP,PORT|
|ARP表(软件)|IP|MAC,VLAN,PORT|
三层主机路由表相当于【网段路由表+ARP表】的组合,用于加快交换流程。三层主机路由表的生成有两种方式:
- 按需生成:到达该目的地的第一个报文转发时,有软件进行三层转发后生成。并且该目的地址一定时间内没有流量将被老化。这就是所谓的“一次路由,多次交换”。
- 预先生成: 也有些设备只要学习到ARP条目,就自动生成主机路由,并保持主机路由与ARP条目之间的同步与一致性。这种方式对主机路由硬件资源开销会大一些,但第一个报文就能采用交换方式,性能更高。
-
准备工作:
三层交换机为VLAN配置三层接口IP后,会在交换芯片的MAC地址表中添加三层接口MAC+VID的表项,并且为表项的三层转发标志(Route标志)置位。 - 转发流程
- 硬件二层交换:报文进入三层交换机后,首先在交换模块进行标准的二层交换处理:
- 根据报文的目的MAC(精确匹配查找),查找二层MAC转发表:
如果不存在该MAC条目,则在所有端口上进行泛洪处理(广播组播也会泛洪)。
如果存在该MAC条目,并且该条目没有Route标志,则进行标准交换转发
如果该MAC条目上有Route标记,则进行硬件三层转发。
- 根据报文的目的MAC(精确匹配查找),查找二层MAC转发表:
- 硬件三层转发:
- 根据报文的目的IP地址(精确匹配查找),查找三层主机路由表:
如果存在,直接转发(TTL--,目的MAC地址进行替换)
如果不存在,则进行标准的软件三层报文转发。
- 根据报文的目的IP地址(精确匹配查找),查找三层主机路由表:
- 软件三层转发:
- 查找目的IP的网段路由(最佳匹配查找),
如果路由不存在,报文丢弃。
如果存在,查找下一跳的ARP表,如果ARP不存在,进行ARP学习。
学习到ARP后,进行报文转发,并将转发信息写入硬件主机路由表,
以后该目的IP的报文就可以通过硬件进行三层转发了。(这就是所谓的一次路由,多次交换)
- 查找目的IP的网段路由(最佳匹配查找),