IPv6 详解

文章目录

  • [1 IPv6 的必要性](#1 IPv6 的必要性)
  • [2 IPv6 的功能](#2 IPv6 的功能)
  • [3 IPv6 中 IP 地址的表示方法](#3 IPv6 中 IP 地址的表示方法)
  • [4 IPv6 地址结构](#4 IPv6 地址结构)
    • [1 全局单播地址](#1 全局单播地址)
    • [2 链路本地单播地址](#2 链路本地单播地址)
    • [3 唯一本地地址](#3 唯一本地地址)
  • [5 IPv6 分片处理](#5 IPv6 分片处理)
  • [6 IPv6 首部格式](#6 IPv6 首部格式)
    • [1 版本 Version](#1 版本 Version)
    • [2 通信量类 Traffic Class](#2 通信量类 Traffic Class)
    • [3 流标号 Flow Label](#3 流标号 Flow Label)
    • [4 有效载荷长度 Payload Length](#4 有效载荷长度 Payload Length)
    • [5 下一个首部 Next Header](#5 下一个首部 Next Header)
    • [6 跳数限制 Hop Limit](#6 跳数限制 Hop Limit)
    • [7 源地址 Source Address](#7 源地址 Source Address)
    • [8 目标地址 Destination Address](#8 目标地址 Destination Address)
  • [7 IPv6 扩展首部](#7 IPv6 扩展首部)
  • [8 ICMPv6](#8 ICMPv6)
    • [1 ICMPv6 的作用](#1 ICMPv6 的作用)
    • [2 邻居探索](#2 邻居探索)

1 IPv6 的必要性

IPv6(IP version 6)是为了解决 IPv4 地址耗尽的问题而被标准化的互联网协议。

IPv4 的地址长度为 4 个 8 位字节,即 32 位。

IPv6 的地址长度则是 IPv4 的 4 倍,即 128 位,一般写成 16 个 8 位字节。

IPv6 的地址空间(可用的 IPv6 地址)是 IPv4 的 2 96 2^{96} 296 倍。

从 IPv4 切换到 IPv6 极其耗时,需要将网络中所有主机和路由器的 IP 地址进行重新设置。

当互联网广泛普及后,替换所有 IP 协议栈是更艰巨的任务。

出于上述原因,IPv6 不仅能解决 IPv4 地址耗尽的问题,它甚至试图弥补 IPv4 中的绝大多数缺陷。

目前,人们正着力于进行 IPv4 与 IPv6 之间的相互通信与兼容性方面的测试。

2 IPv6 的功能

IPv6 具有以下几种功能,这些功能中的一部分在 IPv4 中已经实现。

  • IP 地址的扩大与路由控制表的聚合功能:

    • IP 地址依然适应互联网分层构造。
    • 在分配与其地址结构相适应的 IP 地址时,会可能避免路由控制表扩大。
  • 性能提升功能:

    • 包首部长度采用固定的值(40 字节),不再采用首部检验码。
    • 简化首部结构,减轻路由器负荷。
    • 路由器不再做分片处理(通过路径 MTU 发现只由发送端主机进行分片处理)。
  • 支持即插即用功能:

    • 即使没有 DHCP 服务器也可以实现自动分配 IP 地址。
  • 采用认证与加密功能:

    • 应对伪造 IP 地址的网络安全功能及防止线路窃听的功能(IPsec)。
  • 多播、Mobile IP 成为扩展功能:

    • 多播和 Mobile IP 被定义为 IPv6 的扩展功能。
    • 由此可见,曾在 IPv4 中难以应用的这两种功能在 IPv6 中能够顺利使用。

然而,即便是那些实现了 IPv4 的操作系统,也并非实现了所有的 IPv4 功能。

这中间不乏存在根本无法实现或需要管理员介入才能实现的部分,IPv6 则将其作为必要的功能,减轻了管理员的负担。

3 IPv6 中 IP 地址的表示方法

IPv6 的 IP 地址长度为 128 位。

它所能表示的数高达 38 位( 2 128 ≈ 3.40 ∗ 10 38 2^{128}≈3.40 * 10^{38} 2128≈3.40∗1038)。

这可谓天文数,足以为多到超乎人们想象的所有主机和路由器分配地址。

如果将 IPv6 的地址像 IPv4 的地址一样用十进制数表示,是 16 个数的序列(IPv4 是 4 个数的序列)。

由于用 16 个数的序列表示显得有些麻烦,因此将 IPv6 和 IPv4 在表示方法上进行区分。

一般来说,人们将 128 位的 IP 地址以每 16 位为一组,每组用冒号(:)隔开进行表示。

如果出现连续的 0,可以将这些 0 省略,并用两个冒号(::)隔开。

但是,一个 IP 地址中只允许出现一次两个连续的冒号。

在 IPv6 中,人们正在努力使用最简单的方法表示 IP 地址,以便记忆。

IPv6 的 IP 地址表示举例:

  • 用二进制表示:1111111011011100:1011101010011000:0111011001010100:0011001000010000:1111111011011100:1011101010011000:0111011001010100:0011001000010000
  • 用十六进制表示:FEDC:BA98:7654:3210:FEDC:BA98:7654:3210

IPv6 的 IP 地址省略举例:

  • 用二进制表示:0001000010000000:0000000000000000:0000000000000000:0000000000000000:0000000000001000:0000100000000000:0010000000001100:0100000101111010
  • 用十六进制表示:1080:0:0:0:8:800:200C:417A -> 1080::8:800:200C:417A(省略后)

4 IPv6 地址结构

IPv6 类似于 IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类。

在互联网通信中,IPv6 使用全局单播地址,如下图所示。

它是互联网中唯一的地址,不需要正式分配 IP 地址。

限制型网络,即不与互联网直接接入的私有网络,可以使用唯一本地地址。

这类地址含有根据一定算法生成的随机数,可以像 IPv4 的私有地址一样自由使用。

在不使用路由器或者在同一个以太网网段内进行通信时,可以使用链路本地单播地址。

而在构建允许多种类型 IP 地址的网络时,在同一数据链路上可以使用全局单播地址及唯一本地地址进行通信。

IPv6 地址结构如下表所示。

类型 地址 地址表示
未定义 0000 ... 0000 (128 位) ::/128
环回地址 0000 ... 0001 (128 位) ::1/128
唯一本地址 1111 110 FC00::/7
链路本地单播地址 1111 1110 10 FE80::/10
多播地址 1111 1111 FF00::/8
全局单播地址 (其他) (其他)

在 IPv6 的环境中,可以将 IP 地址全配置在一个 NIC 上,按需灵活使用。

1 全局单播地址

全局单播地址是世界上唯一的地址。

它是互联网通信及各个组织内部通信中最常用的 IPv6 地址。

全局单播地址的格式如下图所示。

现在的 IPv6 网络中所使用的格式为,n=48,m=16,128-n-m=64,即前 64 位为网络标识,后 64 位为主机标识。

通常,接口 ID 中保存着基于 64 位的 MAC 地址产生的值。

不过,由于 MAC 地址属于设备固有的信息,因此有时不希望让对端知道。

这时的接口 ID 可设置为与 MAC 地址没有关系的"临时地址"。

这种临时地址通常随机产生,并会定期更新。

所以,从 IPv6 地址中查看定位设备变得没那么简单。

究竟是哪台设备,全由操作系统的实现和设置决定(常被用于在客户端的个人计算机中分配这种临时地址的情况)。

2 链路本地单播地址

链路本地单播地址是同一数据链路内唯一的地址,其格式如下图所示。

它用于不经过路由器,在同一数据链路中的通信。

通常,接口 ID 保存 64 位的 MAC 地址。

3 唯一本地地址

唯一本地地址是不进行互联网通信时所使用的地址,其格式如下图所示。

  • L 通常设置位 1。
  • 全局 ID 的值随机决定。
  • 子网 ID 是指该组织子网地址。
  • 接口 ID 即为接口的 ID。

设备控制的限制型网络及金融机构的结算网等会与互联网隔离。

为了提高安全性,企业内部的网络与互联网通信时通常会通过 NAT 或网关(代理)进行。

而唯一本地地址正是在这种不联网或通过 NAT 及代理联网的环境中使用的。

唯一本地地址虽然不与互联网连接,但是会尽可能地生成唯一的全局 ID。

全局 ID 不一定是全世界唯一的,完全一致的可能性不高。

由于企业兼并、业务统一、效率提高等原因,很有可能会与使用了唯一本地地址的网络连接在一起。

在这种情况下,人们希望在不改动 IP 地址的情况下实现网络的统一。

5 IPv6 分片处理

IPv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。

这是为了减少路由器的负荷,提高网速。

所以,IPv6 中的"路径 MTU发现"功能必不可少。

不过,IPv6 中最小的 MTU 为 1280 字节。

因此,在嵌入式系统中,对于有一定系统资源限制(CPU 或内存)的设备来说,不需要进行"路径MTU发现",而是在发送 IP 包时直接以 1280 字节为单位分片发出。

6 IPv6 首部格式

IPv6 的首部格式如下图所示,相比 IPv4,IPv6 发生了巨大变化。

IPv6 为了减轻路由器的负担,省略了首部校验和字段。

因此路由器不再计算校验和,从而提高了包的转发效率。

因为 TCP 和 UDP 在做校验和计算时使用伪首部,所以可以验证 IP 地址或协议编号是否正确。

因此,即使在 IP 层无法提供可靠传输,在 TCP 或 UDP 层也可以提供可靠传输的服务。

此外,分片处理所用的识别码为可选项。

为了让 64 位 CPU 的计算机处理起来更方便,IPv6 的首部及可选项都由 8 位字节构成。

1 版本 Version

与 IPv4 一样,IPv6 版本由 4 位构成。

IPv6 版本号为 6,因此在这个字段上的值为"6"。

2 通信量类 Traffic Class

通信量类相当于 IPv4 的 TOS(Type Of Service)字段,也由 8 位构成。

TOS 在 IPv4 中几乎没有什么建树,未能成为卓有成效的技术,本来计划在 IPv6 中删掉这个字段。

不过,出于今后研究的考虑还是保留了该字段。

3 流标号 Flow Label

流标号由 20 位构成,用于服务质量(QoS:Quality of Service)控制。

使用这个字段提供怎样的服务是未来研究的课题。

不使用 QoS 时,所有位可以全部设置为 0。

在进行 QoS 时,将流标号设置为一个随机数,然后利用一种可以设置流的 RSVP(Resource Reservation Protocol)在路由器上进行 QoS 设置。

当某个包在发送途中需要 QoS 时,需要附上 RSVP 设置的流标号。

路由器接收到这样的 IP 包后先将流标号作为查找关键字,迅速检索出服务质量控制信息再进行相应处理。

此外,只有流标号、源地址及目标地址完全一致时,才被认为是一个流。

采用 QoS 的路由器必须尽早转发所接收的包。

由于需要检索相应的质量控制信息来确定以何种质量发送包才合适,因此有时可能会影响发送质量。

流标号正是为"高读检索"而使用的一种索引(Index),它的值本身没有什么具体含义。

4 有效载荷长度 Payload Length

有效载荷是指包的数据部分。

IPv4 的 Total Length 是指包括首部在内的总长度。

然而 IPv6 中的 Payload Length 不包括首部,只表示数据部分的长度。

由于 IPv6 的可选项相当于连接在 IPv6 首部之后的数据,因此当有可选项时,此处包含可选项数据的总长度就是 Payload Length。

由于该字段长度为 16 位,因此数据最大长度可达 65535 字节。

不过,为了让更大的数据能通过一个 IPv6 数据包发送出去,便增加了大型有效载荷选项 Jumbo Payload Option。

该选项包含一个长度为 32 位的字段。

有了它,IPV6 一次可以发送最大 4G 字节的包。

5 下一个首部 Next Header

下一个首部相当于 IPv4 中的协议字段(与 IPv4 中使用的协议编号相同)。

它由 8 位构成,通常表示 IP 的上层协议是 TCP 或 UDP。

不过,在有 IPv6 扩展首部的情况下,该字段表示后面第一个扩展首部的协议类型。

6 跳数限制 Hop Limit

跳数限制由 8 位构成。

它与 IPv4 中的 TTL 意思相同。

为了强调"可通过路由器数目"这个概念,它才将名字改成"Hop Limit"。

该字段的值每经过一次路由器就减 1,减到 0 时 IP 包就会被丢弃。

7 源地址 Source Address

源地址由 128 位构成,表示发送端 IP 地址。

8 目标地址 Destination Address

目标地址由128 位构成,表示接收端 IP 地址。

7 IPv6 扩展首部

IPv6 的首部长度固定,无法将可选项加入其中。

取而代之的是通过扩展首部对功能进行有效扩展。

扩展首部通常介于 IPv6 首部与 TCP/UDP 首部之间。

在 IPv4 中,可选项长度固定为 40 字节,但是在 IPv6 中没有这样的限制。

也就是说,IPv6 可以有多个扩展首部,如下图所示。

扩展首部中包含表示下一个协议或下一个扩展首部的字段。

IPv6 首部中没有标识及标志字段,当需要对 IP 包进行分片时,可以使用扩展首部。

具体的扩展首部与协议编号如表所示。

扩展首部 协议编号
IPv6逐跳选项(HOPOPT) 0
IPv6路由标头(IPv6-Route) 43
IPv6片首部(IPv6-Frag) 44
载荷加密(ESP) 50
认证首部(AH) 51
首部终止(IPv6-NoNxt) 59
目标地址选项(IPv6-Opts) 60
移动首部(Mobility Header) 135

当需要对 IPv6 数据包进行分片时,可以设置扩展域为 44(Fragment Header)。

当使用 IPsec 时,可以使用 50、51 的 ESP、AH。

在 Mobile IPv6 的情况下,可以采用 60 与 135 的目标地址选项与移动首部。

8 ICMPv6

1 ICMPv6 的作用

ICMP 在 IPv4 中起辅助作用。

也就是说,在 IPv4 中,即使没有 ICMP,仍然可以实现 IP 通信。

然而,在 IPv6 中,ICMP 的作用被扩大,如果没有 ICMPv6,那么 IPv6 就无法进行正常通信。

在 IPv6 中,从 IP 地址到 MAC 地址的协议从 ARP 转为 ICMP 的邻居探索消息(Neighbor Discovery Message)。

邻居探索消息融合了IPv4 的 ARP、ICMP 重定向及 ICMP 路由器选择消息等功能于一体,甚至还提供自动设置 IP 地址的功能。

由于 ICMPv6 没有 DNS 服务器的通知功能,因此需要与 DHCPv6 组合起来使用。

ICMPv6 中将 ICMP 大致分为两类:一类是错误消息,另一类是信息消息。

类型 0~127 属于错误消息,类型 128~ 255 属于信息消息。

若 IP 包未能到达目标主机,感知到错误的主机或路由器会发送类型 0~127 的错误消息。

类型 133~137 的消息属于特殊的信息消息,称为邻居探索消息。

常见的错误消息如下表:

类型(十进制) 内容
1 目标不可达(Destination Unreachable)
2 包过大(Packet Too Big)
3 超时(Time Exceeded)
4 参数问题(Parameter Problem)

常见的信息消息如下表:

类型(十进制) 内容
128 回送请求(Echo Request)
129 回送应答(Echo Reply)
130 多播监听查询(Multicast Listener Query)
131 多播监听报告(Multicast Listener Report)
132 多播监听结束(Multicast Listener Done)
133 路由器请求(Router Request)
134 路由器宣告(Router Advertisement)
135 邻居请求(Neighbor Request)
136 邻居宣告(Neighbor Advertisement)
137 重定向(Redirect)
138 路由器重编号(Router Renumbering)
141 反邻居探索请求(Inverse Neighbor Discovery Request)
142 反邻居探索宣告(Inverse Neighbor Discovery Advertisement)
143 多播监听报告版本2(Version 2 Multicast Listener Report)
144 归属代理地址发现请求(Home Agent Address Discovery Request)
145 归属代理地址发现响应(Home Agent Address Discovery Reply)
146 移动前缀请求(Mobile Prefix Request)
147 移动前缀公告(Mobile Prefix Advertisement)
148 认证路径请求(Certification Path Request)
149 认证路径公告(Certification Path Advertisement)
151 多播路由器公告(Multicast Router Advertisement)
152 多播路由器请求(Multicast Router Request)
153 多播路由器终止(Multicast Router Termination)
154 FMIPv6(FMIPv6)
155 RPL控制(RPL Control)
157 重复地址请求(Duplicate Address Request)
158 重复地址确认(Duplicate Address Confirmation)
159 MPL控制(MPL Control)
160 扩展回送请求(Extended Echo Request)
161 扩展回送响应(Extended Echo Reply)

2 邻居探索

ICMPv6 中,从类型 133 至类型 137 的消息叫作邻居探索消息。

邻居探索消息对 IPv6 通信起着举足轻重的作用。

邻居请求消息用于查询 IPv6 的地址与 MAC 地址的对应关系,并由邻居宣告消息告知 MAC 地址。

如下图所示,邻居请求消息利用 IPv6 的多播地址实现传输。

此外,由于 IPv6 实现了即插即用的功能,因此在没有 DHCP 服务器的环境中,也能实现 IP 地址的自动获取,如下图所示。

如果是没有路由器的网络,就将 MAC 地址作为链路本地单播地址。

而在有路由器的网络环境中,可以从路由器获得 IPv6 地址的前面部分,后面部分则由 MAC 地址进行设置。

此时,可以利用路由器请求消息和路由器宣告消息进行设置。

相关推荐
广东大榕树信息科技有限公司2 小时前
动环监控如何有效提升机房环境管理的可靠性与响应速度?
运维·网络·物联网·国产动环监控系统·动环监控系统
zhengfei6113 小时前
【POC漏洞】XXX网上阅卷系统 monitor 未授权访问
网络·安全·web安全
福尔摩斯张4 小时前
Linux的pthread_self函数详解:多线程编程中的身份标识器(超详细)
linux·运维·服务器·网络·网络协议·tcp/ip·php
ArrebolJiuZhou5 小时前
02arm指令集(一)——LDR,MOV,STR的使用
linux·网络·单片机
一只旭宝5 小时前
Linux专题八:生产者消费者,读写者模型以及网络编程
linux·网络
代码游侠5 小时前
复习——网络基础知识
网络·笔记·网络协议·算法·http
wregjru5 小时前
【C++】2.4 map和set的使用
网络·网络协议·rpc
蒜丶5 小时前
基于 frp 0.65 tcp 模式,实现web服务&ssh服务内网穿透
网络