OSPF协议原理及配置3-邻居关系的建立

 

OSPF协议的邻居关系是通过交换Hello报文建立的,所以我们先对OSPF的报文的种类,及Hello报文的结构做一了解。

1 OSPF协议有5种协议报文(很重要,后面会依次介绍)

Hello报文:用于发现和维护邻居关系,在广播型网络和NBMA网络上Hello报文也用来选举DR和BDR。

DD报文:通过携带LSA(链路状态通告)头部信息来描述链路状态摘要信息。

LS Request报文:用于发送下载LSA的请求信息,这些被请求的LSA是通过接收DD报文发现的,但是本路由器上没有的。

LS Update报文:通过发送详细的LSA来同步链路状态数据库。

LS Ack报文:通过泛洪确认信息确保路由信息的交换过程是可靠的。

除了Hello报文以外,其他所有报文只在建立了邻接关系的路由器之间发送。(这点一定要记清楚,对理解邻接关系的建立过程很重要)

 

2 OSPF报文头部

 OSPF协议各种类型报文有相同的头部信息

  

Version #: OSPF协议号,应当被设置成2。

Type: OSPF报文类型,OSPF共有五种报文。

Packet length: OSPF报文总长度,包括报文头部。单位是字节。

Router ID: 生成此报文的路由器的Router ID。

Area ID: 此报文需要被通告到的区域。

AuType: 验证此报文所应当使用的验证方法。

Authentication: 验证此报文时所需要的密码等信息。

 

3 Hello报文

邻居和邻接关系是通过交换Hello报文来建立的,所以通过了解Hello报文的头部内容,可以帮助我们理解邻居和邻接关系的建立。

Network Mask:发送Hello报文的接口的网络掩码。

HelloInterval:发送Hello报文的时间间隔。单位为秒。默认10m,在NBMA和点对多点下,为40s

Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能不在本课程的讨论范围之列。

Rtr Pri:发送Hello报文的接口的Router Priority,用于选举DR和BDR。在广播和NBMA网络中DR和BDR是通过优先级确定的,router ID越大优先级越高。

RouterDeadInterval:宣告邻居路由器不继续在该网段上运行OSPF的时间间隔,单位为秒,通常为四倍HelloInterval。

Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。

Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR路由器。

Active Neighbor:邻居路由器的Router ID列表。表示本路由器已经从该邻居收到合法的Hello报文。

收到的hello包中包含自已的router-id时,认为邻居关系已经建立。

4 形成邻居关系的过程和相关状态的变换过程。

注意2-way 和 ExStart这两个状态


Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和RouterDeadInterval间隔相同。

Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中。

1-WayReceived:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。

2-WayReceived:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。

2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。

Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。

 

 

最新文章

  1. HMAC算法AS3版
  2. QT笔记之VS2010 Qt中导入qrc资源文件
  3. 开源Math.NET基础数学类库使用(11)C#计算相关系数
  4. sysstat的基本用法
  5. PHP 正则表达式总结
  6. JPush三分钟之后的事 fragmentActivity(一)
  7. 使用百度语音识别REST API,做全平台语音识别
  8. 【bug】Unable to execute dex: Multiple dex files define
  9. Eclipse debug 调试快捷键
  10. AJAX学习前奏----JS基础加强
  11. js 判断一个字符在字符串中出现的次数
  12. too much recursion(太多递归)Uncaught RangeError: Maximum call stack size exceeded BootstrapValidator报错
  13. mysql 创建 mb4 字符集数据库
  14. PAT A1146 Topological Order (25 分)——拓扑排序,入度
  15. java中super和this的使用
  16. 从ACM会议分析我国计算机科学近十年发展情况
  17. PHP开发命名规范
  18. Codeforces 1085G(1086E) Beautiful Matrix $dp$+树状数组
  19. Faces人脸识别项目简介
  20. Python并发编程-管道

热门文章

  1. JVM学习四:深入分析ClassLoader
  2. ssh中“Host key verification failed.“的解决方案
  3. Java线程--Atomic原子类使用
  4. go基础——数组array
  5. BumbleBee: 如丝般顺滑构建、交付和运行 eBPF 程序
  6. HTML基础笔记整理
  7. [LeetCode]28.实现strStr()(Java)
  8. 面向对象—多态、鸭子类型(Day21)
  9. 使用SpringBoot整合MybatisPlus出现 : java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test
  10. HTTP攻击与防范-PHP客户端脚本攻击