1.IPv6简介

        随着互联网的快速发展,IPv4地址变的越来越紧缺,即使有NAT技术来进行缓解,但是也只能缓解燃眉之急。同时,IPv4的报文头部设计的不合理,导致IPv4转发不具有安全性,头部字段太多且头部长度可变,导致转发效率低下。

IPv6有128个比特,几乎地球上的每一粒沙子都可以分配一个IPv6的地址,解决了IPv4地址不够用的问题。IPv6针对于报文头部也进行了调整优化,分为了基本头部和扩展头部。基本头部保留转发需要的必要信息,所以长度是固定的,为40个字节。剩余其他信息使用扩展头部来进行封装,提高了转发效率。

2.IPv6报文格式

        IPv6头部字段只保留了转发需要的必要信息,同时增加了一个next header字段,通过此字段来判断是否有下一个扩展头部信息。数据在进行转发的时候,只需要读取基本包头即可。

        version:版本信息

        traffic class:流分类

        flow label:流标签

        payload lenth:长度

        next header:下一个头部标识

        hop limit:相当于IPv4中的TTL

        sourece address:源IP

        destination address:目的IP

        extension header:扩展头部

3.IPv6地址的表示

        IPv6地址共有共16个字节,也就是128比特。由于位数比较长,因此是用冒号分十六进制来表示的。128个比特分为了8段,每段16个比特,每段都用十六进制来表示,各段之间用冒号分开。例如:2001:0FCE:3F00:4C02:0000:0000:0001:0002,每段的最前面的0可以省略,可以缩写为:2001:FCE:3F:4C02:0:0:1:2,连续的段为0的时候,可以缩写为::,因此这个IPv6地址最简化的表示为2001:FCE:3F:4C02::1:2。双冒号在一个地址中只能出现一次。

4.IPv6地址分类

        IPv6地址分为三大类,分别是单播、组播和任播。

        4.1 单播地址

                IPv6的单播地址又可以分为全球单播地址、链路本地地址、唯一本地地址、特殊地址等几大类,单播地址由网络前缀和接口标识组成,常见单播地址要求网络前缀和接口标识都是64位,其中::1/128为本地回环地址,::/128表示未分配地址。

                接口标识生成的方式有三种,可以手工分配、自动获取、EUI-64生成。

                EUI-64规范是指将MAC地址中间插入FFFE,并且将MAC地址的第7位即LG位变为1,例如:

        MAC地址为:00e0-fc31-6f8e

        插入FFFE:00e0-fcff-fe31-6f8e

        LG位置为1:02e0-fcff-fe31-6f8e

                全球单播地址

                全球单播地址网段是2000::/3,范围2000——3FFF。全球单播地址用来标识唯一一台终端或者接口,它的地址格式如下:

                唯一本地地址 

                 唯一本地地址是私网地址,地址段是FC00::/7,目前只是用了FD00::/8,唯一本地地址只在内网中有效,不能跨越公网,公网中没有私网的路由。地址格式如下:

                链路本地地址 

                链路本地地址的有效范围是本链路生效,不能跨越路由器,前缀为:FE80::/10。链路本地地址可用于邻居发现,自动获取等场景。这个地址可以手工配置或者系统根据EUI-64自动生成。它的地址格式如下:

        4.2 组播地址

        IPv6的组播地址可用于标识多个接口,只可用作目的地址来使用。地址格式如下:

        前8个比特固定全为1,后32比特是组播的组ID。 

        Flags:为0标识永久,为1表示临时。

        Scope:  为0是预留

                        为1表示节点

                        为2表示链路本地

                        为5表示站点本地

                        为8表示组织本地

                        为E表示全球范围

                        为F是预留

        组播中比较重要的一种是被请求节点组播地址,主要用于地址检测或者邻居发现。每个单播地址都会自动生成对应的被请求节点组播地址,并加入这个组播组。被请求节点组播地址格式如下:

        被请求节点组播地址的前104个比特是固定的,后24位根据单播地址的后24来进行填充。

        例如:全球单播地址:2001:172:16:12::1

        对应被请求节点组播地址为:FF02::1:FF00:01 

        组播中FF02::1表示所有主机,FF02::2表示所有路由器。

        4.3 任播地址

        在IPv6中没有广播的概念,但是有任播地址,它的范围和全球单播地址一致,只不过可以重复配置,用于用户访问最近的业务节点,任播地址也是只能作为目的地址使用。

5.NDP协议

        IPv6中没有ARP地址解析协议,IPv6是通过NDP邻居发现协议来进行地址冲突检测和MAC地址解析的。IPv6通过新增ICMPv6报文来承载NDP协议,ICMPv6协议通过不同type类型来区别不同的承载协议。

ICMPv6 type类型代表协议
type=133RS报文:路由请求
type=134RA报文:路由通告
type=135NS报文:邻居请求
type=136NA报文:邻居通告
type=136重定向

        5.1 IPv6的DAD(地址冲突检测) 

        IPv4是通过免费ARP来进行地址冲突检测的,IPv6根据NS报文来进行DAD检测,如果没有收到NA的应答,则表示地址没有冲突,收到NA的回复,则表示地址冲突,不可用。

        DAD的原理:当接口第一次获取到IPv6单播地址时,会发送一个NS报文,NS的格式如下:

        ICMPv6头部IPv6头部以太帧头部
target address:要检测的IPv6地址

源:::

目的:检测IP的被请求节点地址

源:本端MAC

目的:组播MAC

组播MAC地址前16为固定为33-33,后32为取被请求节点地址的后32位组成。

例如:被请求节点地址为FF02::1:FF00:1

          组播MAC地址为:33-33-FF-00-00-01

        没有收到NA的应答,则表示地址不冲突,一旦地址冲突,收到的NA应答报文格式如下: 

        ICMPv6头部IPv6头部以太帧头部

target address:冲突的IPv6地址

link-layer address:本端MAC地址

源:本端接口IPv6地址

目的:FF02::1

源:本端MAC

目的:组播MAC

         5.2 IPv6的ping通原理

        R1 ping R2

        1.R1查看路由表,没有则不发包。

        2.R1有R2的路由,进行ICMPv6的封装,封装到二层,不知道目的MAC地址。

        3.查看IPv6邻居表项,有邻居则拿出邻居的MAC进行封装,没有,则发送NS请求。

        ICMPv6头部IPv6头部以太帧头部
target addres:2001::2

源:2001::1

目的:FF02::1:FF00:2

源:本端MAC

目的:33-33-FF-00-00-02

        4.R2收到R1的NS报文,侦听目的组播MAC地址,接收解封装,产看目的IP是自己,则回复NA报文,同时把R1的MAC地址和IP加入自己的IPv6邻居表。

        ICMPv6头部IPv6头部以太帧头部

target addres:2001::2

link-layer address:本端MAC地址

源:2001::2

目的:2001::1

源:本端MAC

目的:R1的MAC

         5.R1收到R2的NA响应,把R2的MAC地址和IP加入自己的IPv6邻居表,完成ICMPv6的封装,按路由表转发数据。

6.自动获取

        IPv6支持有状态自动获取和无状态自动获取两种,IPv4只有有状态的自动获取。

        6.1 无状态自动获取

                IPv6地址具有即插即用的快捷方便性,此机制通过无状态获取来实现。服务端开启RA功能,周期性的向所有主机发送RA报文,发送的周期在600秒和200秒之间随机,但是一旦收到客户端发来的RS请求,则会立即响应一次RA。RA报文中包含本端接口地址的前缀信息,客户端根据服务端的前缀加上自己的EUI-64组成自己的接口地址。

服务端开启RA功能命令:接口下undo ipv6 nd ra halt

客户端获取命令:接口下ipv add auto global default------获取地址的同时产生默认路由

        RS报文格式如下:

        ICMPv6头部IPv6头部以太帧头部

link-layer address:本端MAC地址

源:本端的连接本地地址

目的:FF02::1

源:本端MAC

目的:组播MAC

        RA报文格式如下:

        ICMPv6头部IPv6头部以太帧头部

link-layer address:本端MAC地址

IP前缀信息

源:本端的连接本地地址

目的:FF02::1

源:本端MAC

目的:组播MAC

        6.2 IPv6的有状态自动获取 

        IPv6的有状态获取是通过DHCPv6获取的,可分为4-way模式和2-way模式,默认是4-way模式,也就是有四种报文交互。

        4-way模式:

        1.首先由客户端发起solicit请求,寻找全网的DHCPv6服务端,包含本端MAC地址等信息,以组播的形式发送。

        2.服务端回复advertise回复给客户端,包含网络前缀,客户端MAC、服务端MAC等信息,以单播形式发送。

        3.客户端发起request请求地址是否可用,包含请求使用的IPv6地址,客户端MAC、服务端MAC等信息,以组播形式发送。

        4.服务端回复reply给客户端,包含对方请求使用的IPv6地址,客户端MAC、服务端MAC等信息,以单播形式发送。

        2-way模式:

        当网络中只有一个DHCPv6服务端时,可以配置快速分配模式。

        1.DHCPv6客户端在发送的Solicit报文中携带Rapid Commit选项,标识客户端希望服务器能够快速为其分配地址和网络配置参数。

        2.DHCPv6服务器接收到Solicit报文后,将进行如下处理:

          如果DHCPv6服务器支持快速分配地址,则直接返回Reply报文,为客户端分配IPv6地址和其他网络配置参数,Reply报文中也携带Rapid Commit选项。

         如果DHCPv6服务器不支持快速分配过程,则采用四步交互方式为客户端分配IPv6地址/前缀和其他网络配置参数。

        快速获取地址配置方式:

服务端:接口下dhcpv6 server A rapid-commit  

客户端:接口下ipv6 address auto dhcp rapid-commit

        无状态获取只能获取到IP前缀信息,获取不到其他一系列的参数,例如DNS等,当无状态需要向有状态迁移时,可以配置flag位中的M位和O位置为1。

服务端:ipv6 nd autoconfig managed-address-flag----M位置为1

              ipv6 nd autoconfig other-flag------O位置为1           

7.IPv6基础实验

拓扑:

 描述:R1和R2手动配置,R2作为DHCPv6服务器,R3采用有状态的获取方式,R4采用无状态的获取方式并都能生成缺省路由,在R1上配置静态路由,使能全网通。

基本信息:

设备接口IP地址前缀
R1G0/0/02001::164
R2G0/0/02001::264
G0/0/12003::264
G0/0/22004::264
R3G0/0/0有状态获取
R4G0/0/0无状态获取

 R1配置:

#
ipv6 
#
interface GigabitEthernet0/0/0
 ipv6 enable 
 ipv6 address 2001::1/64 
#
ipv6 route-static 2003:: 64 2001::2 
ipv6 route-static 2004:: 64 2001::2 

R2配置:

#
ipv6 
#
dhcp enable
#
dhcpv6 pool A
 address prefix 2003::/64
 excluded-address 2003::1 to 2003::2
#
interface GigabitEthernet0/0/0
 ipv6 enable 
 ipv6 address 2001::2/64 
#
interface GigabitEthernet0/0/1
 ipv6 enable 
 ipv6 address 2003::2/64 
 undo ipv6 nd ra halt
 ipv6 nd autoconfig managed-address-flag
 ipv6 nd autoconfig other-flag
 dhcpv6 server A
#
interface GigabitEthernet0/0/2
 ipv6 enable 
 ipv6 address 2004::2/64 
 undo ipv6 nd ra halt

R3配置:

#
ipv6
#
dhcp enable
#
interface GigabitEthernet0/0/0
 ipv6 enable 
 ipv6 address auto link-local
 ipv6 address auto global default
 ipv6 address auto dhcp

R4配置:

#
ipv6 
#
interface GigabitEthernet0/0/0
 ipv6 enable 
 ipv6 address auto global default

查看R1接口的DAD报文:

查看R1pingR2的NS和NA报文:

 查看R4无状态获取的报文信息:

 查看R3有状态获取的报文信息:

R1上ping测试 :

         

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐