ospf学习-----邻居建立以及报文

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学习-----邻居建立以及报文_第1张图片

三、OSPF邻居的建立

ospf学习-----邻居建立以及报文_第2张图片

在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学习-----邻居建立以及报文_第3张图片

ospf学习-----邻居建立以及报文_第4张图片

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秒。

ospf学习-----邻居建立以及报文_第5张图片


R1收到R2的hello报文后,并在邻居字段看到自己的router id,进入two-way状态。

ospf学习-----邻居建立以及报文_第6张图片


R2收到R1 的hello报文,并看到自己的router id,状态进入two-way。

需要在抓包:

ospf学习-----邻居建立以及报文_第7张图片

R1向外宣告自己是DR,同时R2向往宣告自己是DR,选举优先级大的、router-id大的。

R1向外宣告,R1侧抓包如下:

ospf学习-----邻居建立以及报文_第8张图片

R2向外宣告,R2侧抓包如下:

ospf学习-----邻居建立以及报文_第9张图片

通过以上选择,R2为DR,R1为BDR。

ospf学习-----邻居建立以及报文_第10张图片

通过DR和BDR选举后,ospf 状态进入exchange状态。

以下是在R1侧 抓包分析:

R2先收到R1的DB报文,

ospf学习-----邻居建立以及报文_第11张图片

R1收到R2发送的DB报文

ospf学习-----邻居建立以及报文_第12张图片

R2先收到R1的DB报文,然后进行LSA请求,同时收到R1的响应,LS update报文。

ospf学习-----邻居建立以及报文_第13张图片

R1通过R2的DB报文,进行LSA请求。

ospf学习-----邻居建立以及报文_第14张图片

R2收到R1发送的LSA update后,发送LSACK确认;同时,R1收到R2发送的LSA update后,也发送LSACk确认。



当R1和R2的LSA同步后,进入邻居状态。每hello时间发送hello报文,每台设备依自己为根根据LSDB运行SPF计算最小生成树。

ospf学习-----邻居建立以及报文_第15张图片





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