根据最近正在做的一个勤务电话项目,设计方案时出了一个的拓扑问题。概括就是无向图中节点如何自主发现环,切断环;
我将其简化为一下题目:
题目:拓扑上设备数目未知,但是每台设备有四个端口,设备之间的连接,没有任何限制,即两台设备之间可以同时有2条、3条甚至
4条连接。拓扑不限,可能是链式、环式、相交环、点对点等多种。以下拓扑只是为了方便说明。拓扑中每个节点周围的数据表示端口,最多四个端口。拓扑中的仙没有权值、
设备之间的通信帧,可以自由定义,至少包括源地址、目的地址、路由长。
第一如何确认两台设备之间的唯一路径,且能够按照最短路径原路返回?(即两点之间通话)
第二如何让网络上的设备检测到环路,并进行切断环操作?(拓扑有环,导致数据叠加,增加负担)
解答:
针对这个拓扑中,每台设备我们都配置唯一的ID,
我们首先解决直接相连设备之间的路径唯一的问题,即让设备与设备之间的连接变为一条,我们使用NDP(邻居发现协议),每台设备都可以发现自己的邻居,当他发现自己的
多个端口对应一个设备ID时,我们可以认为这几个端口,是一个端口,因为这几个端口都指向一台设备。所以我们就可以忽略题目中,两台设备之间,通过多条线连接的问题。
对于问题1,我们采用最短路径的算法去解决,假如拓扑中节点A要找节点G,则设备A发起广播,则设备G最终会受到A发送的广播帧,广播帧没经过一个设备后,路由值都会加1,路由值初始化为0.中间转发设备要记录经过自己的帧的情况,包括源地址,目的地址,路由值,进入设备端口号,发送端口号;则设备G会收到很多广播帧,其中会有一个或几个路由值最小。然后设备G按照路由值最小的广播帧,进入的端口进行反馈应答帧。应答帧经过的设备,会对应答帧的情况与记录的广播帧的情况进行比较,发现路由值相等,且源地址与目的地址相反,则根据广播帧记录的端口进行转发。指导路由值零,正好反馈到设备A。
问题2,每台设备都通过NDP(邻居发现协议)收集与自己直连的设备,建立一个邻居表。当有设备要进行环路检测时,广播整个拓扑,收集每台设备的邻居表,然后该设备对收集到的邻居表进行整理类似于TDP(拓扑发现协议)。这里以设备A进行环路检测为例进行说明。
先说明邻居表
设备的A的邻居表 A.1------C.2
A.1 | C.2 |
A.2 | NULL |
A.3 | NULL |
A.4 | NULL |
设备C的邻居表 C.1----E.2 C.2-----A.1 C.3------B。2
C.1 | E.2 |
C.2 | A.1 |
C.3 | B.2 |
C.4 | NULL |
以此类推,当A设备收集完邻居表后,根据深度优先的搜索,进行对整个拓扑的遍历,一单发现有重复的点则,则认为是有环,记录重复的点,然后又发起者A,向重复点发送解环帧,该点对相应的端口进行阻塞。完成解环。
还有很多细节问题,没有考虑到。后续会继续更新。
转载请标明出处。有问题请联系xq-310@163.com qq:842607968