Ospf中路由器之间存在两种连接关系:邻居关系和邻接关系。本博文将详细介绍这2种关系建立及工作原理。

如果两台路由器之间共享一条公共数据链路(两台路由器中间没有其它路由器,或者两台路由器之间存在虚连接),并且成功协商了hello包中所指定的参数,那么它们就成为邻居。如果两个邻居之间需要同步LSDB,那么它们之间需要建立邻接关系。如果两个路由器之间建立了邻接关系,那么它们的LSDB一定是同步的。LSA只在存在邻接关系的路由器之间传递。

那么邻居关系和邻接关系怎么建立呢?邻居关系通过hello报文来建立。Hello报文中包含如下一些内容:

1、始发路由器的router-id

2、始发路由器接口的area-id

3、始发路由器接口的地址掩码

4、始发路由器接口的authentication type和authentication message

5、始发路由器接口的hello-interval

6、始发路由器接口的router dead-interval

7、路由器优先级

8、指定DR和BDR

9、标识可选性能的5个标志位

10、始发路由器的所有有效neighbor router-id(始发路由器接收到了它们的hello报文)

以两台路由器之间建立邻居关系为例:

1、R1发送hello报文(组播或者单播,链路层类型来定),neighbor字段为空

2、R2收到hello报文,为R1建立一个邻居数据结构,并把R1的邻居状态置为init,然后向R1发送hello报文,neighbor字段中包含R1的rougerID,表示自己收到了R1的hello报文。

3、R1收到R2的hello报文之后,为R2建立一个邻居数据结构,并把邻居状态置为2way,然后向R2发送hello报文,报文的neighbor字段中包含R2的routerID。

4、R2收到R1的hello报文后,把R1的邻居状态置为2way

至此,邻居关系就建立起来了,邻居路由器之间会按时发送hello报文进行保活,如果hello报文超时,那么该路由器就会宣告这里邻居失效。

所有路由器之间都达到2way状态后,它们会根据网络类型判断是否需要选举DR和BDR,如果需要的话就开始选举DR和BDR。

邻居路由器之间会判断是否需要建立邻接关系,怎么判断呢?

1、 如果是point-to-point链路,需要建立邻接关系

2、 如果是point-to-multipoint链路,需要建立邻接关系

3、 如果网络类型是虚链路,需要建立邻接关系

4、 本地路由器是网段上的DR,需要建立邻接关系

5、 本地路由器是网段上的BDR,需要建立邻接关系

6、 邻居路由器是网段上的DR,需要建立邻接关系

7、 邻居路由器是网段上的BDR,需要建立邻接关系

如何建立邻接关系呢?

其实邻接关系的建立过程中就顺带把LSDB同步了。过程如下:

建立邻接关系使用下面三种协议报文:

Hello报文type1、数据库描述数据包type2、链路状态请求报文type3、链路状态更新报文type4、链路状态确认报文type5

1、RT1的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个HELLO报文(使用组播地址224.0.0.5)。由于此时RT1在该网段中还未发现任何邻居,所以HELLO报文中的Neighbor字段为空。

2、RT2收到RT1发送的HELLO报文后,为RT1创建一个邻居的数据结构,并且将RT1的邻居状态机置为Init。RT2发送一个HELLO报文回应RT1,并且在报文中的Neighbor字段中填入RT1的Router id,表示已收到RT1的HELLO报文。

3、RT1收到RT2回应的HELLO报文后,为RT2创建一个邻居的数据结构,并将邻居状态机置为Exstart状态。下一步双方开始发送各自的链路状态数据库。

为了提高发送的效率,双方需先了解一下对端数据库中那些LSA是自己所需要的(如果某一条LSA自己已经有了,就不再需要请求了)。方法是先发送DD报文,DD报文中包含了对本地数据库中LSA的摘要描述(每一条摘要可以惟一标识一条LSA,但所占的空间要少得多)。由于OSPF直接用IP报文来封装自己的协议报文,所以在传输的过程中必须考虑到报文传输的可靠性。

为了做到这一点,在DD报文的发送过程中需要确定双方的主从关系。作为Master的一方定义一个序列号seq,每发送一个新的DD报文将seq加一。作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的seq。实际上这种序列号机制是一种隐含的确认方法。如果再加上每个报文都有超时重传,就可以保证这种传输是可靠的。

RT1首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号为x。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。

4. RT2在收到RT1的DD报文后,将RT1的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RT2的RouterID较大,所以在报文中RT2认为自己是Master,并且重新规定了序列号为y。

5. RT1收到报文后,同意了RT2为Master,并将RT2的邻居状态机改为Exchange。RT1使用RT2的序列号y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RT1将MS=0,说明自己是Slave。

6. RT2收到报文后,将RT1的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,需要注意的是:此时RT2已将报文的序列号改为y+1了。

7. 上述过程持续进行,RT1通过重复RT2的序列号来确认已收到RT2的报文。RT2通过将序列号+1来确认已收到RT1的报文。当RT2发送最后一个DD报文时,将报文中的M=0,表示这是最后一个DD报文了

8. RT1收到最后一个DD报文后,发现RT2的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RT2也收到了RT1的最后一个DD报文,但RT1的LSA,RT2都已经有了,不需要再请求,所以直接将RT1的邻居状态机改为Full状态。

9. RT1发送LS Request报文向RT2请求所需要的LSA。RT2用LS Update报文来回应RT1的请求。RT1收到之后,需要发送LS Ack报文来确认。上述过程持续到RT1中的LSA与RT2的LSA完全同步为止。此时RT1将RT2的邻居状态机改为Full状态。

注:

以上过程是两台路由器由相互没有发现对方的存在到建立邻接关系的过程。或者可以理解为网络中新加入一台路由器时的处理情况。当两台路由器之间的状态机都已经达到Full状态之后,如果此时网络中再有路由变化时,就无须重复以上的所有步骤。只由一方发送LS Update报文通知需要更新的内容,另一方发送LS Ack报文予以回应即可。双方的邻居状态机在此过程中不再发生变化。

原文链接:http://blog.sina.com.cn/s/blog_620dbe2e0101nil7.html

OSPF建立邻居、邻接关系相关推荐

  1. OSPF之邻居邻接关系

    OSPF邻居邻接关系 原理概述: OSPF网络中,路由器在发送任何链路状态信息之前,必须建立起正确的OSPF邻居建立关系. OSPF路由器是使用Hello报文来建立邻居关系的.OSPF路由器会检查所收 ...

  2. OSPF 形成邻居 关系的条件

    TCP/IP路由技术卷一上写道: When a router receives a Hello from a neighbor, it will verify that the Area ID, Au ...

  3. Ospf在广播网络中建立邻居关系的详细过程

    Ospf 在广播网络中建立邻居关系的详细过程 目的:观察在广播网络中,OSPF建立邻接关系的过程 拓扑及设备需求 拓扑: 图片1 设备需求:3台路由器,ios版本为12.2 需求:配置3台路由器的以太 ...

  4. OSPF的三张表(邻居表、LSDB表、路由表)、LSA、LSDB、SPF与路由表之间的关联、OSPF建立的8种必要条件

    4.2.3 路由 OSPF(OSPF的三张表.LSA-LSDB-SPF-路由表之间的关联.OSPF建立的8种必要条件) OSPF的三张表(邻居表.链路状态数据库表.路由表) 邻居表 记录ospf路由器 ...

  5. OSPF的NBMA环境建立邻居及排错,理论+实战讲解,干货分享

    一.NBMA环境下的OSPF邻居建立问题 上节我们介绍了NBMA环境下OSPF邻居建立需要手动指定邻居,NBMA环境不支持广播/组播. 上一节AR1的配置: ospf 1 peer 10.1.1.4 ...

  6. ISIS建立邻居的条件

    ISIS建立邻居的条件: 1.非同一个子网,不可以建立邻居关系 2.直连相邻的路由器,system id 不能相同 (类似于OSPF中的router id) 3.错误区域id设置   只有L1的路由器 ...

  7. bgp 建立邻居发送的报文_大型网络BGP之IBGP和EBGP邻居关系基础配置

    一.BGP拓扑 说明:BGP一般用于大型企业及国际出口.运营商.大型数据中心 二.BGP基本配置 1.IBGP配置(IBGP属于同一个BGP AS号内部建立邻居关系) 我们在R2 和 R4 之间配置简 ...

  8. bgp 建立邻居发送的报文_OSPF报文,SPF算法,邻居关系建立及排错,理论+实战

    OSPF拓扑: OSPF算法: SPF算法有时也被称为Dijkstra算法,这是因为最短路径优先算法SPF是Dijkstra发明的 查看R4 OSPF算法 LSA 序列号: 在R3 查看LSA 序列号 ...

  9. bgp 建立邻居发送的报文_bgp邻居建立过程及报文详解.doc

    bgp邻居建立过程及报文详解.doc 还剩 4页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 前缀长度和网络号8.当路由失效时,也发送 update ...

最新文章

  1. Atitit. 软件GUIbutton与仪表盘--webserver区--获取apache配置文件路径 linux and apache的启动、停止、重新启动...
  2. 怎么自学python语言-python应用:零基础Python应该怎样学习呢?
  3. 【错误记录】VMware 虚拟机报错 ( VMWare 中的 Ubuntu 虚拟机网络设置 | 第一次网络设置 )
  4. python的填充色怎么弄_python中如何给图形填充颜色
  5. OpenGL point shadow点阴影的实例
  6. c++中scanf和printf
  7. Diskpart 磁盘管理实战演示
  8. 如何找到准确的终端连接端口?(转)
  9. android api接口封装,android-apidesigner是一个网络接口封装工具
  10. Atitit.软件开发的最终的设计 dsl化,ast化(建立ast, 解析执行ast)
  11. 动态规划法---python实现
  12. MATLAB与STK互联18:卫星对象操作(9)—地面站可见性计算并获取数据2(补充上篇博文,有些问题需要澄清)
  13. CUDA版本与驱动对应情况
  14. NRF51822---AD采样(连载5)
  15. 易语言技术-内存读写监视窥探技术
  16. ROS机器人021-机器人命令行发送cmd_vel话题及/cmd_vel geometry_msgs/Twist示例
  17. Linux系统概念复习
  18. java简单爬虫实现打印小说章节至控制台
  19. 1024分辨率《源代码》HD中英双字无水印
  20. python应届生工资待遇_讲真,应届生一般工资多少啊?

热门文章

  1. 佳顺通用进销存系统去广告_母婴收银系统应该如何选择?
  2. IntValue()方法 和 ValueOf()方法
  3. Ubuntu16.04 安装OMnet++4.6(5.4也可)
  4. 100集华为HCIE安全培训视频教材整理 | 双机热备(一)
  5. 环环相扣---近期自动测试经验总结
  6. xp卡在正在应用计算机设置,XP系统经常提示“应用程序正在运行”的两种解决方案...
  7. 深度学习模型——AlexNet
  8. 网站性能评测工具YSlow的使用
  9. showModalDialog兼容版
  10. 2014迅雷校园招聘试题