前面我们对IPv6协议在嵌入式方面的一些主要协议类型进行了简单的说明和介绍,相信大家已经对整个系统中包含的协议类型有了一定的了解了。现在,我们主要讨论系统中的精简IPv6协议栈。
IPv6协议栈的精简协议栈
精简的核心是“微型化”,我们对协议栈进行协议模块裁减和单个协议简化。
IPv6协议模块裁减
协议模块裁减是指在保障基本通信功能的前提下尽可能去掉一些协议模块,节省系统资源。网络接口层我们只考虑802.3以太网协议(CSMA/CD,MAC,LLC),不考虑面向CAN,RS-232,RS-485,射频,蓝牙等相关的支持模块。接入方式上只考虑用路由器接入方式,不考虑拨号连接方式,去掉和拨号连接方式相关的面向点对点连接的PPP协议和SLIP协议,这两个协议在网络接口层占用的代码量比较多;IP层只实现基本的报头,不实现扩展报头,去掉基于认证头和封装安全载荷头选项的IPsec协议,安全控制交给其他层。ICMPV6和ND是核心协议必须保留;传输层TCP和UDP可以全部实现也可以只实现一种,考虑的适应性,本设计中都给予实现。因此协议模块裁减后要实现的核心协议族为802.3,IPv6,ICMPV6,ND,TCP,UDP。
单个协议简化
单个协议简化是指以单个协议为目标,进行功能和数据结构的简化。对IPv6协议来说,只接收,发送报文,不支持报文的分片与重组,不支持扩展报头选项,对可靠连接传输来讲,包过大得不到确认,会根据拥塞控制机制和重传机制,减少数据分组长度,进行重新发送,对大多数应用来说这不会产生其他严重问题。
对ICMPV6来说,只实现错误报文中的目的不可达报文,信息报文中的应答回复报文,不实现超时报文,报文过大报文和应答请求报文,一般包过大,超时报文由路由器实现,应答请求报文用于主动测试中发起测试的PC机一端。对邻居发现ND模块来说,只实现邻居请求和邻居应答报文,嵌入式设备刚接入网络,它可以静态的等待网络上路由器定时发送的路由公告报文,而不是主动发送路由请求报文来获取,不需实现路由请求/路由应答报文。
嵌入式设备连接的邻居接点,路由一般简单,传输量少,不需重定向报文来进行路由定向。简化的大块在TCP,TCP是整个协议簇中最复杂,代码量最多的协议。
它的功能模块有:滑动窗口,流量控制,拥塞控制,TCP连接状态机,往返时间估计,重传协议。
本IPv6协议栈的目标是有操作系统支持的嵌入式系统,速度和存储量比8位和16位单片机都有提高,不必采用分配固定缓冲区的形式进行接收一帧处理一帧,可以考虑采用分配一个较大的缓冲区实现滑动窗口机制,用来提高传输效率,实验证明,传输效率的提高是明显的,往返时间估计和重传机制比较简单,代码量不大,可以实现,TCP状态机表示TCP进程通信的状态迁移,是TCP的核心必须实现,可以不实现流量控制机制,因为流量不是很大。
因此TCP模块实现的功能有:TCP有限自动机,滑动窗口,往返时间估计,重传协议。
忽略流量控制与拥塞控制模块,在可靠连接中,当因拥塞而发生数据丢失的时候,发送方收不到确认就采用重传机制重发数据。