IPv6基础

2023-11-16

IPv6
1、优势
“无限”地址空间:地址长度为128 bit,海量的地址空间,满足物联网等新兴业务、有利于业务演进及扩展。
层次化的地址结构:相较于IPv4地址,IPv6地址的分配更加规范,利于路由聚合(缩减IPv6路由表规模)、路由快速查询。
即插即用:IPv6支持无状态地址自动配置(SLAAC),终端接入更简单。
简化的报文头部:简化报文头,提高效率;通过扩展包头支持新应用,利于路由器等网络设备的转发处理,降低投资成本。
安全特性:IPsec、真实源地址认证等保证端到端安全;避免NAT破坏端到端通信的完整性。
移动性:对移动网络实时通信有较大改进,整个移动网络性能有比较大的提升。
增强的QoS特性:额外定义了流标签字段,可为应用程序或者终端所用,针对特殊的服务和数据流,分配特定的资源。
**2、基本包头 **
IPv6包头由一个IPv6基本包头(必须存在)和多个扩展包头(可能不存在)组成。
IPv4包头
(20Byte~60Byte)
Version:4 bit,4:表示为IPv4;6:表示为IPv6。
Header Length:4 bit,首部长度,如果不带Option字段,则为20,最长为60。
Type of Service:8 bit,服务类型。只有在有QoS差分服务要求时,这个字段才起作用。
Total Length:16 bit,总长度,整个IP数据包的长度。
Identification:16 bit,标识,主机每发一个报文,加1,分片重组时会用到该字段。
Flags:3 bit,标志位。
0:保留
DF:分片位,0表示能分片,1表示不能分片。
MF:表示是否该报文的最后一片,0表示最后一片,1表示后面还有。
Fragment Offset:12 bit,片偏移,分片重组时会用到该字段。
Time to Live:8 bit,生存时间,数据包可通过的路由器数的最大值(0-255),防环。
Protocol:8 bit,协议:下一层协议。指出此数据包携带的数据使用何种协议,以便目的主机的IP层将数据部分上交给哪个进程处理。
Header Checksum:16 bit,首部检验和。只检验数据包的首部,不检验数据部分。
Source IP Address:32 bit,源IP地址。
Destination IP Address:32 bit,目的IP地址。
Options:可变,选项字段。
Padding:可变,填充字段,全填0。
IPv6基本包头
(40Byte)
Version:版本号,长度为4 bit。对于IPv6,该值为6。
Traffic Class:流类别,长度为8 bit。等同于IPv4中的ToS字段,表示IPv6数据包的类或优先级,主要应用于QoS。
Flow Label:流标签,长度为20 bit。IPv6中的新增字段,用于区分实时流量,不同的流标签+源地址可以唯一确定一条数据流,中间网络设备可以根据这些信息更加高效率的区分数据流。
Payload Length:有效载荷长度,长度为16 bit。有效载荷是指紧跟IPv6包头的数据包的其他部分(即扩展包头和上层协议数据单元)。
Next Header:下一个包头,长度为8 bit。该字段定义紧跟在IPv6包头后面的第一个扩展包头(如果存在)的类型,或者上层协议数据单元中的协议类型(类似于IPv4的Protocol字段)。
Hop Limit:跳数限制,长度为8 bit。该字段类似于IPv4中的Time to Live字段,它定义了IP数据包所能经过的最大跳数。每经过一个路由器,该数值减去1,当该字段的值为0时,数据包将被丢弃。
Source Address:源地址,长度为128 bit。表示发送方的地址。
Destination Address:目的地址,长度为128 bit。表示接收方的地址。
**IPv6扩展包头 **
扩展包头总是8 Byte长度的整数倍。
Extension Header Length:扩展包头长度,长度为8 bit。表示扩展包头的长度(不包含Next Header字段)。
Extension Header Data:扩展包头数据,长度可变。扩展包头的内容,为一系列选项字段和填充字段的组合。
当超过一种扩展包头被用在同一个IPv6报文里时,包头必须按照下列顺序出现:
逐跳选项包头:主要用于为在传送路径上的每跳转发指定发送参数,传送路径上的每台中间节点都要读取并处理该字段。
目的选项包头:携带了一些只有目的节点才会处理的信息。
路由包头:IPv6源节点用来强制数据包经过特定的设备。
分段包头:当报文长度超过MTU(Maximum Transmission Unit,最大传输单元)时就需要将报文分段发送,而在IPv6中,分段发送使用的是分段包头。
认证包头(AH–51):该包头由IPsec使用,提供认证、数据完整性以及重放保护。
封装安全净载包头(ESP):该包头由IPsec使用,提供认证、数据完整性以及重放保护和IPv6数据包的保密。
IPv6报文处理机制
始发路由器:按需构造IPv6报文
中间路由器:处理基本包头和逐跳选项包头
终点路由器:处理所有包头
总结
基本包头长度固定-------提高转发效率
扩展头部实现其他需求-----术业有专攻
3、IPv6地址
IPv6地址的长度为128 bit。一般用冒号分割为8段,每一段16 bit,每一段内用十六进制表示。
缩写规则:
前导0可省略,如果16bit都为0则需保留一个0,结尾的0不能省略
连续的0可省略成" :: ",但是只能出现一次

分类
组播地址
单播地址
①全球单播地址:2000::/3-------001开头的IPv6地址一定是公网IPv6单播地址-------每个接口下最多可配置10个全球单播地址
②唯一本地地址:FC00::/7------FD00::/8目前在用,FC00::/8保留
③链路本地地址:FE80::/10-------FE80::/16~FEBF::/16都是链路本地地址
④特殊地址
未指定地址:0:0:0:0:0:0:0:0/128 或者::/128。该地址作为某些报文的源地址,比如作为重复地址检测时发送的邻居请求报文(NS)的源地址,或者DHCPv6初始化过程中客户端所发送的请求报文的源地址
环回地址:0:0:0:0:0:0:0:1/128 或者::1/128,与IPv4中的127.0.0.1作用相同,用于本地回环,发往::/1的数据包实际上就是发给本地,可用于本地协议栈环回测试
⑤其他单播地址:…
任播地址
注:IPv6没有定义广播地址

单播地址结构
网络前缀+接口标识组成
网络前缀(Network Prefix):n bit,相当于IPv4地址中的网络ID
接口标识(Interface Identify):(128-n)bit ,相当于IPv4地址中的主机ID
常见的IPv6单播地址如全球单播地址、链路本地地址等,要求网络前缀和接口标识必须为64 bit
注:全球单播地址中,高位前3 bit为000的地址可以采用非64 bit的网络前缀
接口标识生成方法:手工配置、系统自动生成、通过IEEE EUI-64规范生成
接口标识的用途
黏贴在链路本地地址前缀后面,形成接口的链路本地地址
无状态自动配置中,黏贴在获取到的IPv6全球单播地址前缀后面,构成接口的全球单播地址
EUI-64计算方法

缺点:可以通过二层MAC推算出三层IPv6地址

注:使用EUI-64的方法生成接口标识时前缀必须小于等于64

GUA--------全球单播地址---------公网地址

ULA---------唯一本地地址-------私网地址

LLA------链路本地地址----没有路由能力
LLA用于一条单一链路层面的通信,例如IPv6地址无状态自动配置、IPv6邻居发现等


注:配置链路本地地址不能指定前缀长度

组播地址
IPv6组播地址标识多个接口,一般用于“一对多”的通信场景
IPv6组播地址只可以作为IPv6报文的目的地址

Flags:用来表示永久或临时组播组
0000表示 永久分配
0001表示 临时的
Scope:表示组播组的范围。
0:预留
1:节点本地范围;单个接口有效,仅用于Loopback通讯
2:链路本地范围;例如FF02::1
5:站点本地范围
8:组织本地范围
E:全球范围
F:预留
Group ID:组播组ID
被请求节点组播地址
当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。该地址主要用于邻居发现机制和地址重复检测功能。被请求节点组播地址的有效范围为本地链路范围


FF02::1------代表这条链路上的所有设备
FF02::2------代表这条链路上的路由器接口
任播地址
任播地址标识一组网络接口(通常属于不同的节点)。任播地址可以作为IPv6报文的源地址,也可以作为目的地址

任播报文的发起方通常为请求某一服务的主机
任播地址与单播地址在格式上无任何差异,唯一的区别是一台设备可以给多台具有相同地址的设备发送报文
优势
业务冗余:比如,用户可以通过多台使用相同地址的服务器获取同一个服务。这些服务器都是任播报文的响应方。如果不是采用任播地址通信,当其中一台服务器发生故障时,用户需要获取另一台服务器的地址才能重新建立通信。如果采用的是任播地址,当一台服务器发生故障时,任播报文的发起方能够自动与使用相同地址的另一台服务器通信,从而实现业务冗余
提供更优质的服务:比如,某公司在A省和B省各部署了一台提供相同Web服务的服务器。基于路由优选规则,A省的用户在访问该公司提供的Web服务时,会优先访问部署在A省的服务器,提高访问速度,降低访问时延,大大提升了用户体验
主机和路由器的单播IPv6地址以及加入的组播地址如下所示:

IPv6单播地址业务流程:

DAD:重复地址检测,类似于IPv4中的免费ARP检测,用于检测当前地址是否与其他接口冲突
NDP

NDP使用ICMPv6报文实现其功能


IPv6动态地址配置
有状态地址配置:有状态地址配置多用于公司内部有线终端的地址分配,便于对地址进行管理
采用DHCPv6协议,IPv6客户端将从DHCPv6服务器端获取完整的128 bit IPv6地址,同时包括DNS、SNTP服务器等地址参数
无状态地址配置:无状态地址配置多用于物联网等终端较多,且终端不需要除地址外其他参数的场景
主机根据RA中的地址前缀,并结合本地生成的64 bit接口标识(例如EUI-64),生成单播地址。
仅可以获得IPv6地址信息,无法获得NIS、SNTP服务器等参数,需要配合DHCPv6或者手工配置来获取其他配置信息。
注:通过ICMPv6 RA报文中的M标记和O标记来控制终端自动获取地址的方式

有状态地址配置,M=1,O=1
无状态地址配置,M=0,O=0
无状态地址配置(其他参数),M=0,O=1


注:SLAAC只能分配64位前缀的地址
DAD
特点:
IPV6所有单播地址都需要做DAD(任播地址不需要进行DAD检测)
所有未经过DAD检测的地址都是试验地址–tentative,无法用于通信
作用范围—本地链路
只有配置了IPV6单播地址,链路不被shutdown的才会发送DAD检测
检测过程:


在R1和R2路由上先后配置IPv6地址:2001:21::1/64。并在R1上抓包。这里要注意这个先后顺序,先配置的先进行DAD检测,没有回复即正常使用IPv6地址。具体流程报文如下:

报文1,2分别为R1的本地链路地址和可聚合全球地址在进行DAD检测是发送的NS报文,当他们没有收到NA回复后,认为该这两个地址没有被其他接口占用
报文3,4分别为R2的本地链路地址和可聚合全球地址在进行DAD检测是发送的NS报文,对应的本地链路地址没有收到NA回复,该地址正常使用,而可聚合全球地址收到一个NA报文(报文序号5),用于通告该IPv6地址已经被我占用,其他接口不能使用该地址
报文4和5的内容:

R2在发送DAD检测的NS报文时,由于接口上配置的IPv6地址为试验地址,不能正常使用,所以在NS报文中,其源地址用环回地址" :: "代替,而目的地址,是配置的IPv6地址(2001:21::1/64)的Solicited-Node组播(被请求节点组播地址)
报文中的target address表示要询问的地址,就是:“这个地址,你们谁在用?”。

R1收到NS报文后,发现自己的G0接口已经使用了2001:12::1/64这个地址,所以,给R2发送NA报文,其中,目的ip地址是ff02::1,这个是链路组播地址,用于告诉本链路中的所有节点;目的mac地址是33:33:00:00:00:01,是IP地址对应的mac地址
报文中icmpv6 option携带的就是对方询问IPv6地址的mac地址,就是:“这个地址我在用,Mac地址为:00e0-fc89-035b”

当R2收到R1的NA报文后,会将冲突的IPv6地址进行标记,表示地址冲突
地址解析
IPv6使用ICMPv6的NS和NA报文来取代ARP在IPv4中的地址解析功能



注:目的MAC地址也是组播MAC,固定前缀33:33:后32bit为该组播节点地址的后32bit。所以目的MAC地址为33:33:FF:00:00:01
发送一个NS报文达到这个目的。这个NS报文的源地址是2001:21::2,目的地址则是2001:21::1对应的被请求节点组播地址。
当AR1收到AR2的NS报文后,通过查看该报文中要解析的地址是不是自己接口的单播地址

是自己,则单播回应NA 报文,NA报文中携带了AR2的2001:21::1对应的MAC地址
通过AR1回应的NA报文就知道AR1上IPV6单播地址对应的MAC地址了
4、命令
[Huawei] ipv6
使能设备转发IPv6单播报文,包括本地IPv6报文的发送与接收。
[Huawei-GigabitEthernet0/0/0] ipv6 enable
在接口视图下,在接口上使能该接口的IPv6功能。
[Huawei-GigabitEthernet0/0/0] ipv6 address ipv6-address link-local
[Huawei-GigabitEthernet0/0/0] ipv6 address auto link-local
在接口视图下,通过手工或者自动的方式,配置接口的链路本地地址。
[Huawei-GigabitEthernet0/0/0] ipv6 address { ipv6-address prefix-length | ipv6-address/prefix-length }
[Huawei-GigabitEthernet0/0/0] ipv6 address auto { global | dhcp }
在接口视图下,通过手工或者自动(有状态或无状态)的方式,配置接口的全球单播地址。
[Huawei] ipv6 route-static dest-ipv6-address prefix-length { interface-type interface-number [ nexthop-ipv6-address ] | nexthop-ipv6-address } [ preference preference ]
配置IPv6静态路由
[Huawei] display ipv6 interface [ interface-type interface-number | brief ]
查看接口的IPv6信息
[Huawei] display ipv6 neighbors
查看邻居表项信息
[Huawei-GigabitEthernet0/0/0] undo ipv6 nd ra halt
默认情况下,华为路由器接口不发送ICMPv6 RA报文,则该接口所连链路上的其他设备无法进行无状态地址自动配置。 若想进行IPv6无状态地址配置,需要手工开启发送RA报文。
5、实验


步骤1:在R1、R2、R3、R4全局和相关接口使能IPv6功能,同时自动生成链路本地地址
sy
[Huawei]sys R1
[R1]ipv6
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ipv6 enable
[R1-GigabitEthernet0/0/0]ipv6 add auto link-local
[R1-GigabitEthernet0/0/0]q
sy
[Huawei]ipv6
[Huawei]sys R2
[R2]int g0/0/2
[R2-GigabitEthernet0/0/2]ipv6 en
[R2-GigabitEthernet0/0/2]ipv6 add auto link-local
[R2-GigabitEthernet0/0/2]q
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ipv6 en
[R2-GigabitEthernet0/0/0]ipv6 add auto link-local
[R2-GigabitEthernet0/0/0]q
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]ipv6 en
[R2-GigabitEthernet0/0/1]ipv6 add auto link-local
[R2-GigabitEthernet0/0/1]q
sy
[Huawei]sys R3
[R3]ipv6
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ipv6 en
[R3-GigabitEthernet0/0/0]ipv6 add auto link-local
[R3-GigabitEthernet0/0/0]q
sy
[Huawei]sys R4
[R4]ipv
[R4]ipv6
[R4]int g0/0/0
[R4-GigabitEthernet0/0/0]ipv6 en
[R4-GigabitEthernet0/0/0]ipv6 add auto link-local
[R4-GigabitEthernet0/0/0]q
步骤2:在R1、R2相应接口配置静态IPv6全球单播地址
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ipv6 add 2001::1 64
[R1-GigabitEthernet0/0/0]q
[R2]int g0/0/2
[R2-GigabitEthernet0/0/2]ipv6 address 2001::2 6
[R2-GigabitEthernet0/0/2]q
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ipv6 address 2002::1 64
[R2-GigabitEthernet0/0/0]q
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]ipv6 address 2003::1 64
[R2-GigabitEthernet0/0/1]q
步骤3:在R2上配置DHCPv6服务器功能,R3接口通过DHCPv6方式获取全球单播地址
[R2]dhcp en
[R2]dhcpv6 pool d1 //创建DHCPv6地址池,标识为d1
[R2-dhcpv6-pool-d1]address prefix 2002::/64 //分配地址前缀信息
[R2-dhcpv6-pool-d1]excluded-address 2002::1 //剔除网关地址
[R2-dhcpv6-pool-d1]dns-server 2222::1 //分配DNS
[R2-dhcpv6-pool-d1]q
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]dhcpv6 server d1
[R2-GigabitEthernet0/0/0]undo ipv6 nd ra halt //使能RA报文通告,默认关闭
[R2-GigabitEthernet0/0/0]ipv6 nd autoconfig managed-address-flag //M位 置1,表示需要使用dhcp获取地址
[R2-GigabitEthernet0/0/0]ipv6 nd autoconfig other-flag //O位 置1,标识需要使用DHCP获取其他参数
[R2-GigabitEthernet0/0/0]q
[R3]dhcp en
[R3]int g0/0/0
[R3-GigabitEthernet0/0/0]ipv6 add auto dhcp
[R3-GigabitEthernet0/0/0]ipv6 address auto global default //DHCPV6没有路由相关选项,不会下发路由
[R3-GigabitEthernet0/0/0]q
步骤4:在R2使能发布RA报文的功能,R4通过无状态地址配置的方式获取地址
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]undo ipv6 nd ra halt
[R2-GigabitEthernet0/0/1]q
[R4]int g0/0/0
[R4-GigabitEthernet0/0/0]ipv6 address auto global [R4-GigabitEthernet0/0/0]q
步骤5:配置静态路由
R4配置静态路由
[R4]ipv6 route-static 2001:: 64 2003::1
[R4]ipv6 route-static 2002:: 64 2003::1
R1配置聚合静态路由
[R1]ipv6 route-static 2002:: 15 2001::2
R3配置默认路由
[R3]ipv6 route-static :: 0 2002::1
检验结果:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IPv6基础 的相关文章

  • JDK8新特性之lambda表达式

    Welcome Huihui s Code World 接下来看看由辉辉所写的关于lambda表达式的相关操作吧 目录 Welcome Huihui s Code World 一 是什么 二 为什么要用 三 底层 四 什么时候用 五 怎么用
  • 2018Global Game Jam成都赛区赛后感

    这次是我第二次参加ggj 感觉这次大家的水平都高了很多 影响最深的还是自己的三度上台 以前我都是用的unity5 X系列来打包游戏的 这次由于想用到unity2017新增的Camera插件 于是这次第一次用unity2017 游戏做后打包成
  • 兆易创新携手合肥产投进军12英寸晶圆存储器

    2018年12月29日北京兆易创新科技股份有限公司董事会发布公告 北京兆易创新科技股份有限公司与合肥市产业投资控股 集团 有限公司于2017年10月26日签署了 关于存储器研发项目之合作协议 约定双方合作开展12英寸晶圆存储器研发项目 经沟

随机推荐