一、概述
由于IPv4的地址短缺,使用NAT以及子网划分等方式已经不能满足地址的需求了,所以开发出了近乎无限的IPv6地址,IPv6拥有庞大的地址数目,层次化的分配,以及即插即用的优势,他与IPv4的作用近乎相同但本质上还是有所差异,IPv4的内容可见IPv4详解本章节我们就来介绍IPv6协议,并介绍IPv6地址在实际网络当中的使用场景等。
二、IPv6的基本报头
IPv6的包头与IPv4的类似,做了部分的删减和修改并增加了部分字段,具体可见下图


IPv6报文的处理机制

三、IPv6的地址结构
1、IPv6地址的表现形式
IPv6地址总长度为128比特,通常分为8组,每组为4个十六进制数的形式,每组十六 进制数间用冒号分隔。例如:FC00:0000:130F:0000:0000:09C0:876A:130B,这是IPv6地址的首选格式。

2、IPv6地址的缩写
为了书写方便,IPv6还提供了压缩格式,以上述IPv6地址为例,具体压缩规则如下。
- 如果一组中4个十六进制数全为“0”,可只写一个“0”。
- 每组中的前导“0”都可以省略,所以上述地址可写为: FC00:0:130F:0:0:9C0:876A:130B。
- 地址中包含的连续两个或多个均为0的组,可以用双冒号“::”来代替,所以上述地址 又可以进一步简写为:FC00:0:130F::9C0:876A:130B。

注意:
在一个IPv6地址中只能使用一次双冒号“::”,否则当计算机将压缩后的地址恢复成128 位时,无法确定每个“::”代表0的个数。
3、什么是网络前缀?什么又是接口标识
一个IPv6地址可以分为如下两部分。
- 网络前缀:n比特,相当于IPv4地址中的网络ID。(就是我们前面IPv4章节中提到的网络部分)
- 接口标识:128−n比特,相当于IPv4地址中的主机ID。(就是我们前面IPv4章节中提到的主机位)
对于IPv6单播地址来说,如果地址的前3位不是000,则接口标识必须为64位;如果地址的前3位是000,则没有此限制。
接口标识可通过3种方法生成:手工配置、系统通过软件自动生成或IEEE EUI-64规范 生成。其中,EUI-64规范自动生成最为常用。
IEEE EUI-64规范是将接口的MAC地址转换为IPv6接口标识的过程。如下图所示, MAC地址的前24位(用c表示的部分)为公司标识,后24位(用m表示的部分)为扩展标识符。从高位数,第7位是0表示了MAC地址本地唯一。
转换的第一步将FFFE插入MAC地址的公司标识和扩展标识符之间,第二步将从高位 数,第7位的0改为1表示此接口标识全球唯一。


例如:MAC地址000E-0C82-C4D4,转换后为020E:0CFF:FE82:C4D4。
这种由MAC地址产生IPv6地址接口标识的方法可以减少配置的工作量,尤其是当采 用无状态地址自动配置时,只需要获取一个IPv6前缀就可以与接口标识形成IPv6地址。但是使用这种方式最大的缺点是任何人都可以通过二层MAC地址推算出三层IPv6地址,不安全。
四、IPv6的地址分类
IPv6地址分为单播地址、任播地址(Anycast Address)、组播地址3种类型。和IPv4相比,取消了广播地址类型,以更丰富的组播地址代替,同时增加了任播地址类型。

1、IPv6单播地址
IPv6单播地址标识了一个接口,由于每个接口属于一个节点,因此每个节点的任何接口上的单播地址都可以标识这个节点。发往单播地址的报文,由此地址标识的接口接收。 但与IPv4中的单播地址不一样的是,IPv6中定义了多种单播地址,目前常用的单播地址 有:未指定地址、环回地址、全球单播地址、链路本地地址、唯一本地地址(ULA,Unique Local Address)。
- 未指定地址
- IPv6中的未指定地址即0:0:0:0:0:0:0:0/128 或者::/128,类似于IPv4中的0.0.0.0,0.0.0.0 代表任意地址。该地址可以表示某个接口或者节点还没有IP地址,可以作为某些报文的源 IP地址(例如在NS报文的重复地址检测中会出现)。源IP地址是“::”的报文不会被路由设 备转发。
- 环回地址
- IPv6中的环回地址即0:0:0:0:0:0:0:1/128或者::1/128,与IPv4中的127.0.0.1作用相同, 主要用于设备给自己发送报文。该地址通常用来作为一个虚接口的地址(如Loopback接 口)。实际发送的数据包中不能使用环回地址作为源IP地址或者目的IP地址。
- 全球单播地址
- 全球单播地址是带有全球单播前缀的IPv6地址,类似于IPv4中的公网地址。这种类 型的地址允许路由前缀的聚合,从而限制了全球路由表项的数量。
- 全球单播地址由全球路由前缀(Global routing prefix)、子网ID(Subnet ID)和接口标识(Interface ID)组成,其格式如下图所示。


- Global routing prefix:全球路由前缀,由提供商(Provider)指定给一个组织机构, 与IPv4中的网络ID作用相似。通常全球路由前缀至少为48位。目前已经分配的全球路由 前缀的前3 bit(高3位)均为001。
- Subnet ID:子网ID。组织机构可以用子网ID来构建本地网络(Site),与IPv4中的 子网号作用相似。子网ID通常最多分配到第64位。
- Interface ID:接口标识,用来标识一个设备(Host),与IPv4中的主机ID作用相 似。
- 链路本地地址
- 链路本地地址是IPv6中应用范围受限制的地址类型,只能在连接到同一本地链路的节 点之间使用。它使用了特定的本地链路前缀FE80::/10(最高10位值为1111111010),同时 将接口标识添加在后面作为地址的低64比特。
- 当一个节点启动IPv6协议栈时,启动时节点的每个接口会自动配置一个链路本地地址 (其固定的前缀+EUI-64规则形成的接口标识)。这种机制使得两个连接到同一链路的 IPv6节点不需要进行任何配置就可以通信。所以链路本地地址广泛应用于邻居发现、无 状态地址配置等应用。
- 以链路本地地址为源地址或目的地址的IPv6报文不会被路由设备转发到其他链路。 链路本地地址的格式如下图所示。

- 唯一本地地址
- 唯一本地地址是另一种应用范围受限的地址,它仅能在一个站点内使用,用于替代在RFC3879中定义的本地站点地址。
- 唯一本地地址的作用类似于IPv4中的私网地址,任何没有申请到提供商分配的全球单播地址的组织机构都可以使用唯一本地地址。唯一本地地址只能在本地网络内部被路由 转发,而不会在全球网络中被路由转发。唯一本地地址格式如下图所示。

- Prefix:前缀,固定为FC00::/7。
- L:L标志位;值为1代表该地址为在本地网络范围内使用的地址;值为0被保留, 用于以后扩展。
- Global ID:全球唯一前缀,通过伪随机方式产生。
- Subnet ID:子网ID,划分子网使用。
- Interface ID:接口标识。 唯一本地地址具有如下特点。
- 具有全球唯一的前缀(虽然利用随机方式产生,但是冲突概率很低)。
- 可以进行网络之间的私有连接,而不必担心地址冲突等问题。
- 具有知名前缀(FC00::/7),方便边缘设备进行路由过滤。
- 如果出现路由泄漏,该地址不会和其他地址冲突,不会造成Internet路由冲突。
- 应用中,上层应用程序将这些地址看作全球单播地址对待。
- 独立于互联网服务提供商(ISP,Internet Service Provider)。
2、IPv6组播地址
IPv6的组播与IPv4相同,用来标识一组接口,一般这些接口属于不同的节点。一个节点可能属于0到多个组播组。发往组播地址的报文被组播地址标识的所有接口接收。例如组播地址FF02::1表示链路本地范围的所有节点,组播地址FF02::2表示链路本地范围的所有路由器。
一个IPv6组播地址由前缀、标志(Flag)字段、范围(Scope)字段以及组播组 ID(Global ID)4个部分组成(如下图所示)。

- 前缀:IPv6组播地址的前缀是FF00::/8。
- 标志字段(Flag):长度4 bit,目前只使用了最后一个比特(前3位必须置0),当 该位值为0时,表示当前的组播地址是由IANA所分配的一个永久分配地址;当该位值为1 时,表示当前的组播地址是一个临时组播地址(非永久分配地址)。
- 范围字段(Scope):长度4 bit,用来限制组播数据流在网络中发送的范围,该字 段取值和含义的对应关系如图1-19所示。
- 组播组ID(Group ID):长度112 bit,用以标识组播组。目前,RFC2373并没有将 所有的112位都定义成组标识,而是建议仅使用该112位的最低32位作为组播组ID,将剩 余的80位都置0。这样每个组播组ID都映射到一个唯一的以太网组播MAC地址 (RFC2464)。
在IPv6中有一种特殊的组播IP地址,即被请求节点组播地址。
被请求节点组播地址通过节点的单播或任播地址生成。当一个节点具有了单播或任播地址,就会对应生成一个被请求节点组播地址,并且加入这个组播组。一个单播地址或任 播地址对应一个被请求节点组播地址。该地址主要用于邻居发现机制和地址重复检测功能。

IPv6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。在IPv6中,这个功能通过邻居请求(NS,Neighbor Solicitation)报文完成。当一个节点需要解析某个IPv6地址对应的MAC地址时,会发送NS报文,该报文的目的IP就是需要 解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。 被请求节点组播地址由前缀FF02::1:FF00:0/104和单播地址的最后24位组成。这里的请求过程详细可见后续文章NDP协议详解。
3、IPv6任播地址
任播地址标识一组网络接口(通常属于不同的节点)。目标地址是任播地址的数据包将发送给其中路由意义上最近的一个网络接口。
任播地址设计用来在给多个主机或者节点提供相同服务时提供冗余功能和负载分担功能,如网络中多台Web服务器共享同一个IPv6,不同地区的用户通过这个共享的IPv6地址 访问网站时与用户最近的Web服务器连接。目前,任播地址的使用通过共享单播地址方式来完成。将一个单播地址分配给多个节点或者主机,这样在网络中如果存在多条该地 址路由,当发送者发送以任播地址为目的IP的数据报文时,发送者无法控制哪台设备能够 收到,这取决于整个网络中路由协议计算的结果。这种方式可以适用于一些无状态的应用,例如DNS等。
IPv6中没有为任播规定单独的地址空间,任播地址和单播地址使用相同的地址空 间。目前IPv6中的任播主要应用于移动IPv6。
IPv6任播地址仅可以被分配给路由设备,不能应用于主机。任播地址不能作为IPv6报 文的源地址。
在IPv6中有一种特殊的任播地址,即子网路由器任播地址。子网路由器任播地址由n bit子网前缀标识子网,其余用0填充。格式如下图所示。

子网路由器任播地址是已经定义好的一种任播地址(RFC3513)。发送到子网路由器 任播地址的报文会被发送到该地址标识的子网中路由意义上最近的一个设备。所有设备都 必须支持子网任播地址。子网路由器任播地址用于节点需要和远端子网上所有设备中的一 个(不关心具体是哪一个)通信时使用。例如,一个移动节点需要和它“家乡”子网上的所 有移动代理中的一个进行通信。
4、IPv6应用举例

以上就是本章的全部内容了,感谢大家的浏览观看!文章若有错误或疑问可联系博主删除更改。
6589

被折叠的 条评论
为什么被折叠?



