目录
参考资料
文献:
《GPSR: Greedy Perimeter Stateless Routing for Wireless Networks》 Brad Karp,H. T. Kung
参考网址:
简书:
GPSR协议详解(3)——周边转发 - 简书
1 背景
GPSR协议是由哈佛大学的Brad和Kung提出的,一种适合移动自组网MANET的路由协议。GPSR协议中转发数据包主要包括两种方法:贪婪转发和周边转发。贪婪转发是算法的核心,简单来说就是寻找最接近目的节点的一跳邻节点,然后向此节点转发数据包;周边转发方法是对贪婪转发模式的补充,解决在执行贪婪转发失败的区域进行数据分组转发的困境。
在MANET中,随着网络节点数量的增多和节点移动性,网络拓扑变换频繁,传统的路由协议的开销也急剧增大,主动式路由协议需要不停更新维护全网络链路的状态,被动式路由则需要在数据传输前进行路由发现过程,造成数据传输的端到端时延较大。
而GPSR的优势在于,只需要保存一跳邻节点的状态信息,路由开销小;并且随着网络节点数的增加,比基于拓扑的路由协议有更强的扩展性。即使网络内节点移动频繁,GPSR协议都可以基于一跳邻节点的信息,迅速找到替代路由,即是一种无状态(Stateless)协议。而传统的AODV,DSR,DSDV,OLSR协议在网络拓扑变化后都需要重新进行路由发现(更新),待新的路由建立后才能进行数据包的传输。
2 GPSR过程
2.1 周期性广播信标(Beacon)
GPSR协议中,每个节点都配备有如GPS模块这样的地理位置获取模块,来获得当前节点自身的实时位置。
GPSR协议中,所有节点在收到数据包后,根据邻居的位置信息进行路由转发决策,即需要邻居的位置,则每个节点会周期性向邻居(一跳节点)广播自己的位置信息,包含位置信息的消息为GPSR的信标(Beacon),其包含字段如下:
字段 | 含义 |
时间戳 | 发送信标的时刻 |
自身IP地址 | 告诉邻居信标的来源 |
位置信息 | 自身位置 |
每个节点在收到来自邻居的信标后,会增加/更新本地邻居表中,对应邻居的时间戳和位置信息,
若在一个周期内没收到来自某个邻居的更新信标,则默认该邻居此时已移除可通信范围,将其从邻居表中删除。
2.2 贪婪转发策略(Greedy)
在GPSR协议中,源节点在传输数据包的时候,在数据包的头部携带了目的节点的位置信息,再转发给中间节点。当节点收到数据包后,需要根据本地的邻居表选择下一跳节点,此时采用局部最优的贪婪选择策略。
具体而言,可分为如下步骤:
步骤1:因为节点保存了所有一跳邻居的位置,则会计算每个邻居到目的节点的距离;
步骤2:如果存在邻居节点,其到目的节点距离小于当前节点到目的节点距离,则选择其中距离目的节点最近的邻节点作为下一跳节点,进行数据包转发。如果不存在这样的邻居节点,则转到步骤3;
步骤3:贪婪转发失败,陷入路由空洞,无邻居可选的困境,失败节点进入“周边转发”模式,见2.3节。
所有节点都遵循寻找局部最优选择的这一方法,一直到数据包送抵目的位置。
举个例子,图1中,节点x需要将数据包转发到目的节点D。以节点x为圆心,虚线圆圈则代表节点x的通信范围。
(1)存在到节点D的距离小于节点x到节点D距离的邻居,因此该节点可以继续进行贪婪选择。
(2)因为节点y到节点D的距离,是在节点x的所有一跳邻节点中离节点D的距离最小的,所以节点y作为局部最优选择,成为下一跳节点。
这个过程随着数据包不断被转发下去会被一直持续,直到数据包到达节点D。
贪婪转发最大的优势是,只需要保存邻居的信息。与按需路由协议不一样,不需要在发送数据包前进行路由发现,而是收到数据包就选择下一跳节点。
2.3 周边转发策略(Perimeter)
2.3.1 路由空洞
只使用邻居位置的贪婪转发,存在路由困境。如图2所示:转发节点x自身离目的节点D的距离,比所有邻居到目的节点D的距离都要更近。
按照贪婪转发的策略,节点xx是转发数据包的局部最优节点。节点x不会转发数据包给节点y或节点w。
这就是贪婪转发所面临的困境:存在一种网络拓扑结构,向目的节点发送数据包的过程中,需要选择距离目的节点非最近的节点作为下一跳路由。这种情况称为路由空洞现象。
遇到路由空洞的时候,将由周边转发模式来处理这种情况。
2.3.2 周边转发恢复策略
如图3所示,阴影区域是半径为xD的圆和节点x的圆形信号辐射范围的重叠面。在这个范围内找不到x的邻节点。即所有邻节点,都要比节点x离目的节点距离更远。这个区域被称为节点x的空洞区域(void)。X节点需要尝试寻求其他的转发路径,绕过空洞区域。
在Brad和Kung的论文中,周边转发模式有两个关键工具:右手定则和构造平面拓扑图。
(1)右手定则
右手定则如图4所示:当数据包从节点y到达节点x的时候,采用以节点x为轴心,将(x,y)按照顺时针旋转,到达的第一条边则是下一次转发所要经过的路径。
如图4所示,转发顺序应该是y→x→z→y。而为了绕过图一中出现的空洞区域,釆用x→w→v→D→z→y→x的顺序转发数据分组。这种由右手定则构成的路径,称为周边(perimeter)。
当转发数据包遇到路由空洞的时候,记录当时的状态(位置),使用右手定则来走出路由空洞,即使用右手定则在互相相交的图中,找到一个包含路由空洞的周边(perimeter)。
这种方法总体上改善了可达性结果,但仍然存在一个严重的问题:当路由存在时,算法并不总是能找到它们。右手定则方法盲目地删除它遇到的第二条边。然而,它移除的边缘可能会分割网络,造成网络分区,算法将找不到跨越此分区的路由。因此,引入构造平面图。
(2)构造平面拓扑图
平面图,指的是没有任何两条边相交的图。假设节点的通信范围为半径为r,节点m在节点n的通信范围内,即距离d(n,m)≤ r,则称节点n和m之间存在边(n,m)。(注意:此方法只适用于二维平面,即节点间不存在高度差)。
要构造平面图,需要达到以下要求:
条件1:删除不属于平面图的边,构造一个没有交叉边的网络拓扑图
条件2:平面图算法必须能够以分布式运行在每个节点上,而且只需要用到与节点有关的本地拓扑信息作为算法的输入
条件3:将图中多余的边删除,到平面图构造完成的过程中,不能使图断开,导致网络拓扑分割。
相对邻域图RNG(Relative Neighborhood Graph)和加布里埃尔图GG (Gabriel Graph)是常见的、满足以上条件的平面图。从图中删除不属于RNG或GG的边的算法将产生没有交叉连接的网络。
(以下仅从论文中做翻译,简介RNG和GG图,涉及图论,具体内容小伙伴可以去仔细研读论文和图论相关的文章)
1)RNG平面图
A. 定义
若顶点u,v和任意其它顶点w之间的距离,全都大于或等于顶点u和v之间的距离d(u,v),则在顶点u和v之间存在RNG边(u,v)。用方程式表示如下:
RNG平面图的定义如图5所示。以节点u和节点v各自形成一个半径为d(u,v)的圆形,阴影区域则是这两个圆的重叠部分。若(u,v)是RNG中的边,则在节点u和v之间的阴影半月形区域内,不能包含有任何证明节点w。
B. 算法
对于每个节点u,有完整的邻节点列表N,用以下伪代码去除非RNG连接:
2)GG平面图
A. 定义
如果节点u和节点v之间,直径为uv的圆内,不存在其它顶点w,则节点u和节点v存在GG边(u,v)。用方程式表示如下:
RNG平面图的定义如图6所示,节点u和节点v之间形成一个直径为d(u,v)的圆形,节点u和节点v都在圆上,即是圆形阴影区域。若(u,v)是GG中的边,则在节点U和V之间的圆形阴影区域,不能包含有任何证明节点w。
B. 算法
从两者的定义可以看出,RNG是GG的子集,差别在GG只是在节点间较小的圆形阴影区域内搜寻证明节点。
3 缺点
GPSR在路由选择时完全基于节点的地理位置,这样有可能导致数据包转发节点陷入路由空洞,而为了跳出路由空洞,需要进行周边转发,这会导致数据包传输所经历的跳数增多,对应端到端时延增大。
同时,在MANET中,由于节点的移动性,每个节点所维护的邻居位置信息和实际邻居位置可能存在误差,在进行路由决策时会出现链路故障,影响协议的投递率性能。
在使用GPSR协议时,最好考虑进节点的移动性,参考一些位置预测模型,减少移动性对通信性能的影响。