尽管MaxProp是针对基于车载DTN设计的,但MaxProp的一些设计策略还是很有借鉴价值。本文介绍MaxProp路由。(未完待续)
1. 路由策略
介绍MaxProp的论文如下:
BURGESS, John, GALLAGHER, Brian, JENSEN, David, et al. MaxProp: Routing for Vehicle-Based Disruption-Tolerant Networks. In : INFOCOM. 2006. p. 1-11. BibTex
The ONE自带的MaxPropRouter,在上述论文的基础上,增加了一个参数alpha
(默认值为1),对于新建立的连接,其delivery likehood
增加α
并除以(α+1)
,论文如下:
KARVO, Jouni et OTT, Jörg. Time scales and delay-tolerant routing protocols. In : Proceedings of the third ACM workshop on Challenged networks. ACM, 2008. p. 33-40. BibTex
总结起来,MaxProp设计一些策略对消息队列的消息进行重新排列,这样发送消息就有了优先级,删除消息(当缓冲区满时)也有了优先级,截图论文的一张图如下:
图1 MaxProp路由策略
2. MaxProp
2.1 设置文件
# 设置文件 Group.router = MaxPropRouter MaxPropRouter.alpha = 1.0 # 默认值为1.0 MaxPropRouter.probSetMaxSize = 50 # 默认值为50 //MaxPropRouter.java 默认值 public static final double DEFAULT_ALPHA = 1.0; public static final int DEFAULT_PROB_SET_MAX_SIZE = 50; //the meeting probability set maximum size
避免消息重复转发
假设节点A
已经收到消息m
,当节点B
尝试给A
发送消息m
,应予以拒绝。要实现这一点,首先要保存节点转发消息的情况,用HashMap存储。如对于节点A
,其HashMap形如这样:(A->B, [M1, M2]), (A->C, [M3, M2]), (A->…, […])
。相关源代码如下:
//MaxPropRouter.java private Map<DTNHost, Set<String>> sentMessages; //Map of which messages have been sent to which hosts from this host //构造函数 protected MaxPropRouter(MaxPropRouter r) { super(r); ... this.sentMessages = new HashMap<DTNHost, Set<String>>(); }
当成功转发消息时,会更新sentMessages
,见函数transferDone
(Connection con)
专题: DTN路由协议 (4/6)
微信赞赏
支付宝赞赏
MaxProp是类似Epidemic向若干个中继点转发,还是从相遇的中继点中只选择一个相遇点转发消息?
MaxProp其实跟Epidemic类似,只是多增加了一些机制,给消息一个新的排列方式。
sorted by delivery likelihood 中Delivery likelihood是最小的那个吗?
请问楼主,MaxProp在进行消息转发时,是仅仅将消息发送给计算出的最短路径上的节点,还是无选择地尽量将消息发送给相遇节点呢?
很抱歉,两者都不是。首先,基于DTN的特点,在发送数据之前没法知道S-D的最短路径;其次,MaxProp也不是像Epidemic无加选择地转发,而是在一定条件下转发,你好好看下论文`When two peers discover each other, MaxProp exchanges packets in a specific priority order.`这一部分。
Pingback: The ONE使用笔记:目录 | Spark & Shine