OSPF深入浅出

OSPF 概念

使用Hello报文建立邻居关系,接口如果有Sub辅助地址,始终由主地址发送hello报文,目的组播地址 224.0.0.5
OSPF协议直接封装在IP报文中,协议号89,证明IPV4和OSPF协议直接存在相辅相成的关系。OSPF是一种运行在IPV4(网络层)之上的路由协议。

OSPF Header报文字段,每种OSPF报文包含

1、version v2   :描述ospf协议版本
2、message type :描述ospf报文类型,1 hello  2 DBD ,3 LSR  4, LSU  5,LSACK
3、packet leg   : 描述ospf报文长度
4、router id    :描述设备的router id
5、area id      : 接口所属的ospf区域
6、checksum     :校验和
7、auth type    0 null() ,1 明文 2 md5
8、auth data    : 认证信息

OSPF Hello packet 报文字段

	network mask    :接口掩码
	hello interval  :hello报文发送间隔,P2P ,broadcast 默认10s,P2MP,NBNA默认30s
	router priority :接口优先级,用在broadcast,NBMA型链路选举DR,BDR,默认为1,取值范围0-255
	dead interval   :邻居失效时间,默认为hello间隔4
	DR				:该链路上DR接口的IP地址,P2P,P2MP 该字段为0.0.0.0
	BDR				:该链路上的BDR接口的IP地址,P2P,P2MP 该字段为0.0.0.0
	option			:N bit = 0 代表不能交换7类LSA   ,  E bit = 1  代表能交换5类LSA

在这里插入图片描述

任何情况下要满足的建立邻居关系的条件

	1、router id 不能冲突			(因为邻居建立过程中有一个主从关系的选举,
										router ID大的,被选举为DR,
										如果router ID相同,那么连2-way状态都到不了)
	2、area id 必须相同
	3、认证类型要一致
	4、认证数据要匹配
	5、hello interval 要一致
	6、dead interval 要一致
	7、E bit ,N bit 要一致
	
特点场景下对其他参数的要求:

	1、P2P链路不要求地址在同一网段,不要求掩码一致
	2、broadcast、NBMA 要求地址必须在同一个网段、掩码必须一致
	3、P2MP 默认要求地址必须在同一网段,默认情况下要求掩码一致,但可以通过命令忽略对掩码的检测
	
	其他报文对邻居关系的影响:DBD报文中IP MTU值要一致,
	默认情况下华为设备不对DBD报文的IP MTU值做检测,
	华为设备的DBD 报文的IP MTU 默认为0,思科设备默认位置为接口IP MTU 的大小;
	当设备收到DBD报文时,会检测DBD报文中IP MTU 值是否小于自身接口的IP MTU,
	如果小则接受并处理,如果大则丢弃

在这里插入图片描述


ospf mtu-enable 作用(接口敲)
1、对接受的DBD报文做IP MTU的检测
2、对自身发送的DBD报文,IP MTU值设置为自身接口的MTU值

OSPF的报文及状态

down		代表还没发现任何邻居的存在(为接受到hello报文)
init		收到了邻居的hello包,但hello报文中没发现自己的router ID,
			此时你发现了邻居的存在,但并不代表邻居已经发现了你,也称为one-way(一次握手)
				
two-way			收到了邻居的hello包,并在hello报文中发现了自己的router ID

					PS:采用3次握手建立邻居关系,是OSPF协议可靠性的体现

					two-way 之后,drother之间就只到two-way状态,不会进行LSDB的同步,
					其他情况下的邻居会继续进行LSDB的同步,进入到exstart状态,开始发送DBD报文。
			
exstart	 	发送DBD报文只做主从选举,而不会携带任何LSDB中的LSA的头部信息;
			并各自生成表达自身是初次发送DBD报文,后续还希望继续发送DBD,并自身是master,
			随机生成DBD报文序列号,进行主从选举。彼此交换该DBD报文后,根据router id的大小完成主从选举,
			router id 大的成为master,router id 小的成为slave.

在这里插入图片描述

		
		DBD报文字段:
			I = 1 		表示第一次发送DBD报文,
			M = 1 		表示DBD报文还没发完,后续还会发送DBD报文,
			MS = 1		希望成为master
			
		1.1.1.1 		I = 1		M = 1  		MS = 1		SEQ = X
		2.2.2.2			I = 1       M = 1		MS = 1		SEQ = Y
						
		主从选举完毕后,进入exchange 状态,slave路由器开始发送携带自身LSDB中的LSA头部信息的DBD报文,
		并使用exstart状态master路由器的序列号作为该DBD报文的序列号。

		slave   1.1.1.1 	I = 0		M = 1/0		MS = 0 		SEQ = Y	 		LSA头部
		(M 1代表LSDB中LSA的头部信息还没发送完,后续还需要继续通过DBD报文发送LSA头部信息,0 代表LSDB中所有LSA的头部已经发送完毕)	
		master  2.2.2.2		I = 0 		M = 1/0  	MS = 1		SEQ = Y+1		LSA头部		(序列号+1 ,隐式确认机制 )
		slave   1.1.1.1     I = 0		M = 1		MS = 0 		SEQ = Y+1		LSA头部
		master  2.2.2.2		I = 0		M = 1		MS = 1		SEQ = Y+2		LSA头部
		slave   1.1.1.1		I = 0       M = 0		MS = 0 		SEQ = Y+2		LSA头部
		master	2.2.2.2		I = 0		M = 0 		MS = 1		SEQ = Y+3		LSA头部
		slave	1.1.1.1		I = 0		M = 0		MS = 0 		SEQ = Y+3
		
		slave 总是用master的序列号向master发送DD报文;master将slave的序列号加1,向slave发送DD报文。
		
		为什么要采用隐式确认?
			原因DD报文携带自身LSDB中所有的LSA头部信息,信息比较多,一一确定处理起来比较繁琐,消耗设备资源;
			影响邻居收敛的时间,所以采用相对简单的隐式确认机制。
			
exchange完成后,邻居根据DBD报文的头部信息和自身LSDB的头部信息作比较,进行LSDB的同步。
	同步的规则:交换彼此没有的LSA以及新的LSA替换老旧的LSA,实现邻居LSDB的一致性。
	
	为了实现同步,对LSA的数据结构做出定义要能实现如下功能:
		1、如何实现唯一的区分一条LSA
		2、如何实现LSA的新的判断
		而这些功能就是LSA的头部信息(摘要信息),DBD报文携带的正是LSA的头部信息;exstart状态下DBD不携带LSA头部。
		LSA通过6个参数来标识自身的新旧程度
		
			如何实现唯一区分一条LSA呢?
				ls type
				link state ID
				adv router
				用于区分一条LSA,3个参数相同则认为是同一条LSA,如果都有这条LSA,则需要进一步进行新旧判断,用新的去替换旧的。
			
			如何实现LSA的新旧判断呢?通过3个参数来判断新旧。
				sequence number		(系列号)
				checksum			(校验和)
				ls age				(LA 老化时间)
				1、比较序列号越大越新
				2、seq相同,比较checksum,越大越新
				3、checksum相同,则判断lsa age 是否等于3600s,如果等于3600s,则认为最新,用于删除这条lsa.
				4、lsa age 如果都不等于3600s,则判断lsa age的差值,大于900S(15分钟),则lsa age 小的最新,
					同DBD报文中携带的LSA的头部信息,完成LSDB的差异比较,向邻居发送LSR,请求自身需要的LSA 
					小于900s(15分钟)则认为收到的是相同的lsa.可以不做更新。
							   
						   
			为什么要设计DD报文呢?
				实现按需同步,提高收敛速度。
				
exchange进入loading 状态,发送LSR,LSU,LSAck完成LSA的交换。


full状态,LSDB同步一致。
		
		OSPF邻居建立的可靠性主要体现在:3次握手,DBD报文的隐式确认,LSA的显示确认,报文重传机制(默认5秒后重传)。

LSA老化机制:

LSA每隔半小时周期更新,谁产生谁负责周期更新,SEQ + 1 ,checksum重新算,ls age置0,lsa age 到达3600s还没刷新,自己删除老化的lsa。
链路状态变化触发更新,SEQ + 1,checksum重新算,ls age 0

	LSA  SEQ  	
		OSPF使用的是顺序序列号,不是循环的,范围是0x800000000x7FFFFFFF.

			第一个8是负的,第一个LSA的序列号是0x80000001,然后累加到0,在从00x7FFFFFFF.
			如果真的到了0x7FFFFFFF,就发送一个AGE标记为60MIN的LSA,通告出去,邻居收到后会把这个LSA从DATABASE里删除,
			然后序列号又会从0x80000001开始.


			0x80000001化成二进制1000,0000,0000,0000,0000,0000,0000,0001
			0x7FFFFFFF化成二进制0111,1111,1111,1111,1111,1111,1111,1111

			序列号使用过程:

			首先:1000,0000,0000,0000,0000,0000,0000,0001
			其次:1111,1111,1111,1111,1111,1111,1111,1111

			再次:0000,0000,0000,0000,0000,0000,0000,0000
			最后:0111,1111,1111,1111,1111,1111,1111,1111
			一目了然,第一位的10分别代表负和正.也就是可以有231次方再乘2个序列号,足够大了.

OSPF 1类LSA (router)


作用: 
   用于描述自己本身哪些链路启用了OSPF,以及这些链路的状态:地址/掩码/cost;

特点: 
    1.每个OSPF路由器都会产生1个;
	2.该类型LSA,只能在一个区域内部传输
	3.该类型LSA区域内传输时,是没有任何变化的;

	
[AR1-GigabitEthernet0/0/0]dis ospf lsdb router 1.1.1.1

 OSPF Process 1 with Router ID 1.1.1.1
	         Area: 0.0.0.0
	 Link State Database 

	Type      : Router					type-1(LSA类型)
	  Ls id     : 1.1.1.1				ls id的取值和type相关,type1的取路由器的router id
	  Adv rtr   : 1.1.1.1  				router-id
	  Ls age    : 534 
	  Len       : 60 
	  Options   :  E  
	  seq#      : 80000013 
	  chksum    : 0xb340
	  Link count: 3
	   * Link ID: 2.2.2.2      			邻居的router-id
		 Data   : 10.1.1.1     			与邻居相连的接口IP
		 Link Type: P-2-P        		描述p2p/p2mp链路上的邻居,描述的是拓扑信息
		 Metric : 1						到邻居的ospf开销
	  
	  * Link ID: 10.1.1.0     			
		 Data   : 255.255.255.0 
		 Link Type: StubNet      
		 Metric : 1 
		 Priority : Low
	  
	  * Link ID: 1.1.1.1      			直连网络号
		 Data   : 255.255.255.255 		直连网络的子网掩码
		 Link Type: StubNet      		描述自身直连的网络号,描述直连的路由信息
		 Metric : 0 					到直连网络的ospf开销
		 Priority : Medium
	 
	 * Link ID: 10.1.1.2     			伪节点的router-id,借用DR在该链路的接口IP充当伪节点的router-id
		 Data   : 10.1.1.1     			与伪节点相连的接口IP
		 Link Type: TransNet     		描述Broadcast/NBMA链路上的邻居,描述的是拓扑信息
		 Metric : 1						到伪节点的开销

		凡是p2p链路一定有一个跟它对应的1类LSA,
		凡是TransNet一定有一个跟它对应的2类LSA,
		凡是Attached Router 一定有一个跟它对应的1类LSA。

	Broadcast/NBMA链路的网络号由2类LSA进行维护,为了避免路由不精确,要求广播型链路接口掩码要一致,
	即该链路各接口属于同一个网段
	Broadcast/NBMA链路 DBD、LSR通过单播发送,如果地址不在同一个网段,导致单播报文发送失败,无法建立邻居。
	所有Broadcast和NBMA必须同一个网段/掩码必须一致

OSPF 报文发送形式:

@点到点P2P类型:当链路层协议是PPP、HDLC时,缺省情况下,OSPF认为网络类型是P2P。
	在该类型的网络中,以组播形式(224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)

	@点到多点P2MP类型(Point-to-Multipoint):没有一种链路层协议会被缺省的认为是Point-to-Multipoint 类型。
	点到多点必须是由其他的网络类型强制更改的。常用做法是将非全连通的NBMA改为点到多点的网终;
	在该类型的网络中以组播形式(224.0.0.5)发送Hello报文,以单播形式发送其他协议报文bD报支、~LSR报文、LSU报文、LSAck报文)

	@NBMA类型(Non-broadcast multiple access):当链路层协议是ATM时,缺省情况下,OSPF认为网络类型是NBMA。
	在该类型的网络中,以单播形式发送协议报文(Hello报文、DD报文、LSR报文、LSU报文、LSAck报文)

	@广播类型(Broadcast):当链路层协议是Ethernet、FDDI时,缺省情况下,OSPF认为网络类型是Broadcast。
	在该类型的网络中,通常以组播形式发送Hello报文、LSU报文和LSAck报文。其中,224.0.0.5的组播地址为OSPF路由器的预留IP组播地址;
	 224.0.0.6的组播地址为OSPF DR的预留IP组播地址。以单播形式发送DD报文和LSR报文。

在这里插入图片描述

OSPF 2类LSA(Network):

作用: 
     DR 产生,用于告知该网段中有哪些邻居路由器,描述本网段的链路状态
 
特点:
    1.只能由 DR 产生;
    2.该类型LSA,只能在一个区域内部传输
	
	<AR1>dis ospf lsdb network 10.1.1.2

	 OSPF Process 1 with Router ID 1.1.1.1
		         Area: 0.0.0.0
		 Link State Database 


		  Type      : Network					type-2(LSA类型)
		  Ls id     : 10.1.1.2					DR的接口IP地址(伪节点)
		  Adv rtr   : 2.2.2.2  					DR的router-id
		  Ls age    : 2 
		  Len       : 32 
		  Options   :  E  
		  seq#      : 80000014 
		  chksum    : 0xe73d
		  Net mask  : 255.255.255.0
		  Priority  : Low
			 Attached Router    2.2.2.2
			 Attached Router    1.1.1.1
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值