前面我们对Mobile IPv6通用功能体实现进行了详细的说明,现在我们把剩下的部分,也就是内核、适配层、安全机制的功能实现在进行一个具体的讲解。那么,详细的过程请参照下文。
◆Mobile IPv6内核功能体实现
内核功能体与操作系统直接相关,需要根据操作系统具体情况选择合适的实现方式,内核功能体截获上下行的IP数据报文,为通用功能体提供网络控制消息,并转发通用功能体发出的控制报文;同时也是数据报文处理者,负责添加、删除报文的移动信息(Type2路由扩展头,家乡地址选项),封装解封装IP隧道,向IPv6协议栈提交还原的普通IP数据报文、发送添加了移动信息的IP数据报文。
内核功能体与操作系统平台紧密相关。它的实现需要解决两个问题:
(1)IP报文截获机制;
(2)内核态与用户态程序之间通信机制。
这里分别以Linux和Windows操作系统平台为例介绍内核功能体的实现:
Linux平台内核功能体实现采用Net_filter、NetLink两种机制,前者是网卡与网络驱动程序之间编程接口、后者是用户态程序与核心态程序通信的编程接口。利用Net_filter机制直接截获IPv6网络协议程序与网卡驱动之间的上下行IP报文,实现IP报文截获。在Net_filter内部使用NetLink的通信接口与通用功能体之间进行数据通信。
Windows平台内核功能体的实现类似于Linux,Windows的NDIS(Network Driver Interface Specification)机制(网络驱动程序接口规范)和WDM(WIN32 DRIVER MODEL)机制(设备驱动编程模型)分别提供了Windows平台下截获IPv6网络协议层与网卡驱动之间上下行IP报文以及内核功能体与通用功能体之间的数据通信机制,在NDIS中嵌入WDM结构完成内核功能体功能。其他操作系统,内核功能体的实现需要根据实际情况选择合适的机制。
虽然内核功能体根据不同的操作系统需要分别编写,但它内部的基本功能模块相同,将其再次划分,区分出逻辑处理模块和非逻辑处理模块(内核结构性模块),将逻辑处理模块统一编写成为一个函数调用库,采用比较好的封装方法使得这些小的功能模块在不同的操作系统内核程序中可以被调用,不需要再重新修改。内核功能体的编写工作关键是根据操作系统平台的不同将这些小逻辑模块依据具体操作系统内核结构特点合理的组合,使其共同完成内核功能体功能。
◆Mobile IPv6适配层实现
通用功能体是否能保持源代码通用性,关键在于适配层的封装质量,适配层向通用功能体提供统一接口的相关函数。该层中包括内核态与用户态之间的通信接口函数、线程管理函数、定时函数:
1) 通用功能体调用适配层通信接口监听并读取MH、ICMP报文,其反馈的MH和ICMP报文通过通信接口通知内核功能体转发到移动网络。通用功能体管理的相关状态数据需要依靠通信接口即时地通知内核功能体数据管理模块,保持状态数据信息同步;
2) 通用功能体调用线程管理函数管理控制线程,不同系统的线程管理函数各不相同,但线程管理函数的功能基本类似,包括线程产生,关闭,互斥等基本操作。为保持通用功能体代码的通用性,适配层为其提供统一函数名称和参数格式的线程管理函数,内部使用预编译方法区别不同操作系统下的具体的函数实现;
3) 通用功能体需要定期的维护移动相关信息,微秒到毫秒级的定时函数由操作系统提供,适配层同样采用预编译的方法统一封装操作系统定时函数
◆Mobile IPv6安全机制实现
移动IPv6安全包括三个方面:HA注册过程及CN注册过程的安全保障;MN与CN之间的安全保障;HA与MN之间的安全保障。
1) 根据RFC3775规定HA注册过程及CN注册过程的安全保障由RR过程来完成,在通用功能体中得以实现;
2) MN与CN之间的安全保障,可以采用通用IPsec机制实现,这种机制实现在Mobile IPv6以上的网络层次,这里不做特殊处理,值得注意的是在IPsec配置时需要针对MH的HoA地址配置;
3) HA与MN之间的安全是必须得到保障的,选择在内核功能体中实现,采用手动方式配置安全策略,IP包截获接口,监督上下行的数据包,发现与HA通信的IP报文,根据HA和MN之间的IPsec策略配置调用安全模块封装解封装IP数据来确保安全传输。