OSPF基础,抓包理解消息数据包与邻居状态机制

一、定义

(Open Shortest Path First)开放式最短路径优先
1.使用范围:IGP(内部网关协议)

IGP与EGP(域间网关协议)的区别
IGP:同一个AS之中的路由协议的统称,RIP,OSPF、EIGRP等,主要为了计算最佳路由,防环等来生产路由
EGP:不同AS之间的路由协议的统称,BGP协议,主要为了作用于AS边界,传递大量路由,力求路由不兜圈子,费用较高
AS自治系统,是一个被统一管理的由多个路由器组成的一个网络群体,可以自主的统一选择使用的路由协议,在一个AS中所有的路由器必须互联(全网可达),每个自治系统都有一个全局的AS号,范围为0-65535
举个例子:电信运营商于移动运营商就相当于两个不同的AS,电信内部为了通信有自己规定的统一的路由协议,来规范电信用户之间传递信息的速率与效率,移动同样也有自己的内部规定,这些自身内部的规范就是IGP协议要做的事,但电信用户需要与移动用户通讯,且要保证通讯效率,IGP就管不了了,这是就是BGP起作用

2.协议算法特点:链路状态型路由协议

距离矢量型协议与链路状态型协议的区别
距离矢量只传递路由,不传递拓扑,就是每个路由器不了解这个网络的拓扑信息,只根据通告自己的路由信息来选择路径,也同要会收到别的路由器类似的通告,通过跳数来计算度量值,来计算到达目标网络的需要经过的路由器数。30S更新发送路由信息,90S未收到就判断为相邻站点不可达,每个路由器都通过这种路由通告来传播它的路由表。在之后的通告周期中,各路由器仅通告其路由表的变更,收敛较缓慢。包括路由信息协议(RIP)内部网关路由协议(IGRP)
链路状态既传递路由,也传递拓扑,因为该型协议都有自己计算最佳路径的算法,每个路由器都了解整个网络拓扑信息,每个节点都会通过自身的算法计算到目的节点之间的最短路径,这些路径就添加到该路由器的路由表信息中,这些信息用于与邻接节点之间共享网络联通信息,加快了路由表的收敛速度,但比较消耗资源。包括开放式最短路径优先协议(OSPF),中间系统到中间系统路由交换协议(IS-IS)

3.该协议传递网络掩码
4.该协议基于IP协议封装,协议号为89,
5.更新方式:触发更新+30分钟的链路状态刷新

触发更新:网络结构稳定时不发送路由信息,当网络结构发生变化时,会立即发送路由更新信息,不需要等待更新计时器超时
会发生触发更新的情况:接口状态开启或关闭,增加路由或者路由不可达

6.更新地址:单播和组播

单播更新与组播、广播更新地址的区别
单播:一对一交流
组播:一对

二、OSPF区域

为了减少LSA的数量和LSA的传播范围,该协议基于路由器的不同接口划分了不同的区域,用一组32位二进制来标记区分不同的区域,叫做区域ID。

简单介绍常见LSA:
一类LSA:在某一个区域产生路由信息和直连拓扑信息,每台路由器都通告
二类LSA :用于在MA网络中,描述本网络路由器的数量以及本MA网络的网络掩码,只能在本区域之内传输,终止于ABR;只会出现在MA网络,用于补充1类LSA
三类LSA: 在不同区域传递路由信息与拓扑信息,有其他的ABR重新产生,是一条汇总LSA
四类LSA:在穿越不同区域时,由新的ABR重新产生,用于通告ASBR的位置
五类LSA:用于在整个OSPF中传递外部路由(原本不属于OSPF域)
七类LSA:携带FA地址(转发地址),在NSSA区域中,传递外部路由
(解释一下NSSA:是ospf的一个扩展属性,作用于非骨干且有ASBR的区域,不允许外部LSA进入,引入了汇总LSA,七类LSA在一个NSSA区域内携带外部信息,在ABR中将7类LSA转为5类LSA。)

划分区域的规则
必须存在且唯一的骨干区域(单区域就不讲究了,你就一个区域你还谁跟谁是老大就没意思了),非骨干区域必须与骨干区域直连.

这就有了OSPF协议中路由器扮演的角色:
骨干路由器:每个接口都在骨干区域中的路由器
非骨干路由器:每个接口堵在非骨干区域中的路由器
ABR:每个区域之间的路由器,也就是既有接口在骨干区域,也有接口在非骨干区域,能够产生3类LSA的路由器

那么上边提到的EGP,路由器的两个接口在两个不同的AS中的就叫做ASBR,自治系统边界路由器,能够产生5类或7类LSA的路由器

三、OSPF消息数据包与邻居状态机制

消息数据包:Hello、DBD、LSR、 LSU、 LSACK
邻居状态机制:Down 、init、attempt(过渡期)、two-way、exstart、exchange、loading、full

建立一个简单的OSPF区域抓包理解OSPF工作机制
OSPF基础,抓包理解消息数据包与邻居状态机制_第1张图片OSPF基础,抓包理解消息数据包与邻居状态机制_第2张图片

Down状态:关闭状态
华为中定义OSPF协议开启之前,最开始就是Down状态
思科定义邻居关系需要记录状态,邻居状态没有建立成功就会退回到Down状态。

hello包:周期性发送(时间为10S或者30S),发现、建立并维持OSPF 邻居关系,在邻居建立后充当保活包周期性发送,如果超过周期时间的4倍,邻居关系就为Down状态
OSPF基础,抓包理解消息数据包与邻居状态机制_第3张图片

OSPF Header
第一行:版本号(1表示实验室环境,2表示基于ipv4封装,3表示ipv6)
第二行:包的类型
第三行:包的长度大小
第四行:router-id(描述本路由器在OSPF的唯一性标识,链路状态型需要构建最短路径树,需要了解节点的位置,选取router-id顺序,手工指定>环回接口最大的ip>物理接口最大的ip)
第五行:接口所在的区域
第六行:校验和
第七行:认证类型(明文认证用1表示,MD5认证就是2)
第八行:认证密码内容
Hello Packet
第一行:网络掩码
第二行:hello时间10s(网络类型的不同hello时间不同,有10s也有40s)
第三行:可选项(重点有个NP与E位为特殊区域位)
第四行:DR优先级
第五行:死亡时间40S
第六行:选举的DR(在MA网络中DR与BDR选举,先比优先级,在比接口ip地址)
第七行:选举的BDR 

Init:初始化状态,一旦开始发送hello报文,进入初始化状态
two-way:双向通讯关系,当R2收到R1的Hello包时,要检测确认包中信息是否可以建立邻居关系,R2同意之后,R2也会给R1发送一个Hello包,R1也要检测是否建立邻居关系,如果双方都同意,则进入two-way状态,不可以就不建立邻居关系

建立邻居关系的条件
1.router-id 必须不同
2.area ID 相同
3.认证: 认证类型 (不认证=0 明文认证=1 MD5=2) 认证数据 一致
4.hello时间,dead时间 一致
5.Hello可选项中的特殊区域标识一致(E(外部路由位)=1 ; N(NSSA外部路由位)=0 ; P=0)
6.MA网络中,网络掩码必须一致
7.必须同时使用单播或组播更新
8.更新源检测(双方的IP地址必须在同一网段)

在two-way 状态下,MA网络中会选举DR与BDR,规则:
DR选举
1.先比较优先级 ,优先级越大越优(范围:0-255,默认优先级为1 )
2.再比较各自的router-id,越大越优

DR与BDR是什么?
作用理解:在一个OSPF网络中,选举一个路由器作为指定路由器DR。所有其他路由器只和它一个交换整个网络的一些路由更新信息,再由它对邻居路由器发送更新报文。这样节省网络流量。再指定一个备份指定路由器BDR,当DR出现故障时,BDR起着备份的作用,确保网络的可靠性。
具体指:DR与BDR虽然指的是路由器,但其实指的是该路由器的接口
选举顺序:优先选举的是BDR,在一定时间内没有比该BDR优的路由器接口,就让此路由器成为DR,再选举BDR

DBD包:数据库描述数据包;

双发都需要给对方发送DBD数据包,此时就进入exstart状态
Exstart状态:预启动状态,一旦开始发送主从DBD,则进入预启动状态。

主从选举DBD: 比较双方的router-id ,router-id大的一方为主(master ),小的一方为从 (slave);主要用于控制LSA的交互,控制更新量,也就是说双方都要学习对方的LSA,LSA发送一个确认一个,和双方谁先发送自己的LSA给对方

OSPF基础,抓包理解消息数据包与邻居状态机制_第4张图片

第一行:MTU值,双方MTU需要一致,才能继续建立邻居关系(思科中默认开启启此功能,华为中默认不开启,手工开启需要注意建邻双方需要相同)
DBD包中
第二行:I位,表示这是否是发送的第一个DBD包,1表示是,0表示不是
第三行:M位,表示还有更多的DBD包需要发送
第四行:MS位,表示主从选举,1表示Master主,0表示Slave从(因为这是第一个DBD包,还未进行主从选举,默认都为1)
DD Sequence表示序列号,用来做隐式确认的

主从选举之后,就会发送携带LSA头部信息的DBD
OSPF基础,抓包理解消息数据包与邻居状态机制_第5张图片
Exchange状态 :预交换,主从选举完成,则发送携带LSA头部信息的DBD,进入预交换状态,会发送LSR 数据包。(但是没有LSU)此时不会用LSACK确认,是有一个隐性确认,是根据组的序号确认组的DBD包。

LSR包: 链路状态请求,按照DBD中报文的未知LSA头部进行请求
OSPF基础,抓包理解消息数据包与邻居状态机制_第6张图片
LSU包:链路状态更新,携带LSA信息
OSPF基础,抓包理解消息数据包与邻居状态机制_第7张图片
Loading状态 加载状态,一旦发送LSU数据包,进入了加载状态,进行大量LSA的学习。

此处双方在学习LSA时会有一个请求列表和重传列表

请求列表:比如R2向R1发送了DBD包之后里边有许多的LSA,比如有100条LSA,R2在读取收到的DBD包之后发现有70条LSA是自己不知道,这70条LSA就生成一个请求列表,每当他向R2请求一次学习到了请求列表中的LSA,就会删除请求列表中的LSA
重传列表:R2收到R1请求的,也会生成R1不知道的这70条LSA列表,,需要重新传递给R1,称为重传列表,每当R1确认收到发给R2确认包时重传列表才会删除这条LSA

LSACK包:链路状态请确认OSPF基础,抓包理解消息数据包与邻居状态机制_第8张图片
Full状态 :邻接状态,双方LSA同步,就是LSA全部学习完成就会进入邻接状态,(LSA全部学习完就是请求列表与重传列表全部删除完全,就进入此状态)

数据包串起来简单记hello包发现你,认识,我要建邻;认识你之后我把我的DBD给你,我把我的数据库目录给你看;你看完后,发现我有,你没有的东西,你就找我要,发LSR请求;我再给你发个LSU给你你没有的信息;你再给我发个LSACK确认一下你收到了。
链路状态机制举例巧记:我们开始互相不认识,就是陌生人,Down状态;我要认识你,(发了hello包)打了招呼,就是init初始化状态,马上就要交盆友了;(有了对方的router-id)我们双方加了对方微信就是two-way状态我们就可以私聊了;加了微信回去聊天的时候也得(主从选举DBD包)有个人主动发消息问候,这就是一个extart状态预启动;基本上每次的聊天都是我先主动(主从DBD选举完成),我还会跟你聊一下最近我有什么开心的事不开心的事(发送携带LSA头部信息的DBD),你可能也想给我分享一下你一天的喜怒哀乐,也会问我为什么不开心呀(发送LSR请求包),你愿意与我聊天,就进入预交换exchange状态;之后我还会告诉一些你不知道的事(发送LSU数据包)我们会了解彼此的喜好,性格,家庭背景,进入(进行大量LSA的学习)各种嗨聊模式,就是loading状态;我们了解了彼此,觉得我们还挺聊得来,就确认了恋爱关系,full状态

总结图:OSPF基础,抓包理解消息数据包与邻居状态机制_第9张图片

四、特殊区域

末梢(stub),完全末梢,NSSA,完全NSSA

华为特殊区域与思科的区别
华为下放七类缺省,思科不下放七类缺省

五、接口网络类型

点到点,点到多点,broadcast,none brosdcast

六、选路规则

内部(一二类)优于外部(三四五六七类),一类优于二类,五类优于七类

你可能感兴趣的:(网络)