1 交换/路由的区别和联系
- 路由
- 名词:信息从源IP到目的IP的一条最优路径
- 动词:信息从本设备的一个接口根据FIB表转发到另一个接口的过程
- 交换
- 动词:根据三层到二层的地址映射,从本设备的出接口将信息转发到下一个设备的进接口的过程
- 名词:从设备的一个接口转发到设备的另一个接口的过程(我们下面介绍的就是这种交换方式)
我们常说的“一次路由多次交换”,其中的路由指“名词”的路由,实际上一个“名词”的路由里面不只包含了多次“交换”,也包含了多次的“动词”的路由;
- 路由器的路由过程通常包括以下几个步骤:
从下面的步骤也能看出,“路由”这个过程是不需要进行二层的封装的,是路由到对应接口之后才可能会进行二层的封装
2 三种交换方式
- Process switching
- 所有的包都需要通过CPU来检测转发
- 路由表驱动的交换
在这种模式下,一条数据流(flow)中的第一个包(packet)将被置入系统缓存(system buffer).其目的地址将会拿到路由表中去查询比对,路由器的处理器(CPU or Processer)同时将进行CRC校验,检查包是否正确.然后数据包的二层MAC地址将会被重写,替换为下一跳接口的MAC地址,这样的过程将会继续,对这条数据流(flow)中的第2个、第3个数据包.…….相同的操作,包括查询路由表、重写MAC地址,CRC校验等。这种方式无疑是延迟最大的,因为它要利用system buffer 以及 processor去处理每个收到的包.但是我们仍然有机会使用这种交换方式,比如在进行基于每个包的负载分担时,或是debug ip packet 时。
- Fast switching
- 快速交换只是按需建立
- 第一个报文不得不进行进程交换
- 第一个报文交换完成后,建立缓存条目,后续报文就可以进行快速交换
快速交换要优于process switching,它采用了route cache(路由缓存)来存储关于某条数据流(flow)的特定信息,当然会包括诸如目的MAC地址,目的接口等内容.这时我们只需要对一条数据流(flow)中的第一个包做processswitching,并把信息存入cache,所有后续数据包,可以不必再中断system processor去执行查询等操作,直接从cache中提取目的接口,目的MAC地址等,这样大大加速了包转发速度。
- ①将IGP的表项计算后加入RIB表中
- ②在出现访问10.0.0.0/8网段流量时,开始进行递归查找直到下一跳的IP为直连为止,将对应信息填入switching Cache中
- ③并且通过ARP请求下一跳IP对应MAC存入ARP 表中
- ④将ARP表中获取MAC存入Switching Cache的DestinatMAC处
- ⑤后续设备在封装二层时,根据IP就可以直接在switchingCache中找到相应的IP前缀,然后直接将Layer 2 Header的内容加到二层头部;
- CEF
- Topology driven switching
思科CEF 是最为高效的一种三层协议。CEF 采用了基于硬件的平台,它不仅仅是将数据都存入system buffer,而是将整个路由表、拓扑表,以及所有的下一跳地址、MAC地址全部进行"预存".只要路由表、拓扑表中存在的条目,无论是否有数据请求发往其目的地址,都会提前预读取,预设置缓存.这样,当有新的数据请求发送时,就不需要 CPU去查询目的接口,目的MAC地址等等信息,而是直接从缓存中读取,从而使转发速度得以大大提高.
- ①将IGP的表项计算后加入RIB表中
- ②根据IGP表马上进行递归查找算出最终出接口和下一跳IP并且放入FIB表中
- ③根据FIB表中下一跳IP进行ARP请求获取MAC(如果没有下一跳IP,则直接使用目的IP做为请求IP)
- ④将获取的MAC填入Adjacency Table的Destinat MAC中
- ⑤流量转发直接查询FIB表然后再查Adjacency表封装二层
3 三个层面
- 控制层面
- 概念:控制层面为数据层面转发数据提供了各种必要的信息,是各种协议工作的层面。
- 作用:为数据层面提供计算出的相应的素材,同时管理设备也是使用控制层面(管理层面的话高端设备会加)
- 主要占用资源:CPU
- 相关表项:RIB(路由表)、LIB(标签表)、OSPF邻居表、OSPF的LSDB、BGP的数据库…
- 转发层面
- 概念:网络设备中,对数据的各种具体的处理、转发过程都属于数据层面的范畴。
- 作用:控制层面构建了路由表等数据发送的必要信息,数据层面根据这些信息来发送数据。
- 主要占用资源:专用硬件资源(ASIC芯片)
- 相关表项:FIB(CEF转发表)、LFIB(标签转发表)、Adjacency Table、switching Cache、MAC…
- 数据层面
- 概念:数据层面是转发层面的父级
- 作用:除了负责转发层的将数据转发到一个接口,还负责数据的其他处理操作(上下标签,添加IP头部等等)
- 主要占用资源:专用硬件资源(ASIC芯片)
- 相关表项:涉及真实数据的处理操作都可以算是数据平面的操作
- 总结
联系交换的三种方式和三个层面可以得出以下总结
交换方式 | 占用主要资源及表项 | 交换速度 |
---|---|---|
Process Switching | 全CPU(RIB、ARP) | 慢 |
Fast Switching | 半CPU(RIB)、半ASIC(switching Cache) | 较快 |
CEF | 全ASIC(FIB、Adjacency Table) | 快 |
为什么使用ASIC芯片就可以更快速转发呢?我们看下面
4 CPU\GPU\ASIC\FPGA芯片区别
- 各芯片之间的差别
- CPU 算力较弱,并行处理能力较弱(串行处理能力强),强在灵活性,可以进行多种协议的计算
- GPU 算力较强,并行处理能力较强,本身管理控制能力弱需要借助CPU调度管理,灵活性还行
- ASIC 算力最强,并行处理能力强,根据用户需求定制灵活性差,很贵
- FPGA 算力很强,并行处理能力强,可编程半定制电路灵活性较好,稍贵
- 对于交换的影响
- 像控制层,表项是在CPU中的,可以进行多种网络协议的计算,但是转发速度较慢;
- 像转发层(数据层)的表项是缓存在ASIC芯片(网络设备中叫PHY)中的,由于是定制化专门用于转发的,所以转发速度很快;
4 FIB表
- 在默认启用FIB表的情况下,报文转发查看FIB表而不是RIB表;
- 命令:
show ip cef detail
- FIB表会提前计算出路由的最终出接口并存储在表中
- FIB表会存储已经成功访问的IP的具体表项方便转发
- FIB还能实现MPLS的打上标签和弹出标签的动作(所以MPLS离不开FIB)
5 Adjacency Table表
- 封装二层直接查看Adjacency Table来进行封装
- 查看命令:
show adjacency detail
- Adjacency Table 包含了二层头部的所有信息
HDLC链路
EthernetII链路
- 具体参数
- Protocol
上层协议,用于确定二层所使用的Type(如IP就是0x0800,MPLS就是0x8847,VLAN就是0x8100)- Interface
出接口- Address
下一跳IP地址(也有可能直接是目的IP地址)- 长串
二层封装的完整信息- ARP
这里是获取的方式
6 具体封装过程分析(以ICMP包举例)
注意:即使配置的静态路由只有下一跳IP没有配置出接口,最终在FIB表中也会存在出接口,因为下一跳IP必须可达才可以进入路由表,而FIB表就可以根据迭代查找找到最终的出接口;