最近导师给我们布置了一道C语言编程题,就是用C语言实现动态源路由协议(Dynamic Source Routing, DSR)的功能。实在不是很会。请大家帮帮忙!
其中有两个问题很是想不通,第一个是结点随机关系的分配问题,第二个是数据传递路线的寻找。结点怎么定义也不是很清楚。希望有关专家救救我,下星期一就交作业了!
最近导师给我们布置了一道C语言编程题,就是用C语言实现动态源路由协议(Dynamic Source Routing, DSR)的功能。实在不是很会。请大家帮帮忙!
其中有两个问题很是想不通,第一个是结点随机关系的分配问题,第二个是数据传递路线的寻找。结点怎么定义也不是很清楚。希望有关专家救救我,下星期一就交作业了!
动态源路由协议(Dynamic Source Routing, DSR)是在移动自组网(MANET)中使用的一种路由协议。它工作在TCP/IP协议族的网际层。
动态源路由协议(Dynamic Source Routing Protocol,DSR)是一个专门为多跳无线Ad Hoc网络设计的简单且高效的路由协议。所有的路由都是由DSR路由协议动态地、自动地确定和维护,它提供快速反应式服务,以便帮助确保数据分组的成功交付,即使在节点移动或者其他网络状况变化的条件下也是如此。
DSR路由协议有两个主要机制组成——路由寻找(Route Discovery)机制和路由维护(RouteMaintenance)机制。路由寻找机制在源节点需要给目的节点发送一个分组并且还不知道到达目的节点的路由的时候使用。当源节点正在使用一条到达目的节点的源路由的时候,源节点使用路由维护机制可以检测出因为拓扑变化不能使用的路由,当路由维护指出一条源路由已经中断而不再起作用的时候,为了将随后的数据分组传输到目的节点,源节点能够尽力使用一条偶然获知的到达目的节点的路由,或者重新调用路由寻找机制找到一条新路由。在DSR路由协议中,路由寻找机制和路由维护机制均是完全按需操作,不需要某个网络层次的某种周期分组,如DSR不需要任何周期性的路由广播分组、链路状态探测分组。DSR路由协议的的所有状态都是“软状态”,因为任何状态的丢失都不会影响DSR路由协议的正确操作,因为所有状态都是按需建立,所有状态在丢失之后如果仍然需要的话则能够很容易得到迅速恢复。DSR路由协议的路由寻找机制和路由维护机制的操作是的单向链和不对称路由很容易得到支持。
DSR路由协议的完整版本直接使用“源路由”,节点使用路由缓冲器存储节点所知的源路由,当发现新路由时,更新缓冲器内的条目。节点所发送的每个数据分组均在其分组头中携带其将要通过的一个完整的、按序排列的路由信息。
DSR选项头格式如下:
它的首部采用扩展性良好的TLV格式。除固定部分外,不同类型的选项(option)以TLV格式附加在固定部分之后。
选项的种类包括:
路由请求(Route Request)
路由应答(Route Reply)
确认请求(ACK Request)
确认(ACK)
源路由(Source Route)
C语言的带参数的main函数格式为main(int argc,char* argv[]),其中argc为参数个数加1,argv为参数列表,从argv[1]开始。编译后生成可执行文件,可以在执行的程序后加参数,比如编译一个程序为test.exe,则在执行时可以输入: test.exe 1 firestone 在这里,argc等于3,argv[0]为"test.exe",argv[1]为"1",argv[2]为"firestone"。 如果有下面的程序: #include <stdio.h> void main(int argc,char *argv[]) { printf("You've input %d parameters.\n",argc-1); for(int i=1;i<argc;i++)printf("The No.%d is:%s\n",i,argv[i]); } 则上面的输入会产生如下运行结果: You've input 2 parameters. The No.1 is 1 The No.2 is firestone
回答完毕 希望对您有帮助