【网络协议详解】 | 您所在的位置:网站首页 › ospf协议使用哪种报文发现和维护邻居关系 › 【网络协议详解】 |
目录
🕒 1. 概述🕒 2. 相关概念🕘 2.1 基本思想🕘 2.2 区域及路由🕘 2.3 链路状态数据库🕤 2.3.1 点到点网络🕤 2.3.2 点到多点网络🕤 2.3.3 广播网络与非广播多址接入网络🕤 2.3.4 区域外部网络🕤 2.3.5 例子
🕒 3. 基本工作原理🕘 3.1 HELLO 协议🕤 3.1.1 发现邻居并监测与邻居链路的状态🕤 3.1.2 DR/BDR 的选举
🕘 3.2 链路状态数据库同步🕤 3.2.1 交换摘要🕤 3.2.2 同步信息🕤 3.2.3 新情况下的同步🕤 3.2.4 洪泛机制
🕒 4. OSPF的运行状态🕒 5. 报文格式🕘 5.1 OSPF 报文🕤 5.1.1 HELLO 报文🕤 5.1.2 数据库描述报文🕤 5.1.3 链路状态请求报文🕤 5.1.4 链路状态更新报文🕤 5.1.5 链路状态确认报文
🕒 6. 实验:OSPF配置观察
🕒 1. 概述
开放最短路径优先OSPF(Open Shortest Path First),是为克服RIP的缺点在1989年开发出来的。 “开放”表明OSPF协议不是受某一家厂商控制,而是公开发表的。"最短路径优先”是因为使用了Dijkstra提出的最短路径算法SPF。OSPF是一种基于链路状态选路算法的路由协议。 链路状态是指本路由器都和哪些路由器相邻,以及相应链路的"代价"(cost) "代价"的意思是费用、距离、时延、带宽等思科路由器中OSPF协议计算代价的方法是:100Mb/s除以链路带宽 计算结果小于1的值仍记为1,大于1且有小数的,舍去小数。 使用OSPF的每个路由器都会产生链路状态通告LSA(Link Siate Adverisement),包含以下内容: 直连网络的链路状态信息邻居路由器的链路状态信息优点: 支持在多条等代价路由之间的负载均衡;支持路由信息交换的认证;可用作大型自治系统的内部路由协议。OSPF采用SPF算法计算路由,从算法上保证了不会产生路由环路OSPF不限制网络规模,更新效率高,收敛速度快标准: RFC 2328:OSPF2RFC 5340:OSPF3,可用于 IPv6 网络 🕒 2. 相关概念 🕘 2.1 基本思想 将互联网络抽象成一个有向加权图(directed weighted graph)。参与链路状态选路协议的路由器监测所连接网络的链路状态,并将链路状态信息发送给其他路由器,路由器将这些信息存入链路状态数据库LSDB中。每台路由器根据LSDB构造出当前网络的完整拓扑图。路由器在拓扑图上计算从自己出发到任一网络的最佳路由(最短路径),从而建立起自己的路由表。 可能发现到达一个目的地址的多条等代价路由。 所有路由器的链路状态数据库都保持同步。为了使OSPF能够用于规模很大的网络,OSPF把一个自治系统再划分为若千个更小的范围,叫做区域(Area)。 区域:一组网络和连接到任一网络的路由器接口。 每个区域运行一个独立的链路状态选路算法,区域内部的网络拓扑结构在区域外不可见。如果一个路由器的多个接口属于不同区域,它要为每个区域都运行一个链路状态选路算法,即OSPF协议实例。 例如图示网络中的R3、R4、R5和R8,都分属于两个区域,因而都要运行两个OSPF协议实例。 每个区域有一个 32 位的编号,可用类似于 IP 地址的点分十进制法表示,也可用一个十进制数表示。 区域 0.0.0.0 是一个特殊的区域:主干区域(backbone area)。其他区域称为非主干区域(non-backbone area)。主干区域连通了非主干区域,为非主干区域之间提供传输服务。所有的非主干区域都要连接到主干区域上。主干区域和非主干区域通常采用星型结构连接:主干区域作为中心节点,非主干区域是边缘节点。 根据作用不同,路由器被划分为 4 种类型: 区域内路由器IR(internal router):所连接的网络都属于同一个区域。如R1,R2,R7,R9,R10。内部路由器只运行一个OSPF协议实例。主干路由器BBR(backbone router):主干区域中的路由器。如R3,R4,R5,R6,R7,R8区域边界路由器ABR(area border router):连接到多个区域,且必须连接到主干区域。如R3,R4,R5,R8。为每个连接的区域分别运行一个 OSPF 协议实例。自治系统边界路由器ASBR(AS border router):与其他自治系统交换路由信息的路由器。如R6一台路由器可以同时属于多种类型。 虚拟链路: 主干区域必须是连续的:所有区域边界路由器都能通过主干区域到达其他区域边界路由器。若不满足,可配置虚拟链路(virtual link)使主干区域变成连续的。 图示网络中,主干区域中的路由器R3、R4、R6形成一个连通网络,R5、R7、R8形成另一个连通网络,但这两个网络在主干区域中没有连接,因而主干区域是不连续的。但R4和R5都连接到了区域3,它们在区域3中通过N4连接。这时,可以在主干区域中在R4和R5之间配置一条“虚拟链路”,使主干区域变成连续的;虚拟链路实际利用R4和R5在区域3中的物理连接来进行通信。主干区域将虚拟链路看作是一个点到点链路,其传输代价就是非主干区域中连接虚拟链路两端路由器的路由的代价。自治系统内的路由分为两个层次:区域内路由和区域间路由 🕘 2.3 链路状态数据库 链路状态选路算法把网络抽象成一个有向加权图。OSPF 的链路状态数据库是有向加权图在路由器中的表示。 OSPF 为每个区域运行一个独立的链路状态选路算法;路由器的一个链路状态数据库描述了所属区域的网络拓扑结构。使用OSPF的每个路由器都有一个链路状态数据库LSDB,用于存储LSA。 OSPF 支持 5 种网络类型: 点到点网络(point-to-point):看作两条有向边。虚拟链路(virtual link):也看作一个点到点网络。点到多点网络(point-to-multipoint):看作一组点到点网络。广播网络(broadcast)非广播多址接入网络(Non-Broadcast Multi-Access,NBMA) 🕤 2.3.1 点到点网络
点到点网络的两个接口可以不用分配IP地址,如果分配了IP地址,OSPF就在链路状态数据库中增加相应的“末端链路”(stub link)。这里末端链路实际上表示的就是点到点网络上的对方。 🕤 2.3.2 点到多点网络
图示网络中,四台路由器连接到点到多点网络N2上。链路状态数据库表示了它们之间的连接关系:RT3、RT6与所有路由器都有连接;RT4和RT5不与对方连接,但与其余路由器有连接。路由器与点到多点网络的连接接口也被OSPF表示成末端链路。 🕤 2.3.3 广播网络与非广播多址接入网络 OSPF 在非广播多址接入 (NBMA) 网络上模拟广播网络的行为。广播网络和 NBMA :抽象成伪节点(pseudo node)。
概念:可看作连接到区域边界路由器的一个末端网络。 边的权重为区域边界路由器到网络的传输代价。
这里是从RFC 2328中摘录的一个例子。左侧是某个OSPF区域抽象所得的有向加权图,右侧是相应的链路状态数据库。其中‘RT’表示路由器,‘N’表示网络,‘H’表示主机。列上的数字表示链路的传输代价。
OSPF 路由器定期向所有邻居路由器发送 HELLO 报文。 报文中包含了最近一段时间内发送过 HELLO 报文的邻居路由器。 路由器用其标识符表示。发送周期为10秒40秒未收到来自邻居路由器的 HELLO 报文,则认为该邻居路由器不可达如果路由器在邻居发送的 HELLO 报文中发现了自己的标识符,就表明这两个邻居路由器之间建立了双向通信链路。 每个路由器都会建立一张邻居表。![]() OSPF 路由器的两种关系: 邻居关系(neighboring):连接到同一个网络,能建立双向通信链路。邻接关系(adjacent):可交换网络的链路状态。 建立双向通信链路后,由 OSPF 协议确定。 并非所有的邻居路由器之间都要建立邻接关系: 广播网络或 NBMA 网络上,DR/BDR 与其他路由器之间有邻接关系;其他路由器之间不需要邻接关系。邻居关系的建立: HELLO 协议在不同类型网络上的工作过程不同: 点到点网络、虚拟链路:路由器向对方发送 HELLO 报文;点到多点网络:路由器仅向能直接通信的邻居发送 HELLO 报文;广播网络:每台路由器定期组播发送 HELLO 报文;NBMA 网络:需要配置后 HELLO 协议才能正常工作。 🕤 3.1.2 DR/BDR 的选举广播网络或 NBMA 网络上每台路由器都清楚网络的链路状态。 若每台路由器都发送网络的链路状态,会有很多重复发送。OSPF 协议规定: 在广播网络或 NBMA 网络上选举一个指定路由器(Designated Router,DR)和一个备份指定路由器(Backup Designated Router,BDR);只有 DR 能代表该网络发送网络的链路状态;DR 发生故障后,BDR 就变成 DR。当路由器连接到广播网络或 NBMA 网络上的接口启动时: 检查该网络上是否已存在 DR 和 BDR:存在就接受;否则,比较自己和其他路由器的优先级: 优先级最高的路由器成为 DR;优先级次高的路由器成为 BDR。若两个路由器的优先级相同,标识符(ID)更大的胜出。OSPF 邻接路由器之间的链路状态数据库同步大体上可分为三步: 双方交换各自的链路状态数据库摘要;向对方请求链路状态并更新自己的数据库;若有链路的状态发生变化,更新自己的数据库,并通知对方。 🕤 3.2.1 交换摘要OSPF 路由器定期与邻接路由器交换链路状态数据库摘要: 数据库摘要用一组数据库描述报文描述;每个数据库描述报文包含一组链路状态通告(LSA)的首部;LSA 首部有其唯一标识及新旧标记。 🕤 3.2.2 同步信息发送和接收数据库描述报文的过程称为“数据库交换过程” ,其中: 若路由器发现邻接路由器某些链路的状态更新,或自己没有,就向对方发送链路状态请求报文;邻接路由器发送链路状态更新报文进行响应。两个邻接路由器的链路状态数据库达同步后,称它们之间建立了完全邻接关系(fully adjacent)。 路由器监测其所有链路,若有链路的状态发生改变: 更新自己的链路状态数据库;向邻接路由器发送链路状态更新报文,通知变化的链路状态。 🕤 3.2.4 洪泛机制OSPF 协议定义了一种可靠的洪泛(reliable flooding)机制,用于在 OSPF 路由域中快速扩散链路状态的变化。 可靠是指收到链路状态更新报文后要发送确认,收到重复的更新报文无需再次转发,但要发送一次确认。 路由器接收到链路状态更新报文后,逐个检查其中的 LSA: 若 LSA 的状态更新,或本地不存在,就用 LSA 更新自己的数据库;同时,在某些接口上继续发送该 LSA,称为“洪泛” 。 注意:路由器并不是直接发送接收的链路状态更新报文,而是发送根据自己的数据库生成的链路状态更新报文。通过各路由器洪泛法发送封装有自己LSA的LSU报文,各路由器的LSDB最终达到一致 使用OSPF的各路由器基于LSDB进行最短路径优先SPF计算,构建出各种到达其他各路由器的最短路径,即构建各自的路由表。 例子: 我们通过一个例子来理解OSPF如何实现网络中所有路由器的链路状态数据库同步。 假设RT8新加入网络,连接到广播网络N6上;N6的指定路由器是RT10。首先RT8和RT10通过发送链路状态数据库描述报文交换各自的数据库摘要,并通过发送链路状态请求报文和链路状态更新报文实现两者数据库的同步。这时,网络中只有RT8和RT10具有完整的链路状态数据库。然后,RT10再把发生变化的链路状态,包括广播网络N6、路由器RT8以及网络N7的链路状态,洪泛给自己的邻接路由器;而邻接路由器在更新自己的数据库后,再次洪泛这些变化的链路状态。这个过程持续进行,最终所有路由器都将获得变化的链路状态,此时它们的数据库也会达到同步状态。这个例子是在一个区域中洪泛的情形,也没有考虑虚拟链路。在整个自治系统中,AS-外部LSA在除末端区域接口和虚拟链路接口外的所有接口上洪泛,其他类型的LSA则在各自所属区域的接口上进行洪泛。 🕒 4. OSPF的运行状态OSPF 报文24字节的固定首部: OSPF 协议定义了 5 种类型报文: 报文类型名称英文用途1HELLO 报文Hello发现邻居并监测与邻居链路的状态;选举网络的指定路由器和备份指定路由器2数据库描述报文Database Description(DBD)与邻接路由器交换链路状态数据库摘要3链路状态请求报文Link State Request (LSR)向邻接路由器请求具体的链路状态4链路状态更新报文Link State Update (LSU)向邻接路由器发送具体的链路状态5链路状态确认报文Link State Acknowledgement (LSACK)对接收到的链路状态通告进行确认,以实现可靠的链路状态传输 🕤 5.1.1 HELLO 报文OSPF 路由器周期性在所有接口(包括虚拟链路)上发送 HELLO 报文。 数据库描述报文描述了链路状态数据库的摘要信息。 链路状态请求报文用于向邻接路由器请求特定链路的状态。 链路状态更新报文用于向邻接路由器发送特定链路的状态。 链路状态确认报文用于对接收到的链路状态通告(LSA)进行确认。 实验步骤: 一、在R1上配置OSPF (1)启动OSPF路由协议 R1(config)#router ospf 1其中1是路由器上的OSPF进程号,进程ID只在路由器内部有效,不同路由器的OSPF进程ID可以相同。通常网络管理员会在整个AS中保持相同的进程ID。 (2)指定直连网段 R1(config-router)#network 192.168.1.0 0.0.0.255 area 0 R1(config-router)#network 192.168.2.0 0.0.0.255 area 10其中0.0.0.255是通配符掩码,使用网络地址掩码的反码,即为0的位需要匹配,为1的位不需要匹配。 二、在R2上配置OSPF (1)启动ospf R2(config)#router ospf 1(2)指定直连网段 R2(config-router)#network 192.168.1.0 0.0.0.255 area 0 R2(config-router)#network 192.168.3.0 0.0.0.255 area 20三、在R3上配置OSPF (1)启动ospf R3(config)#router ospf 1(2)指定直连网段 R3(config-router)#network 192.168.2.0 0.0.0.255 area 10四、在R4,R5,R6(除f0/1口)外进行OSPF配置 注:在本次实验中配置OSPF顺序为R1,R3,R4,R5,R2 五、抓包分析邻居发现及维护过程 (1)在区域10的以太网的任一网络接口启动分组捕获。在wireshark显示过滤器输入“ospf.msg.hello && ip.src==192.168.2.1” (2)观察产生的数据包 从分组列表窗口可以看到,R1周期性(约10s)发送HELLO报文,报文的目的地址是所有OSPF路由器组播地址224.0.0.5。 选择一个HELLO报文,在分组首部详细信息窗口查看其首部字段值。注意OSPF报文封装在IP分组中。 查看OSPF报文详细信息,可以看到OSPF报文由三部分组成:OSPF首部(OSPF Header)、HELLO报文(OSPF HELLO Packet)以及本地链路信令数据块(LLS (Local-Link Signaling) Data Block)。
六、抓包分析备份指定路由器选举过程 (1)在区域10的以太网的任一网络接口启动分组捕获。在R3中输入以下指令: R3#clear ip ospf process # 重启OSPF进程,用来模拟选举过程(2)在wireshark显示过滤器输入“ospf.msg.hello && ip.addr ==192.168.2.3” R3的OSPF进程重启后,将首先查询网络上的指定路由器和备份指定路由器。这通过发送(组播)一个指定路由器和备份指定路由器均为0.0.0.0的 HELLO报文实现
由于原来的备份指定路由器(R3)重启,其余路由器进行了新备份指定路由器选举。路由器从其当前邻居中选择优先级最高或路由器标识符最大(优先级相同时)的路由器作为新备份指定路由器。实验中,在这些路由器中R5的路由器标识符最大(所有路由器的优先级相同,均为1),成为新备份指定路由器。R3向指定路由器发送(单播)一个确认HELLO报文,其中包含R3的当前邻居(R1)。此后,R3将周期性组播发送HELLO报文。 七、抓包分析指定路由器选举过程 (1)在区域10的以太网的任一网络接口启动分组捕获。在R1中输入以下指令: R1#clear ip ospf process(2)在wireshark显示过滤器输入“ospf.msg.hello && ip.addr ==192.168.2.1” R1的OSPF重启后﹐首先查询网络中的指定路由器和备份指定路由器。R1发送(组播)一个HELLO报文,其指定路由器和备份指定路由器均为0.0.0.0。网络的所有路由器都向R1发送(单播)一个HELLO报文。由于原指定路由器R1失效,R3和R4认为原备份指定路由器(R5)变为指定路由器,而备份指定路由器仍是R5。 R5发送的HELLO报文如图所示。R5是原备份指定路由器,当原指定路由器(R1)失效后,R5将成为新的指定路由器,并从其当前的邻居中选择优先级最高或路由器标识符最大(优先级相同时)的路由器(R4)作为新的备份指定路由器。 R1收到R5、R4、R3 发送的响应HELLO报文后,分别向各自发送(单播)确认HELLO报文。 八、抓包分析链路状态数据库同步过程 (1)先后在R6的f0/1口和R7的f0/1口启动ospf路由协议。在R6和R7中输入以下指令: R6(config)#router ospf 1 R6(config)#network 192.168.4.0 0.0.0.255 area 20 R7(config)#router ospf 1 R7(config)#network 192.168.4.0 0.0.0.255 area 20(2)在R6和R7、R2和R6、R1和R2、R1和SW1间抓包,在wireshark显示过滤器输入“ospf && not ospf.msg.hello” 数据库描述报文有两种:空数据库描述报文和包含LSA首部信息的数据库描述报文。当两个路由器相互收到HELLO Seen报文(即路由器包含在HELLO报文中的邻居字段列表中)之后,它们开始互相发送空数据库描述报文。 空数据库描述报文用来确定通信过程中的主从关系。通常以路由器标识符较大的路由器作为主方。 主从关系确立后,从方使用主方的序号(6047)向主方发送第一个包含若干LSA首部信息的数据库描述报文; 主方在收到从方的数据库描述报文后发送自己的序号加1的数据库描述报文(包含LSA首部信息),作为对收到从方报文的确认。如果还有更多的链路状态,从方、主方将继续发送数据库描述报文。 在这个交换过程中,只有主方可以更改序号,从机使用主方确定的序号。 交换完数据库描述报文后,R7与R6相互请求其缺失的链路状态信息。这通过发送链路状态请求和链路状态更新报文实现。
R7和 R6之间链路的更新会在区域20中进行洪泛。可以看到R6与R7都在组播。 区域20中R6和R7间链路状态的更新将被在区域0和区域10中通知。在区域0中,路由器R2以网络摘要LSA方式通知该链路状态的更新,即网络192.168.4.0。在区域10中,区域边界路由器R1组播发送网络摘要。 ❗ 转载请注明出处 作者:HinsCoder 博客链接:🔎 作者博客主页 |
CopyRight 2018-2019 实验室设备网 版权所有 |