网络协议栈设计与分析Word格式文档下载.docx
《网络协议栈设计与分析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《网络协议栈设计与分析Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
2.2全局变量 5
2.3配置变量 6
第三章 OLSR部分消息包数据结构 7
3.1OLSR首部 7
3.2HELLO消息包 8
3.3TC消息包 9
第四章 邻居发现 9
4.1节点信息的存储 9
4.2关于节点的具体操作分析 11
4.3邻居表的操作 14
4.3.1邻居表的初始化 14
4.3.2删除节点 15
4.3.3邻居节点的查找与插入 17
4.3.4邻居表的更新 18
4.3.5其他操作 18
第五章 MPR选择 19
5.1MPR节点的添加和清除 19
5.2MPR算法 20
5.2.1olsr_find_2_hop_neighbors_with_1_link函数 21
5.2.2olse_chosen_mpr函数 22
5.2.3olsr_find_maximum_covered函数 22
5.2.4olsr_check_mpr_changes函数 23
5.2.5优化MPR集合 24
第六章 拓扑控制消息洪泛 24
6.1TC消息初始化与删除 24
6.2TC消息处理 26
2/36
第七章 路由表的计算 26
7.1主要数据结构分析 27
7.1.1rt_metric和rt_nexthop 27
7.1.2rt_entry 27
7.1.3路由类型 28
7.2路由表计算 29
7.2.1路由表的创建与删除 29
7.2.2最优路径 31
第八章 总结 32
3/36
组内分工
项目
参与者
数据结构部分代码分析
邻居发现部分代码分析
万宇腾、刘伟麟
MPR选择部分代码分析
TC消息洪泛部分代码分析
路由计算部分代码分析
论文撰写
肖明旺、万宇腾、丁英才、刘伟麟
论文汇总
第一章 引言
最佳链路状态路由协议(OptimizedLinkStatusRoutingProtocol,OLSR),是专门为无线移动AdHoc网络提出来的一种标准化的先验式的优化链路状态路由协议。
该协议的核心是使用了多点中继站(MPRs),MPRs是被选择的节点,具有转发网络控制消息的能力。
根据协议,每个节点之间周期性的交换控制信息,节点根据协议计算自己的网络拓扑。
OLSR向所有节点提供一个最短路径,该技术可以有效减少网络中数据传输的信息量。
每一个被邻居们选择的节点在控制信息里周期性的广播这一信息。
因此,可以说是由被选择的节点构成了主要的网络。
相比经典的链路状态算法,OLSR更适合移动无线局域网。
该协议比较适合大型密集的网络。
OLSR有以下优点:
1利用MPRs来重传控制消息可以减少网络间消息的发送数量。
4/36
2只需要部分链路状态洪泛就可以获取最佳路径。
3网络越大则OLSR可优化的范围就越大也就能得到更好的性能
在OLSR协议中,状态路由协议的网络信息状态由被推选的节点(MPR)掌控。
所以,优化的一条途径是减少网络中的控制信息。
只有被选择的MPR节点才
能被用做路由节点,非MPR节点不参与路由计算。
MPR可以减少网络中冗余消息的传送。
每个节点传送消息给一跳邻居,但是邻居并不能再将此消息传送给其他节点。
OSLR协议逐跳寻找路径,每个节点利用本地信息向邻居节点发送路由包来获取路径。
由于该协议在设计之初就考虑到协议的分布式工作,所以该协议不依赖于任何的中心,也不需要稳定的的控制信息的传播。
每一个节点都周期性的发送信息,这样也保证了一个在可以接受范围内的丢包率。
OLSR协议在设计之初就考虑了协议的独立性,因此OLSR协议独立工作于一些协议。
它对IP的包格式没有做任何改变,因此,任何IP协议栈都能在协议中正常使用。
第二章 代码介绍
2.1文件介绍
OLSR路由协议共有123个源文件。
我们将对部分源文件进行功能型介绍。
表格1OLSR协议部分源文件介绍
文件
描述
Olsrd-0.6.0/link_set.c
确定邻居表的信息
Olsrd-0.6.0/lq_packet.h
对olsr,hello,TC数据包以及其他一些数据结构的
定义
Olsrd-0.6.0/mpr.c
关于MPR的一些操作
Olsrd-0.6.0/mpr_selector_set.h
定义了结构体mpr_selector表示MPR选择源节
点的集合
Olsrd-0.6.0/neighbor_table.h
对邻居信息数据结构的定义
Olsrd-0.6.0/neighbor_table.c
对一跳邻居和二跳邻居的处理
Olsrd-0.6.0/olsr.c
实现一些全局函数,比如网络拓扑结构的计算、路由表的计算与更新和错误处理函数等等
Olsrd-0.6.0/olsr_cfg.h
定义大部分常量,比如DEF_WILLINGNESS等
Olsrd-0.6.0/olsr_spf.c
实现spf树的构造从而实现迪杰斯特拉算法计
算路由表
5/36
Olsrd-0.6.0/routing_table.c
路由表的处理
Olsrd-0.6.0/TC_set.c
TC消息的洪泛
2.2全局变量
在olsr路由协议中使用的全局变量有许多,我们在这里只介绍部分重要的全局变量。
表格2OLSR协议部分全局变量介绍
全局变量
数据类型
olsrport
nit16_t
OLSR消息发送接收的端口号
rt_proto
nit8_t
路由表计算的所遵循的协议
willingness
WILL_ALWAYS的邻居节点集合
use_hysteresis
bool
判断消息是否迟滞
min_tc_vtime
float
TC消息vtime的最小取值
max_tc_vtime
TC消息vtime的最大取值
max_jitter
消息传播的最大抖动
changes_topology
判断拓扑信息是否变化
changes_neighborhood
判断邻居信息是否变化
2.3配置
表格3OLSR路由协议配置
名称
默认值
DEF_IP_VERSIONDEF_USE_HYSTDEF_LQ_LEVELDEF_OLSRPORTDEF_MIN_TC_VTIMEDEF_GW_TYPEDEF_DOWNLINK_SPEEDMAX_LQ_LEVELMIN_LQ_LEVEL
DEF_RTPROTO
缺省ip协议域缺省消息迟滞
缺省链路质量等级缺省olsr端口号
TC消息vtime最小取值缺省网关类型
缺省的链路下载速度缺省链路质量最高等级缺省链路质量最高等级
缺省的路由协议
AF_INET
False2
698
0.0
GW_UOLINk_IPV46
1024kb/s2
MAX_TTL
MAXJITTER
定义ttl最大值
Olsr消息传播最大抖动
0.165ms
HELLO_INTERVAL/4
COOKIE_ID_MAX
系统cookie数量最大值
25
MAXMESSAGESIZE
广播数据包大小的最大值
1500kb
6/36
OLSR_LINK_JITTEROLSR_LINK_HELLO_JITTEROLSR_LINK_SYM_JITTEROLSR_LINK_LOSS_JITTER
olsr消息抖动时间
HELLO消息抖动时间系统抖动时间
数据包丢失抖动时间
5s0s0s0s
第三章 OLSR部分消息包数据结构
OLSR使用统一的数据包格式,使用UDP通信,数据包嵌入到UDP数据报在网络上传输。
每个数据包封装一个或多个消息,邮件分享通用报头格式,使节点能够正确接收和重传一个未知类型的消息。
如果数据包不包含任何信息(数据包的长度小于或等于该数据包报头的大小),数据包就会默默的丢弃。
每一个消息都会分配一个唯一的标识号,用来确保消息不重传。
OLSR数据包一般包含以下几部分:
消息类型,VTIME邮件大小,发端地址,生存时间,跳数,消息序列号和消息。
其中VTIME是表示接收后很长时间节点如何,确保数据包中的消息有效;
生存时间包含最大跳数,如果被重发,则减1;
消息序列号被用来确保给定的消息被节点转发的次数不超过一次。
3.1OLSR首部
-------------------------------------------------Olsr-lq_packet.h
olsr_common是OLSR协议基本数据包。
其中包含以下几部分:
type,消息类型;
vtime,表示接收后很长时间节点如何,确保数据包中的消息有效;
size,消息大小;
orig,发端地址;
ttl,跳数,消息在传递过程中最大跳数,每转发一次,ttl减1;
hops,此消息在传递过程中经历的跳数;
seqno,消息的序列号,这是唯一不变的,以确保消息不回被重发。
表格4OLSR协议数据包
PacketLength
PacketSequenceNumber
MessageType
Vtime
MessageSize
7/36
OriginatorAddress
TimeToLive
HopCount
MessageSequenceNumber
MESSAGE
3.2HELLO消息包
HELLO用于建立一个节点的邻居表,其中包括邻居节点的地址以及本节点到邻居节点的延时和开销,OLSR采用周期性