ut ipv6_开启和关闭IPV6的利弊

ut ipv6_开启和关闭IPV6的利弊5G的IPv6地址怎么分配?与IPv4不同的点有哪些?_ar5通过slaac分配好的单播地址

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。

博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解

SLAAC协议

在这里插入图片描述

IPv6地址分类和结构

      在开始学习SLAAC协议之前,我们先了解以下IPv6中的地址分类和地址结构,如下图。
在这里插入图片描述

IPv6 单播地址

      IPv6 单播地址分为三类:

  • IPv6公网单播地址:可在 IPv6 Internet 上路由的地址,类似IPv4公网地址;
    在这里插入图片描述

  • IPv6本地链路地址:仅用于连接在同一条本地链路上的IPv6设备之间的通信;
    在这里插入图片描述

  • IPv6 loopback 地址:不会分配给任何物理接口的 IPv6地址,主机会用该地址将数据包发送给自己;

    表示方法 IPv6 loopback 地址
    最佳书写格式 0000:0000:0000:0000:0000:0000:0000:0001
    省略前导0 0:0:0:0:0:0:0:1
    压缩格式 ::1
  • IPv6 未指定地址:只能作为IPv6数据包的源IP地址,表示(发送给IPv6数据包的主机)IPv6地址暂缺或不详;

    表示方法 IPv6 未指定地址
    最佳书写格式 0000:0000:0000:0000:0000:0000:0000:0000
    省略前导0 0:0:0:0:0:0:0:0
    压缩格式 ::
  • IPv6 本地唯一地址:类似于IPv4的私有地址,不能在IPv6 Internet 上路由;
    在这里插入图片描述

  • 嵌入IPv4地址的IPv6地址:一种在低位 “包含” 32位IPv4地址的IPv6地址,又可分为两种格式,

    • 由IPv4地址映射而成的IPv6地址;
      在这里插入图片描述
      如下表所示为IPv4地址 192.168.10.10 映射而成的 IPv6 地址的各种格式,

      表示方法 IPv4地址映射而成的IPv6地址
      最佳书写格式 0000:0000:0000:0000:0000:fffff:192.168.10.10
      省略前导0 0:0:0:0:0:ffff:192.168.10.10
      压缩格式 ::ffff:192.168.10.10
    • 兼容IPv4地址的IPv6地址(已弃用 )。

IPv6 多播地址

注意了,IPv6 与 IPv4 不同没有广播的定义

      IPv6 多播地址格式如下图,
在这里插入图片描述

表示方法 IPv6 多播地址
最佳书写格式 ff00:0000:0000:0000:0000:0000:0000:0000/8
省略前导0 ff00:0:0:0:0:0:0:0/8
压缩格式 ff00::/8

众所周知的 IPv6 多播地址

众所周知的 IPv6 多播地址 含义
ff02::1 所有 IPv6 设备的多播地址
ff02::2 所有 IPv6 路由器多播地址
ff02::5 所有 OSPFv3 路由器的多播地址
ff02::a 所有 EIGRP(IPv6)路由器的多播地址

IPv6 任播地址

      IPv6 任播地址没有特定的前缀,IPv6 任播地址范围与IPv6公网单播地址范围相同。IPv6 任播地址是指可被分配给多个接口的IPv6地址。换句话说,多台设备可设有相同的 IPv6 任播地址。路由器会根据本地路由表,将目的地址为 IPv6 任播地址的数据包路由至 “最近的” 设有该地址的设备(接口)。

关键术语介绍

首选地址:分配给接口的地址,上层协议对该接口的使用不受限制。首选地址可以用作从(或到)接口发送的数据包的源(或目的)地址;

弃用地址:分配给接口的地址,不鼓励使用,但不禁止使用。已弃用的地址不应再作为新通信的源地址,但从已弃用的地址或向已弃用的地址发送的数据包将按预期传递。当切换到首选地址导致某个特定上层活动(例如,一个现有的TCP连接)遇到故障时,废弃的地址可以继续作为通信中的源地址使用;

有效的地址:首选或已弃用的地址。一个有效的地址可以作为一个包的源地址或目的地址出现,并且互联网路由器会将带有有效地址的数据包传递给预期的收件人;

无效地址:没有分配给任何接口的地址。当有效地址的有效期到期时,有效地址将失效。无效地址不应作为数据包的目的地址或源地址出现。在前一种情况下,互联网路由系统将无法发送数据包;在后一种情况下,数据包的接收者将无法对其作出响应;

首选生存期:一个有效地址被首选的时间长度(即,直到弃用的时间)。当首选生存期到期时,该地址将变成弃用地址

有效生存期:地址保持有效状态的时间长度(即,直到失效的时间)。有效生存期必须大于或等于首选生存期。有效生存时间到期后,地址失效;

临时地址:在分配给接口之前,正在验证其在链路上的唯一性的地址。临时地址在通常意义上不被认为分配给接口。NIC会丢弃接收到的地址为临时地址的报文,但会接收与临时地址相关的重复地址检测报文;

interface identifier(接口ID):一个依赖于链路的标识符,每个链路至少是唯一的[RFC4291]。无状态地址自动配置将接口标识符与前缀组合成地址。从地址自动配置的角度来看,接口标识符是已知长度的位串。接口标识符的确切长度和创建方式是在一个单独的特定链接类型文档中定义的,该文档涵盖了与通过特定链接类型传输IP相关的问题(例如,[RFC2464])。注意,地址体系结构[RFC4291]还定义了一些地址集的接口标识符的长度,但这两组定义必须一致。在许多情况下,标识符将从接口的链路层地址派生;

on-link:指定链路上分配给接口的地址。一个节点认为一个地址是在线的,如果,

  • 被一个地址前缀覆盖的地址(例如,前缀信息选项中的on-link标志指出);
  • 邻居路由器指定该地址作为重定向消息的目标地址;
  • 收到邻居通告消息 的地址;
  • 收到任何邻居发现消息 的地址;

off-linkon-link 的反义词;没有分配给指定链路上任何接口的地址。

SLAAC协议讲解

SLAAC:Stateless Address Autoconfiguration

      网络中存在两种形式的自动配置,它们取决于需要生成什么类型的地址,对于只用于一条链路的地址(链路本地地址),一台主机只需要找到一些在链路上未使用的合适地址。但是,对于要用于全球性连接的地址,这类地址的某些部分通常必须被管理。IPv4 和 IPv6 都有用于链路本地地址自动配置的机制,一台主机基本不需要协助就可以决定自己的地址。这就是所谓的 无状态地址自动配置(SLAAC)

      IPv6 SLAAC 的目标是允许节点自动(和自主)分配链路本地IPv6地址。【RFC4862】中描述了 IPv6 SLAAC。它包括3个主要步骤:

  • 获得一个链路本地地址
  • 检测链路本地地址是否已在链路中使用
  • 使用SLAAC获取全球地址
  • 检测全球地址是否已在链路中使用

SLAAC可用于没有路由器的环境,在这种情况下只分配链路本地地址当路由器存在的时,有一个路由器通告的前缀和本地产生的信息组合成一个全球地址。SLAAC也可结合DHCPv6使用,以允许一台主机获得除自己地址外的其它信息(称为 “无状态” DHCPv6)。当网络采用有状态或无状态DHCPv6配置时,执行SLAAC的主机可用于同一网络中。在通常情况下,有状态DHCPv6用于需要为主机更精确分配地址时,但无状态DHCPv6和SLAAC结合是最常见的部署选择。

      在IPv6中,临时链路本地地址由【RFC4291】和【RFC4941】规定的过程来选择。它们只用于具有组播能力的网络,并在建立时分配了极大的首选和有效生命周期。为了形成数字化的地址,在熟知的链路本地前缀 fe80::/10之后附加了一个唯一的编号。这是通过将地址中最右边的N位设为N位数字,最左边的10位设为10位链路本地前缀 1111111010,并且其余为设为 0 来实现。生成的地址设置为临时状态,并检查该地址是否重复。

IPv6 重复地址检测(DAD)

      IPv6 DAD 使用 ICMPv6 邻居请求邻居通告 消息,以确定一个特定(临时)IPv6地址是否已在链路中使用。【RFC4862】中定义了DAD过程,并建议在为一个接口分配IPv6地址时使用,无论手动分配还是自动配置或DHCPv6分配。如果发现地址重复,将不使用该临时地址。如果DAD成功,临时地址转换为优先状态,并可不受限制的使用。

      DAD按以下步骤执行:一个节点首先加入临时地址的所有节点组播地址请求节点组播地址 。为了检查使用的地址是否重复,一个节点发送一个或多个 ICMPv6 邻居请求 消息。这些消息的源和目的IPv6地址分别时未指定地址 和 被检查目的地址的 请求节点地址 。目的地址字段设置为被检查的地址(临时地址)。如果在一个时间段内接收到一个*邻居通告 * 消息,说明DAD失败,并放弃被检查的地址。

      当一个地址未成功完成DAD时,任何针对它的邻居请求被视为一种特殊情况,说明其它主机有使用相同地址的意图。如果接收到这些消息,丢弃它们,放弃当前的临时地址,并且DAD失败

全球地址的 IPv6 SLAAC

      在一个节点已获得一个链路本地地址之后,它可能需要一个或多个全球地址。全球地址的形成过程类似于链路本地SLAAC,但需要使用一个由路由器提供的前缀。这个前缀就携带在一个路由器通告 消息的前缀选项中,并且由一个标志来表示这个前缀是否用于与SLAAC共同形成全球地址。如果是,这个前缀与接口ID组合成一个全球地址。这种地址的首选和有效生命周期也由前缀选项携带的信息来确定。

路由请求消息格式

通常路由器会周期性发送路由通知 消息,但是这个周期一般比较长。所以主机会主动发送路由器请求 消息,以提示路由器快速生成路由器通告 消息。格式如下,
在这里插入图片描述

字段 含义
Type 133
code 0
CheckSum ICMPv6的校验和
Reserved 未使用,必须设置为0

路由通告消息格式

在这里插入图片描述

字段 含义
Type 134
code 0
CheckSum ICMPv6的校验和
Cur Hop Limit 8bit 无符号整数。缺省值,应该放在IP报文的IP头跳数字段中。值0意味未定义
M 1bit。为1时,表示使用DHCPv6获取地址。如果设置M字段,则忽视O地段的设置
O 1bit。除了IP地址之外,其它参数可以通过DHCPv6获取。例如,DNS相关的信息
Reserved 6bit 未使用字段,必须初始化为0
Router Lifetime 16bit 无符号整数。默认路由的生存期,以秒为单位。如果值为0,表示这个路由器不适合作为默认路由器,主机不应该将这个路由器放入默认路由器列表。只有当这个路由器为默认路由器时,此参数才生效
Reachable Time 32bit 无符号整数。在收到可达性确认后,节点认为邻居是可达的时间,以毫秒为单位。用于邻居不可达性检测算法。值为0表示未指定(在此路由器上)
Retrans Timer 32bit 无符号整数。重传邻居请求消息的时间,以毫秒为单位。用于地址解析和邻居不可达性检测算法。值为0表示未指定(在此路由器上)。避免链路上一瞬间有太多的邻居请求消息引发网络拥塞

我们需要的前缀信息就在 Options 字段中包含,格式如下,
在这里插入图片描述

字段 含义
Type 3
Length 4
Prefix Length 8bit 无符号整数。前缀中有效的前导位数。取值范围为0 ~ 128
L 1bit on-link标志。当设置时,表示该前缀可用于 on-link 判定。如果不设置,则该通知不声明前缀的on-link或off-link属性。换句话说,如果没有设置L标志,主机绝对不能断定由前缀派生的地址是off-link的。也就是说,它绝对不能更新先前关于这个地址是 on-link 的指示信息
A 1bit SLAAC使能字段。当设置为1时,表示这个前缀信息可以用于SLAAC
Reserved1 6bit 未使用字段,必须被初始化为0
Valid Lifetime 32bit 无符号整数。前缀的有效时间,单位是秒(相对于报文发送时间)。全1位的值(0xffffffff)表示无穷大。
Preferred Lifetime 32bit 无符号整数。SLAAC使用此前缀生成的地址保持优先的时间(以秒为单位,与报文发送时间相关)。全1位的值(0xffffffff)表示无穷大。注意,这个字段的值一定不能超过Valid Lifetime字段,以避免优先选择不再有效的地址
Reserved2 未使用字段,必须被初始化为0
Prefix IP地址或IP地址的前缀。Prefix Length字段包含前缀中有效前导位的个数。前缀长度之后的位被保留,发送方必须初始化为零,接收方必须忽略。路由器不应该为链路本地前缀发送前缀选项,主机应该忽略这样的前缀选项

邻居请求消息格式

重复地址检测过程,通过发送邻居请求消息实现,
在这里插入图片描述

字段 含义
Type 135
code 0
CheckSum ICMPv6的校验和
Reserved 未使用,必须设置为0
Target Address 请求的目标IP地址,此地址不能是多播地址。在DAD中,此字段是临时地址

邻居通告消息格式

如果有邻居发现这个临时地址已经被使用,则发送邻居通告消息告知目标主机,格式如下,
在这里插入图片描述

字段 含义
Type 136
code 0
CheckSum ICMPv6的校验和
R 路由字段。当设置为1时,表示发送者为路由器
S 请求字段。当设置S为1时,表示该通告是对来自目的地址的邻居请求的响应
O 覆写字段。如果设置O字段为1,表示通告应该覆盖现有的缓存条目并更新缓存的链路层地址。如果没有设置,则不会更新缓存的链路层地址,但它会更新已存在但链路层地址未知的邻居缓存条目
Reserved 29bit 未使用,必须设置为0
Target Address 位于邻居请求消息中的Target Address 字段值。对于非请求的通知消息,这个字段表示某设备的链路层地址发生了变化。此字段不能是多播地址

举个例子

打开WireShark,监听我们的网卡,然后重启网卡,就会收到关于SLAAC 的 ICMPv6 消息。如下图,
在这里插入图片描述
首先主机自己选择了一个链路本地地址 “fe80::b951:1262:232:cda5”,并发送 NS(邻居请求消息)进行DAD过程,如下图,
在这里插入图片描述
可以看到这个消息的源地址是 未指定的地址 表示用于DAD流程,Target Address 字段设置为临时地址 “fe80::b951:1262:232:cda5”。与此同时,发送 RS(路由器请求消息)用于获取全球IP地址。

注意,为了提升效率,主机会同时执行本地链路IP地址DAD流程和全球IP地址请求过程。

主机发送RS消息,请求全球IP地址,如下图,
在这里插入图片描述
主机将RS的目标地址设置为所有路由器的多播地址 ff02::2 ,随后收到了路由器的RA(路由器通知消息)消息,分配的全球IP前缀为 “240e:404:2a21:a475::/64”,如下图
在这里插入图片描述
随后主机使用分配的IP前缀和接口ID组成了全球IPv6地址 “240e:404:2a21:a475:b951:1262:232:cda5”,并对这个临时地址发起DAD流程,如下图,
在这里插入图片描述
至此整个SLAAC流程就结束了。


在这里插入图片描述

今天的文章ut ipv6_开启和关闭IPV6的利弊分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82854.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注