首页 > 其他分享 >【很全】IPv6/ICMPv6/DHCPv6/SLACC基本原理(2024最新)

【很全】IPv6/ICMPv6/DHCPv6/SLACC基本原理(2024最新)

时间:2024-06-09 14:59:33浏览次数:28  
标签:报文 SLACC 2024 ICMPv6 地址 IPv4 IPv6 节点 路由器

目录

1 IPv6报文

1.1 IPv6基本包头

1.2 IPv6扩展包头 

2 IPv6地址

2.1 IPv6地址组成

2.2 IPv6地址分类

2.2.1 单播地址(GUA/ULA/LLA)

2.2.2 组播地址

2.2.3 任播地址

2.3 IPv6地址配置 

2.3.1 无状态自动配置(SLAAC)

2.3.2 有状态自动分配(Stateful DHCPv6)

2.3.3 无状态自动分配(Stateless DHCPv6)

3 IPv6机制

3.1 IPv6邻居发现协议(NDP)

3.1.1 重复地址检测(DAD)

3.1.2 地址解析

3.1.3 路由发现

3.1.4 邻居状态跟踪

3.1.5 重定向

3.1.6 路径MTU发现(PMTUD)

3.2 IPv6单播路由协议

3.2.1 RIPng

3.2.2 OSPFv3

3.2.3 ISISv6

3.2.4 BGP4+

3.3 IPv6组播协议

3.3.1 MLD

3.3.2 PIMv6

4 IPv6过渡

4.1 双栈技术(Dual Stack)

4.2 隧道技术(6over4/6in4)

4.2.1 手动隧道

4.2.2 GRE隧道

4.2.3 6to4隧道

4.2.4 ISATAP

4.2.5 6PE

4.3 协议转换技术(AFT)

4.3.1 NAT64

4.3.2 DS-Lite

5 参考资料



【摘要】IPv6是英文“Internet Protocol Version 6”(互联网协议第6版)的缩写,是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议。IPv6出现是为了解决IPv4地址枯竭问题。

【关键词】IPv6地址;有状态自动配置;无状态自动分配;NDP;IPv4/IPv6双栈;NAT64;DS-Lite

【编辑/整理】网洞


IPv6优势

  • 地址空间增加:地址长度128bit,可分配海量地址。

  • 地址分配规范:地址分配更规范,缩减了路由表规模。

  • 地址自动配置:支持无状态自动配置,简化终端接入。

  • 报文头部简化:简化报头,减轻网络设备压力。

1 IPv6报文

IPv6包头由基本包头(必须)和多个扩展包头(非必须)组成。IPv6 取消了 IPv4 报文头中的选项字段,并引入了多种扩展报文头。IPv6使用固定长度的基本报文头,通过将 IPv4 报文头中的某些字段裁减或移入到扩展报文头,减小了基本报文头的长度,从而简化了转发设备对 IPv6 报文的处理,提高了转发效率。

image-20221107002452466

1.1 IPv6基本包头                                                                                                                     

image-20240608173958472

  • Version:4比特,值为6表示IPv6报文

  • Traffic Class:8比特,类似于IPv4中的TOS域

  • Flow Label:20比特。IPv6中新增域。流标签可用来标记特定流的报文,以便在网络层区分不同的报文。转发路径上的路由器可以根据流标签来区分流并进行处理。由于流标签在IPv6报文头中携带,转发路由器可以不必根据报文内容来识别不同的流,目的节点也同样可以根据流标签识别流,同时由于流标签在报文头中,因此使用IPSec后仍然可以根据流标签进行QoS处理。

  • Payload Length:16比特。以字节为单位的IPv6载荷长度,也就是IPv6报文基本头以后部分的长度(包括所有扩展头部分)。

  • Next Header:8比特。用来标识当前头(基本头或扩展头)后下一个头的类型。此域内定义的类型与IPv4中的协议域值相同。Pv6定义的扩展头由基本头或扩展头中的扩展头域链接成一条链。这一机制下处理扩展头更高效,转发路由器只处理必须处理的选项头,提高了转发效率。

  • Hop Limit:8比特。和IPv4中的TTL字段类似。每个转发此报文的节点把此域值减1,如果此域值减到0则丢弃。

  • Source Address:128比特。报文的源地址。

  • Destination Address:128比特。报文的目的地址

1.2 IPv6扩展包头                                                                                                                     

在IPv4中,IPv4报头包含可选字段Options,内容涉及security、Timestamp、Record route等,这些Options可以将IPv4报头长度从20字节扩充到60字节。在转发过程中,处理携带这些Options的IPv4报文会占用路由器很大的资源,因此实际中也很少使用。

IPv6将这些Options从IPv6基本报头中剥离,放到了扩展报头中,扩展报头被置于IPv6报头和上层协议数据单元之间。一个IPv6报文可以包含0个、1个或多个扩展报头,仅当需要路由器或目的节点做某些特殊处理时,才由发送方添加一个或多个扩展头。

当使用多个扩展报头时,前面报头的Next Header字段指明下一个扩展报头的类型,这样就形成了链状的报头列表。

image-20240608174606395

  • Next Header:下一个报头,长度为8bit。与基本报头的Next Header的作用相同。指明下一个扩展报头(如果存在)或上层协议的类型。

  • Extension Header包括两个部分:

    • Extension Header Len:报头扩展长度,长度为8bit。表示扩展报头的长度(不包含Next Header字段)。

    • Extension Head Data:扩展报头数据,长度可变。扩展报头的内容,为一系列选项字段和填充字段的组合。

报头类型Next Header字段值描述
逐跳选项报头0该选项主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段,应用场景:用于巨型载荷用于路由器提示用于资源预留
目的选项报头60目的选项报头携带了一些只有目的节点才会处理的信息。目前,目的选项报文头主要应用于移动IPv6。
路由报头43路由报头和IPv4的Loose Source and Record Route选项类似,该报头能够被IPv6源节点用来强制数据包经过特定的路由器。
分段报头44同IPv4一样,IPv6报文发送也受到MTU的限制。当报文长度超过MTU时就需要将报文分段发送,而在IPv6中,分段发送使用的是分段报头。
认证报头51该报头由IPsec使用,提供认证、数据完整性以及重放保护。它还对IPv6基本报头中的一些字段进行保护。
封装安全净载报头50该报头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6数据报的保密,类似于认证报头。


2 IPv6地址

2.1 IPv6地址组成                                                                                                                     

IPv6地址也分为网络位和主机位,网络位也称前缀,主机位也称接口标识。

image-20221107010714516

网络前缀(Network Prefix):相当于IPv4的网络ID(n bit)。

接口标识(Interface Identify):相当于IPv4的主机ID(128-n bit)。

[IPv6地址简写] 为了书写方便,IPv6提供了压缩格式。IPv6可将每组中前面的0省略,若存在连续的0还可缩写为双冒号形式。

如:FC00:0000:130F:0000:0000:09C0:876A:130B可简写为FC00:0:130F:0:0:9C0:876A:130B,并可进一步简写为FC00:0:130F::9C0:876A:130B

2.2 IPv6地址分类                                                                                                                     

IPv6分为单播、组播和任播地址。

image-20221107005547502

2.2.1 单播地址(GUA/ULA/LLA)

包括全球单播地址(GUA),唯一本地地址(ULA),链路本地地址(LLA),环回地址等。

  • 全球单播地址(GUA,Global Unicast Address,2000开头):类似IPv4的公网地址,全球唯一,可以在因特网进行路由。

    2000:0000:0000:0000:0000:0000:0000:0000 ~ 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

    image-20221107012023668

    image-20221107013530782

    GUA网络部分与主机部分通常均为64bit。全局路由前缀由提供商指定给一个组织机构,至少45bit。子网ID为组织机构可用于划分子网的部分。接口标识用于标识一个设备。

  • 唯一本地地址(ULA,Unique Local Address,FD00开头):类似IPv4的私网地址。(设置私网地址一是可以提高安全性安全,二是可以在未申请地址时使用)

    FC00:0000:0000:0000:0000:0000:0000:0000 ~ FDFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

    image-20221107012539718

    image-20221107013351895

    ULA使用FC00::/7地址块,目前仅使用了FD00::/8地址段,FC00::/8预留为以后拓展使用。

  • 链路本地地址(LLA,Link-Local Address,FE80开头):只要接上一个网络设备就会自动产生。TTL为1,只用于与直接连接(单一链路)的设备通信。

    FE80:0000:0000:0000:0000:0000:0000:0000 ~ FEBF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

    image-20221107012934244

    image-20221107013604376

    LLA用于IPv6地址无状态自动配置、IPv6邻居发现等。

单播地址含义说明
2000:X:X:X:X:X:X:X全球单播地址类似IPv4的公网地址
FD00:X:X:X:X:X:X:X唯一本地地址 [站点本地地址]类似IPv4的私网地址
FE80:X:X:X:X:X:X:X链路本地地址用于与直连设备通信,只可经过1跳
0:0:0:0:0:0:0:0未指定地址节点刚启动无地址,发送报文时源地址填全0
0:0:0:0:0:0:0:1环回地址 [节点本地地址]类似IPv4的127.0.0.1,节点用于给自身发送报文
2.2.2 组播地址

组播(multicast)地址也称多播地址。

FF00:0000:0000:0000:0000:0000:0000:0000 ~ FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF

image-20221107013744999

IPv6组播地址以FF开头。Flags用来标识永久或临时组播组。Scope表示组播组的范围。Group ID为组播组ID。

当某个接口配了单播地址,会自动加入一个和该单播地址相关的组播组(与之对应的组播地址称为被请求节点组播地址)。当需获取该接口MAC地址时,不发送广播包,而是发送针对该单播地址的组播包。

组播地址含义
FF01:0:0:0:0:0:0:1所有节点的节点本地地址
FF01:0:0:0:0:0:0:2所有路由器的节点本地地址
FF02:0:0:0:0:0:0:1所有节点的链路本地地址
FF02:0:0:0:0:0:0:2所有路由器的链路本地地址
FF05:0:0:0:0:0:0:2所有路由器的站点本地地址
FF02:0:0:0:0:1:FFXX:XXXX被请求节点组播地址

节点本地地址:局限在一个Host、Switch、Router内部。

链路本地地址:局限在同一个Switch下。

站点本地地址:局限在同一个Router下。

img

2.2.3 任播地址

任播(anycast)地址也称泛播地址,用来标识一组接口的地址,这些接口可能属于不同节点。当服务器存在多个镜像时,使用任播地址可以获取离当前设备最近的镜像服务器。

2.3 IPv6地址配置                                                                                                                     

对单播地址(ULA、LLA),其接口标识生成方法有以下几种:

地址配置方式说明前缀要求
手工配置(Static)无需报文交互,可自定义。
无状态配置(SLAAC/Stateless DHCPv6)无需布置服务器,适用于对终端无强制管控需求的场景,如物联网终端(视频监控、路灯等)。固定64bit
有状态自动配置(Stateful DHCPv6)可控制地址的分配,适用于对终端有强管控需求的场景,如校园网、办公区。

img

image-20240608150729140

判断服务器是无状态还是有状态,可以看ICMPv6的RA报文中的M/O标志位。

image-20240228091531702

MO说明
1-所有的地址和DNS等都是通过DHCPv6 取得。(Stateful DHCPv6)
01使用 RA 里面的 Prefix,但是 DNS等使用 DHCPv6 取得。(Stateless DHCPv6)
00PC只得到 Prefix,无其他信息。(Stateless autoconfiguration)
  • M(managed address configureation):M=1使用DHCPv6分配GUA地址,M=0 不使用DHCPv6分配地址。当M=1时就不用管O了,此时无论是地址还是其他信息都是通过DHCPv6去分配。

  • O(other configuration):O=1使用DHCPv6获取其他信息(如DNS地址), O=0 从RA获取其他信息,其实RA里是没有DNS信息的,所以SLAAC的获取地址方式是没有DNS信息的。

wireshark报文中M/O标志位

2.3.1 无状态自动配置(SLAAC)

无状态地址自动配置(SLAAC,StateLess Address AutoConfiguration)基于IPv6的邻居发现协议实现,工作过程为:

  1. 路由器通过RA通告前缀信息,有两种情况会进行RA通告:

    • 路由器周期性向所有节点的多播地址(FF02::1)发送RA(Router Advertisement)消息,告知IPv6的前缀及其生命期、跳数限制等信息。

    • 路由器收到节点启动时向所有路由器的多播地址(FF02::2)发送的RS(Router Solicitation)消息,回复RA消息。

  2. 节点将路由器的RA消息中的地址前缀与本地接口ID组合,生成IPv6单播地址。同时会自动配置节点(如将RA消息中的跳数限制设为本地发送IPv6报文的最大跳数)。

  3. 节点对生成的IPv6单播地址进行重复地址检测,检测方法为:

    节点在本地链路上发送NS(Neighbor Solicitation,邻居请求)消息,目的地址为生成地址的被请求节点多播地址。如果没有收到NA(Neighbor Advertisement,邻居通告)消息,则认为地址不存在冲突,可以使用。

    被请求节点(Solicited-Node)多播地址主要用于获取同一链路上邻居节点的链路层地址及实现重复地址检测。

    每个单播或任播IPv6地址都有一个对应的被请求节点地址,格式为FF02:0:0:0:0:1:FFXX:XXXX。其中,FF02:0:0:0:0:1:FF为104位固定位,XX:XXXX为单播或任播地址的后24位。

【接口ID生成】

节点生成接口ID的方式,有系统生成(如Windows自动生成的LLA)和IEEE EUI-64方法(常用)等。IEEE EUI-64是通过MAC地址生成的接口ID,方法如下:

image-20221107011229920

将MAC地址(48bit)第7bit取反,并在中间插入FFFE生成64bit的接口标识。

由于该方法生成接口ID始终不变,容易受到攻击,还有一种通过MD5算法生成不断变化的接口ID,与RA通告获取的前缀组合形成一个临时地址。

2.3.2 有状态自动分配(Stateful DHCPv6)

有状态地址自动配置(Stateful DHCPv6,Dynamic Host Configuration Protocol for IPv6)

DHCPv6服务器为客户端分配IPv6地址及其他网络配置参数(如DNS、NIS、SNTP服务器地址等)

img

有状态DHCPv6一般有四步交互,但若网络中只有一个DHCPv6服务器,可简化去掉中间的Advertise和Request过程,变为两步交互。

  1. DHCPv6客户端发送Solicit报文,请求DHCPv6服务器为其分配IPv6地址和网络配置参数。

  2. 如果Solicit报文中没有携带Rapid Commit选项,或Solicit报文中携带Rapid Commit选项,但服务器不支持快速分配过程,则DHCPv6服务器回复Advertise报文,通知客户端可以为其分配的地址和网络配置参数。

  3. 如果DHCPv6客户端接收到多个服务器回复的Advertise报文,则根据Advertise报文中的服务器优先级等参数,选择优先级最高的一台服务器,并向所有的服务器发送Request组播报文,该报文中携带已选择的DHCPv6服务器的DUID。

  4. DHCPv6服务器回复Reply报文,确认将地址和网络配置参数分配给客户端使用。

在这里插入图片描述

2.3.3 无状态自动分配(Stateless DHCPv6)

无状态自动分配(Stateless DHCPv6,Dynamic Host Configuration Protocol for IPv6)

主机的IPv6地址仍然通过路由通告方式自动生成,DHCPv6服务器只分配除IPv6地址以外的配置参数(如DNS、NIS、SNTP服务器等)

img

  1. DHCPv6客户端以组播方式向DHCPv6服务器发送Information-Request报文,该报文中携带Option Request选项,用来指定DHCPv6客户端需要从DHCPv6服务器获取的配置参数。

  2. DHCPv6服务器收到Information-Request报文后,为DHCPv6客户端分配网络配置参数,并单播发送Reply报文,将网络配置参数返回给DHCPv6客户端。DHCPv6客户端根据收到的Reply报文中提供的参数完成DHCPv6客户端无状态配置。


3 IPv6机制

3.1 IPv6邻居发现协议(NDP)                                                                                                

邻居发现协议(NDP,Neighbor Discovery Protocol)为IPv6的关键协议,它组合了IPv4中的ARP、ICMP路由发现和ICMP重定向等协议,使用ICMPv6协议进行实现。

在这里插入图片描述

ICMPv6在IPv6中的协议号为58,该协议号在 IPv6 报头的“next header”字段中。ICMP 报文有两种:差错消息及信息消息(0至127表示差错报文类型,128至255表示消息报文类型)。

img

NDP使用的ICMPv6的相关报文:

NDP使用的ICMPv6的相关报文Type字段说明
路由器请求(RS,Router Solicitation)133当主机刚刚接入网络并被配置为自动获取地址,主机需要自动获得前缀、前缀长度、默认网关等信息时,就会发送RS消息。
路由器通告(RA,Router Advertisement)134RA消息由路由器周期性地发送,或者在收到主机发送的RS消息后立刻发送,主要为主机提供编址信息以及其他配置信息。
邻居请求(NS,Neighbor Solicition)135当节点不知道目标地址的链路层地址时,将发送NS消息。
邻居通告(NA,Neighbor Advertisement)136当节点接收到NS消息后,会快速响应NA消息,或者当节点需要快速传播新的信息(非请求)时,也会发送NA消息。
重定向消息137通过重定向消息,路由器可以通告更优的下一跳路由,也可以用于通知目标地址就是邻居。

地址配置(SLAAC前缀公告)使用到RS与RA,重复地址检测使用NS,地址解析(代替ARP)使用到NS与NA。

3.1.1 重复地址检测(DAD)

重复地址检测(DAD,Duplicate Address Detection),类似IPv4的免费ARP检测,用于检测当前地址是否与其他接口冲突。设备上线时向自己的IP地址发送请求,正常情况下应无回应,若有回应说明IP地址冲突。这个机制使用 NS 消息(ICMP 135),使用源地址为::、目的地址为获取到的 v6 地址对应的被请求节点组播地址的 NS 报文来完成这个任务。

image-20221107022251640

为PC新配置IPv6的地址2001::FFFF/64,之后会进行DAD重复地址检查。

  1. PC向链路上以组播的方式发送一个NS报文,该NS的源IPv6地址为“::”,目的IPv6地址为要进行DAD检测的2001::1对应被请求节点组播地址。并且数据携带要进行DAD的地址。

  2. 只有地址是2001:1的接口收到该信息才会进行NA回复,该报文目的IP是所有节点组播地址FF02::1,同时在报文内写入目标地址2001:1,以及自己接口的MAC地址。

  3. 当PC收到这个NA后,它就知道2001:1在链路上已经有人在用了,因此将该地址标记为Duplicate(重复的),该地址将不能用于通信。

3.1.2 地址解析

类似IPv4的ARP请求,通过ICMPv6报文形成IPv6地址与数据链路层地址(MAC地址)的映射关系。通过ICMPv6的NA、NS报文实现地址解析来代替IPv4的ARP报文,NS报文中的目的IP是被请求节点组播地址,目的MAC是组播MAC,组播方式比广播更高效,也减少了对其他节点的影响和对二层网络的性能压力。

image-20221107022519021

PC1想跟R1通信,就必须先解析出R1的链路层地址。

  1. PC1会发送一个NS报文,其中源地址为PC1的IPv6地址,目的地址为R1的被请求节点组播地址,携带PC1的链路层地址

  2. R1收到NS后,以单播方式向PC1回应NA消息,消息中包含R1的IP地址和MAC地址。R1还会将PC1的IPv6地址和MAC地址加入本地邻居缓存表中

  3. PC1收到R1的NA消息后,将PC2的IPv6地址和MAC地址加入本地邻居缓存表中

3.1.3 路由发现

路由器发现功能是IPv6地址自动配置功能的基础。

主机获取网络前缀有两个途径:①主机主动发送RS之后接收到的RA;②路由器定期发送RA,从而被动接收。

  • 主机请求触发

    在这里插入图片描述

    • 主机启动,向本地链路范围内所有的路由器发送RS报文。

    • 路由器响应RA报文。

  • 路由器周期性发送

    在这里插入图片描述

    • 路由器周期性的发送RA报文,RA发送间隔是一个有范围的随机值,缺省的最大时间间隔是600秒,最小时间间隔是200秒。 对于定期发送的RA报文,其地址有如下要求: Source Address:必须是发送接口的链路本地地址。 Destination Address :FF02::1

3.1.4 邻居状态跟踪

IPv6节点需要维护一张邻居表,每个邻居都有相应的状态,状态之间可以迁移。5种邻居状态分别是:未完成(Incomplete)、可达(Reachable)、陈旧(Stale)、延迟(Delay)、探查(Probe)。

在这里插入图片描述

在这里插入图片描述

邻居状态跟踪流程:

  1. A 发送 NS,并生成缓存条目,A 上条目的状态为 Incomplete

  2. 若 B 回复 NA,则 A 上关于 B 的邻居状态就由 Incomplete ->Reachable。但若 A 发出 NS 消息后一定时间内仍没有收到任何的回复,则由 Incomplete->Empty,即删除条目

  3. 如果在 reachable 状态上经过 ReachableTime(默认 30S),A 路由器上关于 B 的条目状态 Reachable->stale或如果在 reachable 状态上,收到 B 的非请求 NA,且链路层地址不同,则马上->stale

  4. 在 Stale 状态若 A 要向 B 发送数据,可直接发送,并从 A 上关于 B 的条目由 Stale->Delay,同时会等待应用层的提示信息,提示邻居是否可达

  5. 如果在 Delay_First_Probe_Time(默认 5S)内,有 NA 应答或者应用层的提示信息(例如我发了 ICMP 包给对端,对端回复我 ICMP 了,那就是上层可达),则 Delay->Reachable,如果无应用层提示信息,Delay->Probe

  6. 在Probe状态,每隔RetransTimer(默认1S)发送单播NS,发送MAX_Unicast_Solicit个后再等RetransTimer,有应答则 Reachable,无则进入 Empty,即删除条目

3.1.5 重定向

当网关路由器发现报文从其它网关路由器转发更好,它就会发送重定向报文告知报文的发送者,让报文发送者选择另一个网关路由器。重定向报文也承载在ICMPv6报文中,其Type字段值为137,报文中会携带更好的路径下一跳地址和需要重定向转发的报文的目的地址等信息。

在这里插入图片描述

  1. PC1希望发送报文到服务器,于是根据配置的默认网关地址向网关R2发送报文。

  2. 网关R2收到报文后,检查报文信息,发现报文应该转发到与PC1在同一网段的另一个网关设备R1,此转发路径是更优的路径,于是R2会向PC1发送一个重定向消息,通知PC1去往服务器的报文应直接发给R1。

  3. PC1收到重定向消息后,会向R1发送报文,R1再将该报文转发至服务器。

3.1.6 路径MTU发现(PMTUD)

IPv4中也有路径MTU发现(PMTUD,Path MTU Discovery),但是是可选项。在IPv4没有PMTUD时,客户端发送数据包只会参照本机网卡的MTU值进行发送,当整个数据链路中的某台路由器网卡的MTU小于客户端的MTU时,要想继续发送需要在网络层对数据包进行分片处理,此时会延迟数据包到达的时间,同时增加当前路由器的压力,导致性能下降。在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对IPv6报文进行分片,报文的分片将在源节点进行。

PMTUD 的主要目的是发现路径上的 MTU,当数据包被从源转发到目的地的过程中避免分段。依赖 PMTUD源节点可以使用所发现到的最小 PMTU 与目的地节点进行通信,这样可以避免数据包在从源传输到目的的过程之中,被中途的路由器分片,而导致性能的下降。因此 IPv6 的分片不是在中间路由器上进行的,仅当路径 MTU 比欲传送的数据包小的时候,由源节点自己对数据包进行分片。

PMTU协议是通过ICMPv6的Packet Too Big报文来完成的。首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将PMTU的假设值更改为新收到的MTU值继续发送报文。如此反复,直到报文到达目的地之后,源节点就能知道到达目的地的PMTU了

image-20240608202954887

  1. 首先 Source 用 1500 字节作为 MTU 向目标节点发送一个 IPv6 数据包

  2. 中间路由器 A 意识到数据包过大,MTU 为 1400,于是回复一个 ICMPv6 type=2 消息向 Source 应答,在该ICMPv6 消息中指定较小的 MTU=1400

  3. Source 开始使用 MTU=1400 发送 IPv6 数据包,该数据包到了 B

  4. 然而 B 意识到本地接口 MTU 为 1300,于是回复一个 ICMPv6 type=2 消息向 Source 应答

  5. Source 开始使用 MTU=1300 发送 IPv6 数据包,该数据包顺利到达了目的地。

  6. Source 和 Destination 之间的会话被建立起来。

3.2 IPv6单播路由协议                                                                                                               

IPv4 网络中常见的路由协议包括 RIP、OSPF、IS-IS 和 BGP。这些路由协议需要进行一定的演变和扩展才能应用于 IPv6 网络。扩展后的路由协议称为 RIPng、OSPFv3、IPv6 IS-IS 和 IPv6 BGP。IPv4 网络和 IPv6 网络的路由协议在应用场景、路由思路、优劣势等方面并无本质区别,只是为了适应 IPv6 地址及 IPv6 网络特点,调整了部分路由工作机制。

3.2.1 RIPng

RIPng(RIP next generation,下一代RIP协议)是基于距离矢量(Distance-Vector)算法的协议。RIPng 在工作机制上与 RIP-2 基本相同,但为了支持 IPv6 地址格式,RIPng 对 RIP-2 做了一些改动。

  • RIPng使用UDP的521端口(RIP使用520端口)发送和接收路由信息。

  • RIPng的目的地址使用128比特的前缀长度(掩码长度)。

  • RIPng使用128比特的IPv6地址作为下一跳地址。

  • RIPng使用链路本地地址FE80::/10作为源地址发送RIPng路由信息更新报文。

  • RIPng使用组播方式周期性地发送路由信息,并使用FF02::9作为链路本地范围内的路由器组播地址。

  • RIPng报文由头部(Header)和多个路由表项RTEs(Route Table Entry)组成。在同一个RIPng报文中,RTE的最大数目根据接口的MTU值来确定。

3.2.2 OSPFv3

OSPFv3是OSPF版本3的简称,OSPFv3是运行于IPv6的OSPF路由协议。OSPFv3对 OSPFv2做出了一些必要的改进,使得 OSPFv3 可以独立于网络层协议。

  • OSPFv3基于链路,而不是网段。OSPFv3运行在IPv6协议上,IPv6是基于链路而不是网段的。

  • OSPFv3上移除了IP地址的意义。OSPFv3可以不依赖IPv6全局地址的配置来计算出OSPFv3的拓扑结构。

  • OSPFv3的报文及LSA格式发生改变。OSPFv3报文不包含IP地址。IP地址部分由新增的两类LSA(Link LSA和Intra Area Prefix LSA)宣告。

  • OSPFv3的LSA报文里添加LSA的洪泛范围。OSPFv3在LSA报文头的LSA Type里,添加LSA的洪泛范围,这使得OSPFv3的路由器更加灵活,可以处理不能识别类型的LSA。

  • OSPFv3支持一个链路上多个进程。一个OSPFv2物理接口,只能和一个多实例绑定。但一个OSPFv3物理接口,可以和多个多实例绑定,并用不同的Instance ID区分。

  • OSPFv3利用IPv6链路本地地址。OSPFv3是运行在IPv6上的路由协议,同样使用链路本地地址来维持邻居,同步LSA数据库。

  • OSPFv3移除所有认证字段。OSPFv3的认证直接使用IPv6的认证及安全处理,不再需要其自身来完成认证。

  • OSPFv3只通过Router ID来标识邻居。

3.2.3 ISISv6

IPv6 IS-IS(ISISv6)为了支持在IPv6环境中运行,指导IPv6报文的转发,新添加了支持IPv6路由信息的两个TLVs(Type-Length-Values)和一个新的NLP ID(Network Layer ProtocolIdentifier)。

IS-IS 使用 Hello 报文来发现同一条链路上的邻居路由器并建立邻接关系,当邻接关系建立完毕后,将继续周期性地发送 Hello 报文来维持邻接关系。为了支持 IPv6 路由,建立 IPv6 邻接关系,IPv6 IS-IS 在 Hello 报文中添加 IPv6 接口地址 TLV,Interface Address 字段填入使能了 IPv6 IS-IS 功能接口的 IPv6 链路本地地址。

新增的两个TLV分别是:

  • 236号TLV(IPv6 Reachability):通过定义路由信息前缀、度量值等信息来说明网络的可达性。

  • 232号TLV(IPv6 Interface Address):它相当于IPv4中的“IP Interface Address”TLV,只不过把原来的32比特的IPv4地址改为128比特的IPv6地址。

NLPID 是标识 IS-IS 支持何种网络层协议的一个 8 比特字段,IPv6 IS-IS 对应的 NLPID 值为142(0x8E)。如果设备支持 IPv6 IS-IS 功能,那么它必须在 Hello 报文中携带该值向邻居通告其支持 IPv6。

3.2.4 BGP4+

传统的BGP-4只能管理IPv4的路由信息,为了提供对多种网络层协议的支持,IETF对BGP-4进行了扩展,形成BGP4+。

为了实现对IPv6协议的支持,BGP4+需要将IPv6网络层协议的信息反映到NLRI(Network Layer Reachable Information)及Next_Hop属性中。BGP4+中引入的两个NLRI属性:

  • MP_REACH_NLRI(Multiprotocol Reachable NLRI):多协议可达 NLRI。用于发布可达路由及下一跳信息。

  • MP_UNREACH_NLRI(Multiprotocol Unreachable NLRI):多协议不可达NLRI。用于撤销不可达路由。

BGP4+中的Next_Hop属性用IPv6地址来表示,可以是IPv6全球单播地址或者下一跳的链路本地地址。 BGP4+利用BGP的多协议扩展属性来达到在IPv6网络中应用的目的,BGP协议原有的消息机制和路由机制并没有改变。

【IPv4 和 IPv6 路由协议异同点总结】

image-20240608213431224

3.3 IPv6组播协议                                                                                                                     

IPv6 支持的组播协议包括 MLD(Multicast Listener Discovery Protocol,组播侦听者发现协议)、MLD Snooping (Multicast Listener Discovery Snooping,组播侦听者发现协议窥探)、IPv6 PIM(IPv6Protocol Independent Multicast,IPv6 协议无关组播)和 IPv6 MBGP(IPv6 Multicast BGP,IPv6组播 BGP)等。

3.3.1 MLD

MLD 源自 IGMP(Internet Group Management Protocol,互联网组管理协议),MLD 有两个版本:MLDv1 源自 IGMPv2,MLDv2 源自 IGMPv3。与 IGMP 采用 IP 协议号为 2 的报文类型不同,MLD 采用 ICMPv6(IP 协议号为 58)的报文类型,包括 MLD 查询报文(类型值 130)、MLDv1 报告报文(类型值 131)、MLDv1 离开报文(类型值132)和 MLDv2 报告报文(类型值 143)。MLD 协议与 IGMP 协议除报文格式不同外,协议行为完全相同。

3.3.2 PIMv6

IPv6 PIM 与 PIM 除报文中 IP 地址结构不同外,其它协议行为基本相同。IPv6 PIM 发送链路本地范围的协议报文(包括 PIM Hello、Join-Prune、Assert、Bootstrap、Graft、Graft-Ack 和 State-refresh 报文)时,报文的源 IPv6 地址使用发送接口的链路本地地址;IPv6 PIM发送全球范围的协议报文(包括 Register、Register-Stop 和 C-RP Advertisement 报文)时,报文的源 IPv6 地址使用发送接口的全球单播地址。


4 IPv6过渡

IPv4过渡到IPv6主要采用的技术包括双栈技术、隧道技术和协议转换技术,各种过渡技术都可以分为这三种技术或其组合。

image-20221207111609964

4.1 双栈技术(Dual Stack)                                                                                                   

双栈技术(Dual Stack)是最简单直接的过渡技术,是所有过渡技术的基础。节点同时支持IPv4和IPv6两个协议,并通过IPv6优先选择提高IPv6流量占比。

但双协议栈要求节点同时拥有全球唯一的IPv4和IPv6地址,没有解决IPv4资源匮乏的问题。

image-20240609114922629

  1. 主机向DNS服务器发送DNS请求报文,请求域名www.huawei.com对-应的IP地址。DNS服务器将回复该域名对应的IP地址。如图所示,该IP地址可能是10.1.1.1或3ffe:yyyy::1。主机系统发送A类查询,则向DNS服务器请求对应的IPv4地址;系统发送AAAA查询,则向DNS服务器请求对应的IPv6地址。

  2. 图中R1支持双协议栈功能。如果主机访问IPv4地址为10.1.1.1的网络服务器,则可以通过R1的IPv4协议栈访问目标节点。如果主机访问IPv6地址为3ffe:yyyy::1的网络服务器,则可以通过R1的IPv6协议栈访问目标节点。

img

4.2 隧道技术(6over4/6in4)                                                                                                  

隧道机制就是必要时将IPv6数据包作为数据封装在IPv4数据包里,使IPv6数据包能在已有的IPv4基础设施(主要是指IPv4路由器)上传输的机制。隧道技术(Tunneling)是一种封装技术,利用一种网络协议来传输另一种网络协议。报文被封装后,在网络传输的途径,称为隧道。隧道的两端需要对报文进行封装和解封装。

image-20221107101046628

IPv6过渡使用的隧道技术即IPv6 over IPv4,也称IPv6 in IPv4,原理为在IPv6报文上封装IPv4报文头。

image-20221207091328835

4.2.1 手动隧道

手动隧道即边界设备不能自动获得隧道终点的IPv4地址,需要手工配置隧道终点的IPv4地址,报文才能正确发送至隧道终点。

如果一个边界设备要与多个设备建立手动隧道,就需要在设备上配置多个隧道,配置比较麻烦。所以手动隧道通常用于两个边界路由器之间,为两个IPv6网络提供连接。

image-20221207101235712

  • 当隧道边界设备的IPv6侧收到一个IPv6报文后, 根据IPv6报文的目的地址查找IPv6路由转发表,如果该报文是从此虚拟隧道接口转发出去,则根据隧道接口配置的隧道源端和目的端的IPv4地址进行封装。

  • 封装后的报文变成一个IPv4报文,交给IPv4协议栈处理。报文通过IPv4网络转发到隧道的终点。

  • 隧道终点收到一个隧道协议报文后,进行隧道解封装。并将解封装后的报文交给IPv6协议栈处理。

4.2.2 GRE隧道

GRE隧道使用标准的GRE隧道技术提供了点到点连接服务,需要手工指定隧道的端点地址。GRE隧道本身并不限制被封装的协议和传输协议,一个GRE隧道中被封装的协议可以是协议中允许的任意协议(可以是IPv4、IPv6、OSI、MPLS等)。

image-20221207101255606

GRE隧道的在隧道的边界路由器的传输机制和IPv6 over IPv4手动隧道相同。

4.2.3 6to4隧道

6to4隧道属于一种自动隧道,隧道也是使用内嵌在IPv6地址中的IPv4地址建立的。与IPv4兼容自动隧道不同,6to4自动隧道支持Router到Router、Host到Router、Router到Host、 Host到Host。

image-20221207101325956

6to4地址可以表示为2002::/16,而一个6to4网络可以表示为2002:IPv4地址::/48。6to4地址的网络前缀长度为64bit,其中前48bit(2002: a.b.c.d)被分配给路由器上的IPv4地址决定了,用户不能改变,而后16位(SLA)是由用户自己定义的。

image-20240609120646360

  • 普通IPv6网络需要与6to4网络通过IPv4网络互通

    通过6to4中继路由器方式实现。所谓6to4中继,就是通过6to4隧道转发的IPv6报文的目的地址不是6to4地址,但转发的下一跳是6to4地址,该下一跳为路由器我们称之为6to4中继。隧道的IPv4目的地址依然从下一跳的6to4地址中获得。

  • 6to4网络2中的主机要与IPv6网络互通

    在其边界路由器上配置路由指向的下一跳为6to4中继路由器的6to4地址,中继路由器的6to4地址是与中继路由器的6to4隧道的源地址相匹配的。

    6to4网络2中去往普通IPv6网络的报文都会按照路由表指示的下一跳发送到6to4中继路由器。

    6to4中继路由器再将此报文转发到纯IPv6网络中去。

    当报文返回时,6to4中继路由器根据返回报文的目的地址(为6to4地址)进行IPv4报文头封装,数据就能够顺利到达6to4网络中了。

4.2.4 ISATAP

ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是另外一种自动隧道技术。ISATAP隧道同样使用了内嵌IPv4地址的特殊IPv6地址形式,只是和6to4不同的是,6to4是使用IPv4地址做为网络前缀,而ISATAP用IPv4地址做为接口标识。

image-20240609121219352

在IPv4网络内部有两个双栈主机PC2和PC3,它们分别有一个私网IPv4地址。要使其具有ISATAP功能,需要进行如下操作:

  • 首先配置ISATAP隧道接口,这时会根据IPv4地址生成ISATAP类型的接口ID。

  • 根据接口ID生成一个ISATAP链路本地IPv6地址,生成链路本地地址以后,主机就有了在本地链路上进行IPv6通信的能力。

  • 进行自动配置,主机获得IPv6全球单播地址、ULA地址等。

  • 当主机与其它IPv6主机进行通讯时,从隧道接口转发,将从报文的下一跳IPv6地址中取出IPv4地址作为IPv4封装的目的地址。如果目的主机在本站点内,则下一跳就是目的主机本身,如果目的主机不在本站点内,则下一跳为ISATAP路由器的地址。

4.2.5 6PE

6PE(IPv6 Provider Edge,IPv6 供应商边缘)是一种过渡技术,它采用 MPLS(Multiprotocol Label Switching,多协议标签交换)技术实现通过 IPv4 骨干网连接隔离的 IPv6 用户网络。

为了隐藏 IPv6 报文、使得 IPv4 骨干网中的设备能够转发 IPv6 用户网络的报文,在 IPv4 骨干网络中需要建立公网隧道。公网隧道可以是 GRE 隧道、MPLS LSP、MPLS TE 隧道等。

image-20221207103217336

  • 6PE 设备转发 IPv6 报文时,先为 IPv6 报文封装 IPv6 路由信息对应的标签(内层标签),再为其封装公网隧道对应的标签(外层标签)。骨干网中的设备根据外层标签转发报文,意识不到该报文为 IPv6 报文。

  • 对端 6PE 设备接收到报文后,删除内层和外层标签,将原始的 IPv6报文转发到本地连接的用户网络。

4.3 协议转换技术(AFT)                                                                                                        

网络地址转换(Network Address Translator,NAT)技术是将IPv4地址和IPv6地址分别看作内部地址和全局地址,或者相反。例如,内部的IPv4主机要和外部的IPv6主机通信时,在NAT服务器中将IPv4地址(相当于内部地址)变换成IPv6地址(相当于全局地址)。当内部的IPv6主机和外部的IPv4主机进行通信时,则IPv6主机映射成内部地址,IPv4主机映射成全局地址。AFT(Address Family Translation,地址族转换)提供了 IPv4 和 IPv6 地址之间的相互转换功能,使 IPv4 网络和 IPv6 网络可以直接通信。

4.3.1 NAT64

NAT64是一种有状态的网络地址与协议转换技术。NAT64继承了传统NAT技术的原理,不同的是NAT64会对整个报文格式进行转换,是IPv4到IPv6(或者相反)的转换。

img

IPv4地址会嵌入IPv6前缀中。NAT64前缀包含两种形式:知名前缀和自定义前缀。前缀的取值决定了IPv6地址中嵌入IPv4地址的位置。

  • 通过NAT64前缀可以提取出对应的IPv4地址,将IPv6转换为IPv4地址。

  • 通过NAT64前缀也可以根据IPv4地址生成对应的IPv6地址,将IPv4地址转换为IPv6地址。

【示例1】知名前缀:64:ff9b::/96,IPv4地址:192.168.0.1,内嵌IPv4的IPv6地址:64:ff9b::C0A8:1

【示例2】NAT自定义前缀:3000::/64,IPv4地址:192.168.0.1,内嵌IPv4地址的IPv6地址: 3000::00C0:A800:100:0

image-20240609125747463

img

在上图中,DNS64Server与NAT64Router是完全独立的部分。其中64:FF9B::/96为DNS64的知名前缀,DNS64一般默认使用此前缀进行IPv4地址到IPv6地址的合成,同时该前缀也作为NAT64的转换前缀,实现匹配该前缀的流量才做NAT64转换。

一般在DNS64与NAT64中该前缀被表示为pref64::/n,该前缀可根据实际网络部署进行配置。在NAT-PT中,转换的前缀只支持固定96位长度,而NAT64中则可使用:32,40,48,56,64或96等范围,每种长度的前缀转换规则也不完全相同。 当IPv6OnlyUser发起连接访问普通IPv6网站,流量将会匹配IPv6默认路由而直接转发至IPv6Router处理。而访问的是IPv4单协议栈的服务器时,将经DNS64Server进行前缀合成,Pref64::/n网段的流量将被路由转发至NAT64Router上,从而实现IPv6与IPv4地址和协议的转换,访问IPv4网络中的资源。

4.3.2 DS-Lite

DS-Lite为轻型双栈,采用IPv4-in-IPv6和NAT两个基本技术(结合隧道和NAT)。

DS-Lite源端设备叫B4(Base Bridging Broad Band Element),为客户端接入设备。DS-Lite目的端设备叫AFTR(Address Family Transition Router element),为协议族转换路由器。

20190402101451990

image-20230220144733444

image-20240609124423785

  • 发送:IPV4用户访问IPV4 internet服务器的时候,B4在IPV4报文上封装了一个IPV6的报文头,经过IPV6网络进行转发。

    AFTR收到后,会对报文进行解封装,将IPV6的报文头剥离,并将IPV4报文中的私网地址和端口号转换成公网地址及对应的端口号和IPV4服务器进行通信。

  • 返回:IPV4服务器返回的回应报文到达AFTR后,AFTR通过已有的NAT映射表进行公网地址和端口号到私网地址及端口号的转换,并进行IPV6报文头的封装。

    通过IPV6网络转发到B4,B4解封装后发送到IPV4用户,从而完成IPV4用户使用私网地址访问IPV4 NAT服务器的全过程。


5 参考资料

H3C S7500E IPv6技术白皮书(V1.00)

H3C S7500E IPv6技术白皮书(V1.00)-新华三集团-H3C

IPv6 基本原理详解介绍

IPv6 基本原理详解介绍-CSDN博客

IPv6基础:IPv6地址及其范围区域

IPv6基础:IPv6地址及其范围区域_ipv6内网地址段-CSDN博客

【全网最详细的IPV6培训视频]华为—IPV6

https://www.bilibili.com/video/BV1ct4y1E7

IPv6地址结构、地址分类以及表示方法

IPv6地址结构、地址分类以及表示方法-CSDN博客

ICMPv6与NDP

ICMPv6与NDP_icmpv6 nd-CSDN博客

IPv6-ICMPv6协议

IPv6-ICMPv6协议_ipv6网络唤醒-CSDN博客

关于IPv6自动配置地址 RA里的A、M、O标记位(纯理论无实验)

关于IPv6自动配置地址 RA里的A、M、O标记位(纯理论无实验)_ra配置-CSDN博客

IPv6改造方案:双栈技术-中科三方

IPv6改造方案:双栈技术-中科三方_双网双栈-CSDN博客

城域网IPv6过渡技术—DS-lite的业务流程

https://www.51cto.com/article/420300.html

【网络百科】IPv6基础系列 - 为什么需要DS-Lite?

【网络百科】IPv6基础系列 - 为什么需要DS-Lite? - 华为企业业务

IPv6过渡技术——NAT64、DNS64讲解

IPv6过渡技术——NAT64、DNS64讲解-CSDN博客

ipv6转ipv4 NAT64与DNS64基本原理概述

ipv6转ipv4 NAT64与DNS64基本原理概述-CSDN博客

标签:报文,SLACC,2024,ICMPv6,地址,IPv4,IPv6,节点,路由器
From: https://blog.csdn.net/DontDash/article/details/139561721

相关文章

  • 2024计算机组成原理复习——第一章
    计算机组成原理复习——第一章一、计算机系统概括本笔记不用于商业用途,内容参考《2025年计算机组成原理——考研复习指导》以及其对应的b站免费视频课(图文信息主要来自于此)(一)计算机系统结构层次1.计算机系统的基本组成硬件:有形的物理设备,计算机系统中实际物理装置的总称......
  • HNUCM-2024年春季学期《算法分析与设计》练习14
     问题A:1的个数题目描述输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。输入 输入一个整数(int类型)。输出这个数转换成2进制后,输出1的个数。样例输入 Copy5样例输出 Copy2#include<stdio.h>intmain(){intn,s=0;scanf("%d",&......
  • 2024 IDEA最新永久使用码教程(2099版)
    本篇文章我就来分享一下2024年当前最新版IntelliJIDEA最新注册码,教程如下,可免费永久,亲测有效,适合Windows和Mac。本教程适用于JB全系列产品,包括Pycharm、IDEA、WebStorm、Phpstorm、Datagrip、RubyMine、CLion、AppCode等。(希望大家且用且珍惜)9H1390TRAK-eyJsaWNlbnN......
  • [考试记录] 2024.6.9
    T3WRONG-Wrongdirections题面翻译FarmerJohn刚刚购买了一台新型可编程拖拉机。为了使拖拉机移动,他输入一串长度为N的绳子(1<=N<=100,000)仅由字符F,L和R组成。每个'F'指示拖拉机向前移动一个单元,并且字符'L'和'R'分别导致左右转90度。拖拉机从原点开始(0,0)朝北。通过输......
  • 【教学类-40-01】20240607类似MJ的免费AI绘画工具——文心一格与通义万相
    背景需求:风变的AI对话大师一年到期了,也没有看到续费的按钮。不能使用它写代码了。MJ早就用完了,最后480次,我担心信息课题会用到它生图,所以不敢用。最近探索其他类似MJ的免费出图工具一、文心一格(免费,开账户给100分,每天做任务给16分,可以生成3张)用一次8分每天做任......
  • PHP-CGI Windows平台远程代码执行漏洞复现(CVE-2024-4577)
    0x01产品简介PHP-CGI 是一种用于在 Web 服务器上运行 PHP 脚本的接口,通过 CGI(公共网关接口)将 PHP 解释器与 Web 服务器连接。0x02漏洞概述2024年6月,PHP官方发布新版本,修复了 PHP-CGI 中一个远程代码执行漏洞。鉴于该漏洞无前置条件,易于利用,且默认情况下可获取......
  • 2024-6-9 石群电路-27
    2024-6-9,星期日,12:49,天气:晴,心情:晴。Hello,大家,我回来啦,昨天断更了一天,是为什么捏,是因为,我通过毕业答辩啦!!!!!!果然,虽然是小小硕士,但是听到那句,“经答辩委员会决议,xx同学通过毕业论文答辩,建议授予工学硕士学位”,也是很爽的,至于博士大佬听到这句话什么感想,小子就先不想啦,哈哈哈哈哈,加油......
  • SuntoryProgrammingContest2024(AtCoder Beginner Contest 357)
    A-SanitizeHands题意:给定一个序列和m,问m按顺序减去这个序列,m>=0情况下最多能减多少个数思路:前缀和+prev(upper_bound())总结:disinfectan(消毒ji),disinfect(消毒,杀毒),aliens(外星人),voidsolve(){ intn,m; cin>>n>>m; vector<int>a(n); for(inti=......
  • 2024050801-重学 Java 设计模式《实战策略模式》
    重学Java设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」一、前言文无第一,武无第二不同方向但同样努力的人,都有自身的价值和亮点,也都是可以互相学习的。不要太过于用自己手里的矛去攻击别人的盾......
  • 【资源分享】MATLAB 2024a免费下载安装
    :::block-1“时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!——时问桫椤:::获取方法“时问桫......