IPv6,全称Internet Protocol version 6,即网际协议版本6,也叫互联网通讯协议第六版。是互联网工程任务组(IETF)设计的用于替代IPv4的下一代IP协议,其地址数量号称能够为全世界的每一粒沙子编上一个地址。因为IPv4最大的问题在于网络地址资源有限,严重制约了互联网的应用和发展。IPv6的使用,不只能解决网络地址资源数量的问题,并且也解决了多种接入设备连入互联网的障碍。node
IPv6地址的长度为128位,相比IPv4地址长度32位变的更长,所以IPv6地址采用每4位组合起来转换成16进制的方式,每4个16进制数再以冒号分隔成8段,例如:2001:0000:0001:00a2:0000:0000:0000:0ec3。每一节中起始的0能够省略,全是0的使用一个0表示。 省略前:2001:0000:0001:00a0:0000:0000:0000:0ec3 省略后:2001:0:1:a2:0:0:0:ec3 而后,用双冒号替代一组联续出现的0,只能取代一组,因此选最长的一组。 取代前:2001:0:1:a2:0:0:0:ec3 取代后:2001:0:1:a2::ec3 最终,2001:0000:0001:00a2:0000:0000:0000:0ec3 = 2001:0:1:a2::ec3
ipv6 地址的表示方法分为三种,分别是:安全
参考:https://ccie.lol/knowledge-base/ipv4-and-ipv6-packet-header/服务器
ipv6扩展头网络
ipv6定义了六大选项扩展:less
ipv6前缀 | 地址分配状况 | 所占地址比例 | 备注 |
---|---|---|---|
::0/8 | Reserved by IETF | 1/256 | [1] |
0200::/7 | Reserved by IETF | 1/128 | [2] |
2000::.3 | Global unicast | 1/8 | |
FE80::/10 | Link-local unicast | 1/1024 | [3] |
FEC0::/10 | Ressrved by IETF(formely Site-local unicast) | ||
FC00::/7 | Unique local ipv6 address | 1/128 | |
FF00::/8 | Multicast | 1/256 | |
Others | Reserved by IETF |
IPv6主要有三种类型的地址:单播地址、组播地址和任播地址。oop
单播地址:用来惟一标识一个接口,相似于IPv4的单播地址。发送到单播地址的数据报文将被传送给此地址所标识的接口。测试
在单播寻址模式下,IPv6接口(host)在网段中惟一标识。 IPv6数据包包含源IP地址和目标IP地址。 主机接口配备有在该网络段中惟一的IP地址。当网络交换机或路由器接收到注定到单个主机的单播IP分组时,它发出其链接到该特定主机的输出接口之一 。ui
多播(组播)地址:用来标识一组接口(一般这组接口属于不一样的节点),相似于IPv4的组播地址。发送到组播地址的数据报文被传送给此地址所标识的全部接口。ssr
IPv6组播模式与IPv4相同。 目的地为多个主机的数据包在特殊的多播地址上发送。 全部对该组播信息感兴趣的主机须要首先加入该组播组。 加入组的全部接口接收组播数据包并对其进行处理,而对组播数据不感兴趣的其余主机则忽略组播信息。设计
任播地址:用来标识一组接口(一般这组接口属于不一样的节点)。发送到任播地址的数据报文被传送给此地址所标识的一组接口中距离源节点最近(根据使用的路由协议进行度量)的一个接口。
IPv6引入了一种新型的寻址,称为Anycast寻址。 在此寻址模式下,多个接口(host)被分配相同的任播IP地址。 当主机但愿与配备有任播IP地址的主机通讯时,它发送单播消息。 在复杂的路由机制的帮助下,在路由成本方面,该单播消息被递送到最接近发送方的主机。
IPv6不使用广播地址,广播地址的功能由多播地址代替。
IPv6的Prefix:
在IPv6网络,路由器使用Prefix来判断IPv6地址是否位于同一个网络,比较广泛的方式是将128位的IPv6
地址切割成64位的Prefix和64位的Interface ID,IPv6 Prefix长度的表示方法是在地址后面加上/xx,
例如上图中的::1/128,表示Prefix为128位。假设全部IPv6地址都使用64位Prefix,就能够拥有2^64个
网络,每一个网络能够容纳2^64个IP地址,2的64次方:18446744073709551616,这是个天文数字。因此在
IPv6网络里,已经不须要再把网络分红Subnet。
EUI-64地址:
基于IEEE EUI-64格式。该格式基于已存在的MAC地址来做为64位接口标识符,这样的标识符在本地和全球都是惟一的。IPv6单播地址中的接口标识符用来标识链路上的一个惟一的接口。目前IPv6单播地址基本上都要求接口标
识符为64位。IEEE EUI-64格式的接口标识符是从接口的链路层地址(MAC地址)变化而来的。IPv6地址中
的接口标识符是64位,而MAC地址是48位,所以须要在MAC地址的中间位置(从高位开始的第24位后)插入
十六进制数FFFE(1111111111111110)。为了确保这个从MAC地址获得的接口标识符是惟一的,还要将Uni
versal/Local (U/L)位(从高位开始的第7位)设置为“1”。最后获得的这组数就做为EUI-64格式的接口标
识符。IPv6地址太长,若是要逐个端口配置IPv6地址是件很痛苦的事情,使用EUI-64就能够只设定Prefix
部份,而后接口就会用MAC地址自动生成Interface ID,大大减小工做量。
举例,MAC地址:0012-3400-ABCD 中间插入FFFE使其成为EUI-64 Interface ID: 0012:34FF:FE00:ABCD 最后把第7位改为1:0212:34FF:FE00:ABCD
IPv6大体由前缀,子网ID,接口ID组成
前缀:至关于v4地址中的网络ID
接口ID:至关于v4地址中的主机ID
IPv6有三种不一样类型的单播地址方案:
单播中有全局单播地址(公网地址)、链路本地地址(同一链路上通讯)、环回地址、未指定地址、惟一本地地址(私有地址)、内嵌Ipv4的地址。
Global Aggregatable Address (2000::/4—3fff::/4),一个接口可配置多个Global地址。(一个端口能够配置多个全球可聚合单播地址,可是一个端口只能配置一个FE80::/10 FE80链路本地地址),能够理解为IPv4公网地址
。提供给网络服务提供商。这种地址类型容许路由前缀的聚合,从而限制了全球路由表项的数量。
通常从运营商处申请到的IPv6地址空间为/48,三个最高有效位始终设置为001,再由本身根据须要进一步规划:
link-local (FE80::/10) 也称为链路本地地址,本链路惟一的,用在ipv6的路由协议里面,做为通讯地址,每一个网卡只能配置一个。能够理解为标识符或者定位符
。链路本地地址的前10位为1111111010。此地址用于邻居发现协议,也用于无状态自动配置中本地链路上节点之间的通讯。使用链路本地地址做为源或目的地址的数据报文不会被转发到其余链路上。一般使用FE80::/10表示。
Stateless Address Autoconfiguration(SLAAC),无状态地址自动配置。在IPv4网络中,咱们能够通
过DHCP让端口自动获取到IP地址,而在IPv6网络里,则经过Auto-configuration来获取IP地址。前面咱们
说过EUI-64能够自动产生Interface ID,因此如今要解决的就是如何自动得到Prefix。IPv6使用的是Stat
eless Address Autoconfiguration,Interface向Link-Local发出RS(Router Solicitation)多播
请求来获取配置参数,IPv6 Router回应RA(Router Advertisement)包含Internet层配置参数的路由器
宣告报文进行回应。
site local (FEC0::/10) 用于站点的,存在必定的争议,如今已经被收回了。
特殊地址
地址0:0:0:0:0:0:0:0/128不指定任何内容,称为未指定地址。 简化后,全部的0被压缩为:: / 128。
在IPv4中,地址0.0.0.0与网络掩码0.0.0.0表示默认路由。 相同的概念也适用于IPv6,地址0:0:0:0:0:0:0:0,网络掩码全0表示默认路由。 应用IPv6规则后,此地址压缩为:: / 0。
IPv4中的环回地址由127.0.0.1到127.255.255.255系列表示。 但在IPv6中,只有0:0:0:0:0:0:0:1/128表示环回地址。 环回地址后,能够表示为:: 1/128。
任播地址设计用来在多个主机或者节点提供相同的服务时提供冗余和负载分担功能。任播地址九游这样的性质:发送到任播地址的分组,被按照路由协议的侧脸距离,路由到该任播地址的“最近的”接口。任意播又称为泛播。
泛播对于提供某些类型的服务特别有用,尤为是对于客户机和服务器之间不须要有特定关系的一些服务,录入域名服务器和时间服务器,DNS等。MSDP的AnycastRP就是这样的一种典型应用。
任播地址时根据单播地址空间分配的,所以任播地址在句法上不能与单播地址相互。当单播地址分配给与多于一个接口时,该单播地址转化为任播地址。分得该地址的节点必须被显示配置,以便知道该地址是任播地址。这个地址是由路由协议定义的,不能手工配置,任意播地址只能出如今路由器上,而且不能做为数据包的原地址来使用。
任播地址是根据单播地址空间分配的,使用任何已定义的单播地址格式。
节点和路由器必须具有的IPV6地址
IPv6 多播(组播)地址是一组接口的标识符(典型在不一样节点上)。一个接口能够属于任何数目的多播组。
组播地址最高位前8位固定为全1,也就是“FFXX::/8”
永久分配的多播地址的“含义”独立于范围值。
例如,若是给“NTP服务器组”分配一个组ID 为101(16进制)的永久多播地址,那么
FF01:0:0:0:0:0:0:101意味着在相同接口(即,相同节点)上的全部NTP服务器(做为发送者)。
FF02:0:0:0:0:0:0:101意味着在相同链路上的全部NTP服务器(做为发送者)。
FF05:0:0:0:0:0:0:101意味着在相同站点内的全部NTP服务器(做为发送者)。
FF0E:0:0:0:0:0:0:101意味着在互联网中的全部NTP服务器。
常见的组播地址
全部节点地址: FF01:0:0:0:0:0:0:1 FF01::1 FF02:0:0:0:0:0:0:1 FF02::1 上述多播地址标识范围1(接口本地)或范围2(链路本地)内的全部IPv6节点组。 全部路由器地址: FF01:0:0:0:0:0:0:2 FF01::2 FF02:0:0:0:0:0:0:2 FF02::2 FF05:0:0:0:0:0:0:2 FF05::2 上述多播地址标识范围1(接口本地)、范围2(链路本地)或范围5(站点本地)内的全部IPv6路由器组。
IPv6组播地址的MAC地址映射
被请求节点组播地址Solicited-node
在IPv6组播地址中,有一种特别的组播地址,叫作Solicited-node地址(被请求节点组播地址)。
Solicited-node地址是一种特殊用途的地址.主要用于重复地址检测(DAD)和替代IPv4中的ARP。
Solicited-node地址由前缀FF02::1:FF00:0 / 104和ipv6单播地址的最后24位组成。
一个IPv6单播地址对应一个Solicited-node地址。Solicited-node地址有效范围为本地链路范围。
地址格式: FF02:0:0:0:0:1:FFXX:XXXX,具体的对应关系以下:
将互联网彻底从IPv4转换到IPv6将会是一个及其漫长的过程,目前IPv4仍然占据重要地位。因此在这个转
换的过程当中,将会有至关长的一个时期IPv4与IPv6会共同存在于互联网当中。若是两张网彻底各自独立是
不现实的,因此就须要一种技术实现IPv4能够与IPv6网络互通。IPv6 Tunneling可让IPv6报文包裹在
IPv4之中进行传输,IPv6 Tunneling有两种技术,分别是ISATAP
和6to4 Tunnel
。
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)是一种IPv6转换传送机制,容许IPv6
数据包经过IPv4网络上双栈节点传输。它将IPv4地址夹入IPv6地址中,当两台 ISATAP 主机通信时,可自
动抽取出IPv4地址创建Tunnel便可通信,且并不需透过其它特殊网络设备,只要彼此间IPv4网络通畅便可。
ISATAP分为Server与Client两个角色,Client向Server请求IPv6地址并创建IPv6 Tunnel。这样Client
即可以透过ISATAP Server与IPv6网络通信。
咱们如下面的场景来演示一下ISATAP如何工做。
● R1和R2位于IPv4网络中,R1(ISATAP Client)的default Route指向R2,没法与IPv6网络进行通讯。
● R2与R3跑EIGRP,让R1能够与R3(ISATAP Server)经过IPv4进行通讯。
● R3是ISATAP Server,充当中介的角色,链接IPv4和IPv6网络。
● R3与R4跑OSPFv3。
● R4和R5位于IPv6网络中,只有IPv6地址,没有IPv4地址。
示例参考1:https://www.kclouder.cn/network-basic-ivp6/
6to4 Tunnel
ISATAP比较适合单机链接到IPv6网络,而且如今大部分OS都支持ISATAP,好比Windows、Linux系统。若是
但愿把两个IPv6网络经过IPv4链接起来,即点对点链接,则使用6to4比较合适。咱们如下图为例,这是一个
全路由网络的示例 ,来演示一下如何配置6to4 Tunnel将两个独立的IPv6网络经过IPv4网络打通。
● R2和R3位于IPv4网络中,配置6to4 tunnel。
● R1和R5位于IPv6网络A中,经过R1链接到R2。
● R4和R6位于IPv6网络B中,经过R4链接到R3。
示例参考2:https://www.kclouder.cn/network-basic-ivp6/
ICMPv6由ipv6节点使用,用于报告在分组处理过程当中出现的错误,以及执行其余网络互连层功能。icmpv6是ipv6的总体部分,是基础协议,在ipv6的next header取值为58.
消息通用格式:
类型: 指出消息类型。他的值决定其他数据格式。消息类型分为两类:出错消息和指示消息。
出错消息由在它们的消息type字段的二进制值的高阶位取0标识。因而,出错消息的消息类型从0到127;指示消息的消息类型值从128到255.
代码: 依赖于消息类型。它用于生产消息粒度的附加层。
校验和:用户检测ICMPv6消息和ipv6首部部分中的数据错误。
上图显示了icmpv6报文中的通用消息格式、差错报文、通告报文
。
示例:
ping包时能够查看到回显请求和应答请求。
Type:Echo(ping) reply (129)
Type: Echo(ping) request (128)
==========
了解更多报文类型能够有助于理解原理。
DHCPv6使用组播,全部的DHCP服务器和中继代理监听多播地址(链路范围的FF02::1:2),用于客户端和相邻的服务器及中继代理的通讯之用,站点内的全部DHCP服务器侦听多播地址(站点范围的FF05::1:3),用于中继代理和服务器之间的通讯。
DHCPv6使用UDP,DHCPv6客户端监听UDP端口546,而DHCPv6服务器和中继代理监听UDP端口547.
IPv6地址获取原理
IPv6地址分配原理有2种,一种是快速分配DHCP地址,另外一种是请求多个IPv6地址。
当客户端并不须要服务器为其分配IP地址,而是须要获取诸如DNS Server、NTP Server这样的其余配置信息的时候,他只须要与服务器进行一个简单的只包含两个消息的交换便可。客户端发送一个DHCP配置SOLICIT消息到一个特定多播地址,请求地址和其余配置信息,该信息提示服务器:客户端能够接受一个当即的回应消息。而服务器以一个携带了被请求的配置信息的DHCP回应消息应答。全部配置给客户端使用的地址都包括一个有效生存期和首选生存期,为了在生存期到期后继续使用这些地址,客户端向服务器发送DHCP更新消息,服务器经过DHCP回应消息通告新的生存期。
要请求一个或者多个IPv6地址,客户端首先须要肯定服务器的位置,而后再进行地址和配置新的请求。客户端首先发送一个DHCP Solicit消息到一个特定多播地址,来查找可用的DHCP服务器。全部符合客户单要求的服务器以DHCP Request消息来获取地址和其余配置。
OSPFv3证书标准是RFC2740.
OSPFv3使用的协议号与OSPFv2同样,都是89.
OSPFv3协议报文的源IPv6除了虚链接外,依赖使用本地链路地址;目的IPv5地址则是选择ALLSPFRouters、ALLDRouters以及邻接路由器的本地链路地址(虚链路除外),ALLSPFRouters为组播IPv6地址FF02::5,ALLDRouters为组播IPv6地址FF02::6.
参考:https://www.kclouder.cn/huawei-ipv6/
实验拓扑:
这里咱们将主机演示一下在华为交换机或路由器上配置IPv6地址进行通讯、配置DHCPv六、经过配置OSPFv3演示IPv6路由基础、配置IPv6 over IPv4隧道以及配置IPv4 over IPv6隧道的方法。经过本篇文章,咱们将掌握基本IPv6地址的配置方法、掌握OSPFv3路由协议的配置方法、掌握DHCPv6服务器功能的配置方法以及一些常见的IPv6命令的使用方法。 配置IPv6 一、咱们如下图中的拓扑为例,R一、R二、R3经过一台交换机互联,咱们须要在这三台路由器上配置IPv6地址,而后再启用OSPFv3以及DHCPv6。
二、首先在三台服务器的环回接口上配置IPv6全球单播地址,在全部路由器的g0/0/0接口上配置链路本地地址(Link-local)。如下命令以R1为例,以相同的方式配置R2和R3。 # R1 ipv6 int loopback 0 ipv6 enable ipv6 address 2001:1::a 64 int g0/0/0 ipv6 enable ipv6 address fe80::1 link-local # R2 ipv6 int loopback 0 ipv6 enable ipv6 address 2001:1::b 64 int g0/0/0 ipv6 enable ipv6 address fe80::2 link-local # R3 ipv6 int loopback 0 ipv6 enable ipv6 address 2001:1::c 64 int g0/0/0 ipv6 enable ipv6 address fe80::3 link-local 三、配置完成后,查看并确认接口地址配置正确,而且是UP状态。 display ipv6 int g0/0/0 display ipv6 int loo0
四、配置OSPFv3,在路由器上开启OSPFv3进程,并指定三台路由器的router-id。而后在接口下使能OSPFv3进程并指定所属区域。如下命令以R1为例,以相同的方式配置R2和R3。 # R1 ospfv3 1 router-id 1.1.1.1 int g0/0/0 ospfv3 1 area 0 int loo0 ospfv3 1 area 0 # R1 ospfv3 1 router-id 2.2.2.2 int g0/0/0 ospfv3 1 area 0 int loo0 ospfv3 1 area 0 # R1 ospfv3 1 router-id 3.3.3.3 int g0/0/0 ospfv3 1 area 0 int loo0 ospfv3 1 area 0 五、配置完成后,在路由器上查看OSPFv3的邻居关系。能够看到OSPF邻接关系已经造成,R1为DR,R2为BDR,R3为DROther。 display ospfv3 peer
六、使用Ping ipv6命令检测链路本地地址和Loopback0接口的全球单地址是否可达。好比在R1上执行如下命令,以下图能够看到网络是可达的。 ping ipv6 fe80::2 -i g0/0/0 ping ipv6 2001:3::c
七、经过抓包能够看到ICMPv6类型的报文。
八、下面咱们来配置DHCPv6,在R2上开启DHCPv6服务器功能,而后建立IPv6地址池并指定地址池中IPv6地址的前缀长度,再配置IPv6地址池中不参与自动分配的IPv6地址(一般为须要保留的网关地址)以及DNS服务器的IPv6地址。 dhcp enable dhcpv6 duid ll dhcpv6 pool pool1 address prefix 2001:face::/64 dns-server 2001:444e:5300::1 excluded-address 2001:face::1 九、在g0/0/0接口配置IPv6地址为地址池中的网关地址,并配置DHCPv6服务器功能以及指定的地址池的名称。 int g0/0/0 ipv6 address 2001:face::1 64 dhcpv6 server pool1
十、在R1和R3上配置DHCPv6客户端功能,并在相应的接口下配置经过DHCPv6自动获取IPv6地址功能。同时,咱们再配置一台PC自动获取IPv6地址。 dhcp enable dhcpv6 duid ll int g0/0/0 ipv6 address auto dhcp 十一、在R2上查看DHCPv6地址池的信息,能够看到有三个地址经过DHCPv6分配了出去。
十二、在R1和R3上查看经过DHCPv6获取到的IPv6地址。
1三、在PC上查看经过DHCPv6自动获取到的IPv6地址,注意自动配置的网关为R2的G0/0/0的链路本地地址。
1四、测试一下DHCPv6地址的连通性。PC ping R2, R1 ping PC,R3 ping R1。
1五、在R2上查看IPv6的路由表,能够看到loopback0的地址经过OSPFv3进行路由。
一、如下图拓扑为例,两台交换机经过LACP链路相连,同时在两台交换机配置有两个VLAN(VLAN 100和VLAN200)并对应有各自的主机相链接,两台交换机再与R1相连用来访问外网。
二、首先在两台交换机上启用IPv6,而后建立VLAN100和VLAN200,而后配置LACP。 # 两台交换机一样的配置方法 ipv6 vlan batch 100 200 int eth-trunk 1 mode lacp-static port link-type trunk port trunk-allow-pass vlan 200 300 int g0/0/1 eth-trunk 1 priority 100 int g0/0/2 eth-trunk 1 priority 100 lacp priority 100 三、上述基本配置完成之后,建立VLANIF 100和VLANIF 200,并配置IPv6地址。以SW1为例。 # LSW1 配置 int vlanif 100 ipv6 enable ipv6 address fc00:1::1/64 int vlanif 200 ipv6 enable ipv6 address fc00:2::1/64 # LSW2 配置 int vlanif 100 ipv6 enable ipv6 address fc00:1::2/64 int vlanif 200 ipv6 enable ipv6 address fc00:2::2/64 四、配置链接主机的接口,以SW1为例(SW2使用一样的配置)。 int g0/0/3 port link-type access port default vlan 100 int g0/0/4 port link-type access port default vlan 100 五、配置链接路由器的接口,以SW1为例。 # SW1 interface g0/0/5 port link-type hybird port hybrid pvid vlan 100 port hybrid untagged vlan 100 # SW2 interface g0/0/5 port link-type hybird port hybrid pvid vlan 100 port hybrid untagged vlan 100
六、两台交换机配置完成之后,为4台PC配置好对应的IPv6地址。 七、配置路由器,启用IPv6并给两个接口配置好IPv6地址。
八、配置完成,在PC1上分别ping PC2和路由器的接口地址。
九、在PC3上分别ping PC4和路由器的接口地址。
配置IPv6 over IPv4 一、以下图拓扑,R2与R3属于边界路由器,须要启动IPv4/IPv6双协议栈,并配置IPv6 over IPv4隧道。边界路由器收到从IPv6网络侧发出来的报文后,若是报文目的地地址不是自身且下一跳接口为Tunnel接口,就把收到的IPv6报文的数据部分加上IPv4报头,封装成IPv4报文转发到对端的边界路由器上,对端路由器执行报文解封装,去掉IPv4报头,而后将解封后的IPv6报文发送到IPv6网络中。
二、首先配置路由器使能IPv6,并配置IPv6地址。 R1: ipv6 int g0/0/0 ipv6 enable ipv6 address 2001::1/64 R2: ipv6 int g0/0/0 ipv6 enable ipv6 address 2001::2/64 int g0/0/1 ip address 119.1.1.2 24 R3: ipv6 int g0/0/0 ipv6 enable ipv6 address 2002::3/64 int g0/0/1 ip address 119.1.1.3 24 R4: ipv6 int g0/0/0 ipv6 enable ipv6 address 2002::4/64 三、在R2和R3上配置IPv6 over IPv4隧道。 R2: int tunnel 0/0/1 ipv6 enable ipv6 address 2020::2 /64 tunnel-protocol ipv6-ipv4 source 119.1.1.2 destination 119.1.1.3 R3: int tunnel 0/0/1 ipv6 enable ipv6 address 2020::3 /64 tunnel-protocol ipv6-ipv4 source 119.1.1.3 destination 119.1.1.2
四、隧道创建完成,为R1和R4上配置IPv6默认路由。 R1: ipv6 route-static :: 0 2001::2 R4: ipv6 route-static :: 0 2002::3 五、为R2和R3配置静态路由,下一跳须要指向隧道对端IPv6地址。 R2: ipv6 route-static 2002:: 64 2020::3 R3: ipv6 route-static 2001:: 64 2020::2 六、在R1上PR4的IPv6地址,能够Ping通说明IPv6 over IPv4隧道创建成功。