OSPF运行机制的粗浅体会
华为的OSPF实现中,将网络类型设置为P2P、MA、NBMA、P2MP。
一、在OSPF邻居(邻接)建立过程中,不同网络类型下,使用不同目的地址实现,具体如下:
1.P2P。5种类型数据包均使用组播,目的地址224.0.0.5。
2.NBMA。5种类型数据包均使用单播,目的地址为对端接口地址(TTL为1)。
3.MA。DD和LSR使用单播,其它使用组播(DR/BDR发出数据包目的组播为224.0.0.5,监听224.0.0.5和224.0.0.6。DRother发出数据包目的组播为224.0.0.6,监听224.0.0.5。)
4.P2MP。hello使用组播,其它使用单播(组播目的地址为224.0.0.5)。
二、P2P。
为什么使用组播地址作为所有数据包的目的地址?
这种网络特点是接口(链路)的对端只能存在一个邻居。此时使用组播实现了与单播相同目的、同时兼具效率,在这种网络类型下甚至使用广播也没有什么关系,况且在没有单播配置邻居前提下,如何才能单播发出hello数据包呢?如果非要设计为单播建邻居,也是可以的,但这无疑增加了实现的难度(实际上,即使在华为设备的P2P网络类型下单播指了邻居,也是无法发出单播的hello包的)
三、MA。
1.为什么使用224.0.0.5作为hello包的目的地址?
OSPF的作用是建立和维持邻居关系,MA链路上有1个还是N个OSPF路由器?什么时候会增加1个?这些都是未知的,在这种情况下,还有什么比使用一个约定好的组播地址更省心的方法呢?不知道大佬你有没有想到,反正我是没有。
2.为什么使用单播进行DD数据包的同步呢?
每一台路由都有自己的OSPF LSDB,或大或小,如何将自己的DD准确无误的告诉MA网段中其它所有邻居呢?
A:组播,效率高,可靠性低。每台路由器只需要1次性的将自己的DD发送往指定组播地址就OK了,可万一传递或处理过程中出了差错怎么办呢?接下来的路由更新肯定受到影响,轻则不完整,重则存在错误路由。既然路由都不能保证了,谁还会用这样的路由协议呢?
B:单播,效率低,可靠性高。MA网段中的N台路由器之间需要两两互传DD数据,N台就要有n*(n-1)/2个DD的“Session”,在同一个MA网段中,同样的1份DD,有多少个邻居就要传递多少份,效率确实低!同时为了保证任何1次传递中的可靠性,还要考虑传递报文过程中的确认机制,为了可靠,只能这样了。
未完