OSPF报文头部
Version(版本号),默认是V2 IPv6是V3
Message type :1、hello 2、DD 3、LSR 4 LSU 5、LSACK
Packet Length:报文长度
Source OSPF router:发送者的Router ID
Area ID:区域号:32位的点分十进制(IP地址格式)
Auth Type (认证类型) 0不认证 1 明文认证 2 MD5
Auth Data:认证的密码
验证OSPF报文头部是否合法
1、版本号为2
2、Area ID必须要和接收端的Area ID一致
3、认证类型和认证密码也必须一致
RID也不能冲突
[Huawei-GigabitEthernet0/0/0]ospf enable 10 area 0
[Huawei]ospf 10 router-id 2.2.2.2
[Huawei-ospf-10]area 0
[Huawei-ospf-10-area-0.0.0.0]
参考:HCNA网络技术学习指南8.3节
Hello报文: 周期性的发送,用来发现建立,和维护OSPF邻居关系的
邻居关系:两台设备共享同一条链路,并且交互了一些参数(Hello报文),形成邻居关系(2-way状态)
DD:描述本LSDB的摘要信息,用于两台路由器进行数据库的同步 DD报文只是一个LSA的摘要信息,里边不包括LSA
DBD:Database Description Packet
LSR:用于向对方请求所需的LSA,只有在OSPF邻居双方成功交换了DBD后才会向对方发送LSR
LSR:Link-Status request
LSA:Link-Status advertisement 链路状态通告
LSU:用于向对方回复具体的LSA
LSU:Link-Status update
LSACK:用来对收到的LSA的一个确认
LSACK:Link-Status Acknowledgement
重要字段解释:
Network Mask:发送Hello报文的接口的网络掩码。
只有在广播网络或者NBMA网络才有意义(在P2P,P2MP链路上是不不检测的
HelloInterval:发送Hello报文的时间间隔。单位为秒。
在广播网络中是10秒一次,在NBMA中是30秒一次
Options:标识发送此报文的OSPF路由器所支持的可选功能。具体的可选功能不在本课程的讨论范围之列。
DN位:Down比特位,是用来防环的(MPLS VPN应用此字段)。3,5,7类LSA防环
O位:用来表明是否支持不透明LSA(9,10,11类LSA的)能力
DC位:当始发链路支持按需链路时该比特位会置位
MC位:是否支持MOSPF
N位/P位 N位表明是否支持7 类LSA,N=0 表明不接收和发送7类LSA
P位 用在NSSA LSA(七类LSA),是否做七转五
E位:能否接收外部路由(五类LSA) 默认E位是1,是可以接收外部路由
Rtr Pri:发送Hello报文的接口的Router Priority,用于选举DR和BDR。
路由的优先级:用来选举DR和BDR的
RouterDeadInterval:宣告邻居路由器不继续在该网段上运行OSPF的时间间隔,单位为秒,通常为四倍HelloInterval。
40 120
Designated Router:发送Hello报文的路由器所选举出的DR的IP地址。如果设置为0.0.0.0,表示未选举DR路由器。
是DR接口的IP地址
Backup Designated Router:发送Hello报文的路由器所选举出的BDR的IP地址。如果设置为0.0.0.0,表示未选举BDR路由器。
Neighbor:邻居路由器的Router ID列表。表示本路由器已经从该邻居收到合法的Hello报文。
邻居路由器的Rtouer ID(表明OSPF的邻居状态)
interface GigabitEthernet0/0/0
ip address 12.1.1.1 255.255.255.0
ospf timer hello 5 /修改OSPf的Hello时间,如果修改了Hello时间,Dead时间会自动调整为4倍
ospf timer dead 40 /修改OSPF的Dead时间,如果修改了Dead时间,Hello时间不会自动调整
验证一个Hello报文是否合法之前首先需要验证一个OSPF报文是否合法。
验证一个接收到的Hello报文是否合法包括:
如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。
这是形成邻居(Neighbor)关系的过程和相关邻居状态的变换过程。
Down:这是邻居的初始状态,表示没有从邻居收到任何信息。在NBMA网络上,此状态下仍然可以向静态配置的邻居发送Hello报文,发送间隔为PollInterval,通常和RouterDeadInterval间隔相同。
Attempt:此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔为HelloInterval。如果RouterDeadInterval间隔内未收到邻居的Hello报文,则转为Down状态。
Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
2-WayReceived:此事件表示路由器发现与邻居的双向通信已经开始(发现自己在邻居发送的Hello报文的邻居列表中)。Init状态下产生此事件之后,如果需要和邻居建立邻接关系则进入ExStart状态,开始数据库同步过程,如果不能与邻居建立邻接关系则进入2-Way。
2-Way:在此状态下,双向通信已经建立,但是没有与邻居建立邻接关系。这是建立邻接关系以前的最高级状态。
1-WayReceived:此事件表示路由器发现自己没有在邻居发送Hello报文的邻居列表中,通常是由于对端邻居重启造成的。
两端同时进入2-way标志着邻居关系的建立
进入2-way后,是否要建立邻接(Adjacency)关系(Full)
1、接口类型为p2p(点到点),p2MP(点到多)
2、自己为DR,或者为BDR
3、邻居为DR,或BDR
进入2-way后,开始选择DR和BDR,40秒(Dead时间)
DR和BDR的作用:
DR和BDR的选举规则:
两端同时进入2-way,开始选举
1、首先检查Hello报文中的DR字段和BDR字段是否为空,如果都为空(意味着没有DR和BDR),会首先选举出BDR,选举规则:比较优先级,越大越优(默认为1,取值范围为0-255, 0表示不参与选举),如果相同,比较Router ID,越大越优;BDR选举出后,会自动升级为DR,然后重新选举BDR,规则和之前一样
2、如果DR字段为空,BDR不为空 ,BDR升级为DR,重新再选举出BDR
3、如果BDR为空,DR不为空,重新选举出BDR
DR,BDR默认是不支持抢占的(选举期除外)
DRother
在主从选举结束后,会发送DBD报文(空DBD,用于选举主从),就开始进入Exstart状态)
DBD报文:
三个字段:I(标识这是一个始化报文)
M(后边还有一个,M=1意思是后边还有,不是最后一个,M=0最后一个DBD报文)
MS自己为主
主从的选举比较Router ID,越大越优
前两个DBD报文是空报文,是用来选举主从
OSPF有两种确认机制:显示确认:LSR LSU LSACK
隐示确认
DR,BDR是用来同步数据库的,
主从只是隐示确认,
邻居状态
1、从2-way变为exstart标志是发送DBD报文
2、从exstart变为exchange标志是主从选举完毕
3、从exchange变为Loading是DBD的M位=1,开始发送LSR,接收LSU,Lsack
4、从Loading变为full 重传列表为空
MTU在DBD报文中携带,所以MTU不一致不会影响OSPF邻居关系的建立,但是会影响邻接的建立
思科高力默认是会检测MTU的
华为设备默认是不检测MTU的,华为可以通过命令配置检测,如果MTU不一致,会进入什么状态
如果主的MTU大于从的MTU,两端会同时卡在exstart状态
如果主的MTU小于从的MTU,从会进入exchange,主会卡在extart状态
如果忽略MTU检测,有可能会卡在Loading状态
OSPF的接口状态机
端口状态变化-广播型网段和NBMA网段
RFC2328文档
Down:
这是接口的初始状态,这时下层协议指出接口为断开,接口上没有协议流量的收发。这时,接口上的所有参数都被设为初始值,关闭所有的接口记时器,该接口上也没有相关联的邻接。
Loopback:
这时,路由器到网络的接口处于回环/Loopback,回环可能以硬件或软件的方式实现。回环接口不能用于正常的数据传输,但仍能通过ICMP ping或位错误检测来收集接口信息。IP 包仍需要被发往回环接口。为此,要在Router-LSA 中宣告此接口为接口IP 地址的主机路径
Waiting:
在此状态时,路由器试图判定网络上DR 和BDR。为此,路由器对其接收到的Hello包进行监听。在结束等待前,路由器不能被选举为DR 或BDR。这可以避免不必要地改变DR 和BDR。
Point-to-point:
这时,连接到物理点对点网络或虚拟通道的接口开始工作。进入此状态之后,路由器试图与邻居路由器形成邻接。并按HelloInterval 的间隔发送Hello包。
DR Other:
广播或NBMA 网络上的其他路由器被选举为DR,其自身也没有被选为BDR。路由器开
始与DR 和BDR(如果存在的话)形成邻接。
Backup:
在此状态时,路由器是所接入网络的BDR。并将在当前的DR 失效时成为DR。该路由器与接入该网络的所有其他路由器形成邻接。在洪泛过程中,BDR的工作与DR 稍有不同(见第13.3 节)。关于BDR的工作细节见第7.4 节。
DR:
在此状态时,路由器是所接入网络的DR。该路由器与接入该网络的所有其他路由器形成
邻接。路由器必须为网络节点生成一个Network-LSA。该Network-LSA包含了所有接入该网络的路由器(包括DR 自身)。关于DR的工作细节见第7.3 节。
前面提到,并非所有的邻居关系都可以形成邻接关系进而交换链路状态信息以及路由信息,是否建立邻接关系与网络类型有关。所谓网络类型是指运行OSPF网段的二层链路类型。