IPv6基础:IPv6地址及其范围区域

您所在的位置:网站首页 ipv6的ip地址是使用几个字节表示的 IPv6基础:IPv6地址及其范围区域

IPv6基础:IPv6地址及其范围区域

#IPv6基础:IPv6地址及其范围区域| 来源: 网络整理| 查看: 265

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中表示:

十六进制与大小无关。

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

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

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

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

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

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

必须抑制前导零。

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

“::”的用法

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

如: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 是不正确的。

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

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

IPv6地址分类

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

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

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

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

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

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

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

各地址范围如下:

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

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

单播

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

链路本地

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

链路本地地址(fe80::/10)10 bits54 bits64 bits11111110100接口标识符 范围区域

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

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

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

图1:

在这里插入图片描述

图2: 在这里插入图片描述

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

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

区域ID文本表示

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

< address >%< zone id >

其中:

< address >是IPv6地址。

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

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

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

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

将接口名作为链路ID:

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

KAME内核中还使用了另外一种区域ID: 在这里插入图片描述

整体转换如下:

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

sin6_scope_id:表示在结构体中sockaddr_in6{}结构体中设置sin6_scope_id=1。 在这里插入图片描述

站点本地地址 站点本地地址(fec0::/10)10 bits54 bits64 bits1111111011子网ID接口标识符

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

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

全局范围

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

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

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

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

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

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

多播

多播地址格式:

8 bits4 bits4 bits8 bits8 bits64 bits32 bits11111111标志范围保留前缀长度网络前缀组ID

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

1 bit1 bit1 bit1 bit0R标志P标志T标志保留 必须为0进一步基于网络前缀分配的多播地址。R=1时P、T必须为1P=1 基于网络前缀分配的多播地址,与多播地址格式中的8bits前缀长度、64bits网络前缀长度搭配使用,P=1时T必须为1P=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地址体系结构规范定义了一些特殊的多播地址:

所有节点多播地址(all-nodesmulticast addresses) 所有节点多播地址ff01:0:0:0: 0:0:0:1接口本地范围ff02:0:0:0:0:0:0: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站点本地范围 请求节点多播地址(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:7654:3210请求节点多播地址前缀ff02:0:0:0:0:1:ff请求节点多播地址ff02:0:0:0:0:1:ff54: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:核心协议实现》



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3