OSPFv3(IP v6)
IP v4协议使用OSPFv2,IP v6协议使用OSPFv3。 OSPFv3概念原理和OSPFv2一致,只是报文内容有改变。 ::: warning OSPFv2建立邻居需要链路两端设备在同一子网,需要保证网段和掩码相同。 OSPFv3基于链路运行,设备只要在同一链路就可以建立邻居关系,即使不在同一网段,接口会自动生成链路本地地址。
OSPFv3必须手工配置RID。 :::
OSPFv3支持一个链路上多个实例。 OSPFv3接口添加实例:
[AR1-GigabitEthernet0/0/0]ospfv3 1 area 0 ?
instance Interface instance 可以添加实例,默认为instance 0
<cr> Please press ENTER to execute command
设备接口所属的区域和实例不同会影响邻居关系建立。
::: warning
一个实例只能绑定在一个进程中。 如上提示接口已在具有相同实例的其他OSPFv3进程中启用。
一个进程下只能绑定一个实例: 如上提示接口已在具有相同OSPFv3进程的其他实例中启用。 ::: ::: tip OSPFv3进程区域下不能宣告地址,需要在接口下宣告OSPFv3。
OSPFv3接口下绑定多实例:
[AR1]ospfv3 1
[AR1-ospfv3-1]router-id 10.1.1.1
[AR1-GigabitEthernet0/0/0]ospfv3 1 area 0 instance 1
[AR1]ospfv3 2
[AR1-ospfv3-2]router-id 10.1.1.1
[AR1-GigabitEthernet0/0/0]ospfv3 2 area 0 instance 2
[AR2]ospfv3 1
[AR2-ospfv3-1]router-id 20.2.2.2
[AR2-GigabitEthernet0/0/0]ospfv3 1 area 0 instance 1
[AR2]ospfv3 2
[AR2-ospfv3-2]router-id 20.2.2.2
[AR2-GigabitEthernet0/0/0]ospfv3 2 area 0 instance 2
:::
OSPFv3使用链路本地地址(FE80::/10)作为发送报文的源地址(hello、DD、LSR等报文中)和路由的下一跳地址(8类LSA)。
如上,AR1访问AR2的接口时,先访问到AR2的链路本地地址,然后再到AR2的IP v6地址。
OSPFv3实例实验:
OSPFv3使用进程ID和实例做绑定,一个进程ID对应唯一的一个实例ID。 路由器接口可以设置多进程,即接口可以通过设置多进程绑定多个实例。 同区域实例ID相同的路由器可以建立邻居关系,与进程ID无关(进程只用来绑定实例)。 ::: tip 一个进程ID只能绑定一个实例ID,一个实例ID可以绑定多个进程ID。 ::: ::: warning 默认所有设备都属于实例0,需要先在接口下undo ospfv3 1 area 0后再执行ospfv3 1 area 0 instance (实例ID)。 ::: 将拓扑中的AR3、AR4、AR5放在实例1中: 上述拓扑中OSPFv3建立完成后2023:: 64网段的邻居上线:
在拓扑中原有IP v6地址配置的基础上做如下更改:
[AR3-GigabitEthernet0/0/0]undo ospfv3 1 area 0
[AR3-GigabitEthernet0/0/0]ospfv3 1 area 0 instance 1
[AR5-GigabitEthernet0/0/0]undo ospfv3 1 area 0
[AR5-GigabitEthernet0/0/0]ospfv3 1 area 0 instance 1
查看SW1网段内的OSPFv3邻居关系:
如上,由于AR3和AR5同属于实例1建立邻居关系,AR2和AR4同属于实例0建立邻居关系,通过OSPFv3的实例实现同网段内分割建立邻居关系。
OSPFv3报文
::: tip OSPFv3的Hello、LSU、LSAck报文是组播的(FF02::5),DD、LSR是单播报文,通过链路本地地址通信。 :::
Instance ID:1 Byte,缺省值为0。允许在一个链路上运行多个OSPFv3的实例。每个实例具有唯一的Instance ID。Instance ID只在本地链路上有意义。 OSPFv3报文头部移除了OSPFv2上的认证字段:OSPFv3的认证可以使用IP v6的认证及安全处理,也可以通过OSPFv3自身机制来完成报文认证。
OSPFv3设置新的认证报文来实现认证: OSPFv3认证报文需要在模拟器中的CE设备上建立OSPFv3的邻居关系:
两台CE设备均作如下配置:
<HUAWEI>sys immediately
[CE]ospfv3 1
[CE-ospfv3-1]router-id 10.1.1.1
[CE-ospfv3-1]area 0
[CE-GE1/0/0]undo shutdown
[CE-GE1/0/0]undo portswitch
[CE-GE1/0/0]ipv6 enable
[CE-GE1/0/0]ipv6 address fe80::1 link-local / ipv6 address fe80::2 link-local
[CE-GE1/0/0]ospfv3 authentication-mode hmac-sha256 key-id 1 Huawei@123
OSPFv3的Hello报文
如上,相比OSPFv2,OSPFv3的Hello报文去掉了Network Mask字段,增加了Interface ID字段,用来标识发送该Hello报文的接口ID:
OSPFv3的Hello报文中Options字段扩展到3Byte可选项。与OSPFv2相比,增加了AT位、R位和V6位:
AT bit:表示是否支持OSPFv3认证(默认置位,值为1,即支持)
DC bit:是否支持按需拨号(默认不置位,值为0,即不支持)
R bit:表示路由器是否具备转发IP v6报文能力(默认置1)(1:具备;0:不具备)
N bit:表示是否在NSSA区域(1:是;0:不是)(普通区域为0)
MC bit:表示与多播相关(默认不置位,值为0,即不支持)
E bit:表示是否支持外部路由泛洪(默认置1)(1:支持;0:不支持)(普通区域为1)
V6 bit:表示路由器或链路是否参加IPv6路由的计算(默认置1)(1:会;0:不会)
OSPFv3的LSA头部
OSPFv3报文和LSA中去掉了IP地址的意义,且重构了报文格式和LSA格式
1.OSPFv3报文和Router LSA/Network LSA中不包含IP地址(OSPFv3的1类和2类LSA与IP地址解耦)
OSPFv2的报文中携带IP v4的地址(32bit)和掩码;OSPFv3针对IP v6地址(128bit)
2.OSPFv3的LSA中定义了LSA的泛洪范围(在LSA的字段内指定了可以传递的范围,不需要逐一判断LSA的泛洪范围)
3.OSPFv3中创建了新的LSA承载IP v6地址和前缀(创建8类、9类LSA来承载路由信息)
4.OSPFv3邻居不再由IP地址标识,只由Router ID标识。即通过RID来指定邻居。
LS Type:
U位标识了对未知LSA的处理方法,即标识了不识别LSA功能代码的路由器应如何处理LSA:
U=0:把此LSA当作具有链路本地泛洪范围来对待,从而只能泛洪到本地链路上
U=1:把此LSA当作类型已知的LSA来处理,也就是存储下来并泛洪出去
S2/S1位标识了LSA的泛洪范围:
S2 S1=0 0:链路本地范围内,即只在始发链路上泛洪
S2 S1=0 1:区域范围内,即泛洪到始发区域内的所有路由器
S2 S1=1 0:AS范围内,即泛洪到本AS的所有路由器
S2 S1=1 1:预留
即U bit为0时,S2/S1 bit一定为0 0;如果LSA的类型已知(已知code字段标识),U bit无效,S2/S1 bit按照code标识的LSA类型进行标识
Link State ID:
1、3、5、7、9类LSA都使用本地唯一的32位整数做标识
2类LSA使用DR的接口ID做标识
4类LSA使用ASBR的RID做标识
8类LSA使用(产生该LSA的)接口ID做标识
OSPFv3和OSPFv2的LSA报文变化
OSPFv2 LSDB: OSPFv3 LSDB: 如上,OSPFv3将不同类型的LSA单独分类型存放。
::: tip OSPFv3新增8类LSA: OSPFv3新增9类LSA: :::
::: warning OSPFv3的头部相较于OSPFv2删除了Options字段,但是OSPFv3的内容中较OSPFv2,Options字段不仅没有删除,还有所增加。 OSPFv3的Options字段仅在Hello报文,DD报文,1、2、4、8类LSA中出现。 OSPFv2的Options字段仅在Hello报文,DD报文,所有类型LSA中出现。 :::
OSPFv3 1类LSA
OSPFv3 1类LSA报文: 如上,LSDB中的1类LSA中链路装填ID都是0.0.0.0,可以通过查看报文或者dis ospfv3 lsdb router 0.0.0.0,查看其中的Advertising Router(报文)或者Originating Router的设备RID来判断是哪条LSA。
OSPFv2到OSPFv3的变化:
Options的字段内容和hello报文内的一致
LS type变为Link Type
OSPFv3的type由OSPFv2的4种变为3种,不存在stubnet链路类型(路由信息)
Link ID变为Interface ID
Link Data变为Neighbor Interface ID
新增Neighbor Route ID
::: warning OSPFv3中,LSA中的Link State ID是随机生成的32位数字,从0开始,作用是做标识,没有特殊含义。 ::: ::: tip 如果链路类型是P2P: OSPFv2下1、2类LSA有描述拓扑信息的P2P和描述路由信息。 OSPFv3下1、2类LSA只有描述拓扑信息的P2P,描述路由信息的stubnet在9类LSA。 (OSPFv3中1、2类LSA中描述路由的信息在9类LSA,其他几类LSA和OSPFv2保持一致) :::
链路类型vlink需要在OSPF进程中区域下配置,vlink逻辑上属于区域0。 vlink以单播地址为源目地址发送OSPFv3的五种报文。
::: warning 1类LSA的链路类型: transit network类型中,Neighbor Router ID为DR的RID。 P2P类型中,Neighbor Router ID为邻居的RID。 vlink类型中,Neighbor Router ID为vlink邻居的RID。 stubnet类型用来描述路由,放在9类LSA中。 :::
OSPFv3 2类LSA
OSPFv3 2类LSA报文: OSPFv3 2类LSA存在options字段,删除netmask字段。options字段和hello报文中的一致。 Attached Router为拓扑信息,不存在OSPFv2中的路由信息。
::: tip 1、2类LSA只是为了建立邻居关系而存在。 :::
OSPFv3 3类LSA
区域内9类LSA携带的每一个前缀,都会由ABR转换为对应的一条3类LSA。
OSPFv3 4类LSA
存在options字段。 使用ASBR的RID作为Link State ID,描述目标ASBR的地址,下一跳是起源者ID。 如上,目标RID拓扑计算不到,需要通过起源路由器10.3.3.3转发。 类似于OSPFv2的LS ID和通告者Adv rtr。
OSPFv3 5类LSA
存在flags和前缀options字段。
Flags字段:
E bit:表示外部路由开销类型。置1表示2类外部路由,置0表示1类外部路由。
F bit:表示后面的Forwarding Address可选字段是否存在。置1表示存在,置0表示不存在。
T bit:表示后面的External Route Tag可选字段是否存在。置1表示存在,置0表示不存在。
OSPFv3 7类LSA
类似于5类LSA: NSSA区域的7类LSA只在本区域内进行泛洪,该区域的ABR会将7类的LSA转换成5类LSA泛洪到其他区域(如果区域内存在多个ABR,Router ID大的进行7转5的操作)。
OSPFv3 8类LSA
8类LSA存在(产生该LSA的接口的)链路本地地址
options字段和hello报文中的一致
前缀options(前缀三元组):前缀 前缀长度 options
P bit:传播位,表示在NSSA区域中的外部路由被ABR传播到其他区域,需要执行七转五的动作。
MC bit:组播位,表示前缀需要进不进行组播计算(1:进行;0:不进行)
LA bit:本地地址位,表示该前缀是否为路由器的一个接口地址(1:是;0:不是)
NU bit:非单播位,表示该前缀会不会纳入IPv6单播路由计算中(1:会;0:不会)
(在LSDB中查看时,前缀和前缀长度融合在一起表示,在报文中三元组内容分开表示)
::: warning LSA中只要有路由信息,就会存在前缀options。 ::: LSDB中的前缀三元组: 报文中的前缀三元组:
8类LSA是链路LSA,即只能在本链路范围内泛洪,不能转发到其他链路,一条链路产生一条8类LSA。(8类LSA描述自身接口,一条8类LSA描述一个接口) 如上,IP v6链路上的路由器都会产生8类LSA,但AR2 GE0/0/1口的8类LSA只能发到AR3,不能通告给AR1。
8类LSA作用(链路本地地址作用):
1.保障链路可达,不依赖IP v6单播地址
2.链路本地地址可以当作路由计算的下一跳
3.链路本地地址可以充当报文的源地址
OSPFv3 9类LSA
OSPFv3 9类LSA描述了OPFv2的1、2类LSA的路由,实现了路由拓扑分离。
9类LSA用于描述自身网段和自身末节节点的路由信息
1.描述自身网段的路由信息,只有广播网络的DR设备产生
该链路上所有的网络前缀信息都是DR通告9类LSA描述,非DR设备上的网络前缀通过8类LSA告知DR,由DR融合自身网络前缀后使用9类LSA通告
该9类LSA借鉴于DR的2类LSA上(9类LSA携带的路由前缀关联到DR的2类LSA上)
2.描述自身末节节点的路由信息
只要设备存在末节节点(环回口路由),就会产生9类LSA
该9类LSA借鉴于自身的1类LSA上(9类LSA携带的路由前缀关联到自身的1类LSA上)
9类LSA的泛洪范围是区域内泛洪(S2/S1=0 1)
1、2类的路由都放在一个9类LSA中,不会新建9类LSA。 上述拓扑中AR1-AR2链路上,设AR2的GE0/0/0接口为DR,AR2会将AR1通告的8类LSA内携带的路由前缀加上AR2自身的路由前缀统一使用一条9类LSA进行通告。(P2P链路上没有DR,需要单独进行通告) ::: warning 上述拓扑中,AR1的网段会交由DR通告,AR1自身节点(如环回口路由)由自身通告,不能交由DR通告,否则同区域内其他设备做路由旁挂时会出错。 (虽然9类LSA实现了路由拓扑分离,但路由和节点需要对应) ::: OSPFv2中,1类LSA描述自身叶子节点路由,2类LSA描述网段路由。即通告9类LSA时,只需要描述该路由信息关联哪一类LSA即可。
::: tip 2011::1/128的options字段中LA置位,LA bit是本地地址位,置位表示该前缀是路由器的接口地址(环回口地址)。 ::: 由上,AR2通告的9类LSA 0.0.0.1中,有2个路由前缀关联1类LSA,通告者分别是AR1和AR2,查看详细可知如下: 关联在Link State ID: 0.0.0.0,通告者ID:10.1.1.1,即关联在AR1的1类LSA上。查看前缀三元组可知该路由为2011::1/128。 关联在Link State ID: 0.0.0.0,通告者ID:10.2.2.2,即关联在AR2的1类LSA上。查看前缀三元组可知该路由为2023:: /64。
验证: 如上,AR1中lo 0的2011::1为自身叶子节点,GE0/0/0的2012::1为网段路由。 ::: tip 上述LSDB中AR2的网段路由2023::/64对应了1类LSA(LS Type: 0x2001),原因是AR3没有配置路由信息,相当于该路由是没有邻居的接口地址。 ::: ::: warning 如果在AR3后面还有一个其他区域的路由器,建立OSPFv3邻居时,其他区域的路由器通告的9类LSA只能在本区域内通告,通告到其他区域时,必须将9类LSA所有的路由条目都转换成3类LSA。 :::