SRP实验
一、实验目的
- 学习源路由协议的机制
- 理解节点在源路由协议中的几种角色
- 掌握源路由协议相关接口 SourceRouteSend、SourceRoutePacket 的使用
二、实验要求
- 功能:root 节点的数据通过路由传输到目的节点
- 现象:串口显示发送节点的数据包传输经过的节点,Sniffer 抓包分析理解
三、实验设备
- 装有 TinyOS 开发环境的 PC 机一台
- CC2530/CC2538 节点 2 个以上
- 下载器一个
四、实验原理
源路由是由用户显式提供具体路径的路由协议。这些路由,即到达目的地途中要遍历的节点, 通常以列表的形式携带在数据包报头中。当一个节点接收到源路由包时,它会查找源路由包头中的下 一跳,并将数据包转发到该节点。
一个完整的源路由系统由两部分功能组成:第一部分负责读取和写入源路由,第二组负责按源路 由进行数据包转发。
源路由系统可以在许多方面使用。这可以作为一个轻量级的路由系统进行调试,也可以用于那些 路由事先知道的静态环境中。它也可以被路由系统使用,在给定节点上根据网络的拓扑信息计算路径。
例如,给定网络的链路状态信息,节点可以将分组路由到网络中的任何节点。源路由也有助于将数据 包沿着反向路径路由到原始发送方。 节点在源路由中可以扮演三个角色:
* 发送者:配置源路由并发送数据包
* 转发者:接收源路由数据包并转发到下一跳节点
* 接收者:作为目的地接收源路由数据包 请参阅 TEP138 和 TEP139
五、实验步骤
- 在 VScode 显示 opt/tinyos-2.x/apps/cc2530_app/TestSrp 目录下创建项目目录,并新建应用程序文件, 包括配置文件 Makefile,配线组件 TestSrpAppC.nc 和模块组件 TestSrpC.nc
- 编辑节点的 Makefile 文件,修改如下内容:
- 编辑 TestSrpP.nc,查看了解模块中的路由表,如下图所示:
- 编译程序: 终端进入 opt/tinyos-2.x/apps/cc2530_app/TestSrp 目录下,执行 make cc2530zn 命令,编译后如下 图所示,然后通过输入命令 make cc2530zn install 进行烧录。
- 下载调试程序,观察实验现象。 修改 Makefile,配置节点短地址,如 0x0002,0x0003 等,重新执行步骤 4。 将节点通过串口连接到 PC 端,使用串口、抓包软件 zboss_sniffer 抓取信息。 具体如下图 :
六、思考、测试、回答
- 简单叙述五个 printf 函数的意义。
答;
执行完调用后,进行输出打印。
发送完成后打印信息
接到消息打印。
打印payload。
输出告诉radio已启动。
- err=call SourceRouteSend.send (routes[TOS_NODE_ID].route, routes[TOS_NODE_ID].len , &myMsg, sizeof(test_payload_t));分析这条语句代表的含义?
答:调用源路由发送函数,发送路由表地址,表长度,消息payload_t。
- 简要回答当节点作为发送者,转发者,接受者分别需要完成哪些事情?
答:发送者:配置源路由并发送数据包 ; 转发者:接收源路由数据包并转发到下一跳节点 ; 接收者:作为目的地接收源路由数据包。
- SRP(源路由协议)能够解决什么样的问题?
答:SRP源节点指定路由发送路径,这适用于清楚最优路径的情况,不用在尽最大努力去找到最佳路径,只需按照所提供的路径走下去就行。
- 对抓包信息进行分析,能够得出什么信息?
答:从抓包信息分析,可以看出源路由和终端路由以及中间经过哪些路由转发。
- 尝试修改路由表,观察其现象。
答:
实验现象:
七、实验总结
实验通过视频的讲解,整个过程还是较为简单的,流程并不算很复杂。通过实验,了解了SRP的工作原理,对SRP的具体实现有了深刻的印象与了解,对 SourceRouteSend、SourceRoutePacket这些接口也有了一定的认识。