无线路由协议Mflood详解(转)

无线路由协议Mflood详解  

2010-09-02 10:05:01|  分类: NS2学习笔记|字号 订阅

 
 
 

添加MFlood路由协议的实验

1、协议分析

MFLOOD洪泛协议是一个简单的无线路由协议,其中基本的思想是:节点根据一定的规则转发自己收到的数据包。该协议包括了Mflood.h, Mflood.cc, Mflood-packet.h, Mflood-seqtable.h, Mflood-seqtable.cc五个文件。

(1)Mflood-packet.h定义了mflood的报头格式:

 

这个新加的报头hdr_mflood通过定义offset_变量,使得能够得到访问。

 

(2)mflood洪泛协议的实现过程主要在Mf

无线路由协议Mflood详解 - vivi - vivian

 lood.cc中体现。在Mflood.cc中有三个主要的函数,rt_resolve用于建立新的路由,recv用于接收数据包,forward用于转发数据包。具体流程如下:

      

无线路由协议Mflood详解 - vivi - vivian

 

       首先进行初始化,如果自己是发送端,那么给这个包加上IP头(长度为20)。设置ttl并且将mflood报头seq栏位中的序号加1。进行转发。

       如果IP报头中的源节点地址指向了自己,说明该节点收到了自己发送的包,显然需要丢弃该包。

       如果节点本身不是数据发送的发起者,收到的也不是自己作为数据发起着发送的数据包,那么节点对ttl进行判断,如果ttl为零,同样丢弃这个数据包。

       如果上述情况都不是,说明该节点需要转发这个与自己无关的包,在转发之前,需要对这个包进行判断,看它符不符合转发的规则。因此,调用了rt_resolve(p)函数。

(3)rt_resolve(p)函数

无线路由协议Mflood详解 - vivi - vivian

 

 

       节点转发数据包之前,必须对这个数据包进行判断,首先查看节点本身的路由中查看数据包的源节点地址,如果不存在,则更新RTEntry,创建路由表,转发该数据包。如果数据包携带的源地址存在,则判断该数据包的seq是否是一个新的seq。

无线路由协议Mflood详解 - vivi - vivian

 

 

判断的方法就是采用一个大小为REM_SEQ_COUNT的seqnos[]数组存放收到的数据包的seq。由于seq越大,数据包越新,所以如果新收到的数据包的seq大于以保存的max_seq,说明这是一个新的数据包,返回true,如果新收到的包的seq小于min_seq,说明这是很久以前的包了,返回false,同样的,遍历rt_seqnos[]数组,如果已存在相同的seq,说明曾经转发过这个数据包,也返回false。判断完毕后,修改seqno相关信息,并根据判断结果转发这个数据包。修改seqno方法如下:

无线路由协议Mflood详解 - vivi - vivian

 

 

       加入刚刚进行判断的数据包的seq小于min_seqno,直接返回,如果大于max_seqno,更新最大的序号,把这个seq存放到rt_seqnos[]数组中。最后遍历整个数组,找出min_seqno。这里对seq_it取余的操作目的在于如果存放的seq多余REM_SEQ_COUNT,那么就重新开始保存。

(4)对数据包的转发:

无线路由协议Mflood详解 - vivi - vivian

 

 

       转发的时候,首先考虑转发的是否为广播包,如果是广播包需要考虑时延,如果不是广播包,则无需时延直接发送。值得注意的是,转发的时候,必须将公共报头中的方向栏位赋值向下,以改变包的传播方向,使之向下传递。

       整个发包的过程基本完成。

2、协议添加

(1)将Mflood.h, Mflood.cc, Mflood-packet.h, Mflood-seqtable.h, Mflood-seqtable.cc五个文件添加至~/ns2.29/mflood文件夹中。

(2)由于添加了新的报头hdr_mflood,因此需要修改packet.h文件。

无线路由协议Mflood详解 - vivi - vivian

 

无线路由协议Mflood详解 - vivi - vivian

 

 

 

(3)MFlood是一个新的无线网络路由协议,因此需要修改ns-lib.tcl文件

无线路由协议Mflood详解 - vivi - vivian

 

无线路由协议Mflood详解 - vivi - vivian

 

 

(4)在makefile.in中添加mflood/mflood.o      mflood/mflood-seqtable.o      \

(5)./configure    make clean     make depend   make

3、调试

添加一个新的路由协议难免会出现错误,不过我很幸运,基本都是语法错误,按照make error提示的错误挨个检查,每次修改之后make一遍,知道最后make成功。

4、测试脚本

       测试了三个无线节点,tcl简单,节点0发送,节点2接收,下面是得到的trace文件。

s 10.000000000 _0_ AGT  --- 0 cbr 512 [0 0 0 0] ------- [0:0 2:0 32 0] [0] 0 0

r 10.000000000 _0_ RTR  --- 0 cbr 512 [0 0 0 0] ------- [0:0 2:0 32 0] [0] 0 0

s 10.000000000 _0_ RTR  --- 0 cbr 532 [0 0 0 0] ------- [0:0 2:0 30 0] [0] 0 0

r 10.004812500 _1_ RTR  --- 0 cbr 532 [0 ffffffff 0 800] ------- [0:0 2:0 30 0] [0] 1 0

f 10.006574953 _1_ RTR  --- 0 cbr 532 [0 ffffffff 0 800] ------- [0:0 2:0 29 0] [0] 1 0

r 10.011667453 _0_ RTR  --- 0 cbr 532 [0 ffffffff 1 800] ------- [0:0 2:0 29 0] [0] 2 0

D 10.011667453 _0_ RTR DROP_ROUTE_LOOP 0 cbr 532 [0 ffffffff 1 800] ------- [0:0 2:0 29 0] [0] 2 0

r 10.011667453 _2_ AGT  --- 0 cbr 532 [0 ffffffff 1 800] ------- [0:0 2:0 29 0] [0] 2 0

 在10.0s时应用层CBR发生器从节点0往节点2发送大小为512字节的UID为0数据包,

2 几乎不需要时间该数据包就到达发送节点(节点0)的路由层(即网络层)

3 节点0在路由层发送广播分组加上Common,IP首部20字节给节点2(UDP分组头部NS不计算在内)

4 节点1的路由层收到0节点广播过来的UID为0数据包538字节

5 节点1转发刚广播过来的UID为0数据包

6 节点0在网络层又收到1转发过来(本是自己发送出去的UID为0的数据包)

7 节点0知道了这个包是自己发出去的,所以drop掉

8 节点2收到节点0广播的并由节点1转发的UID为0的数据包。。。。

 

问题1 mflood报头中的dst_group未用

问题2 initialized()函数返回中的target_是什么?

问题3 command函数的作用?

问题4 关于RTEntry类和MFlood类的关系怎样去理解?

转载于:https://www.cnblogs.com/zhangleiccst/archive/2011/09/25/2190458.html

1. 路由协议 3 1.1. 静态的与动态的内部路由 3 1.2. 选路信息协议(RIP) 5 1.2.1. 慢收敛问题的解决 7 1.2.2. RIP报文格式 8 1.2.3. RIP编址约定 9 1.2.4. RIP报文的发送 10 1.3. OSPF 10 1.3.1. 概述 10 1.3.2. 数据包格式 10 1.3.3. OSPF基本算法 11 1.3.4. OSPF路由协议的基本特征 12 1.3.5. 区域及域间路由 13 1.3.6. OSPF协议路由器及链路状态数据包分类 16 1.3.7. OSPF协议工作过程 18 1.3.8. OSPF路由协议验证 21 1.3.9. 小结 21 1.4. HELLO协议 22 1.5. 将RIP,HELLO和EGP组合起来 23 1.6. 边界网关协议第4版(BGP4) 24 1.7. EGP 27 1.7.1. 给体系结构模型增加复杂性 27 1.7.2. 一个其本思想:额外跳 28 1.7.3. 自治系统的概念 30 1.7.4. 外部网关协议(EGP) 31 1.7.5. EGP报文首部 32 1.7.6. EGP邻站获取报文 33 1.7.7. EGP邻站可达性报文 34 1.7.8. EGP轮询请求报文 34 1.7.9. EGP选路更新报文 35 1.7.10. 从接收者的角度来度量 37 1.7.11. EGP的主要限制 38 2. CISCO 路由器产品介绍 40 2.1. CISCO 2500 40 2.2. CISCO 4500-M 40 2.3. CISCO 7200 41 2.4. CISCO 7513/7507 43 3. 路由器的基本配置 43 参数设置 43 网络号 43 IP类设置 44 菜单设置 44 欢迎文本 44 异步线的设置 44 总结 45 附录一 路由器常用命令 45 4. 基本维护 52 两种状态 52 帮助 52 命令简写 52 跟踪错误 53 进入设置状态 53 存储退出 53 删除设置 53 一些常用命令 53 修改地址 53 修改enable secrect password 55 附录二 常见网络故障分析及排除 55 1 路由器常用测试命令 55 2 路由器传输故障排除方法 55 3网络常见问题 57
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值