OSPF(管理距离110)协议不传递路由条目,它传递的是链路状态信息,并根据该信息来计算路由。OSPF的流量使用IP协议号89,增量更新路由信息,默认1800秒刷新路由。
Router-ID
Router-ID在网络中绝对不可以有重名,否则路由器收到的链路状态,就无法确定发起者的身份,也就无法通过链路状态信息确定网络位置。
产生方式:
1、手工指定
2、活动loopback接口中IP最大者
3、没有活动的Loopback接口,则选择活动物理接口IP地址最大的。
Router-ID只在OSPF启动时计算,或者重置OSPF进程后计算
邻居(Neighbor)
形成OSPF邻居,4个必备条件:
1.Area-id(区域号码)即路由器之间必须配置在相同的OSPF区域,否则无法形成邻居
2.Hello and Dead Interval(Hello时间与Dead时间)即路由器之间的Hello时间和Dead时间必须一致,否则无法形成邻居。
3.Authentication(认证)路由器之间必须配置相同的认证密码,如果密码不同,则无法形成邻居。
4.Stub Area Flag(末节标签)路由器之间的末节标签必须一致,即处在相同的末节区域内,否则无法形成邻居。
邻接(Adjacency)
两台OSPF路由器能够形成邻居,但并不一定能相互交换LSA,只要能交换LSA,关系则称为邻接(Adjacency)。邻居之间只交换Hello包,而邻接(Adjacency)之间不仅交换Hello包,还要交换LSA。
实验拓扑如下:
在R1上配置好OSPF后可以看到R1向224.0.05发OSPF的hello包。
[R1-ospf-1-area-0.0.0.0]dis this
#
area 0.0.0.0
network 1.1.1.1 0.0.0.0
network 12.1.1.1 0.0.0.0
头部信息:主要包括版本,区域ID,认证
HELLO包内容,主要包括掩码,hello interval(默认10),option(支持的能力),priority, dead interval
把R2与R1间的OSPF配置上
[R2-ospf-1-area-0.0.0.0]dis this
#
area 0.0.0.0
network 2.2.2.2 0.0.0.0
network 12.1.1.2 0.0.0.0
两个路由器的关系从INIT--2WAY-Extart-exchange-loarding-full,六个过程
Apr 7 2018 21:34:52-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[12]:Neighbor changes event: neighbor status changed. (ProcessId=1, NeighborAddress=12.1.1.1, NeighborEvent=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init)
Apr 7 2018 21:34:52-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[13]:Neighbor changes event: neighbor status changed. (ProcessId=1, NeighborAddress=12.1.1.1, NeighborEvent=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=2Way)
Apr 7 2018 21:35:23-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[14]:Neighbor changes event: neighbor status changed. (ProcessId=1, NeighborAddress=12.1.1.1, NeighborEvent=AdjOk?, NeighborPreviousState=2Way, NeighborCurrentState=ExStart)
Apr 7 2018 21:35:29-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[15]:Neighbor changes event: neighbor status changed. (ProcessId=1, NeighborAddress=12.1.1.1, NeighborEvent=NegotiationDone, NeighborPreviousState=ExStart, NeighborCurrentState=Exchange)
Apr 7 2018 21:35:29-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[16]:Neighbor changes event: neighbor status changed. (ProcessId=1, NeighborAddress=12.1.1.1, NeighborEvent=ExchangeDone, NeighborPreviousState=Exchange, NeighborCurrentState=Loading)
Apr 7 2018 21:35:29-08:00 R2 %%01OSPF/4/NBR_CHANGE_E(l)[17]:Neighbor changes event: neighbor status changed. (ProcessId=1, NeighborAddress=12.1.1.1, NeighborEvent=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full)
邻居关系的建立
1、Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
2、Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的router-id不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。在此状态下的邻居要被包含在自己所发送的Hello报文的邻居列表中。
3、2-Way:在此状态下,两台路由器已确认可以双向通信,邻居关系已经建立;但是还没有建立邻接关系。这是建立邻接关系以前的最高级状态。如果网络为广播网络或者NBMA网络则选举DR/BDR。
邻接关系的建立
邻居状态机变为ExStart以后,R1向R2发送第一个DD报文,在这个报文中,DD序列号被设置为552A(假设),Initial比特为1表示这是第一个DD报文,More比特为1表示后续还有DD报文要发送,Master比特为1表示R1宣告自己为主路由器。
邻居状态机变为ExStart以后,R2向R1发送第一个DD报文,在这个报文中,DD序列号被设置为5528(假设)。由于R2的Router ID比R1的大,所以R2应当为主路由器,Router ID的比较结束后,R1会产生一个NegotiationDone的事件,所以R1将状态机从ExStart改变为Exchange。
邻居状态机变为Exchange以后,R1发送一个新的DD报文,在这个新的报文中包含LSDB的摘要信息,序列号设置为R2在第二步里使用的序列号,More比特为0表示不需要另外的DD报文描述LSDB,Master比特为0表示R1宣告自己为从路由器。收到这样一个报文以后,R2会产生一个NegotiationDone的事件,因此R2将邻居状态改变为Exchange。
邻居状态变为Exchange以后,R2发送一个新的DD报文,该报文中包含LSDB的描述信息,DD序列号设为5529(上次使用的序列号加1)。
即使R1不需要新的DD报文描述自己的LSDB,但是做为从路由器,R1需要对主路由器R2发送的每一个DD报文进行确认。所以,R1向R2发送一个新的DD报文,序列号为5529,该报文内容为空。
邻居状态变为Loading之后,R1开始向R2发送LS request报文,请求那些在Exchange状态下通过DD报文发现的,而且在本地LSDB中没有的链路状态信息。
R2收到LS Request报文之后,向R1发送LS Update报文,在
LS Update报文中,包含了那些被请求的链路状态的详细信息。R1收到LS Update报文之后,将邻居状态从Loading改变成Full。
R1向R2发送LS Ack报文,确认R2发送的LSA已被R1正确接收。LS Ack用来确保信息传输的可靠性。