1.说明

IPv6是互联网协议的第六版,

现有IPv4只支持大概40亿个网络地址,

而IPv6支持3.4e38个网络地址。

IPv4的地址长度是32位(bit),

IPv6的地址长度是128位。

尽管大部分IPv4计算机每个接口只有一个IP地址,

但是IPv6计算机通常会有两个IP地址:

一个本地链路地址和一个全球单播地址。

2.首选格式(冒分十六进制表示法)

一个128位二进制数的IPv6地址如下:

0010000000000001 0000000000000000 0011001000111000 1101111111100001
0000000001100011 0000000000000000 0000000000000000 1111111011111011

一般二进制数不好阅读和记忆,

所以推荐使用十六进制数作为首选格式,

这128位的地址按每16位划分为一组,

每组转换成4个十六进制数,

每组之间用冒号隔开,

称为冒分十六进制表示法。

一个典型的IPv6地址为8组4个十六进制数,如下:

2001:0000:0000:0000:085b:3c51:f5ff:ffdb

3.压缩格式

基于使用冒分十六进制表示法的首选格式,

IPv6地址还可以进一步压缩为两种短格式。

3.1.省略前导零

可以省去任意组的前导零来压缩IPv6地址,
085b可以化简为85b

全0块0000可以化简为0

下面的IP地址与前一个IP地址完全相同:

2001:0:0:0:85b:3c51:f5ff:ffdb

3.2.双冒号::

对于多个连续地址块为0的情况时,

可以使用双冒号::压缩。

下面的IP地址省略了3组全0

只使用剩下的5组十六进制数,

实际与前一个IP地址完全相同:

2001::85b:3c51:f5ff:ffdb

为保证地址解析的唯一性,

地址中双冒号::只能出现一次,

因为IPv6地址始终会有8组4个十六进制数,

所以可以确定有多少全0组被省略。

如果出现多个连续全0块时,

双冒号::要化简最长的一段,

没有最长的使用就近原则,

压缩最靠近左边的第一段,

双冒号::可以出现在地址开头或结尾。

4.内嵌IPv4地址的格式

为了实现IPv4-IPv6互通,

IPv4地址会嵌入IPv6地址中,

此时地址常表示为:

X:X:X:X:X:X:d.d.d.d

地址前96位采用冒分十六进制表示法,

地址后32位则使用IPv4的点分十进制表示法,

下面两个地址是典型的内嵌IPv4地址:

::192.168.0.1
::FFFF:192.168.0.1

注意在地址前96位中,压缩格式仍然适用。

4.1.通过IPv4映射的IPv6地址

此类型的地址用于将IPv4节点表示为IPv6地址。

它允许IPv6应用程序直接与IPv4应用程序通信。

例如:

0:0:0:0:0:ffff:192.1.56.10
::ffff:192.1.56.10/96

4.2.兼容IPv4的IPv6地址

此类型的地址用于隧道传送。

它允许IPv6节点通过IPv4基础结构通信。

例如:

0:0:0:0:0:0:192.1.56.10
::192.1.56.10/96

5.地址类型

IPv6协议主要定义了三种地址类型:

  • 单播地址(Unicast Address)
  • 任播地址(Anycast Address)
  • 组播地址(Multicast Address)

5.1.单播地址

一个单播地址对应一个接口,

发往单播地址的数据包会被送到对应的接口。

5.1.1 全球单播地址

前缀2000::/3,相当于IPv4的公网地址。

这种地址在全球的路由器间可以路由。

5.1.2 链路本地地址

前缀FE80::/10,

此类地址用于同一链路上的节点间的通信,

主要用于自动配置地址和邻居节点发现过程。

Windows和Linux支持或开启IPv6后,

默认会给网卡接口自动配置一个链路本地地址。

Linux下查看链路本地地址:

Windows下查看链路本地地址:

每个接口必须至少有一个链路本地地址,

每个接口可以配置1个以上的单播地址,

例如一个接口可以配置一个链路本地地址,

同时也可以配置一个全球单播地址。

5.1.3 唯一本地地址

前缀FC00::/7,

相当于IPv4的私网地址(10.0.0.0、172.16.0.0、192.168.0.0),

在RFC4193中新定义的一种解决私网需求的单播地址类型,

用来代替废弃使用的站点本地地址。

由于默认情况下私网内节点与外界通信的发起是单向的,

网络访问仅仅能从私网内发起,

外部发起的请求会被统一网关或者防火墙阻隔掉,

这样的网络架构很好的保护了私网内的节点安全性和私密性。

因此,在安全性和私密性要求下,

IPv6中同样需要支持私网,并且也需要支持NAT。

5.1.4 站点本地地址

前缀FEC9::/48,以前是用来部署私网的,

但RFC3879中已经不建议使用这类地址,

实际上这种地址已经不再使用,

建议使用唯一本地地址。

5.1.5 特殊地址:回环地址

0:0:0:0:0:0:0:1或::1,

等同于IPv4的127.0.0.1。

5.1.6过渡地址:内嵌IPv4地址的IPv6地址

参考上面的第4章节,

这类地址主要用于IPv6/IPv4的过渡技术中。

5.2.任播地址

一个任播地址对应一组接口,

发往任播地址的数据包会被送到这组接口中最近的一个接口,

最近的一个被标识接口由具体的路由协议确定。

5.3.组播地址

一个组播地址对应一组接口,

发往组播地址的数据包会被送到这组的所有接口。

IPv6中没有广播地址,其功能被组播地址取代。

6.参考文章:

IP Version 6 Addressing Architecture
RFC 2732 Format for Literal IPv6 Addresses in URL's
IPV6地址和报文结构详解
IPv6技术详解:基本概念、应用现状、技术实践(上篇)
IPv6技术详解:基本概念、应用现状、技术实践(下篇)

IPv6地址格式的更多相关文章

  1. IPV6地址格式分析

    IPV6地址格式分析 IPv6的地址长度是128位(bit). 将这128位的地址按每16位划分为一个段,将每个段转换成十六进制数字,并用冒号隔开. 例如:2000:0000:0000:0000:00 ...

  2. IPv6地址格式示例及IPv6与IPv4的区别分析

    认识IPv6地址 IPv4地址是类似 A.B.C.D 的格式,它是32位,用\".\"分成四段,用10进制表示: 而IPv6地址类似X:X:X:X:X:X:X:X的格式,它是128 ...

  3. IPv6介绍

    一.为什么需要IPv6 为了扩大地址空间,拟通过IPv6重新定义地址空间.IPv4采用32位地址长度,只有大约43亿个地址,估计在2005-2010年间将被分配完毕,而IPv6采用128位地址长度,几 ...

  4. [华三] IPv6技术白皮书(V1.00)

    IPv6技术白皮书(V1.00) http://www.h3c.com/cn/d_200802/605649_30003_0.htm H3C S7500E IPv6技术白皮书 关键词:IPv6,隧道 ...

  5. IPV6相关RFC文档

    1. 通用 IPv6的通用RFC和Internet草案 RFC# 类 标题 1752 标准记录 对IP下一代协议的建议 1924 资料 IPv6地址的压缩表示法 2851 标准记录 Internet网 ...

  6. Nginx模块参考手册:HTTP核心模块

    FROM: http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=17238776&id=2982697 这些模块默认会全部编 ...

  7. 网络编程之addrinfo

    addrinfo结构体定义如下: typedef struct addrinfo { int ai_flags;//指示在getaddrinfo函数中使用的选项的标志. int ai_family; ...

  8. Linux tcpdump命令详解

    tcpdump官网:http://www.tcpdump.org/ 转载于:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.ht ...

  9. Linux tcpdump 详解

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

随机推荐

  1. 转 Android应用开发必备的20条技能

    https://blog.csdn.net/u012269126/article/details/52433237 有些andorid开发人员感觉很迷茫,接下来该去看系统源码还是继续做应用,但是感觉每 ...

  2. ubantu上编辑windows程序

    命令简记 cd $GOROOT/src cp -r $GOROOT /root/go1.4 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 ./make.bash 操作 ...

  3. MySQL 迁移到 Redis 记

    前些日子,一个悠闲又不悠闲的下午,我还在用 Node.js 写着某个移动互联网应用的 API 服务端.那时还是用 MySQL 作为数据库,一切都很好,所有功能正常运行.可是有很多问题让人不安: 频繁的 ...

  4. Java虚拟机(JVM)以及跨平台原理

    相信大家已经了解到Java具有跨平台的特性,可以"一次编译,到处运行",在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台 ...

  5. 【Java基础】Java反射——Private Fields and Methods

    Despite the common belief it is actually possible to access private fields and methods of other clas ...

  6. SQL查询:并集、差集、交集

    新建两个表进行测试: test_a ID name 1 曹操 2 郭嘉 3 孙权 4 周瑜 test_b ID name 1 刘备 2 关羽 3 张飞 4 孙权 5 周瑜 1.UNION形成并集 UN ...

  7. 安装Google BBR加速

    目录 一.简介 二.安装 三.设置BBR 一.简介 Google BBR 是一款免费开源的TCP拥塞控制传输控制协议, 可以使Linux服务器显著提高吞吐量和减少TCP连接的延迟. 二.安装 1.yu ...

  8. 基于TSN 802.1AS协议的时间同步分析(7种延时,1次厘清)

    前言 往期的时间同步--802.1AS协议介绍一文向大家介绍了802.1AS协议的基本内容,基于时间同步协议就能实现主节点与各从节点的时间同步,但是如何评价时间同步的优劣呢?这就需要我们通过一些时间同 ...

  9. < 转>Java 反射机制浅析

    一.什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领 域关于应用反射性的研究.它首先被程序 ...

  10. Go - 如何编写 ProtoBuf 插件(二)?

    目录 前言 定义插件 使用插件 获取自定义选项 小结 推荐阅读 前言 上篇文章<Go - 如何编写 ProtoBuf 插件 (一) >,分享了使用 proto3 的 自定义选项 可以实现插 ...