基于IPv6的OSPFv3/ISISv6-原理介绍+报文解析+配置示例

文章详细介绍了OSPFv3在IPv6网络中的设计变化,包括报文格式、基本概念、协议原理和LSA报文格式。OSPFv3针对IPv6的链路复用和地址规划进行了适应性修改,如新增InterfaceID和Options字段。同时,文章提到了ISIS协议对IPv6的支持,主要通过扩展TLV实现,协议运行逻辑与IPv4相似。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人认为,理解报文就理解了协议。通过报文中的字段可以理解协议在交互过程中相关传递的信息,更加便于理解协议。

因此本文将在OSPFv3和IPv6-ISIS报文的基础上进行介绍。
关于IPv4路由协议OSPFv2可参考OSPFv2原理详解(基于RFC2328)
关于OSPFv3的协议参数,可参见IANA-OSPFv3 Parameters

关于IPv4路由协议ISIS可参考IS-IS报文分析+原理详解+典型配置
关于ISIS的常用TLV,可参见IANA-IS-IS TLV Codepoints

关于OSPF和ISIS的常用RFC,可参见OSPF/IS-IS RFC历史版本集合
关于IPv6及其基础协议ICMPv6/NDP可参考IPv6/ICMPv6-原理介绍+报文分析+配置示例

Note:第一章主要简介了基础内容。有相关基础可以直接阅读第二和三章节。

目录

1.基本概念

本章节主要参考博客IPv6/ICMPv6-原理介绍+报文分析+配置示例,详细内容可查看原文。

1.1.IPv6

IPv6
@新一代的IP用于替代IPv4的下一代IP协议
@核心解决IPv4地址不足的问题

IPv6地址
IPv6地址共128bits,使用冒号分隔的16进制表达。128=16*8
@通用格式为X:X:X:X:X:X:X:X。X=16进制。

举例当X=2031时,
2031=0010 0000 0011 0001。

@压缩格式。
当X组中高位出现0时可进行省略,当每个X=0时,可进行”: :“缩写。但是”: :“缩写只可缩写一次。

举例,3001::1=3001:0000:0000:0000:0000:0000:0000:0001

其他还有内嵌IPv4的IPv6地址格式,暂不做介绍。

IPv6分类
IPv6的地址总共可分为3类:单播地址、组播地址、任播地址。
在这里插入图片描述//相关内容可参考2006年发布的RFC4291

单播地址
全球单播地址= =2000::/3,占据IPv6的1/8。
2000::至3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
唯一本地单播地址= =fc00::/7,占据IPv6的1/2^7。类似IPv4的私网地址,但是可全球唯一。
FC00::至FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
链路本地地址= =fe80::/10,占据IPv6的1/2^10。
FE80::至FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

启用IPv6接口后自动生成的地址,用于在接口链路上进行本链路上的通信和协议交互。本链路通信指的是在链路上自动通告接口的128位IPv6路由,通过这种方式实际上可以实现同一链路两端不同网段可以通信。
自动换行在这里插入图片描述//链路本地地址也可手动配置,链路上的链路本地地址只有1个。
自动换行在这里插入图片描述ping链路本地地址需要指定链路。因为只有本地链路有效。

内嵌IPv4地址= =0000::/8,可用于协议报文的源地址。
::至00FF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
未指定地址= =::/128,可用于协议报文的源地址。
内部环回地址= =::1/128。类似IPv4的127.0.0.1/32,操作系统的内部通信地址。
组播地址
指定组播地址= =ff00::/8,占据IPv6的1/2^8。
FF00::至FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF
请求节点组播地址= =FF02:1:FF00.0000/104。主要用于ICMPv6地址使用。FF02:0:0:0:0:1:FF00:0至FF02:0:0:0:0:1:FFFF:FFFF

1@:请求节点组播地址是为设备上的每个单播地址自动创建的,将请求节点组播前缀FF02:0:0:0:0:1:FF00::/104附加到单播地址的低阶24bit上即可生成请求节点组播地址。
2@:每个节点必须为分配给它的每个单播和任意播地址加入的一个组播地址,用于DAD地址重复检测和地址解析。
3@:与链路本地地址相同,只在本地链路上有效

在具体的组播地址上
在这里插入图片描述Flag:4bits,目前只有0000和0001两种取值。0000表示为IANA分配的永久组播地址,0001为临时组播地址。
Scope:4bits,组播数据流在网络中发送的范围。

可参考2014年发布的RFC7346
1标识接口范围(不可传出,设备内部通信),
2标识链路本地也即仅在二层链路,
3标识区域本地范围,
4标识管理本地范围,
5标识站点本地范围,
8标识组织本地范围,
E标识全局范围等

Group ID:32bits,同IPv4组播地址。建议使用最后32bits。

常见的组播地址
@Node-Local=
FF01::1为所有节点组播;
FF01::2为所有路由器组播
@Link-Local=
FF02::1为所有节点组播
FF02::2为所有路由器组播
FF02::5为OSPFv3路由器组播
FF02::6为OSPFv3路由器DR组播
FF02::9为RIP路由器DR组播
FF02::13为PIM路由器DR组播

任播地址:使用较少
任播地址与单播地址使用相同的地址空间;配置时须明确表明是任播地址以此区别单播和任播。用于距离用户最近的地址传输:例如在ospf不同区域存在相同的任意播地址,通过cost优选可以让用户优选距离最近的节点。

IPv6组播MAC映射
将组播IP的后32bits,叠加至33:33后形成48bits的mac地址。

1.2.IPv6报文格式/配置

关于最新的IPv6报文格式相关内容,可参考2017年发布的RFC8200
链路层
Ethernet Type=0x86dd

其他的Ethernet Type举例:
802.1q Ethernet Type=0x8100;
IPv4 Ethernet Type=0x0800;
ARP Ethernet Type=0x0806;
MPLS Ethernet Type=0x8847;

IPv6报文格式在这里插入图片描述Version:4bits,IPv6固定为6。IPv4则固定为4。
Traffic class:8bits,QOS分类。功能类似于IPv4的DSCP。
Flow Label:20bits,流标签。通常可用于区分是否是同一个流。例如TCP/UDP通过5元组确定流,而IPv6可根据该信息判断是否是同一个流。
Payload length:16bits,有效载荷的长度,单位byte字节。除去IPv6基本报文的长度,也即载荷长+IPv6扩展报文长。
Next header:8bits,下一报头。携带的上层报头的信息类型,也即扩展IPv6头部的类型或者上层协议的类型。
Hop limit:8bits,条数限制。与IPv4的TTL功能相似。
Source Address:128bits,报文的源地址。
Destination Address:128bits,报文的目的地址。

Extension Headers:IPv6的扩展头部,长度不定。IPv6使用扩展头部来扩展其他功能,扩展性好。另一个好处是只携带所使用的功能,减小IPv6报文的长。

常用扩展报头有
1@逐跳选项报头(Next Header=0)=该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。(每台IPv6都需要处理的参数)
应用场景:用于巨型载荷;用于路由器提示;用于资源预留。
2@目的选项报头(Next Header=60)=目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报文头主要用于移动lPv6
3@路由报头(Next Header=43)=路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被lPv6源节点用来强制数据包经过特定的路由器。
4@分片报头(Next Header=44)=同IPv4一样,IPv6报文发送也受到MTU的限制。当报文长度超过MTU时就需要将报文分段发送,而在IPv6中,分段通过分段报头来实现。
5@认证报头(Next Header=51)=该报头由IPSec使用,提供认证、数据完整性以及重放保护。它还对IPv6基本报头中的一些字段进行保护。
6@封装安全净载报头(Next Header=50)=该报头由IPSec使用,提供认证、数据完整性以及重放保护和IPv6数据报的保密,类似于认证报头。
当有多个扩展报头时,必须按照如下顺序出现:IPv6 基本报头、逐跳选项扩展报头、目的选项扩展报头、路由扩展报头、分片扩展报头、授权扩展报头、封装安全有效载荷扩展报头、目的选项扩展报头(指那些将被分组报文的最终目的地处理的选项。)、上层扩展报头。
@除此之外,IPv6在源目的设备之间不允许分片。而是利用PMTU路径MTU检测确认链路上的允许通过的最大MTU。

IPv6的配置
IPv6的一个特性是链路复用,也即一条链路上支持多个IPv6前缀。
1@手工配置
在这里插入图片描述
2@EUI-64分配
将MAC地址的第7bit置1(也有其他方案,指定第7bit进行反转),并将接口48bits的MAC地址从中间插入固定长度16bit的FFFE,共64bits。将该bits转成IPv6的格式,填充到所分配的前缀上。
对于前缀小于64,在前缀与后64bit间补0;大于64,则将冲突eui-64部分删除。
在这里插入图片描述

1@在单播MAC地址中,第1个Byte的第7bit是U/L(Universal/Local,也称为G/L,其中G表示Global)位,用于表示MAC地址的唯一性。如果U/L=0,则该MAC地址是全局管理地址,是由拥有OUI的厂商所分配的MAC地址;如果U/L=1,则是本地管理地址,是网络管理员基于业务目的自定义的MAC地址。
2@在单播MAC地址中,第1个Byte的第8bit决定单播和多播。
3@而在在EUI-64接口ID中,第7bit(也即IPv6地址后8个字节的第一个字节)的含义与MAC地址正好相反,0表示本地管理,1表示全球管理,所以使用EUIl-64格式的接口ID,U/L位为1,则地址是全球唯一的,如果为0,则为本地唯一。这就是为什么要反转该位。

3@IPv6 unnumbered
一个接口如果没有IP地址就无法生成路由也就无法产生IP报文转发报文。IPv6 unnumbered 就是路由器一个接口上没有配置地址,但借用其他其他接口的地址进行报文的路由转发。

以太口不能配置成无编号(unnumbered)接口。
串口中(同步口)中,使用也受限制。比如当封装成 帧中继的时候,只有点对点
的子接口才允许配置成unnumbered。另外X.25封装也是不允许的。
自动换行
Cisco 2500系列配置示例://关于本场景下的路由传递和出接口问题不做详细延申。在这里插入图片描述

4@SLAAC
利用Stateless Address Autoconfiguration协议进行IPv6地址的动态配置。
5@DHCPv6
利用DHCPv6协议进行IPv6地址的动态配置。

关于IPv6及其基础协议ICMPv6/NDP可参考IPv6/ICMPv6-原理介绍+报文分析+配置示例
自动换行

1.3.OSPFv3协议说明

1@:传统IPv4网络的IP地址目前已完全分配完成。为此新设计出了IPv6网络。而对于OSPFv2协议已对其进行了严格的字段定义,而无法兼容于IPv6网络。
2@:IPv6的协议设计已与IPv4有较大差别。其中的重要特点在于链路复用和链路本地地址等的相关地址规划。
因此重新设计了运行于IPv6网络的OSPFv3协议。而ISIS本身并非为IP协议进行设计的路由协议,协议运行不依靠IP。同时TLV格式的相关设计,很容易进行扩展以支持IPv6网络。
关于OSPFv3的RFC可主要参考RFC5340–OSPF for IPv6
​​​​在这里插入图片描述

点击此处回到目录

2.OSPFv3

相比于OSPFv2,OSPFv3的最短路径树生成原理并未发生改变。只是相应的为了适应IPv6做了相应更改。

2.1.OSPFv3报文格式

在这里插入图片描述数据链路层:一般来说OSPFv3运行于以太网,底层协议为Ethernet II(另一种以太帧为IEEEE 802.3 Ethernet,使用802.3的协议有ISIS、生成树等)
SMac使用接口mac;
DMac使用组播mac,该mac由组播IPv
6转化而来。由于OSPFv3有固定的组播IP,因此IPv6网络的DMac固定为33:33:00:00:00:05

当广播网DR发送时,此时的目的MAC有可能是33:33:00:00:00:06

网络层:之后向上承载IPv6(类型0x86dd)。
SIP:使用接口的链路本地地址;
DIP:使用组播IP。OSPFv3固定使用两种组播IP:AllSPFRouters和AllDRouters。AllSPFRouters使用ff02::5,所有运行OSPF的路由器都监听并接收发送到此地址的数据包。AllDRouters分配为ff02::6,DR和BDR路由器监听并接收发送到此地址的数据包。
Traffic Class:使用高优先级CS6,在网络拥塞场景下优于普通流量优先传递。相似的处理方式,可见于BGP等协议。关于QOS内容,可查阅相关文档。
Hop Limit:设定为1,以限制OSPFv3协议包的传递范围为1跳。这里了1跳可以理解为1个局域网,也即只能在单个局域网内传输。
IP协议号:固定为89。相关定义可在 RFC 1700中查询到。

OSPFv3-Header
在这里插入图片描述version:1字节。3标识目前版本为OSPFv3版本。
Message Type:1字节。取值1-5,1标识为Hello包,2标识为DBD包,3标识为LSR包,4标识为LSU包,5标识为LSAck包。
Packet Length:2字节。标识包括OSPFv3 Header在内的整个OSPF包长度。
Source OSPF Router:4字节。标识OSPF包发送者的身份,使用Router ID填充
Area ID:4字节。标识路由器(接口)所处区域。用于层次化网络架构划分。
CheckSum:2字节。用于校验数据包的准确性。校验从OSPF Header开始除Auth Data以外的字段。
Instance ID:1字节。用于OSPFv3的多实例。
Reserved:1字节。

相比于OSPFv2,OSPFv3协议取消了2字节的认证数据和8字节的认证字段。代之的是1字节的实例ID和1字节的保留字段。
认证功能由IPv6的扩展头来实现。
其他完全一致

2.1.1.协议5种基本报文格式

OSPFv3-Hello在这里插入图片描述Interface ID:4字节。唯一标识了建立连接的(发送 Hello 报文的)接口。
Router Priority:1字节。进行DR选举时的比较依据。取值0-255,默认取1。设置为0时,表示不参与DR选举。

Options:3字节。选项字段,这里只介绍常用字段。
L bit=External-Attributes-LSA支持能力。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系防止流量计费。置0表示不支持。
R bit=路由器标志位。默认置1表示发起者为路由器。

置0时可用于对于希望参与路由但不希望转发非本地寻址数据包的多归主机。

N/P bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
V6 bit=IPv6路由计算功能。默认置1,表明路由器/链路可参与链路计算。类似于ISIS的过载标识。

Hello Interval:2字节。发送Hello包的间隔。广播网默认10s。
Router Dead Interval:4字节。未收到邻居Hello包而将邻居/邻接关系dead的最长事件。默认为Hello Interval的4倍。

Designated Router:4字节。广播网和NBMA网络上的选举出的DR路由器。首次启动置为0.0.0.0。
Backup Designated Router:4字节。广播网和NBMA网络上选举出的的BDR路由器。首次启动置为0.0.0.0。
Active Neighbor:链路上存在的活动邻居路由器(邻居的Router ID表示)。

自动换行
OSPFv3-DBD
在这里插入图片描述Reserved:1字节。
Options:3字节。与Hello包中内容相同。
Interface MTU:2字节。在不分片情况下,可以发送到相关接口的最大IP数据报的大小(以字节为单位)。
Reserved:1字节。

DB Description:2字节。用于指导DBD报文的有序传递。
I bit=置1用于表明这是第一次发送DBD包
M bit=置1用于表明此后还会发送DBD包
M/S bit=用于表明主从位。置1表示为主,置0表示为从
DD Sequence:1字节。表明传递DBD的序列。

与OSPFv2的格式基本相同。相关的主从选举内容,可参考OSPFv2原理详解(基于RFC2328)

OSPFv3-LSR:仅包含LSA三要素
在这里插入图片描述
Reserved:2字节。
LS 类型:2字节。
U-bit:LSA Handing。标识处理未知LSA的动作。U=0,将未知LSA按本地链路范围泛洪;U=1,将未知LSA按S1/S2比特位处理。
S1/S2-bit:Flooding Scope。标识处理LSA的动作。S1/S2=00,将LSA按本地链路范围泛洪;S1/S2=01,将LSA按所产生区域泛洪;S1/S2=10,将LSA按自治系统进行泛洪。

LS Type=0x2001,Router-LSA;
LS Type=0x2002,Network-LSA;
LS Type=0x2003,Inter-Area-Prefix LSA;
LS Type=0x2004,Inter-Area-Router LSA;
LS Type=0x4005,AS External-LSA;
LS Type=0x2006,Group-Membership-LSA;
LS Type=0x2007,NSSA-LSA;
LS Type=0x0008,Link-LSA;
LS Type=0x2009,Intra-Area-Prefix LSA。

Link State ID:4字节。与LS 类型相关的LSA信息。
Adv Router:4字节。产生该LSA路由器的Router ID。

自动换行
OSPFv3-LSU:包含LSA完整信息
在这里插入图片描述Number of LSAs:4字节。产生该LSU携带LSA的数目。

自动换行
OSPFv3-LSAck:包含LSA头部
在这里插入图片描述

从以上报文介绍可以看出5种基本OSPF报文没有改变。主要的区别在于
1@:新增了Interface ID,用于在后续的LSA中唯一标识节点/路由器的链路。
而在OSPFv2中,使用Route ID作为Link State ID足以实现该功能。
2@:新增了Option字段内容,用于支持IPv6网络的新特性。
3@:LSA的三要素内容发生改变。
LS Type由原先的6种扩展到现在的8种。并且每种LSA明确规定了泛洪的范围。这种设计理念与IPv6的地址规划相似
LS ID发生改变,不在由IP网络号来定义。这是因为客观上IPv6地址太长所导致。
详细的内容将在后续进行介绍。

点击此处回到目录

2.1.2.协议8种常用LSA报文格式

在OSPFv3中,对每种LSA所携带的信息进行了明确区分。
Type-1 Route-LSAType-2 Network-LSA不在携带路由信息,仅仅单纯用于描述拓扑。
Type-3 LSA Inter-Area-Prefix LSAType-4 Inter-Area-Router LSA进行了更名,更契合其实际作用。与OSPFv2作用相同。
Type-5 AS External-LSA和Type-7 NSSA-LSA无更改。与OSPFv2作用相同。
Type-8 Link-LSAType-9 Intra-Area-Prefix LSA为新增LSA用于携带路由信息。其中Type-8 Link-LSA使用Link-Local 链路本地地址作为路由的下一跳使用。
自动换行
LS Type=0x2001,Router-LSA
在这里插入图片描述

LS Age:7bit。LSA的老化时间。从0开始增长。最大3600s时老化。
Do not Age:1bit。老化bit位,置1时从不老化。
LS 类型:2字节。
U-bit:LSA Handing。标识处理未知LSA的动作。U=0,将未知LSA按本地链路范围泛洪;U=1,将未知LSA按S1/S2比特位处理。
S1/S2-bit:Flooding Scope。标识处理LSA的动作。S1/S2=00,将LSA按本地链路范围泛洪;S1/S2=01,将LSA按所产生区域泛洪;S1/S2=10,将LSA按自治系统进行泛洪。

LS Type=0x2001,Router-LSA;
LS Type=0x2002,Network-LSA;
LS Type=0x2003,Inter-Area-Prefix LSA;
LS Type=0x2004,Inter-Area-Router LSA;
LS Type=0x4005,AS External-LSA;
LS Type=0x2006,Group-Membership-LSA;
LS Type=0x2007,NSSA-LSA;
LS Type=0x0008,Link-LSA;
LS Type=0x2009,Intra-Area-Prefix LSA。

Link State ID:4字节。与LS 类型相关的LSA信息。
Adv Router:4字节。产生该LSA路由器的Router ID。
Sequence Number:4字节。用于表示同一条LSA的产生先后。
CheckSum:2字节。除了 LS age 外其它各域的校验和。
Length:2字节。LSA 的总长度,包括 LSA Header。
Flags:1字节。
W-bit:置1表示路由器为组播“通吃者“,用于MOSPF场景下
V-bit:置1表示路由器为虚链路的端节点
E-bit:置1表示路由器为ASBR
B-bit:置1表示路由器为ABR
Options:选项字段,3字节。这里只介绍常用字段。
L bit=External-Attributes-LSA支持能力。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系防止流量计费。置0表示不支持。
R bit=路由器标志位。默认置1表示发起者为路由器。

置0时可用于对于希望参与路由但不希望转发非本地寻址数据包的多归主机。类似ISIS的OL位。

N/P bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
V6 bit=IPv6路由计算功能。默认置1,表明路由器/链路可参与链路计算。

V6置0时,不计算该节点的其他直连路由。

Router Interfaces:16字节*N。N为所描述的拓扑信息数。
Type =Router-LSA类型,1字节。相比于OSPFv2,取消了stub型Router-LSA。
Reserved =保留,1字节。
Metric =指标,2字节。描述计算拓扑时的开销。
Interface ID =接口ID,4字节。用于标识与LSA的所在链路。
Neighbor Interface ID =邻居接口ID,4字节。实际上是DR/伪节点的接口ID。
Neighbor Router ID =邻居Router ID,4字节。实际上是DR/伪节点的Router ID。

在路由器上IPv4的网络号/接口地址通常是全局唯一确认的,因此OSPFv2的LSA中可以使用该值作为Link State ID进行LSA的明确确认。而OSPFv3无法简单使用IPv6地址进行标识,设备不仅需要知道LSA在OSPF域中的来源还需要知道所产生路由器的链路。
因此在OSPFv3中新增了Interface IDNeighbor Interface ID进行唯一区分。
Interface ID已在Hello包中进行提前宣告。

其他类型的LSA:
1@PTP:在这里插入图片描述
2@Virtual Link:在这里插入图片描述

自动换行
LS Type=0x2002,Network-LSA在这里插入图片描述除了通用的LSA Header外,与Network-LSA相关的字段有
Reserved :保留,1字节。
Options:选项字段,3字节。这里只介绍常用字段。
L bit=External-Attributes-LSA支持能力。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系防止流量计费。置0表示不支持。
R bit=路由器标志位。默认置1表示发起者为路由器。

置0时可用于对于希望参与路由但不希望转发非本地寻址数据包的多归主机。

N/P bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
V6 bit=IPv6路由计算功能。默认置1,表明路由器/链路可参与链路计算。类似于ISIS的过载标识。
Attached Router:4*N字节。N为链路上连接的路由器数目。

自动换行
LS Type=0x2003,Inter-Area-Prefix LSA在这里插入图片描述
除了通用的LSA Header外,与Inter-Area-Prefix LSA相关的字段有
Reserved :保留,1字节。
Metric:指标,3字节。用于描述所携带路由信息的开销。
PrefixLength:前缀长,1字节。用于描述所携带路由信息的前缀。
PrefixOptions:前缀选项,1字节。用于描述所携带路由信息的属性。
P-bit =传播bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。
MC-bit =组播bit。表示该路由属于组播路由,参与组播路由计算。
LA-bit =本地地址bit。如果设置为 1,则这个前缀是路由器的一个接口地址。
NU-bit =非单播bit。如果设置为 1,则这个前缀不会参与IPv6单播路由计算中。

自动换行
LS Type=0x2004,Inter-Area-Router LSA在这里插入图片描述除了通用的LSA Header外,与Inter-Area-Router LSA相关的字段有
Reserved :保留,1字节。
Options:选项,3字节。用于描述所携带路由信息的开销。
Reserved :保留,1字节。
Metric :指标,3字节。
Destination Router ID:目标Router ID,4字节。用于描述ASBR引入外部路由的的Router ID。

虽然三要素中可能已经描述了ASBR的Router ID,但实际上不一定完全描述其Router-ID。Destination Router ID字段可以明确确认。

自动换行
LS Type=0x4005,AS External-LSA在这里插入图片描述除了通用的LSA Header外,与AS External-LSA相关的字段有
Flags :标志字节,1字节。
E-bit =外部路由类型bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。

OSPFv3的外部路由类型有两种Type1和Type2。默认置1表示Type2,此时计算到该外部路由的开销时,忽略AS内开销。反之置0表示Type1则需叠加节点到该ASBR的开销。

FA-bit =转发地址bit。主要用于路径优化地址。如果设置为 1,则表示后面的 Forwarding Address 可选字段存在。
T-bit =Tag标记bit。如果设置为 1,则表示后面的 External Route Tag 可选字段存在。

Metric:指标,3字节。用于描述所携带路由信息的开销。
PrefixLength:前缀长,1字节。用于描述所携带路由信息的前缀。
PrefixOptions:前缀选项,1字节。用于描述所携带路由信息的属性。
P-bit =传播bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。
MC-bit =组播bit。表示该路由属于组播路由,参与组播路由计算。
LA-bit =本地地址bit。如果设置为 1,则这个前缀是路由器的一个接口地址。
NU-bit =非单播bit。如果设置为 1,则这个前缀不会参与IPv6单播路由计算中。
Referenced LS type:参考LSA类型,2字节。表明这个 LSA 是参考一个 Router-LSA,还是一个 Network-LSA。 1 表示参考一个Router-LSA, 2 表示参考一个 Network-LSA。
Address Prefix:地址前缀,可变长。
External Route Tag:外部路由tag,4字节。

自动换行
LS Type=0x2007,NSSA-LSA:与Type-5 LSA相同在这里插入图片描述除了通用的LSA Header外,与NSSA-LSA相关的字段有
Flags :标志字节,1字节。E-bit =外部路由类型bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。

OSPFv3的外部路由类型有两种Type1和Type2。默认置1表示Type2,此时计算到该外部路由的开销时,忽略AS内开销。反之置0表示Type1则需叠加节点到该ASBR的开销。

FA-bit =转发地址bit。主要用于路径优化地址。如果设置为 1,则表示后面的 Forwarding Address 可选字段存在。
T-bit =Tag标记bit。如果设置为 1,则表示后面的 External Route Tag 可选字段存在。

Metric:指标,3字节。用于描述所携带路由信息的开销。
PrefixLength:前缀长,1字节。用于描述所携带路由信息的前缀。
PrefixOptions:前缀选项,1字节。用于描述所携带路由信息的属性。
P-bit =传播bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。
MC-bit =组播bit。表示该路由属于组播路由,参与组播路由计算。
LA-bit =本地地址bit。如果设置为 1,则这个前缀是路由器的一个接口地址。
NU-bit =非单播bit。如果设置为 1,则这个前缀不会参与IPv6单播路由计算中。
Referenced LS type:参考LSA类型,2字节。表明这个 LSA 是参考一个 Router-LSA,还是一个 Network-LSA。 1 表示参考一个Router-LSA, 2 表示参考一个 Network-LSA。
Address Prefix:地址前缀,可变长。
External Route Tag:外部路由tag,4字节。

自动换行
LS Type=0x0008,Link-LSA在这里插入图片描述除了通用的LSA Header外,与Link-LSA相关的字段有
Router Priority :路由器优先级,1字节。
Options:选项字段,3字节。这里只介绍常用字段。
L bit=External-Attributes-LSA支持能力。
DC bit=按需链路。只在需要情况下建立OSPF邻居关系防止流量计费。置0表示不支持。
R bit=路由器标志位。默认置1表示发起者为路由器。

置0时可用于对于希望参与路由但不希望转发非本地寻址数据包的多归主机。

N/P bit=非完全末节功能。用于支持非完全末节区域,与E bit位不可同时设置。默认置0表示不支持。
MC bit=MOSPF功能。
E bit=外部路由功能。用于支持引入外部路由,默认置1表示支持。
V6 bit=IPv6路由计算功能。默认置1,表明路由器/链路可参与链路计算。类似于ISIS的过载标识。
Link-local Interface Address :接口链路本地地址,16字节。只出现在Link-LSA中。
prefixes :接口链路前缀数,4*N字节。

该字段描述了路由器接口上所携带的IPv6前缀地址。由于IPv6链路复用的特性,此处可携带多个prefixes。

PrefixLength:前缀长,1字节。用于描述所携带路由信息的前缀。
PrefixOptions:前缀选项,1字节。用于描述所携带路由信息的属性。
P-bit =传播bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。
MC-bit =组播bit。表示该路由属于组播路由,参与组播路由计算。
LA-bit =本地地址bit。如果设置为 1,则这个前缀是路由器的一个接口地址。
NU-bit =非单播bit。如果设置为 1,则这个前缀不会参与IPv6单播路由计算中。
Reserved:保留,2字节。
Address Prefix:地址前缀,可变长。

自动换行
LS Type=0x2009,Intra-Area-Prefix LSA在这里插入图片描述除了通用的LSA Header外,与Intra-Area-Prefix LSA相关的字段有
prefixes :接口链路前缀数,4*N字节。

该字段描述了路由器接口上所携带的IPv6前缀地址。由于IPv6链路复用的特性,此处可携带多个prefixes。

Referenced LS Type :参考LS类型,2字节。
Referenced Link State ID :参考LS ID,4字节。
Referenced Advertising Router :参考ADV Router,4字节。

1@ :对于广播网通常参考的是0x2002 Network-LSA。而对于PTP链路和启用了Vlink的环境下,通常参考的是0x2001 Router-LSA。
2@ :还有一个需要注意的是,Intra-Area-Prefix LSA通常是广播网的DR/伪节点所产生。
PTP网络下每个邻居都会产生Intra-Area-Prefix LSA,并且携带自己的接口前缀。因为没有DR/伪节点的存在。
相似的Vlink链路下每个邻居都会产生Intra-Area-Prefix LSA,并且携带自己的接口地址/全球单播地址以便建立邻居关系。
3@ :而OSPFv2的stub是直接描述在Router-LSA中,也就不要进行Referenced LSA了。

PrefixLength:前缀长,1字节。用于描述所携带路由信息的前缀。
PrefixOptions:前缀选项,1字节。用于描述所携带路由信息的属性。
P-bit =传播bit。如果一个 NSSA 区域的前缀需要被 ABR 传播出去,就需要设置这一位。
MC-bit =组播bit。表示该路由属于组播路由,参与组播路由计算。
LA-bit =本地地址bit。如果设置为 1,则这个前缀是路由器的一个接口地址。
NU-bit =非单播bit。如果设置为 1,则这个前缀不会参与IPv6单播路由计算中。
Metric:指标,2字节。
Address Prefix:地址前缀,可变长。
自动换行
就报文字段上相比于OSPFv2,新增了Interface ID和一些Options选项和Flag。
就报文功能上Router-LSA和Network仅承担拓扑计算功能。并且拓扑仅依靠链路本地地址来计算。接口的全球地址相当于叶子路由附加于拓扑上。
详细的功能将在后续介绍。

点击此处回到目录

2.2.OSPFv3的变化

2.2.1.泛洪行为的变化

大部分洪泛算法与OSPFv2洪泛机制保持不变。特别地,LSA实例新旧比较、自发起LSA的更新、LSAck的发送、LSA的重传和LSAck的接收,对于IPv6和IPv4而言完全相同。
然而,洪泛范围和未知LSA类型处理的增加导致OSPF洪泛算法发生了一些变化:LSU的接收和LSU的发送必须考虑LSA的范围和U位设置。此外,由于LSA类型和IPv6 LSA内容的重组,将LSA安装到OSPF数据库中会在IPv6中引起不同的事件。这些变化详情可阅读相关资料。

2.2.2.SPF树的计算

总的来说SPF树的计算可以分成两步。
这里仅考虑区域内广播网多链路稳定拓扑的情况。

1@:首先获取到OSPFv3域内的所有节点信息。
2@:根据Router-LSA中携带的Metric进行开销计算后剪枝非最优链路生成SPF最短路径树。
3@:最后加载叶子路由。对于自己的接口链路Metric默认为1。

1@节点信息获取:Router-LSA和Network-LSA在整个区域内泛洪。节点路由器通过Interface ID、Neighbor Interface ID和LSA的三要素,可以完全遍历到OSPFv3域内的所有节点和拓扑。
1@@:在稳定情况下,节点可以读取自己的Router-LSA知晓自己所连接的伪节点。
Router-LSA中的Neighbor Interface ID和Neighbor Router ID字段。实际表示的是DR/伪节点的相关信息。稳定情况下DR选举完成,并同步后就可知晓。

2@@:查找DR/伪节点所描述的Network LSA,知晓该直连网络上的邻居信息。
Network-LSA中的Attached Router字段。描述了链路上所连接的路由器的Router ID。

3@@:根据Network-LSA的链路上的该信息,查找LSA三要素中ADV Router=该Router ID的Router-LSA。
1是可以确认是否连接入了自己所在的网段。2是可以查看链路上的其他邻居是否在该区域内还接入了其他链路。

4@@:根据Router-LSA再去查看Network LSA。一步步遍历,完成整个区域内的拓扑描述。

这一行为是和OSPFv2相类似的。
Q:Interface ID在其中有什么作用
A:在报文中,Router ID只能确认邻居节点的存在。而邻居节点使用那个接口/链路加入了OSPFv3进程中是无法知晓的。而Interface ID在节点的尺度上是唯一存在的,从而进行唯一标识。
OSPFv2可以通过Link State ID来确认链路,因为LSID可以标识链路或接口地址。OSPFv3的Link State ID失去了这一作用,只能额外添加字段进行区分。所以我们说OSPFv2是基于网段的,OSPFv3利用链路本地Link-local地址来通信是基于链路的。

2@生成SPF最短路径树:Router-LSA中Metric描述了伪节点的开销。以自己为根,向其他链路计算总开销值。随后将大开销链路从SPF上减去。如果开销相同则负载分担。

SPF的生成并无变化,与OSPFv2的生成树生成相同。
同样的节点到伪节点开销为参考带宽/接口带宽。伪节点到节点开销为0。

3@加载叶子路由
OSPFv3的路由加载主要是通过获取具有区域范围的Intra-Area-Prefix-LSA来实现的。Intra-Area-Prefix-LSA中包含了链路中所携带的大量前缀信息。
与最短路径树的形成类似,自身节点通过DR/伪节点所通告区域内泛洪的Intra-Area-Prefix-LSA来知悉网络中的前缀信息。

有一个特定需要注意的是,OSPFv3使用Link-local链路本地地址作为路由的下一跳。并且实际上的邻居建立也是依靠Link-local链路本地地址来实现的。
Type-9 Intra-Area-Prefix-LSAs通常由链路的DR所产生,并且在LSA的内容包含了所参考的Router-LSA或Network-LSA进行定位。
并且需要说明的是这里的SPF树计算和域间路由的计算并没有考虑Options字段中V6-bit和R-bit的置位情况而且默认考虑的是单播场景(PrefixOptions中NU-bit置位的非组播场景)。并且PTP中不存在DR/伪节点的情况。详细的情况并不过多做介绍。

2.2.3.LSA的对比

OSPFv3协议LSA的字段已在2.1.章节进行了介绍说明。这里仅从概括说明的角度对两种协议进行对比介绍。
在这里说明的DR实际上指的是伪节点而非DR,但不再做明确区分。

LSA类型三要素作用
Router-LSA
(OSPFv2)
LS Type=1
LS ID=Self-Router ID
Adv Router=Self-Router ID
4种Link Type描述所连接链路和开销,产生区域泛洪
Router-LSA
(OSPFv3)
LS Type=0x2001
LS ID=10进制点分
Adv Router=Self-Router ID
3种Link Type描述拓扑信息,产生区域泛洪
Network-LSA
(OSPFv2)
LS Type=2
LS ID=DR-Router ID
Adv Router=DR-Router ID
DR描述本网段链路拓扑,产生区域泛洪
Network-LSA
(OSPFv3)
LS Type=0x2002
LS ID=DR Interface ID
Adv Router=DR-Router ID
DR描述本网段链路状态,产生区域泛洪
Summary-LSA
(OSPFv2)
LS Type=3
LS ID=网段主机位
Adv Router=ABR-Router ID
描述其他区域内路由信息,产生区域泛洪
Inter-Prefix-LSA
(OSPFv3)
LS Type=0x2003
LS ID=10进制点分
Adv Router=ABR-Router ID
描述其他区域内路由信息,产生区域泛洪
ASBR-Summary-LSA
(OSPFv2)
LS Type=4
LS ID=ASBR-Router ID
Adv Router=ABR-Router ID
描述到ASBR的拓扑信息,产生区域泛洪
Inter-Router-LSA
(OSPFv3)
LS Type=0x2004
LS ID=10进制点分
Adv Router=ABR-Router ID
描述到ASBR的拓扑信息,产生区域泛洪
AS-External-LSA
(OSPFv2)
LS Type=5
LS ID=ASBR-Router ID
Adv Router=ASBR-Router ID
描述到外部路由的路由信息,产生AS泛洪
AS-External-LSA
(OSPFv3)
LS Type=0x4005
LS ID=10进制点分
Adv Router=ASBR-Router ID
描述到外部路由的路由信息,产生AS泛洪
NSSA-LSA
(OSPFv2)
LS Type=7
LS ID=ASBR-Router ID
Adv Router=ASBR-Router ID
描述到外部路由的路由信息,产生区域泛洪
NSSA-LSA
(OSPFv3)
LS Type=0x2007
LS ID=10进制点分
Adv Router=ASBR-Router ID
描述到外部路由的路由信息,产生区域泛洪
Link-LSA
(OSPFv3)
LS Type=0x2008
LS ID=Interface ID
Adv Router=Self-Router ID
描述自己接口链路本地地址用作路由下一跳,描述自身所连接的前缀信息,产生Link泛洪
Intra-Prefix-LSA
(OSPFv3)
LS Type=0x2009
LS ID=10进制点分
Adv Router=DR/Self-Router ID
描述网段/自身所连接的前缀信息,产生区域泛洪

并且对于OSPFv2的4种Router-LSA类型为

Link TypeLink IDLink Data
Type-1 PTP邻居Router ID自己接口IP
Type-2 Transit伪节点IP/DR接口IP自己接口IP
Type-3 StubNetIP网络号IP网络掩码
Type-4 Virtual邻居Router ID自己接口IP

相反对于OSPFv3的3种Router-LSA类型为

Link TypeInterface IDNeighbor Interface IDNeighbor Router ID
Type-1 PTP自己Interface ID邻居Interface ID邻居Router ID
Type-2 Transit自己Interface IDDR Interface IDDR Router ID
Type-4 Virtual自己Interface ID对端Interface ID对端Router ID

点击此处回到目录

3.ISISv6

ISIS协议本身就不基于TCP/IP协议运行,并且ISIS的报文格式是基于TLV的。对于自己无法识别的TLV,节点会将其进行忽略。因此ISIS协议只需对IPv6接口相关内容进行扩展即可,也就实际上ipv4和ipv6运行逻辑基本相同。

只是在生成树计算上需要考虑,ipv4网络和ipv6网络的生成树拓扑是分别计算还是共用一套生成树拓扑。
关于IPv4路由协议ISIS可参考IS-IS报文分析+原理详解+典型配置

ISIS为支持IPv6,扩展了以下两个TLV
IPv6 Reachability:Type=236(OxEC)。通过前缀、度量、标记等来描述可达的IPv6前缀信息。
lPv6 Interface Address TLV:Type=232(OxE8)。相当于IPv4中的“IP InterfaceAddress” TLV,只不过把原来的32比特的IPv4地址改为128比特的IPv6地址。
这一部分关于路由协议ISIS对IPv6的扩展可参考2008年发布的RFC5308

此处简单回顾下ISIS的每种报文:
IIH:ISIS Hello报文,一共3种–Level-1 Hello,Level-2 Hello和PTP Hello。
主要用于确认节点ISIS协议所支持功能,协商建立ISIS邻居关系。
自动换行
LSP:Link State PDU,一共2种–Level-1 LSP和Level-2 LSP。
主要用于构建SPF树,描述ISIS域路由信息。伪节点LSP描述拓扑(类似OSPF的Network-LSA),实节点LSP描述路由信息。
自动换行
SNP:Sequence Numbers PDU,Level-1和Level-2各自有Complete Sequence Numbers PDU和Part Sequence Numbers PDU也即一共4种。
DIS每10s周期性发送CSNP用于描述网络中所存在的LSP,ISIS节点通过PSNP用于请求和确认自己没有的LSP。

3.1.协议介绍

简单介绍下ISISv6协议对IPv6的支持
IIH包变化
在这里插入图片描述在ISISv6的Hello包重要变化的有,原IP Interface Address TLV(Type=132)转变为lPv6 Interface Address TLV(Type=232,可参考2008年发布的RFC5308)
lPv6 Interface Address:Type=232,1字节。Length=16,1字节描述Value字段的长度。Value=16字节,IIH报文中只描述自己的接口链路本地地址。

Protocols Supported:Type=129,1字节。Length=1字节描述Value字段的长度。Value=0x8e标识IPv6,1字节

如果是IPv4,则此Value值为0xcc。

LSP包变化
这里的LSP-ID表明为实节点LSP。对于ISISv6而言伪节点只描述了拓扑信息/所连接的System-ID+节点表示,因此无变化。
在这里插入图片描述Protocols Supported,Type=129:主要用于说明为IPv6协议。

Multi Topology,Type=229:主要用于说明生成树计算区别。

在这里插入图片描述当指定多拓扑为Standard时,此处仅携带0x000表示支持IPv4 Unicast Topology。默认为Standard模式也即IPv4和IPv6共用一个树;
当指定多拓扑为IPv6时,此处携带0x000和0x002表示支持IPv4 Unicast Topologu和IPv6 Unicast Topology;
当指定多拓扑为Compatible时,此处携带0x000和0x002表示支持IPv4 Unicast Topologu和IPv6 Unicast Topology。
当指定了非Standard的模式时,LSP中额外携带了一个TLV。
在这里插入图片描述Multi Topology Reachable IPv6 Prefixes:Type=237,可参考2008年发布的RFC5120

lPv6 Interface Address:Type=232,1字节。Length=16,1字节描述Value字段的长度。Value=16字节,LSP报文中只描述自己的接口地址。

lPv6 Reachablity:Type=236,1字节。Length=14*N,1字节描述Value字段的长度。Value=不定长,描述节点的叶子路由信息。如果接口有多个IPv6接口地址/多个直连网段,则会携带多个。
Metric:4字节。描述路由开销。
U-bit:1bit。Up/Down bit,置0时表示首次注入ISIS当置1时用于Level-2区域路由引入Level-1区域。
X-bit:1bit。external original bit,置1时表示该路由从其他路由协议引入而来。
S-bit:1bit。subtlv present bit,置1时表示IPv6前缀后还有其他Sub TLV。
Prefix Length:1字节。表示IPv6前缀长。
IPv6 Prefix:不定长。所携带的IPv6前缀。

3.2.IPv6相关说明

OSPF协议,运行于IP协议之前且OSPF不基于TLV的设计使得其在更改了网络协议之后需要重新设计上层路由协议。
而ISIS基于OSI模型TLV,不依靠IP网络的承载。在更改网络协议时,只需改变其TLV类型即可完成新增网络的兼容。因此ISIS运行IPv4拓扑还是IPv6拓扑几乎是完全相同。
关于IPv4路由协议ISIS可参考IS-IS报文分析+原理详解+典型配置

ISIS相关原理
1@:首先经过IIH的2/3次握手之后协商ISIS支持能力,建立邻居关系。
2@:选举DIS,交互CSNP和PSNP确认网络中存在的LSP-ID信息。
3@:交互PSNP和LSP,同步各自的LSDB。

ISIS的生成树和路由计算
1@:IIH交互获取邻居信息。(DIS可由IIH确认)
2@:自身实节点中IS Reachability TLV(Type=2)描述连接邻居信息/伪节点信息。(PTP则是邻居信息,System ID+节点标识)
3@:查找邻居/伪节点对应的LSP-ID,获取相应的路由信息。
点击此处回到目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值