一个优秀的网络工程师不仅仅是会调试各种不同类型的网络设备,更重要的是深入了解每种设备的各种运行原理,这样才能碰到问题时,能得到科学的解决办法。下面我们看看一台机器是怎样通过报文的发送得到一个完整的LSBD的,下图能大概描述两台路由器从开始联系到数据库同步的信息(报文)传递过程。
图 4 两台路由器的数据同步过程
向物理上能达(广播网同一网段或 PPP 或 NBMA 上的指定的节点)所有结点发送 Hello 报文,同时也收到它们发送来的 Hello 报文;这样,可以确认哪些机器是相连的,这种相连,确定了它们之间的 Neighbor 的关系 .
对 HELLO 报文的处理详见下图:
图 5 HELLO 报文处理过程图
通过 Hello 报文的所带 PRiority 位,和 DR 、 BDR 信息,可以选出该网段的 DR 。所有路由器认可一个优先级最高的路由器作为 DR ,优先级次高的作为 BDR ,所有这个网段的路由器与 DR , BDR 构成邻接关系:
图 6 DR 、 BDR 选举
路由信息 ( 连接状态传送报文 ) 只在形成邻接关系的路由器间传递。首先,它们之间互发 DD ( database description )报文,告之对方自己所拥有的路由信息。
DD 报文有两种,一种是空 DD 报文,用来确定 Master/Slave 关系(避免 DD 报文的无序发送),确定 Master/Slave 关系后,才发送有路由信息的 DD 报文,收到有路由信息的 DD 报文后,比较自己的数据库,发现对方的数据库中有自己需要的数据,则向对方发送连接状态请求( Link State Request )报文,请求对方给自己发送数据。
LSR 报文指示了所需的那部分 LSA 的内容,让对方给发送,收到 LSR 报文后,按要求发送新的路由信息给对方,即给对方发送连接状态升级报文( Link State Update )报文。
LSU 报文给对方一个具体的路由信息
收到 LSU 之后,会给对方发送一个连接状态响应报文( Link State Ack )报文,以示收到,对 DR 来说,会发送一个包含该连接状态升级报文的连接状态升级报文到网段内所有节点(不发连接状态响应报文)。
LSAck 报文指示收到 LSU 报文
DD , LSR , LSU , LSAck 在没有收到对方相应的响应时,一般会重传。
通过 Adjacency 间的连接状态传送报文传递信息在同一个网段内达到同步;通过属于多个网段的路由器的“中转”,区域内路由信息可以达到同步。
有的路由器的两个或多个接口会配置在几个区域上,这个路由器是在 backbone 上,它会把它得到的路由信息摘要,发给 backbone 上其它点,摘要指的是只发网段信息。
有些节点会把其它协议的路由(静态, RIP , BGP , EGP 等),引入到自治系统内部,用类似的方法把 ASE , ASBR 信息传送到整个自治系统。
LSA 发送可以由下图表示。
图 7 各类连接状态传送报文的发送
在系统达到同步后,某一台路由器的路由表发生变化,则把路由变化部分,以类似链式反应的方式发送,我们称之为“ FLOOD ”,把升级的路由表在系统内同步了。