This commit is contained in:
shiyanshi
2019-11-19 21:24:52 +08:00
parent b94575738a
commit 64951aa6b0
6 changed files with 258 additions and 14 deletions

View File

@@ -6,6 +6,9 @@ ICMPv6Internet Control Message Protocol for the IPv6是IPv6的基础协议
在IPv4中Internet控制报文协议ICMPInternet Control Message Protocol向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息目的不可达、数据包超长、超时、回应请求和回应应答等。在IPv6中ICMPv6除了提供ICMPv4常用的功能之外还是其它一些功能的基础如邻接点发现、无状态地址配置包括重复地址检测、PMTU发现等。
### 分类
* 差错报文报告转发ICMPv6数据报过程中出现差的差错包括目的不可达、数据报超长、超时、参数问题等。
* 信息报文提供诊断功能和附加功能。诊断报文主要包括回送请求报文和回送应答报文。附加功能包括多播侦听发现MLD和邻居发现ND中的使用。
## 2 ICMPv6报文格式
ICMPv6的协议类型号即IPv6报文中的Next Header字段的值为58。ICMPv6的报文格式下图所示
@@ -74,15 +77,54 @@ ICMPv6错误报文用于报告在转发IPv6数据包过程中出现的错误。I
* 邻居发现ND
Type=133 路由器请求 RSRouter Solicitation
Type=134 路由器公告 RARouter Advertisement
Type=135 邻居请求 NSNeighbor Solicitation
Type=136 邻居通告 NANeighbor Advertisement
Type=137 重定向Redirect
* Type=133 路由器请求 RSRouter Solicitation
* Type=134 路由器公告 RARouter Advertisement
* Type=135 邻居请求 NSNeighbor Solicitation
* Type=136 邻居通告 NANeighbor Advertisement
* Type=137 重定向Redirect
* 多播侦听发现协议MLD
Type=130 多播听众查询
Type-131 多播听众报告
Type=132 多播听众退出
* Type=130 多播听众查询
* Type-131 多播听众报告
* Type=132 多播听众退出
## 6 邻居发现ND中的ICMPv6报文
### 路由器请求报文RS
路由器不愿意等待下一次周期性的路由器宣告,立即向周围发送路由器请求报文,可以马上得到链路上路由器的配置参数。
类型133Code=0原地址是发送主机的地址或者未指定地址目的地址是所有路由器的多播地址FF02::2。字段包括Type、Code、Checksum、Reserved、Options。
### 路由器公告报文RA
路由器周期性地通告它的存在以及配置的链路和网络参数,或者对路由器请求消息做出响应的报文。,包含连接确定、地址配置的前缀、跳数限制等内容。
类型134Code=0源地址是路由器本地链路地址目的地址是发送路由器请求节点的地址或者链路范围内的所有节点多薄地址。
* Cur Hop Limit主机发送普通报文时使用的默认跳数限制。接受节点只认为跳数限制为255的路由器通告为有效通告。
* Router LifeTime发送RA报文的路由器作为默认路由器的生命周期默认30分钟。
* Reacheble Time路由器在接口上通过发送RA报文让同一链路上的所有节点使用相同的可达保持状态。
* Retrans Timer重传NS报文的时间间隔用于邻居不可达检测和地址解析。
* Options含有链路层地址选项、MTU、前缀信息选项、通告间隔选项。8
### 邻居请求报文NS
节点发送邻居请求报文,请求邻居的链路层地址,验证起先前所获得的并保存在缓存中的邻居链路层地址的可达性。或者验证其地址在本地上是否唯一。
类型135Code=0源地址上发送请求的节点的单播地址目的地址是被请求节点的多播地址或者是被确认可达性的节点的单薄地址。
### 邻居通告报文NA
邻居请求报文的响应。可以主动发出,指示链路层地址的变化。
类型136Code=0源地址是发送接口的单播地址目的地址是请求报文的源地址或者所有节点的组播地址FF02::1。
* FLAG:R 路由器标记表示发送者的角色。值为1。
* FLAG:S 值为1表示对NS的响应
* FLAG:O 值为1表示对邻居的链路层地址进行覆盖。
### 重定向报文
路由器通过重定向消息,通知主机。对于特定的目的地址,如果不是最佳路由,则通知主机到达目的地址的最佳下一跳。

View File

@@ -0,0 +1,145 @@
 # IPv6-OSPFv3
> 参考文献
> * [IPV6 OSPFv3](https://blog.csdn.net/weixin_33819479/article/details/85179864)
> * [华为技术文档](https://support.huawei.com/enterprise/zh/doc/EDOC1100055548/4c1815c9)
> * [H3C技术文档](http://www.h3c.com/CN/D_200911/922190_30005_0.htm)
## 1 概述
OSPFv3主要用于在IPv6网络中提供路由功能OSPFv3是基于OSPFv2上开发用于IPv6网络的路由协议。而无论是OSPFv2还是OSPFv3在工作机制上基本相同但为了支持IPv6地址格式OSPFv3对OSPFv2做了一些改动下面将介绍OSPFv3与OSPFv2的异同点。
OSPFv3与OSPFv2类似也使用组播进行工作OSPFv3的DR路由器使用众所周知的IPv6组播地址FF02::6这个地址,它类似于IPv4环境中的224.0.0.6其他的OSPFv3的路由器使用FF02::5这个组播地址它类似于IPv4环境中的224.0.0.5
### OSPFv3与OSPFv2相同点
OSPFv3协议设计思路和工作机制与OSPFv2基本一致相同点如下所示:
* 数据包类型相同其中包括Hello、DBD(数据库描述)、LSR链路状态请求、LSU链路状态更新和LSAck链路状态确定包
* 区域划分相同包括骨干区域、一般区域、末节区域、NSSA次末节区域和完全末节区域。
* 路由器类型相同包括内部路由器internalrouter、骨干路由器backbone router、区域边界路由器area border router和自治系统边界路由器autonomoussystem boundary router
* 使用网络类型相同包括点到点络网、点到多点网络、多路访问网络、NBMA网络。
* 邻居发现和邻接关系形成机制相同OSPF 路由器启动后,便会通过 OSPF接口向外发送 Hello报文收到 Hello报文的 OSPF路由器会检查报文中所定义的参数如果双方一致就会形成邻居关系。
* LSA泛洪和同步机制相同为了保证 LSDB内容的正确性需要保证 LSA的可靠泛洪和同步。
* DR选举机制相同在 NBMA网络和广播网络中DR和BDR的选举过程相同。
* 路由计算方法相同采用最短路径优先算法SPF计算路由。
### OSPFv3与OSPFv2不同点
为适应IPv6运行环境支持IPv6报文的转发OSPFv3相对OSPFv2做出相关的改进使得OSPFv3可以独立于网络层协议并且其扩展性加强可以满足未来的需求。其与OSPFv2不同点如下所示
* 基于链路的运行
* 使用IPv6链路本地地址
* 链路支持多实例复用
* 通过RouterID唯一标识邻居
* 认证的变化
* OPSFv3更灵活的处理未知LSA类型
* OSPFv3增加了本地链路洪泛扩散的范围
* OSPFv3取消了寻址的概念
### 理解基于链路的运行:
OSPFv2是基于网络运行的也就是说两台路由器要形成邻居关系它们必须在同一个子网。OSPFv3是基于链路运行的一个链路可以划分为多个IPv6前缀类似于子网的概念节点即使不在同一个前缀范围只要在同一链路上也可以形成邻居关系这与OSPFv2完全不同因为在IPv6中一条链路可以属于多个子网。
### 理解使用IPv6链路本地地址
OSPFv3将使用本地链路地址作为报文发送的源地址。一台路由器可以学习到同一链路上相连的所有路由器的本地链路地址并使用这些本地链路地址作为下一跳来转发报文。但是在虚拟链路连接上必须使用全球范围地址或者本地站点地址作为OSPFv3协议报文发送的源地址。本地链路地址只在本地链路上有意义且只能在本地链路上泛洪。
### 理解链路支持多实例复用:
在OSPFv3中支持链路多实例复用所谓链路多实例复用是指在一条共享型广播链路上可以运行多个OSPF实例Instance。比如如图12.121所示路由器R1与R2属于同一个OSPF路由域路由器R3和R4属于另一个OSPF路由域但是它们连接到同一个广播网络中共享同一条链路且都能相互建立邻居关系正常的行为应该让路由器R1与R2建立邻居关系路由器R3与R4建立邻居关系因为您总不能让路由器R1和R3或者路由器R2和R4建立邻居吧因为它们不处于同一个OSPF路由域。当然在OSPFv2中可以使用OSPF的认证功能来隔离这两个OSPF的路由域但这并不是一种完美的解决方案因为OPSF路由器将不断的记录被其他邻居拒绝的OSPF认证失败的数据包。而在OSPFv3链路支持多实例复用是因为在OSPFv3报文头中添加Instance ID字段。如果接口配置的Instance ID与接收的OSPFv3报文的Instance ID不匹配则丢弃该报文从而无法建立起邻居关系。
### 理解通过Router ID唯一标识邻居
   在OPSFv2中当OSPF运行在广播网络或者NBMA网络上时OSPFv2的邻居是通过路由器的接口地址进行标识而其他链路的 OSPFv2的邻居则是通过路由器IDRID来表示。在OSPFv3中取消了这种不一致性所有类型的链路全部通过RID来标识邻居而且OPSFv3的RID将会作为配置的必须项在OPSFv2中RID的配置是可选项在OSPFv3中如果不为路由器配置RID那么OSPFv3将无法启动会出现如图12.122所示的提示:
### 理解认证的变化:
在OSPFv2中OSPF拥有自己特有的认证方式这些认证消息被包含在OSPFv2的数据包中。OSPFv3自身不再提供认证功能而是通过使用IPv6提供的安全机制来保证自身报文的合法性。所以OSPFv2报文中的认证字段在OSPFv3报文头中被取消。
### 理解OPSFv3更灵活的处理未知LSA类型
在OSPFv2上会对未知的LSA作丢弃在OSPFv3中可以把这些未知的LSA当作本地链路洪泛扩散范围这类似于这些未知的LSA被识别一样但是在它们自己的SPF算法中将被忽略这样做的结果是OSPFv3处理网络的变化比v2更容易。
### 理解OSPFv3增加了本地链路洪泛扩散的范围
  因为IPv6的本地链路地址有广泛的用途所以OSPFv3增加了一个本地链路洪泛扩散的范围新增加的LSA叫做链路LSA它用来携带单个链路上邻居相关联的信息这种类型的LSA只在本地链路范围内洪泛所以它不能超出路由器以外进行扩散。
### 理解OSPFv3取消了寻址的概念
OSPFv3的路由器LSA和网络LSA不再携带IP地址这加强了OSPF的扩展性。
## 2 OSPFv3报文
OSPFv3用IPv6报文直接封装协议报文协议号为89。OSPFv3分为5种报文Hello报文、DD报文、LSR报文、LSU报文和LSAck报文。
![](image/ospfv3报文结构.png)
| 字段名 | 长度 | 含义 |
|-|-|-|-|
|Version| 8比特 | OSPF的版本号。对于OSPFv3其值为3。
| Type | 8比特 | OSPFv3报文的类型1Hello报文。2DD报文。3LSR报文。4LSU报文。5LSAck报文。
| Packet length | 16比特 | OSPFv3报文的总长度包括报文头在内单位为字节。
| Router ID | 32比特 | 发送该报文的路由器标识。
| Area ID | 32比特 | 发送该报文的路由器的所属区域。
| Checksum | 16比特 | 包含除了认证字段的整个报文的校验和。
| Instance ID | 8比特 | OSPFv3多实例ID。
| 0 | 8比特 | 预留值。
## 3 LSA格式
### LSA 分类
在AS内的每台路由器根据路由器的分类产生一种或多种LSA。LSA的集合形成了LSDBLink-state Database。OSPFv3中对路由信息的描述都是封装在LSA中发布出去的。常用的LSA包括
* Router-LSAType1每个路由器都会产生描述了路由器的链路状态和花费在所属的区域内传播。
* Network-LSAType2由广播网或NBMA网络中的DR产生Network-LSA中记录了这一网络上所有路由器的Router ID描述本网段的链路状态在所属的区域内传播。
* Inter-Area-Prefix-LSAType3描述区域内某个网段的路由由ABR产生并通告给其他相关区域。
* Inter-Area-Router-LSAType4由ABR产生描述到ASBR的路由通告给除ASBR所在区域的其他相关区域。
* AS-external-LSAType5AS-External-LSA描述到AS外部的路由由ASBR产生。
* NSSA LSAType7NSSA-LSA描述到AS外部的路由由ASBR产生。
* Link-LSAType8每个路由器都会为每个链路产生一个Link-LSA描述到此Link上的link-local地址、IPv6前缀地址并提供将会在Network-LSA中设置的链路选项它仅在此链路内传播。
* Intra-Area-Prefix-LSAType9每个路由器及DR都会产生一个或多个此类LSA在所属的区域内传播。路由器产生的此类LSA描述与Route-LSA相关联的IPv6前缀地址。DR产生的此类LSA描述与Network-LSA相关联的IPv6前缀地址。
### LSA 格式
![](image/ospfv3-lsa-header.png)
|字段名|长度|含义
|-|-|-|
|LS age|16比特|LSA产生后所经过的时间单位是秒。无论LSA是在链路上传输还是保存在LSDB中其值都会在不停的增长。
|LS type|16比特|LSA的类型Type1Router-LSA。Type2Network-LSA。Type3Inter-Area-Prefix-LSA。Type4Inter-Area-Router-LSA。Type5AS-external-LSA。Type7NSSA-LSA。Type8Link-LSA。Type9Intra-Area-Prefix-LSA。
|Link State ID|32比特|与LS Type一起描述路由域中唯一一个LSA。
|Advertising Router|32比特|产生此LSA的路由器的Router ID
|LS sequence number|32比特|LSA的序列号。其他路由器根据这个值可以判断哪个LSA是最新的。
|LS checksum|16比特|除了LS age外其它各域的校验和。
|Length|16比特|LSA的总长度包括LSA Header以字节为单位。
### LSA洪泛范围
* 链路本地范围只在本地链路上洪泛用于Link LSA
* 区域范围覆盖OSPFv3区域。Router LSA、Network LSA、Inter Area Prefix LSA、Inter Area Router LSA、Intra Prefix LSA
* 自制系统范围整个路由域。AS External LSA。

View File

@@ -23,18 +23,29 @@ IPv4协议是目前广泛部署的因特网协议。在因特网发展初期I
### 基本术语
![](image/ipv6概念范围.png)
1. 节点运行IPv6的设备包括路由器和主机。
2. 路由器:一种节点,能够转发数据包。
3. 主机:一种节点,发送或接收数据信息。
4. 上层协议运行在IPv6上层的其他协议。
5. 局域网段:由单一介质组成,以二层交换机设备为边界。
6. 链路:多个局域网段,以路由器为边界。
7.
6. 链路:多个局域网段,以路由器为边界。这里可以简单的理解为ipv4链路层arp能够到达的地方就属于同一个物理链路。
7. 子网使用相同ipv6前缀的一个或多个链路。可以被内部子网路由器划分为很多部分。
8. 网络:由路由器连接起来的多个子网。
9. 邻接点:连接到同一个链路上的物理或者逻辑节点。
10. 链路MTU链路上的最大传输单元
11. Path MTU路径上的最大传输单元。
## 2 IPv6地址
### IPv6地址的表示方法
**首选格式**
IPv6地址总长度为128比特通常分为8组每组为4个十六进制数的形式每组十六进制数间用冒号分隔。例如FC00:0000:130F:0000:0000:09C0:876A:130B这是IPv6地址的首选格式。
**压缩格式**
为了书写方便IPv6还提供了压缩格式以上述IPv6地址为例具体压缩规则为
* 每组中的前导“0”都可以省略所以上述地址可写为FC00:0:130F:0:0:9C0:876A:130B。
@@ -42,6 +53,10 @@ IPv6地址总长度为128比特通常分为8组每组为4个十六进制
* 需要注意的是在一个IPv6地址中只能使用一次双冒号“::”否则当计算机将压缩后的地址恢复成128位时无法确定每个“::”代表0的个数。
**内嵌格式**
内嵌IPv4地址的IPv6地址
0:0:0:0:0:0:192.168.1.2
### IPv6地址的结构:
一个IPv6地址可以分为如下两部分
@@ -90,9 +105,11 @@ Subnet ID子网ID。组织机构可以用子网ID来构建本地网络Site
Interface ID接口标识。用来标识一个设备Host
* 链路本地地址
* 链路本地地址link local address
链路本地地址是IPv6中的应用范围受限制的地址类型只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10最高10位值为1111111010同时将接口标识添加在后面作为地址的低64比特。
链路本地地址是IPv6中的应用范围受限制的地址类型只能在连接到同一本地链路的节点之间使用。它使用了特定的本地链路前缀FE80::/10最高10位值为1111111010同时将接口标识添加在后面作为地址的低64比特。无法穿过路由器在ipv4中arp广播能够到达的范围就属于同同一个链路即链路层的地址不需要经过路由器转发处于同一个广播域。
为何需要link-local?在一个接口可以配置很多IPv6地址所以学习路由就有可能出现很多下一跳。所以出现Link Local地址唯一标识一个节点。在本地链路看到下一跳都是对端的Link Local地址。在网络重新编址过程中节点和路由器的Link Local地址不会发生变化可以很容易地做一个修改不用担心网络不可达。
当一个节点启动IPv6协议栈时启动时节点的每个接口会自动配置一个链路本地地址其固定的前缀+EUI-64规则形成的接口标识。这种机制使得两个连接到同一链路的IPv6节点不需要做任何配置就可以通信。所以链路本地地址广泛应用于邻居发现无状态地址配置等应用。
@@ -100,9 +117,9 @@ Interface ID接口标识。用来标识一个设备Host
![](image/IPv6链路本地地址.png)
* 唯一本地地址
* 唯一本地地址站点本地地址site local address
唯一本地地址是另一种应用范围受限的地址它仅能在一个站点内使用。由于本地站点地址的废除RFC3879唯一本地地址被用来代替本地站点地址。
唯一本地地址是另一种应用范围受限的地址它仅能在一个站点内使用。由于本地站点地址的废除RFC3879唯一本地地址被用来代替本地站点地址。可以穿越路由器,进行局域网内的路由。
唯一本地地址的作用类似于IPv4中的私网地址任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由转发而不会在全球网络中被路由转发。唯一本地地址格式如下如所示
@@ -138,9 +155,17 @@ IPv6的组播与IPv4相同用来标识一组接口一般这些接口属于
* IPv6组播地址格式如下图:
![IPv6组播地址格式](image/IPv6组播地址格式.png)
**常见组播地址前缀**
* FF01::1本地接口范围内所有节点
* FF01::2本地借口范围的所有路由器
* FF02::1本地链路范围内的所有节点
* FF02::2本地链路范围内的所有路由器
**被请求节点组播地址**:
被请求节点即一个可能会发出组播数据的单播节点。
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。
IPv6中没有广播地址也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中这个功能通过邻居请求NSNeighbor Solicitation报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时会发送NS报文该报文的目的IP就是需要解析的IPv6地址对应的被请求节点组播地址只有具有该组播地址的节点会检查处理。
@@ -164,6 +189,38 @@ IPv6中没有为任播规定单独的地址空间任播地址和单播地址
![子网路由器任播地址](image/IPv6子网路由器任播地址.png)
### 主机上的IPv6地址
接口上的地址
* 每个接口的线路本地地址
* 每个接口的全球地址
* 回环接口的回环地址::1
接口上监听的地址
* 本地接口范围内所有节点的组播地址FF01::1
* 本地链路范围内所有节点的组播地址FF02::1
* 被请求节点的组播地址
* 组播组地址(如果加入了组播组)
### 路由器上的IPv6地址
接口上的单点地址
* 每个接口上的链路本地地址
* 每个接口上的全球地址
* 子网-路由器任播地址
* 其他任播地址
* 回环接口的回环地址
接口上坚挺的地址
* 本地接口范围内的所有节点组播地址
* 本地接口范围内的所有路由器组播地址
* 本地链路防伪捏的所有节点组播地址
* 本地链路范围内的所有路由器组播地址
* 站点本地范围内所有的路由器组播地址
* 被请求节点的组播地址
* 组播组地址
## 3 IPv6报文格式
IPv6报文由IPv6基本报头、IPv6扩展报头以及上层协议数据单元三部分组成。

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB