辨别路由状态的合法性
路由协议的基本目标就是维护全局路由状态(global routing state)的合法性(valid),可以通过死端和循环的存在来确定路由状态的合法性。路由状态合法的充分必要条件就是不存在死端与循环的链路。死端是对于一个路由,不存在出链路了,也就是无法继续转发这个包,死在互联网中。而循环在路由协议的制定中是一个比较受关注的问题,当前的不同的路由协议的差异就在于对循环的处理。
产生合法路由状态的方法
避免死端的做法比较简单,只需要将你知道的路由信息告诉你的邻居,如此递归进行下去,便不会出现死端的情况。而循环相对复杂,典型的解决方法有以下四种:
- 根据拓扑状态创建树:如果拓扑不包含循环,并且不将包转发回去,则可以确定不会产生循环转发情况。实际应用是L2的learning switch,应用场所是单栋大楼里面生成树加自学习,以太网。
- 获取全局视野(Global view):如果我们知道整个网络的拓扑状态,就能根据很多图算法计算路由状态。实际应用是LS算法和SDN,应用场所是域内,企业或者校园网,OSPF全局视野,RIP最小跳度量
- 分布式路由计算:包含两种策略,第一种计算最小度量,第二种是路由器明确交换路径。实现方法一的策略是计算最短路径,终点先站起来,然后声明自己的距离为0,坐下之后邻居站起来,声明距离为1,以此类推,每个人都记得是谁叫的他们。直到起点站起来,并且知道是谁叫的他,往后追溯就可以寻找到一条路经。实际应用是DV算法。实现方法二同样是终点站起来,但是这次是声明路径,也就是自己本身,然后邻居站起来,将自己加到路径里面,实际应用是域间路由的BGP算法。
生成树协议
最简单的避免循环的方法是建立一个生成树,选择有最小identifier的结点作为root,然后计算出一个最小生成树。