开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第32天,点击查看活动详情
11.4.5封装
RIP报文被封装在UDP用户数据报中。RIP报文不包括指示报文长度的字段。这可以从UDP分组来确定。在UDP中,指派给RIP的是熟知端口520。
11.5链路状态路由选择
使用链路状态路由选择时,如果某个域的每一个结点都有这个域的完整拓扑,也就是说具有这个域的结点和链路的列表并知道它们是怎样连接起来的,包括类型、代价(度量)和链路的状态(正常工作或故障),那么这个结点就能够使用Dijkstra算法构造一个路由表。
图中描绘了一个简单的有五个结点的域。每个结点都是利用相同的拓扑来创建路由表,但是每个结点的路由表却是独一无二的,因为路由表的计算是基于对这个拓扑的不同解释。
这个拓扑必须是动态的,它代表了每一个结点和每一条链路的最新状况。如果网络中的某处出现了变化(例如,一条链路出故障),那么每一个结点所知的拓扑必须更新。
没有哪个结点能够在一开始就知道这个拓扑,或者在网络中的某处发生变化后就立即知道。链路状态路由选择基于的假定: 虽然没有这个拓扑的全局知识,但每一个结点知道其中的一部分。每个结点都知道它自己的链路的状态(类型、状态及代价)。换言之,整体拓扑可以从每一个结点的部分知识汇集而成。图11.18中描绘的是与前图一样的域,图中指出了属于每一个结点的部分知识。
结点A知道它以度量5连接到结点B,以度量2连接到C,以度量3连接到D。结点C知道它以度量2连接到结点A,以度量4连接到B,以度量4连接到E。结点D知道它仅以度量3连接到结点A。依此类推。虽然这些知识有重叠部分,但这种重叠能够保证产生一个公共的拓扑:给每一个结点提供一个完整域的图。
11.5.1构造路由表
在链路状态路由选择中,需要四组动作来确保每一个结点的路由表能给出到达其他各结点的最小代价结点。
1.每个结点先创建一个有关链路状态的分组,称为链路状态分组或LSP。
2.以可靠和有效的方法向其他各个结点散发LSP,称之为洪泛。
3.为每个结点形成一个最短路径树。
4.基于这个最短路径树计算路由表。
链路状态分组的创建 : 链路状态分组(LSP)可以携带大量的信息。 但目前我们假定它携带了最少量的数据:结点标识、链路列表、一个序号以及寿命。其中前两个(结点标识和链路列表)是为构造拓扑所必需的。第三个(序号)是洪泛要用到的,并且可以把新的LSP和旧的LSP区分开。第四个(寿命)用来防止旧的LSP长时间在域中逗留。以下两种场合会产生LSP。
1.当这个域的拓扑发生变化时。
2. 基于定期更新(定期散发计时器通常1或2小时,为了确保洪泛不会产生太大信息量)
LSP的洪泛 : 在结点准备好一个LSP后,它必须向其他所有结点散发。
1.产生LSP的结点把LSP的副本从它的每一个接口发送出去。
2.结点把收到的LSP和可能已经有的副本进行比较。如果新到达的LSP比原有的还旧(检查序号即可知道),就丢弃这个LSP。如果它比较新,这个结点就进行以下操作。
a.丢弃旧的LSP,保留新的。
b.除了这个分组到达的那个接口外,从其他所有接口发送这个LSP副本。这就保证了洪泛会在这个区域的某处(只有一个接口的结点)停止。
形成最短路径树:Dijkstra算法
在收到所有的LSP后,各个结点就会有一个完整拓扑的副本。但是我们还需要使用最短路径树找出到其他所有结点的最短路径。
树就是由结点和链路构成的图,其中有一个结点称为根。可以从这个根经过仅一条路径到达所有的其他结点。最短路径树就是这样的树,从根到每一个其他结点之间的路径都是最短的。Dijkstra算法可用来从一个给定的图产生一个最短路径树。这个算法使用了以下步骤。
1.初始化:选择作为树的根的结点,并把它加到路径中。为根的所有邻站设置从根到这些邻站之间的最短距离。设计根到它自己的最短距离为零。
2.循环:重复下面两个步骤,直至所有结点都被加入到路径中。
a.加入下一个结点到路径中:搜索不在路径中的结点。选择一个具有最小的最短距离的结点,把它加入到路径中。
b.更新:用刚才在第2步中移到路径中的结点来更新所有剩余结点的最短距离。
以下描绘了为具有七个结点的图构造最短路径树的过程。图中的所有结点都具有相同的拓扑,但每个结点会以自己为树根创建不同的最短路径树。我们所描绘的树是由结点A创建的。为了得到这个最短路径树,我们需要经过一个初始化步骤和六次循环。