OSPF协议邻居建立以及报文
一、OSPF报文有五种报文形式
1、 Hello报文:周期性发送,用来发现和维持OSPF邻居关系。(DR\BDR使用组播地址224.0.0.5向邻居发送报文,其他路由器向DR和BDR使用224.0.0.6发送报文。P2p和广播hello时间是10S,NBMA和P2MP是30秒。)
2、DD报文(Database Description packet):描述了本地LSDB的摘要信息,用于两台路由器进行数据库同步。(即LSA的HEAD信息)
3、 LSR报文(Link State Request packet):向对方请求所需的LSA。只有在双方成功交换DD报文后才会向对方发出LSR报文
4、LSU报文(Link State Update packet):向对方发送其所需要的LSA
5、LSAck报文(Link State Acknowledgment packet):用来对收到的LSA进行确认。(由于可靠的Tcp传输,所以需要lsack确认。内容是LSA的head,)
通过LSA形成LSDB,OSPF设备将LSDB转换成一张有向带权图,同一个区域内的LSDB相同,每台设备根据SPF算法计算出依自己为根的最短路径树。
二、OSPF邻居的八种状态
1、Down 没有从邻居处收到hello数据包。
2、Attempt 用于NBMA网络的连接,并表明没有新的信息从这个邻居处收到。
3、 Init 从另外的路由器收到hello报文,但是在此hello报文中没有看到自己的router ID。
4、2way 从邻居处接收到的hello报文的邻居字段中包含有自己的router ID。这个状态下选举DR和BDR。
5、ExStart 建立主/从关系并决定初始的DD序号以便准备交换DD报文。带有最高router ID的路由器将成为主路由器。
6、Exchange 路由器通过发送DD报文向邻居描述它自己的完整的链路状态数据库,同时,路由器也可以发送LSR报文来请求更新的LSA。
7、 Loading 路由器将发送LSR给邻居请求在Exchange状态下发现的新的LSA,并接收对请求的LSA的响应报文(LSU)。
8、Full 邻居路由器的LSDB中所有的LSA都有了,本路由器和邻居路由器形成邻接关系(adjacency)。
其中,Down、2way、Full状态是稳定状态。其状态图,如下:
三、OSPF邻居的建立
在R1启动OSPF,配置如下:
#
interface Ethernet0/0/0
ip address 192.168.1.1 255.255.255.252
#
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
#
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 192.168.1.0 0.0.0.3
#
在R1端口抓包:
R1端口启动ospf后,发送组播hello报文,SIP为192.168.1.1 DIP是224.0.0.5,TTL时间是1秒。
OSPF头部格式:
Version:值为2时,是OSPFv2版本;值为3时,是OSPFv3,即是IPv6版本。
Network MAsk:表示路由器发包接口所处IP子网的网络掩码(IP前缀长度)。
Hello Interval:表示生成hello的ospf路由器会每隔多长时间发送一次Hello消息,单位为秒。
Dead Interval:若在此时间段内没有收到hello报文,就会宣布该路由器失效,此时间是hello的四倍。
Designated Router:指定路由器和备份路由器,即DR与BDR。
在R2启动OSPF,配置如下:
#
interface Ethernet0/0/0
ip address 192.168.1.2 255.255.255.252
#
interface LoopBack0
ip address 2.2.2.2 255.255.255.255
#
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 192.168.1.0 0.0.0.3
#
在R2端口抓包:
R2端口启动ospf,发送组播hello报文,SIP为192.168.1.2 DIP是224.0.0.5,TTL时间是1秒。
R1收到R2的hello报文后,并在邻居字段看到自己的router id,进入two-way状态。
R2收到R1 的hello报文,并看到自己的router id,状态进入two-way。
需要在抓包:
R1向外宣告自己是DR,同时R2向往宣告自己是DR,选举优先级大的、router-id大的。
R1向外宣告,R1侧抓包如下:
R2向外宣告,R2侧抓包如下:
通过以上选择,R2为DR,R1为BDR。
通过DR和BDR选举后,ospf 状态进入exchange状态。
以下是在R1侧 抓包分析:
R2先收到R1的DB报文,
R1收到R2发送的DB报文
R2先收到R1的DB报文,然后进行LSA请求,同时收到R1的响应,LS update报文。
R1通过R2的DB报文,进行LSA请求。
R2收到R1发送的LSA update后,发送LSACK确认;同时,R1收到R2发送的LSA update后,也发送LSACk确认。
当R1和R2的LSA同步后,进入邻居状态。每hello时间发送hello报文,每台设备依自己为根根据LSDB运行SPF计算最小生成树。