IPv6地址格式

IPv6地址是一个128比特的无符号整数,用来标识一个或多个网络接口,如240c::0001、fe80::28ae:d1b2:da61:102a等。

与IPv4不同,一个网络接口可以存在一个或多个IPv6地址。

IPv6前缀对应IPv4子网掩码。

IPv6地址表示

IPv6地址传统的文本表示是以十六进制书写的,用“:”分割的8个16比特段来表示。

如:12:34:56:78:9A:BC:DE:FF

RFC4291中表示:

  1. 十六进制与大小无关。

    如:12: 34: 56: 78: 9A: BC: DE: F0与12: 34: 56: 78: 9a: bc: de: f0一致。

  2. 可以将连续的全零字段合并,写成压缩的“::”形式,避免二义性,“::”只能出现一次。

    如:2001:0:0:1:0:0:2:2,可以写成2001::1:0:0:2:2或2001:0:0:1::2:2,但不能写成2001::1::2:2。

  3. IPv6网络前缀的文本表示为IPv6地址/前缀长度。前缀长度是一个十进制,用来表示前缀的前导比特长度。

    如:2001:0:0:1:0:0:2:2/64。仅表示前缀(非地址)时,等价与2001:0:0:1::/64。

基于RFC4291的文本灵活性(即单个地址有多种表示方式)导致数据筛选困难、部分应用不兼容等问题,引入RFC5952进行补充。

  1. 必须抑制前导零

    如:2001:0db8::0001 是不可接受,必须表示为 2001:db8::1。单个16位 0000 字段必须表示为 0。

  2. “::”的用法

    • 必须最大限度地使用符号“::”。

      如:2001:db8:0:0:0:0:2:1,必须缩短为 2001:db8::2:1。同样,2001:db8::0:1 也是不可接受的,因为符号“::”可以用来生成更短的表示 2001:db8::1。

    • 符号“::”不得仅用于缩短一个 16 位 0 字段。
      如:2001:db8:0:1:1:1:1:1,表示2001:db8::1:1:1:1:1 是不正确的。

    • 当“::”的位置有其他选择时,最长的连续 16 位 0 字段必须缩短。

      如:2001:0:0:1:0:0:0:1,具有三个连续零字段,表示2001:0:0:1::1是正确的,但2001::1:0:0:0:1是不正确的。

    • 当连续 16 位 0 字段的长度相等(即),第一个零序列位必须缩短。

      如:2001:db8:0:0:1:0:0:1,表示2001:db8::1:0:0:1 是正确的,表示2001:db8:0::0:1::1 是不正确的。

  3. IPv6 地址中的字符“a”、“b”、“c”、“d”、“e”和“f”必须以小写形式表示。

  4. 其他请参考RFC5952:A Recommendation for IPv6 Address Text Representation

IPv6地址分类

  1. 单播(unicast):标识一个网络接口;目标为一个单播地址的分组会被传送到一个网络接口上去。

    其中单播地址分为3中类型范围:链路本地(link-local)站点本地(site-local)和全局(global)范围。

  2. 任播(anycast):标识一组网络接口,但目标为一个任播地址的分组只会被送到那组中的一个接口去。

  3. 多播(multicast):标识一组网络接口,指网络中一个节点发出的信息被多个节点收到,这些接口可能属于不同的节点。目标为多播地址的分组会被传送给那个组中的所有的成员。不能作为源地址使用。

  4. 环回地址(Loopback):不分配给任何物理接口。它被视为具有
    Link-Local 范围,并且可以被认为
    是虚拟接口(通常称为“环回
    接口”)的 Link-Local 单播地址,连接到无处可去的假想链路

  5. 不确定地址(Unspecified):不确定地址不能分配给任何节点,它表示没有地址。其使用的一个示例是在初始化主机通过DAD获知自己的地址之前发送的任何 IPv6 数据包的源地址字段中。

    注意:IPv6没有广播地址。原因之一:网络层的广播地址通常会造成链路级的广播,这样影响到附属链路中的所有设备,甚至包括那些根本不支持特定网络协议的设备。它的功能被多播地址所取代

各地址范围如下:

地址类型 二进制表示 IPv6表示
不确定地址 00…0(128 bits) ::/128
回环地址 00…1(128 bits) ::1/128
多播地址 111111111 FF00::/8
本地链路地址 1111111010 FE80::/10
全球单播地址 上述几种之外的所有地址

任播地址取自单播地址空间(任何范围)并且在语法上与单播没有区别地址。

单播

单播地址分为3中类型范围:链路本地(link-local)、站点本地(site-local)和全局(global)范围。

链路本地

链路本地地址只在分配地址的接口所附接的网络链路上有效。要求每个支持IPv6的接口都至少要有一个链路本地地址。

链路本地地址(fe80::/10)
10 bits 54 bits 64 bits
1111111010 0 接口标识符

范围区域

按照范围的拓扑结构连接起来的区域被称为范围区域(scope zone)或简称为区域(zero)。

每个IPv6地址都属于且只属于一个对应于其地址范围的区域,即一个范围区域IPv6地址是唯一的。

链路本地区域(或链路区域)就是由一条特定的网络链路和连接到那条链路上的多个接口组成的,赋给一个接口的链路本地地址就属于一个特定的链路本地区城,如图A与B属于不同的链路区域。

图1:

图2:

图2拓扑存在的问题:当路由需要与fe80::1(非全局地址)进行交互时,不能识别出需要发往A还是发往B。

地址的唯一性只能在相应的区域内得到保证(图1),范围受限地址在其范围区域边界上就具有二义性(图2),故引入区域ID的概念。

区域ID文本表示

  1. 定义了一种IPv6地址的基本文本表示形式的扩展,如下所示:

    < address >%< zone id >

    其中:

    < address >是IPv6地址。

    < zone id >是用来标识地址区域的字符串。

    %是用来区分< address >和< zone id >的分隔字符。

    形式为: fe80::1%1,表示fe80::1地址的区域ID为1。

  2. 还允许特有的方式来表示< zone id >部分:

    将接口名作为链路ID:

    形式为:fe80::1%eth0,表示fe80::1地址的接口名为eth0。

  3. KAME内核中还使用了另外一种区域ID:

整体转换如下:

嵌入ID:如上所述地址中嵌入区域ID,如fe80::1区域ID为1,嵌入后变成fe80:1::1

sin6_scope_id:表示在结构体中sockaddr_in6{}结构体中设置sin6_scope_id=1。

站点本地地址

站点本地地址(fec0::/10)
10 bits 54 bits 64 bits
1111111011 子网ID 接口标识符

IPv6 工作组概述了当前站点本地寻址范围的几个缺陷。这些缺陷分为两大类:地址模糊站点定义模糊

因此在RFC3879:Deprecating Site Local Addresses中对站点单播进行废弃,将fec0::/10纳入进全球单播地址中,但仍然保留站点地址的多播地址。

全局范围

全局地址在整个因特网范围有效。

普通全球地址
n bits 64-n bits 64 bits
全局路由前缀 子网ID 接口标识符

任播

它的最初语义是,在 IP 网络上通过一个 Anycast 地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如 DNS 或者镜像服务),访问该地址的报文可以被 IP 网络路由到这一组目标中的任何一台主机上,它提供的是一种无状态的、尽力而为的服务。

与多播不同的是,任播在一组接口中取得最优的解进行服务,而多播是无差别对一组接口进行交互。即任播为1对1(多个中选出最优的1个),而多播是1对多。

RFC2526:Reserved IPv6 Subnet Anycast Addresses对任播子网进行说明。

维基百科:在互联网中,通常使用边界网关协议(BGP)来实现任播。

多播

多播地址格式:

8 bits 4 bits 4 bits 8 bits 8 bits 64 bits 32 bits
11111111 标志 范围 保留 前缀长度 网络前缀 组ID

标志(flags):标识了组的分配属性。

1 bit 1 bit 1 bit 1 bit
0 R标志 P标志 T标志
保留 必须为0 进一步基于网络前缀分配的多播地址。R=1时P、T必须为1 P=1 基于网络前缀分配的多播地址,与多播地址格式中的8bits前缀长度、64bits网络前缀长度搭配使用,P=1时T必须为1
P=0 不是基于网络前缀分配的多播地址
T=0 永久地址,由IANA分配的
T=1 动态分配

通常R标志、P标志位均为0。

详细可参考:

R标志:RFC3306:Unicast-Prefix-based IPv6 Multicast Addresses

P标志:RFC3956:Embedding the Rendezvous Point (RP) Address in an IPv6 Multicast Address

范围(scope):说明了地址范围的类型。

0 保留
1 接口本地
2 链路本地
3 保留
4 管理本地
5 站点本地
6 未分配
7 未分配
8 组织本地
9 未分配
A 未分配
B 未分配
C 未分配
D 未分配
E 全局
F 保留

前缓长度(plen)和网络前级(network prefix)字段对某些类型的多播地址有效,标识了拥有这个多播地址的IPv6单播子网。

组ID(group ID):标识了一个特定的多播组。

保留(reserved)字段必须为零。

Pv6地址体系结构规范定义了一些特殊的多播地址:

  1. 所有节点多播地址(all-nodesmulticast addresses)
所有节点多播地址
ff01:0:0:0: 0:0:0:1 接口本地范围
ff02:0:0:0:0:0:0:1 链路本地范围
  1. 所有路由器多播地址(all-routers multicast addresses)
所有路由器多播地址
ff01:0:0:0:0:0:0:2 接口本地范围
ff02:0:0:0:0:0:0:2 链路本地范围
ff05:0:0:0:0:0:0:2 站点本地范围
  1. 请求节点多播地址(solicited-node multicast addresses)
请求节点多播地址
fe02:0:0:0:0:1:ff00::/104 请求节点多播地址

如:2001:db8:7654:3210:fedc:ba98:7654:3210那么相应的请求节点多播地址为ff02:0:0:0:0:1:ff54:3210。

原地址 2001:db8:7654:3210:fedc:ba98:76 54:3210
请求节点多播地址前缀 ff02:0:0:0:0:1:ff
请求节点多播地址 ff02:0:0:0:0:1:ff 54:3210

进行邻居发现和重复地址检测(DAD)时,要求节点加入请求节点多播地址组。

接口标识符

IPV6地址的接口标识符部分可以手工配置也可以自动配置

不管采用哪种配置方法,在接口所连接的链路上,接口标识符都必须是唯一的

EUI-64的生成

EUI-64 格式:

u/l位(全局/本地比特)
0 本地管理
1 全局管理
i/g位(组/个体比特)
0 个人地址(单播)
1 组地址(多播)

IEEE EUI-64通过MAC-48第23位中插入0xfffe生成。

当从 IEEE EUI-64 标识符形成IPv6接口标识符时,称为修改的EUI-64:

修改的EUI-64中“u”位设置为1以表示全局范围,设置为零 0以表示本地范围,与 IEEE EUI-64刚好相反。

通过反转“u”位(IEEE EUI-64 术语中的全局/本地位)来形成修改的 EUI-64 格式接口标识符。

如MAC-48的网卡:00-60-97-8f-6a-4e那么转换后得到02-60-97-ff-fe-8f-6a-4e。

参考

RFC

当前标准:

RFC4291:IP Version 6 Addressing Architecture

围绕RFC4291进行补充:

RFC5952:A Recommendation for IPv6 Address Text Representation

RFC7136:Significance of IPv6 Interface Identifiers

RFC7346:IPv6 Multicast Address Scopes

RFC7371:Updates to the IPv6 Multicast Addressing Architecture

RFC8064:Recommendation on Stable IPv6 Interface Identifiers

RFC4007: IPv6 Scoped Address Architecture

废弃标准:

RFC3513:Internet Protocol Version 6 (IPv6) Addressing Architecture

RFC2373:IP Version 6 Addressing Architecture

RFC1884:IP Version 6 Addressing Architecture

废弃标准:

RFC3513:Internet Protocol Version 6 (IPv6) Addressing Architecture

RFC2373:IP Version 6 Addressing Architecture

RFC1884:IP Version 6 Addressing Architecture

书籍

《IPv6详细卷1:核心协议实现》

IPv6基础:IPv6地址及其范围区域相关推荐

  1. IPv6基础-IPv6地址

    IPv6地址:128bit,16个字节. 1 三类表示方法 首选格式.压缩格式.特殊格式 (1)首选格式:X:X:X:X:X:X:X:X,8个16bit段,前导零可以删除,但是每段要有一个数字: 举例 ...

  2. 华为HCIA-datacom 学习笔记17——IPv6基础

    华为HCIA-datacom 学习笔记17--IPv6基础 IPv6基础 1.ipv4与ipv6 地址长度32bit IPv6:IP地址长度128bit IPv4包头(20byte~60byte) I ...

  3. 【IPv6基础系列科普视频】IPv6地址、IPv6 DNS、DHCPv6...精华视频一键打包,谁看谁会!

    为何引进IPv6地址?IPv6地址只是扩大了地址空间吗? IPv6的演进过程是怎样的? IPv6 DNS是什么?为什么需要IPv6 DNS? 为什么需要ND?ND只是替代了IPv4的ARP吗? NAT ...

  4. 一文快速掌握IPv6基础知识及使用指南

    随着5G.物联网等新兴技术领域的发展,IP空间需求巨大,IPv6成为万物互联的基础,势在必行:华为云作为IPv6成熟商用开拓者,针对金融.广电.媒资等不同行业推出IPv6解决方案,助力企业平滑升级到I ...

  5. IPv6基础介绍--IPv6路由基础--DHCPv6原理与配置——总结

    一.IPv6基础介绍 1.IPv6是Internet工程任务组(IETF)设计的一套规范,它是网络层协议的第二代标准协议,也是IPv4(Internet Protocol Version 4)的升级版 ...

  6. 计算机网络——IPV6基础知识

    目录 前言 一.IPv6的基本概念 1. IPv6地址 2. IPv6基本报头 3. IPv6扩展报头 二.IPv6地址格式和地址类型 1. IPv6地址格式 2. IPv6地址压缩格式 3. IPv ...

  7. 如何开启系统的ipv6服务器,ipv6地址怎么开启服务器

    ipv6地址怎么开启服务器 内容精选 换一换 安全组创建后,您可以在安全组中设置出方向.入方向规则,这些规则会对安全组内部的云服务器出入方向网络流量进行访问控制,当云服务器加入该安全组后,即受到这些访 ...

  8. IPv6基础知识总结

    最近在做IPv6的工作,基于Linux平台,主要内容涉及IPv6协议栈处理.报文转发相关的内容,做之前对IPv6的了解基本为零,平常基本不用.各方面收集了很多资料,取其精华笔记一下.内容简单,分为三个 ...

  9. 华为数通笔记-IPV6基础

    IPv6概述 IPv4现状 2011年2月3日,IANA(Internet Assigned Numbers Authority,因特网地址分配组织)宣布将其最后的468万个IPv4地址平均分配到全球 ...

最新文章

  1. iis+php解析漏洞修复,IIS7.0畸形解析漏洞通杀0day
  2. 在 Linux 命令行里与其他用户通信
  3. cad图形如何导入到奥维地图_将设计线路CAD图导入到奥维互动地图的方法
  4. apache工作原理
  5. music‘s effects
  6. 吴恩达 coursera AI 第二课总结+作业答案
  7. OpenGL绘制一个四边形
  8. Apache Cassandra 数据存储模型
  9. mysql初级数据库_MYSQL初级数据库操作
  10. 贪婪的送礼者(洛谷P1201题题解,Java语言描述)
  11. python2.7教程-python2.7学习笔记——菜鸟教程
  12. encodeURI和uncodeURIComponent的介绍
  13. LINUX编译autoconf
  14. 哔哩哔哩没有html5播放,解决哔哩哔哩网页版视频空白不能播放的方法
  15. 利用MATLAB实现空间两点距离的计算以及优化
  16. 【2020年高被引学者】 王威廉 加州大学圣塔芭芭拉分校
  17. Win10系统QQ无法登录,00001错误解决办法
  18. 集体智慧编程——使用决策树发现潜在客户
  19. 楚汉骄雄之楚汉争雄 - 分集剧情介绍
  20. java jsp教师工资计算_基于jsp的教师工资管理-JavaEE实现教师工资管理 - java项目源码...

热门文章

  1. 基于mpi的奇偶排序_奇偶排序
  2. 基于特征的对抗迁移学习论文_学界 | 综述论文:四大类深度迁移学习
  3. 自考总结 --- 颗粒归仓
  4. mac goLang安装打不开
  5. linux的环境变量设置
  6. 技术科普丨手机摄像头马达类型浅析
  7. 关于打开Unity3d 出现0xc000007b的解决方法
  8. 安卓手机上哪个支持语音输入的记事本软件好用?
  9. 笔记整理:技术架构涵盖内容和演变过程总结
  10. DB2自定义函数(C语言)