DSDV学习笔记

DSDV学习笔记
仙雾正好网络作业是模拟一下DSDV的路由算法,光棍节没事就写一个总结吧。
DSDV(Destination-Sequenced Distance Vector)
普通的DV在连接断掉时容易出现循环,使得cost越来越大,DSDV通过巧妙地引入一个SequenceNumber解决了这个问题。
和DV一样每个节点维护的路由表里面有destination,next_hop,cost,还有一个就是seq,这个值只会在路由信息改变时增加,比如有节点断开或者cost改变,这样在下次广播的时候邻居就能更新到最新的值,如果发现是链接断开,则需要将此邻居的seq加1,这样邻居就会强制更新为无穷大。
解析命令行参数 绑定socket到本机的某个端口 开辟一个新线程进行监听 在主循环内: 1.从文件读取数据,如果不是第一次读取数据则有可能会要更新某些数据。如果有更新,则将自己的seq+2,如果是更新成一条断路,则需要将这个邻居的seq+1,此外还需要处理路由表中以此邻居为下跳的某些记录。 2.将自己的路由表发给自己的邻居。 3.sleep10秒。 4.输出自己路由表信息。
监听线程内:
接收到一条记录
通过信息长度判断是否是合法的记录(因为有可能有其他同学也在发。。。)
如果发现接收到的该记录是自己路由表内没有的则将其加入到路由表内(因为一开始每个人的路由表内只有自己和自己的邻居的信息,不知道整个网络的其他节点)
如果该记录的目的地是自己,看看他的seq是否比我自己维护的还大,如果是则说明他到我断了,并且自己的路由表还没更新(我这里的文件更新的比他慢),需要强行将自己的seq加到比他大,否则路由表信息要出错。
如果该记录的seq比我维护的路由表中对应记录的要大,则改变。
如果该记录的seq和我维护的路由表中对应记录一样大,且如果我以其为下跳比我当前的路径断,则改变