第 24卷 第 10期
2014年 1O月
计 算 机 技 术 与 发 展
COMPUTER TECHNOLOGY AND DEVEL0PMENT
Vo1.24
Oct.
No.1O
2014
轻量级 IPv6邻居发现协议及在网关中的实现
缪剑峰,管有庆
(南京邮电大学 信息网络技术研究所,江苏 南京 210003)
摘 要:轻量级IPv6邻居发现协议是6LoWPAN(IPv6 over Low power Wireless Personal Area Network,轻量级IPv6协议)的
重要补充,旨在解决6LoWPAN无线传感网络初始化和网络维护过程中普遍存在的节点高消耗问题。文中归纳并总结了
邻居发现轻量化的必要举措,在此基础上,提出了一套轻量级IPv6邻居发现协议在基于Linux操作系统的边界网关中的实
现方案。通过在内核中邻居发现模块添加新特性,边界网关将负责处理大量原本需要传感节点分担的组网任务和网络维
护任务,大大降低了域内节点开销。通过对原型系统的功能测试,方案完全符合协议标准,简单高效,并做到了与标准
IPv6邻居发现协议的兼容。
关键词:6LoWPAN;邻居发现;边界网关;物联网;无线传感网
中图分类号:TV31 文献标识码:A 文章编号:1673-629X(2014)10-0058-05
doi:10.3969/j.issn.1673—629x.2014.10.014
Implementation of 6LoW PAN Neighbor Discovery Protocol in
Border Routers
MIAO Jian-feng,GUAN You-qing
(Institute of Information Network Technology,Nanjing University of Posts and
Telecommunications,Nanjing 210003,China)
Abstract:The 6LoWPAN—NDP(6LoWPAN Neighbor Discovery Protoco1)is an indispensable supplement tO the 6LoWPAN,which fo—
cuses on the conservation of nodes’energy and network resource in 6LoWPAN during the network initialization and maintenan ce.In this
paper,the necessary measures of neighbor discovery lightweight are summarized.Based on it,put forward a realizing scheme of a light-
weight IPv6 neighbor discovery protocol in border router based on Linux operating system.Through adding the new feature in neighbor
discovery module in kernel,the border router will han dle with the large amount of networking tasks and network maintenance tasks which
originally needs sensor node sham ,greatly reducing the node overhead in domain.The benchmark test shows that the border router de—
signed is up tO standard with the 6LoW PAN-NDP.Its high efficiency and compatibility makes it available tO apply in some real applica-
tions.
Key words:6LoWPAN;neighbor discovery ;border router;Intemet of Things;WSN
0 引 言
6LoWPAN由 IETF组织于 2007年正式定稿发
布,已成为物联网 IP编址 的统一标准 。6LoWPAN
通过在链路层和网络层之间添加适配层,实现了IPv6
报文在802.15.4网络中的传输。通过适配层对报文
进行压缩与分片,6LoWPAN降低了IPv6的网络损耗,
使之适用于低功耗低节点性能的无线传感网络 。
6LoWPAN已形成四个标准文档,2012年 11月发布的
6LoWPAN—NDP(6LoWPAN Neighbor Discovery Proto.
c0l,轻量级IPv6邻居发现协议) ,解决了6LoWPAN
在网络初始化和网络维护过程中节点的高消耗问题 ,
标志着 6LoWPAN的成熟。
网络层协议特别是 NDP一直制 约着 6LoWPAN
协议栈的发展 ,虽然现阶段国外已有将 6LoWPAN
应用于智慧家居和智慧医疗领域的模型系统。。。 ,也
出现了一些6LoWPAN网关原型系统 ,但是上述系
统在网络层中均直接采用了标准 NDP,过多的控制报
文为传感节点带来了负担,也降低了传输效率。制定
收稿日期:2013—11—21 修回日期:2014—02—25 网络出版时间:2014—07—28
基金项目:江苏省高校自然科学研究计划项 目(05KJD520146);南京邮电大学校基金项 目(NY212097)
作者简介:缪剑峰(1988一),男,硕士研究生 ,研究方向为信息网络技术的应用及实现;管有庆,副研究员 ,硕士生导师,研究方向为数据库、通信
软件和下一代网络等。
网络出版地址:http://www.cnki.net/kcms/detail/61.1450.TP.20140728.1221.009.html
第 1O期 缪剑峰等:轻量级IPv6邻居发现协议及在网关中的实现 ·59·
适于6LoWPAN的轻量级 NDP刻不容缓,文献[10—
12]为标准协议的形成做出了重要贡献。文献[10]主
张通过减少组播报文来优化ND过程;文献[11]提出
可通过数据链路层和网络层的协调处理 ,减少 ND过
程中网络洪范现象的发生,从而降低传感网络中的节
点能耗;在此基础上,文献[12]通过引入多通道竞争
机制,对上述方案进行了优化。6LoWPAN—NDP刚发
布不久,目前国内外尚无符合其标准的网关系统。
1 轻量级 口v6邻居发现协议
NDP是 IPv6的重要组成部分,是 IPv6即插即用
特性的技术支撑,位于TCP/IP协议栈中的第三层网络
层 ,代替了 IPv4协议栈 中的 ARP(Address Resolution
Protocol,地址解析协议)。主要功能包括:网关发现、
IP地址自动配置、网络参数自动配置、链路地址解析、
下一跳确定、邻居不可达检测、重复地址检测等。NDP
定义了五种网络控制报文类型,分别为RS(Router So—
licit,路由请求)、RA(Router Advertise,路由通告)、NS
(Neighbor Solicit,邻居请求)、NA(Neighbor Advertise,
邻居通告)以及重定向。
标准 NDP在最初设计时并没有轻量级 的需
求 ,因此并不完全适用于6LoWPAN,主要在于:
· 不支持 6LoWPAN协议的部分新特性,如地址
压缩、节点睡眠等。
· 会产生大量组播报文,造成节点能源浪费。
· 部分机制复杂,对节点的性能造成负担,降低了
整个物联网感知层的效率。
针对上述存在的问题,6LoWPAN—NDP在确保兼
容性的前提下,对标准 NDP进行了修改和简化。其主
要特性为 :
(1)支持6LoWPAN头部压缩。
通过引入 6CO(6LoWPAN Context Option,上下文
选项),建立上下文缓存表以支持 IPv6的头部压缩。
Context即一个4 bit标识 ,在6LoWPAN标准中,用于在
数据传输中取代 IPv6长达64 bit的网络前缀,从而起
到地址压缩的目的。
(2)支持节点睡眠。
6LoWPAN—NDP将节点路由寻找过程由网关触发
改为节点自发,来支持节点睡眠机制。
(3)统一编址方式。
6LoWPAN—NDP规定采用前缀+EUI64(全球唯一
链路地址)进行IP地址的无状态配置,取消了链路本
地组播地址。
(4)单播地址维护。
地址维护包括节点地址注册和 DAD(Duplicate
Address Detection,重复地址检测)等。通过 ARO(Ad—
dress Registration Option,地址注册选项)和改进网关中
的 NCE(Neighbor Cash Entries,邻 居 缓 存 表 ),
6LoWPAN—NDP将复杂的地址维护机制全部放在了网
关中处理 ,减轻了节点负担 ,并消除了对组播的依赖。
(5)可达性检测。
节点通过单播 NS检测邻居的可达性,并禁止了
会产生组播的重定向功能。
2 网关系统架构设计
2.1 系统架构
6LoWPAN—NDP支持两种网络拓扑,分别为mush
— under和route—over¨ 。在前者中,节点直接与边界
网关连接,跳数永远为 1;而在后者中,节点并不与边
界网关直连,而是通过内部网关转发,跳数大于 1。本
设计旨在边界网关中实现6LoWPAN—NDP,限于篇幅,
选取mush—under拓扑搭建实验平台。网络架构如图1
所示
臼
。
=
● ———
图1 mush—under拓扑架构
在系统中,节点采用 Isense-sky430开发板 ,网关
为一台普通Pc,采用ubuntu 10.4作为操作系统,内核
版本为2.6.32。
Isense—sky430开 发板 采 用 TI公 司 的 MSP430
F1611处理器,片内存储容量为48 kB,RAM为 10 kB,
并外置1 MB flash ROM。配置 SHT11温湿度传感器、
S1087可见光传感器等作为其传感模块支持扩展。板
载 CC2420作为 2.4 GHz IEEE 802.15.4标准射频收
发 器。Isense—sky430 功 耗 低 ,功 能 全 ,满 足 了
6LoWPAN无线传感网的基本要求。
由于Pc机无法直接和6LoWPAN域直接通信,因
此系统中Pc端通过USB接口连接一块 Isense-sky430
开发板作为 网络 适配器。网关端 的适配器驱 动与
6LoWPAN适配层的实现不在文中的讨论范围内。
2.2 交互逻辑
网关和节点邻居发现交互逻辑流程如图2所示。
节点初始化时,首先通过 EUI一64构成链路本地
地址 ,接 着 进行 路 由发 现:组 播 发 送 携 带 SLLAO
(Source Link—Layer Address Option,源链路地址选项)
· 6O· 计算机技术与发展 第24卷
的 RS报文以寻找域网关并通告链路本地地址。网关
收到此 RS消息后,以单播的RA报文作为回复。RA
需携带必要的配置信息,包括四个选项,分别为 sL.
LAO、6C0、PIO(Prefix Information Option,地址前缀选
项)及 ABRO(Authoritative Border Router Option,边界
网关授权选项 )。ABRO的作用即宣告网关为边界网
关 ;PIO和6CO根据网关维护的地址前缀表和 Context
表中的表项逐个生成 ,可有多个。
路由
过
地址
过
图 2 6LoWPAN-NDP交 互流 程
节点成功发现路由后,将进行地址注册。节点会
通过PIO携带的前缀信息结合 EUI一64构造临时全球
唯一地址,并封装成 ARO选项 ,通过单播 Ns报文向网
关注册。网关收到节点发来的 Ns消息后,记录其
ARO中的IP地址,并查询 NCE:若NCE未满且没有重
复的地址项,则表示地址注册成功。网关将其添加至
NCE中,并通过单播 NA消息回复注册成功的 ARO选
项,网络初始化成功;若发现重复地址,则网关将通过
ARO中的状态字段告知节点,节点将重新生成地址,
重新进行注册。
节点接入网络后,当节点中的地址前缀、Context、
默认路由等项即将过期时,节点还将向默认网关发送
单播 Rs报文要求更新;而当节点的地址有效期即将
过期时,节点将向默认网关发送单播 Ns报文以维持
注册。
3 网关的实现
6LoWPAN-NDP已在 Isense—sky430中的 UIP6协
议栈获得支持,但在 Linux中却没得到实现。Linux操
作系统虽然支持IPv6报文转发功能,但本身并不支持
将自己配置成网关,内核中缺失一些网关行为的必要
逻辑。将Pc配置为 IPv6网关,需安装开源的应用软
件 RADVD。RADVD运行于用户态,是对网关行为的
补充。RADVD会主动监听网络中的Rs报文,根据用
户设置的网关参数回复相应的 RA报文将自己宣告为
网关,并进行后续的维护。RADVD目前并不支持
6LoWPAN—NDP。
在 Linux网关中实现6LoWPAN主要从两部分考
虑:对于路由报文,应通过修改 RADVD软件,使其支
持6CO,ABRO,并在用户态空间维护 Context表;对于
邻居报文,应通过修改Linux内核中的IPv6模块,使其
支持 ARO,以及单播地址维护机制,并在内核态维护
NCE。需修改的文件为 ndisc.c,addrconf.e及其相关
头文件。
3.1 Context的管理分发策略
Context由网关自学习并配置,通过单播 RA消息
的6CO选项进行分发。6CO中的c位为Context状态
标记位 ,C=O表示该 Context只能用于解压缩 ,C=1表
示既可用于压缩也可用于解压缩。由于网关并不会主
动发送组播 RA来更新 6LoWPAN域中的所有节点,为
保证LoWPAN域中所有节点Context项状态的一致性,
保证正常的通讯,本设计采用如下策略:
网关学习到新的 Context项时,先将 c置0,并等
待一段时间 ,保证此 Context项遍历6LoWPAN域,才
会将 c置1,允许利用此 Context进行地址压缩。根据
网络时延与网络规模, 的值由人工设定。为保证一
致性, 应大于Context的默认生存周期,推荐值为300
S。
在 Context项到期后,应将此 Context项置于过期
状态,并将其生存周期设置为初始值的两倍。在这段
时间里,节点和网关仍可通过此 Context进行头部解
压,但不可以进行头部压缩,网关也不会发送过期状态
的 Context项给节点。这段时间之后,该 Context项才
会被删除。
3.2 邻居缓存的实现
在标准 NDP中,NCE用来存储邻居项,更新邻居
状态,以保证邻居节点通讯的畅通。6LoWPAN—NDP
要求 NCE更加稳定,具有地址缓存功能,根据注册生
命周期维护6LoWPAN域中所有节点的地址注册状
态,继而实现单播DAD等复杂的机制。
Linux中NCE机制非常复杂,它是多协议通用的,
具体的实现在 neighbour.c文件中,并不属于 IPv6模
块。考虑到兼容性,并不修改neighbour.e,而是通过在
IPv6模块 中添加数据结构来实现。包括邻居表项
neigh
一 61owpan和对应的缓存表 neigh—table一61owpan。
因此对于6LoWPAN-ND邻居项,网关将维护两套结
构。邻居表项的数据结构如下:
struct neigh_ 6lowpan
{
struct list
_
head list;
struct neighbour neigh;//指向内核标准 NCE中对应的邻
居项
一 u8 state;//地址状态
一
u8 reg
_ count;//~l用计数
u16 lifetime;//地址生存周期
第 10期 缪剑峰等:轻量级IPv6邻居发现协议及在网关中的实现 ·6l·
struct timer
_ list lifetimer;//生存周期计数器
struct in 6
_ addr addr;//IPv6地址
union
{
一 u8 eui 64[8];//for registered NCE
— u8 addr 64[8];//for Tentative NCE
}lladdr;//链路地址
};
每一个neigh 6lowpan项都与标准 NCE中的邻居
项相对应,并将标准邻居项的引用计数加 1以防止该
项在生命周期未到期时被标准 NDP删除。在 neigh一
61owpan中内置了生存周期计数器,当注册地址到期
时,网关将同时删除两处邻居表项结构。
3.3 地址管理策略
6LoWPAN—NDP规定节点通过携带 ARO选项的
单播NS报文来向网关注册、维护其 IP地址。标准
Linux内核中,网关接收到邻居发现报文后,会送至
NDP模块进行处理,故应在 NDP模块中增加 ARO选
项处理逻辑,如图3所示。网关收到携带 NS的报文
后,将检测其是否携带 ARO选项,若无则该报文将继
续由标准 NDP处理。携带 ARO的 NS报文将进行合
法性检查,并确保其为单播报文。合法的报文将继续
检查其 ARO选项中的生存周期字段:如果生存周期为
0,代表该选项为注销选项,将从 NCE中删除相应邻居
项;对于生存周期不为 0的注册报文,网关将遍历
NCE,根据不同的查找结果回复携带不同状态字 ARO
的单播Ns报文,状态字为0代表邻居项更新或创建成
功,为 1代表地址重复,为2代表缓存已满。而对于非
重复地址,网关将在 NCE中根据ARO携带的信息创
建相应的邻居项。
图3 网关地址管理流程
4 测试与验证
测试网络拓扑如图 1所示 ,测试方法为在网关端
通过抓包软件抓取邻居发现报文,或分析程序运行日
志,以验证网关的实现方案。
节点网络初始化时 ,在网关端截获的邻居报文如
图4所示。限于篇幅,报文内容在此省略。
fe8。::212:7400:1457:ac6g ff02::2 IC v6 Router SO【iCltatl0n
fe80::7600:14ff:re67:a6d9 fe80::212:7400:1467:ac69 ICMPv6 R0uter advertzsement
2∞l:acfB:42ed:渤 0:2l2:74∞:l467:ac6g {silO::76。O:l4{f:re67:a6dg IC}1pv6 N~ighbor solicitation
fe80::76。O:14ff:fe67:aBd9 2001:acf8:42ed:2590:212:7400:1467:ac6g ICMPv6 Neighbor advertzsement
fegO::7600:14ff:re67:a6d9 fe80::212:7400:1467:ac6g I Pv6 Nelghbor SO【iCltat1o r]
fe80::212:7400:1467:ac69 feB0::7600:l4ff:fe67:a6dg ICMPv6 Nezghbor advertzsement
图4 节点网络初始化时的邻居交互报文
可见节点网络初始化流程与第2节中的介绍基本 接下来测试网关对节点重复地址的检测能力,为
吻合。需注意图中有两对 NS,NA报文,其中第(5,6) 此将所有节点的后64位 IP地址都配置为8888:8888:
号报文由标准 NDP发出。它们并不携带 ARO选项, 8888:8888,当第一个节点初始化网络时,它会发送带
只用来做邻居可达性检测,以确定 NCE中的邻居可达 ARO的单播 NS报文进行地址注册。此时,网关 NCE
性状态。从兼容性的角度出发,未屏蔽这些报文。此 中没有该邻居项,将根据报文携带的信息自动生成邻
时节点的网络初始化已经完成,通过远程 PC已经能 居项,完成节点注册。图5所示为内核中的消息日志,
Ping通6LoWPAN域的节点了。 注意第一行提示的”a 61owpan neighbor created”。
945.5964423 a ~ILowpan neighbour c reated
945.696504] 6lowpan neighbour table c1 sta七e: registered, lifetime: 1S 60
945.696557] inet6 addr ls: AC1F:684A:FF97:5024:8888:BBBB:88B8:8888
945.696598] laddr is: 6B:74:6F:70:2F:48:61:6C
945.6966483 the length of 6lLo~pan neighbour table i5
945.696661] 51owpan neighbour table <1 stare: registered, 1ileti丌le: 15j60
945.6956643 inet6 addr is: AC1F:604A:FF97:3024:8888:8888:8888:8888
945.696667] l addr ls: 6B:74:6F:70:2F:4B:61:6C
945.975921.] ng debug::duplicate addr.
图5 DAD过程内核 日志信息
∞虬g}螗∞ 0 2 l 3 8 4 蚴 ㈣瞢i
0 0 0 O 4 5
l 2 3 4 5 6