3 新的体系结构
首先提出一种通用方法以在通用操作系统中支持按需路由协议,并提出下面机制以增强当前分组转发功能。在内核路由表的每个条目增加一个标志表明该条目是否为按需路由条目,从而当路由不可达时,内核将分组排队缓存而不是直接丢弃。一个路由若具有空的下一条或接口则将缓存以等待路由发现。同时路由表无需包括所可能目的地,使用基于子网标志的路由和默认路由可到达同样的目的。将一种称为按需路由组件 (ODRC)的新组件加入内核分组转发功能以实现按需路由功能。当内核收到一个分组并发现没有向应的路由时,它首先通知用户空间的路由守护进程对该分组的目的地发出路由请求,然后将该分组缓存等待守护进程返回路由发现状态。如果该过程成功完成,则填充相应路由表条目,缓存的分组重新插入转发队列。为解决路由缓存问题,必须在每个路由条目上加入时间戳,记录该条目最后被使用时间。时间戳用于删除一个未使用的过期路由。
4 Linux下的一种实现
4.1 Linux系统网络协议栈体系结构
Linux网络系统有硬件,数据链路层、IP层、INET Socket层、BSD Socket层和应用层5部分。其中在Linux内核中分组包括前4部分。图1为Linux系统基于TCP/IP的网络体系结构。
4.2 Linux系统网络堆栈的IP层
Linux路由系统中主要保存3种路由相关的数据:(1)在物理上与本机相连接的主机地址信息表,即邻居节点表。邻居节点表用neigh_table{} 数据结构表示,以neighbour{}数据结构为节点;(2)在网络访问中判断一个网络地址的数据表,是转发信息库FIB,用来保存路由规则,用 fib_table{)数据结构链表来表示;(3)最近使用过的路由缓存表,称为路由缓存表,用rtable{}数据结构链表表示。