嵌入式操作系统
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5.3 路由器的软件功能

在这种硬件构架下对IP报文的转发,过程如下。

① 路由器的一个接口卡接收到一个IP报文(封装在特定的链路层帧之内),接口卡缓存该报文,并向CPU发起一个中断申请。

② CPU响应中断请求,在中断处理程序中,把接口卡接收到的报文(报文缓存在接口卡的本地缓冲区内),复制到内存中。

③ 这时候,有两种处理方式:一种是直接在中断服务程序中提取IP报文头信息(比如目的IP地址),然后查找路由表,从另外一个接口转发报文(或丢弃),然后再从中断处理程序中返回;另一种方式是,系统中有一个IP转发任务在运行,中断处理程序仅仅是把接收的IP报文挂到转发任务的发送队列中,然后直接从中断处理程序中返回。这两种方式各有优缺点,我们的实例采用后者实现。

④ IP转发任务检查发送队列,发现有一个报文等待转发,于是根据IP报文的目的地址,查找路由表,查找到一个出接口后,调用出接口卡的驱动程序提供的发送功能函数,完成IP报文的发送。

⑤ 上述操作全部完成之后,IP报文转发过程结束。

除了IP转发任务(实际上是一个线程)之外,还需要对路由器进行维护。对路由器的维护,有两种典型的方式。

(1)通过Telnet,从远程的一台计算机上登录到路由器,然后通过命令行界面,对路由器进行维护。

(2)直接在路由器本地,通过一条符合RS-232标准的串口线缆连接路由器的COM接口,对路由器进行维护。

当然,若路由器被应用在电信、大型企业等环境中,则还需要支持SNMP(简单网路管理协议)等管理协议,来通过网管中心进行维护。在我们的实例中,仅仅考虑通过Telnet和串口进行维护的情况。

根据上面的描述,路由器的软件功能至少应该包含下列部分。

(1)IP转发功能,完成IP报文的转发。

(2)Telnet服务器功能,用于接收远程发起的连接请求,完成远程维护工作。

(3)COM接口响应服务器功能,用于完成通过COM接口进行维护的用户对话。

(4)路由协议功能,用于完成路由表的维护。一般情况下,根据作用的范围不同,路由协议又可进一步分为内部网关协议(IGP)和外部网关协议(EGP)。其中OSPF是一个比较典型的内部网关协议,BGP(Version 4)是最典型的外部网关协议。在我们的实例中,这两种协议都做了考虑。

(5)TCP/UDP协议栈,这个协议栈用于路由器本身。

对于上述每个功能,我们创建一个任务(线程)与之对应,这样整个路由器的软件部分,就由图1-12中所示的6个任务组成。

图1-12 一个简单的路由器软件构架

其中,路由表是一个核心的数据结构,被多个任务所应用。比如IP转发任务需要通过路由表来决定转发方向,而路由协议任务(OSPF/BGP)则需要根据网络变化情况,实时更新路由表,等等。这样路由表就是一个共享的数据结构,在实现的时候,为了确保数据的一致性,需要采用任务同步机制进行保护。