这篇笔记开始介绍linux系统中路由子系统的代码实现,路由子系统可以分为三部分:
- 路由数据库;
- 路由缓存;
- 策略路由;
后面会分别详细介绍这三部分的代码实现,这篇笔记从整体框架上介绍下着三者之间的关系。
路由数据库
我们常说的路由表组成了路由数据库,内核可以维护多张路由表。每张路由表中保存的是一条条的基于目的地址的路由,每条路由的基本含义是:要想去XX地址(目的地址)的XX数据包(除目的地址外其它的匹配条件),要通过XX网络设备接口。
路由缓存
对路由数据库执行的最频繁的操作非查询路由莫属了,为了提高查询效率,引入了缓存机制,就是将最近的一些查询结果先缓存下来,在查询路由时,先查缓存,如果缓存没有命中,再向路由数据库查询,并根据需要更新路由缓存。这种设计思想实际上非常好理解。
策略路由
基本的路由数据库中的路由都是基于目的地址的,为了能够支持更加灵活的路由查询,比如要求某个源IP地址的数据包必须按照指定的路由查询,或者要求某个目的端口的数据包要按照指定的路由查询,类似这种查询要求,基本的路由数据库就很难完成,所以引入了策略路由数据库(RPDB,即Routing Policy Database)。