欢迎光临狗万官网地址,水晶宫官网,官网首页官网!
文章]【网络技术】OSPF路由协议原理详解——梁思
2019-09-01 05:33

  注:文中所有文字,图片均属原创,文中观点属于个人总结,谨供参考,如有纰漏或不当之处,敬请谅解。

  1)OSPF通过路由器ID来辨认属于OSPF的路由器(简单来说就是给路由器起个名字,这个名字是在OSPF中起作用的)

  4)回环接口的优先级大于物理接口,如果存在回环接口则定义IP最高的活动接口为路由器ID

  5)可以使用router-id命令定义路由器ID,配置前、RID就是loopback 0的接口IP配置后就是人为指定的IP:推荐使用router-id命令或回环接口以获得更好的稳定性

  6)如果OSPF已经运行,在新的回环接口启用前需重载路由器或移除现有进程并重设OSPF

  1)邻居关系:每台路由器与它的邻居建立联系(hello),这个关系叫邻接关系,两台OSPF路由器想成为邻居的条件:

  1、Area-id:两个路由器必须在共同的网段上,它们的端口必须属于该网段上的同一个区,且属于同一个子网

  2、验证(Authentication OSPF):同一区域路由器必须交换相同的验证密码,才能成为邻居

  3、Hello Interval和Dead Interval:OSPF协议需要两个邻居路由器的这些时间间隔相同,否则就不能成为邻居路由器。狗万官网地址

  4、stub区域标记:两个路由器可以在Hello报文中通过协商Stub区域的标记来成为邻居

  2)每台路由器向他的每个邻居发送链路状态通告(lsa),来获悉其他路由器和网络,每个邻居在收到lsa以后依次向它的邻居转发这些通告(泛洪),直到LSA被扩散到整个网络。【其中LSA包括链路状态,路由器接口到链路的代价度量值以及链路所连接的所有邻居。】

  3)每台路由器在数据库中保存一份它所收到的lsa的备份,如果工作正常,所有的路由器的数据库应该相同

  4)通告完整的数据库,使用spf算法以自己为根计算到每个网络的最佳路径,并将信息保存在路由表中。

  OSPF路由器通过发hello包发现邻居构建邻居表,接着相互通告LSA同步LSDB(拓扑数据库,包含一个区域内所有路由器、和他们的链路信息,一般同一个区域内的路由器拥有同一个LSDB),以构建一张整体的拓扑表(对网络心中有数),最后根据SPF算法构建一张路由选择表。

  骨干区域(中转区域):主要是为快速高效地传输IP分组的OSPF区域,和连接其他类型的区域。(通常用area 0表示骨干区域)常规区域:主要是连接用户和资源的OSPF区域,它要和骨干区域相连。(用area 0之外的表示常规区域)

  所有邻居路由器只能通过DR和BDR来建立邻接关系,狗万官网地址,并且只将LSA通告给它们。DR从邻居那里收到更新后,通过LSA通告给局域网上的所有邻居,确保同一个局域网的LSDB都相同。发送给DR和BDR的数据包使用多播地址224.0.0.6从DR到所有路由器的数据包使用多播地址224.0.0.5EIGRP的组播地址是224.0.0.10

  (这里的100M要转换成以bit为单位进行计算,其实就是100000000bit)

  路由器通过下面的Dijkstra的最短路径算法找到到达目的地最佳的路径:同一个区域内的每一台路由器都拥有一致的链路状态数据库.区域中的路由器都以自己为根构建最短路径树.到达目的地整体链路成本之后最小的就是最好的路径.最好的路由条目将进入转发数据库(routing table).

  每一个LSDB中的LSA都有一个序列号.这个序列号是一个4-byte数,从0x80000001开始0x7FFFFFFF结束.OSPF每30分钟泛洪每一个LSA(和时间相关的、EIGRP HELLO时间分别有5秒和60秒两种)来保证数据库的同步.每次LSA泛洪,序列号都会增加1.最后LSA序列号会重新转回0x80000001.这时,已经存在的LSA已经超时了(one hour).如果路由器同时遭遇两条LSA,则要判定哪条LSA是最新的。拥有最高序列号的为最新

  不同的网络类型,发送hello包的频率也不一样,像以太网或者点对点网络发送hello时间是10s,如果是像非广播多路访问网络(NBMA网络)发送hello时间是30s。

  hello间隔和死亡间隔:多路访问网络上为10秒,死亡时间为40秒。两端必须匹配一致

  2)DBD:数据库描述数据包:(描述一个OSPF路由器的本地LSA内容)

  5)LSAck:链路状态确认:确认收到邻居路由器的LSA认(与EIGRP一样,ospf直接封装在IP包中传递)

  6)LSA(链路状态通告):报告路由器和链路的状态,(报告发生什么事和发生什么状态)它是LSU的重要内容。

  8)隐式确认:假如发送DBD包,序列号不同,我也修改成一样的序列号告诉对发以示确认