初识IPv6 有状态、无状态地址相关协议

本文主要介绍IPv6全局单播地址(Global Address)的获取方式及其相关的协议,DHCPv6协议和RA、RS报文(邻居发现协议)。

1、全局单播地址类型

IPv6地址中分为本地链路地址(Link-Local Address)与全局单播地址(Global Address)。
本地链路地址根据mac等信息通过指定算法得到,不需要从路由器获取。以fe80:开头
全局单播地址从需要和路由器进行协商获取,可以与公网通信。

如下图中有三个IPv6全局单播地址地址,其中两个是无状态,一个有状态。一个本地链路地址。在这里插入图片描述

全局单播地址可通过手动或自动方式配置,其中自动方式分为“有状态”和“无状态”。

为了避免混淆,在此解释下有状态、无状态到底是什么意思:首先,请明确一点,有状态、无状态仅针对于IPv6地址分配方式,并不包含其他参数。

  • 有状态:可控、可管理。在网络中存在一个IP地址管理者,它能够识别客户端,根据不同的客户端,分配对应的IPv6地址,客户端与服务端之间需要维护IP地址的租期及续约。目前实现这种效果的,就是DHCPv6协议,IP地址管理者就是DHCPv6 Server

  • 无状态:不可控、难管理。在网络中只有网关,没有IP地址管理者。因此无人去识别客户端,每个客户端根据网关发送的相同的RA报文内容,自行配置IPv6地址

在这种情况下,IPv6相关网络配置具有三种方式。

  • 无状态(Stateless):通过邻居管理协议RA报文,从路由公告中配置IPv6地址。RA报文中会携带前缀等信息。同时IPv6DNS等信息也从RA报文中获取。
  • 有状态(Stateful DHCPv6):通过DHCPv6协议获取IPv6相关信息。包括IP地址及DNS等信息。
  • 无状态DHCPv6(Stateless DHCPv6):这种介于上面两种形式中间,IP地址从RA报文中计算得到,而DNS信息,通过DHCPv6协议获取。

而在使用过程中,可以衍生出一种自动配置模式,即通过RA报文携带的信息,来确定IPv6信息该怎么获取。
那么我们简单需要理解什么是RA报文。

2、RA、RS报文

简介

NDP(Neighbor Discovery Protocol,邻居发现协议)是IPv6的基础协议,它组合了IPv4中的ARP、ICMP路由器发现和ICMP重定向等协议,并对它们作了改进。作为IPv6的基础性协议,NDP还提供了前缀发现、邻居不可达检测、重复地址监测、地址自动配置等功能。
NDP定义了5种ICMPv6报文类型,包括RS、RA、NS、NA和Redirect报文。

NS、NA简单来说就是邻居设备之间互通信息,完成IPv6地址到链路层地址的解析,然后通过解析后得到的链路层地址和IPv6等地址信息来建立相应的邻居缓存表项。

而RS、RA报文用于路由器发现

路由器发现是指主机定位本地链路上的路由器和确定其配置信息的过程,主要包含以下3方面内容:

  • 路由器发现(Router Discovery):主机发现邻居路由器及选择某一个路由器作为默认网关的过程。
  • 前缀发现(Prefix Discovery):主机发现本地链路上的一组IPv6前缀,生成前缀列表。该列表用于主机的地址自动配置和on-link判断。
  • 参数发现(Parameter Discovery):主机发现相关操作参数的过程,如MTU、报文的默认跳数限制、地址分配方式等信息。

全球单播地址的配置步骤如下:
1)客户端在配置好链路本地地址后,发送RS报文,请求路由器的前缀信息。
2)路由器收到RS报文后,发送单播RA报文,其中携带M、O flag用于指示进行何种类型配置,A flag用于无状态地址自动配置的前缀信息。同时路由器也会周期性地发送组播RA报文。
3)客户端根据RA报文携带A flag,获取网关信息。如果是自动配置或者是无状态,则根据M、O flag,选择IPv6地址及DNS的获取方式。

三个flag:M O A

如下图,可以看到客户端发送RS报文后,接收到路由器的RA报文
在这里插入图片描述

  • M flag:Managed address
    configuration字段,为1通过DHCPv6获取IP地址,为0则是通过RA报文获取地址。
  • O flag:Other configuration字段,为1通过DHCPv6获取DNS等其他配置,为0通过RA报文获取其他配置。

虽然M O flag具有四种组合,但实际中M=0,0=0是一直错误的配置,因为当IP通过DHCPv6
Server获取时,相应的DNS等其他配置信息也应从DHCPv6 Server获取以保证业务的连通性。

  • A flag:Autonomous address-configuration
    flag(A)字段,表示是否可以使用RA报文前缀信息配置无状态地址。

通过前缀,可以获取子网掩码长度,网关,以及计算出IP地址,图中例子,前缀信息如下:

 ICMPv6 Option (Prefix information : 2409:8a20:c1a:ce70::/64)

如果是客户端采用自动配置,那么则完全根据RA报文来决定如何获取IPv6相关配置,当然,客户端也可以无视RA报文,选择自己想要的配置方式。(如上图,RA报文配置为无状态DHCPv6模式,但是客户端其实也可以通过DHCPv6来获取有状态地址,只要DHCPv6 Server支持即可)。

所以,有状态及无状态地址并不是完全互斥,他们可以同时存在,如下图可以理解其流程:

图片引用自:https://www.cnblogs.com/fzxiaomange/p/ipv6-autoconf-stateless-stateful.html
在这里插入图片描述

3、DHCPv6协议

和IPv4的bootp(DHCPv4)作用类似,DHCPv6基于UDP,通过与服务器协商获取IP地址及DNS等信息。

DHCPv6报文类型:
目前DHCPv6定义了如下十三种类型报文,DHCPv6服务器和DHCPv6客户端之间通过这十三种类型的报文进行通信。

DHCPv6和DHCPv4报文对比,比较好理解,不做赘述:
在这里插入图片描述
交互例子如下,这是我在客户端已经获取到IPv6地址的情况下,重新进行IPv6有状态连接:
第一次是客户端发送confirm来确认已经获取的IPv6地址是否适用于当前链路;DHCPv6 Server通过reply回应。
第二次是发送request,请求IP地址及DNS等配置,可以看到DHCPv6 Server通过reply回应了IP地址及DNS。
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章