目录
IPv6
IPv6(Internet Protocol version 6,网际协议第 6 版)是网际协议的最新版本,用作互联网的 L3 网络层协议。用它来取代 IPv4 主要是为了解决 IPv4 地址枯竭的问题,同时它也在其他方面对于 IPv4 进行了许多改进。
我们知道 IPv4 是由 4 段 8 位,共 32 位二进制组成的,提供了 2 ** 32 = 4,294,967,296(42.9 亿)个 IP 地址。然而截止至 2018 年 1 月,全球上网人数已达 40.21 亿,虽然当前的 NAT(Network Address Translation,网络地址转换)及 CIDR(Classless Inter-Domain Routing,无类别域间路由)等网络技术可延缓 IP 地址匮乏的现象,但为求解决根本问题,从 1990 年开始,IETF(Internet Engineering Task Force,互联网工程工作小组)开始规划新一代的寻址协议。
IPv6 的发展
根据中国互联网络信息中心 2019 年 2 月底发布的第 43 次《中国互联网络发展状况统计报告》。截至 2018 年 12 月,我国拥有 IPv6 地址块 41,079 个,较上一年增长 75.3%。2019 年 4 月 16 日,工信部发布《关于开展 2019 年 IPv6 网络就绪专项行动的通知》,提出了到 2019 年末应用商店新上架的 APP 均应支持 IPv6 网络、获得 IPv6 地址的 LTE 终端比例达到 90%、获得 IPv6 地址的固定宽带终端比例达到 40% 等目标。从谷歌提供的 IPv6 统计数据也可以看出,使用 IPv6 访问谷歌的用户的比例正在迅速上升。
IPv6 网络基本概念
下图描述了 IPv6 网络以及它与 ISP 的连接。内部网络由链路 1、链路 2、链路 3 和链路 4 组成。每个链路上安装若干台主机,末端连接一台路由器。链路 4 是网络的 DMZ,它的一端连接边界路由器。边界路由器使用 IPv6 隧道与 ISP 相连,从而为网络提供 Internet 连通性。链路 2 和 3 作为子网 8a 进行管理。子网 8b 仅包含链路 1 上的系统。子网 8c 与链路 4 上的 DMZ 相接。
- Node(节点):具有 IPv6 地址且接口配置为支持 IPv6 的任何系统。该专业术语适用于主机和路由器。
- 相邻节点:与本地节点在同一个链路上的 IPv6 节点。
- Router(IPv6 路由器):用来转发 IPv6 包的节点。路由器必须至少有一个接口配置为支持 IPv6。IPv6 路由器还可以通过内部网络通告企业的已注册 IPv6 站点前缀。
- Host(IPv6 主机):具有 IPv6 地址的节点。IPv6 主机可以有多个配置为支持 IPv6 的接口。与 IPv4 主机一样,IPv6 主机也不转发包。
- Link(链路):单一且连续的网络介质,其两端均连接有路由器。包括:以太网、PPP 链路、X.25、帧中继、ATM 等。
- 链路 MTU:链路能传输的最大单位,即最大的 IPv6 报文字节数。
- Subnet(IPv6 子网):IPv6 网络的管理段。与 IPv4 子网的组件一样,IPv6 子网的组件也可以直接对应于链路上的所有节点。必要时,可以在单独的子网中对链路上的节点进行管理。另外,IPv6 还支持多链路子网,在多链路子网上,多个链路上的节点可以是同一个子网的组件。上图中的链路 2 和链路 3 是多链路子网 8a 的组件。
- IPv6 隧道:在一个 IPv6 节点和另一个 IPv6 节点端点之间提供虚拟的点对点路径的隧道。IPv6 支持可手动配置的隧道和 6to4 自动隧道。
- 边界路由器:位于网络边界的路由器,是通往本地网络外部端点的 IPv6 隧道的一个端点。此路由器必须至少有一个连接到内部网络的 IPv6 接口。对于外部网络,此路由器可以有一个 IPv6 接口或一个 IPv4 接口。
- Site(站点):多个 Subnet 构成一个 Site。
- 路径 MTU:IPv6 源端和目的端之间能传输的最大的 IPv6 报文字节数,通常是路径中所有链路的最小链路 MTU。
最终,由 Site 与 Site 之间的连接构成全球性的 IPv6 网络。
IPv6 的特性
-
更大的地址空间:IPv6 将地址长度从 32 位扩展到 128 位,地址数量大幅增加,提供了 340,282,366,920,938,463,463,374,607,431,768,211,456(2 ** 128)个 IPv6 地址,就以地球人口 70 亿人计算,每人平均可分得约 4.86×1028(486117667×1020)个 IPv6 地址,被戏称为可以给地球上的每一粒沙子分配一个 IPv6 地址。
-
简化的协议头格式以及更快的转发/路由:在网络层上,数据是以 Packet(分组,数据包)的形式传输,IPv6 定义了一种新的协议头格式,目的是为了提升路由器处理 IP 数据包的效率。IPv4 Header 的长度是可变的(最小值为 160 位),而 IPv6 Header 的长度是固定的(320 位)。通过将所有不必要的信息和选项(存在于 IPv4 Header 中的 IPv4 Options)移动到 IPv6 Header 的 “末尾”(Next Header,扩展头部),这有助于提高路由器对 IP 数据包的处理效率。
-
支持协议头的可扩展(Next Header):IPv4 仅提供了 40 byte 的 Options 字段,而 IPv6 中的 “Options” 不再只是一个协议头字段,而是可以在 IPv6 数据包 Payload 中插入多个 Headers,只需要保证 Headers 的大小不超过 IPv6 数据包的大小即可。
-
支持 IP 地址自动配置:IPv6 支持其主机设备的有状态和无状态自动配置模式。
-
无广播,但支持任播:虽然以太网是公认的广播网络,但 IPv6 不再支持广播,它使用多播与多个主机进行通信。
-
支持 IP 移动性:IPv6 被设计成具有移动性。 此功能使主机(e.g. 移动电话)在不同的地理区域漫游,并保持与同一 IP 地址连接。 IPv6 的移动性功能利用自动 IP 配置和扩展报头。
-
支持 QoS 增强:IPv4 使用 6 位 DSCP(差分服务代码点)和 2 位 ECN(显式拥塞通知)来提供 QoS,但它只能在端到端设备都支持它时使用。而在 IPv6 中,增加了流量类(Traffic Class,TC)和流标签(Flow Label)字段,用于告诉底层路由器如何有效地处理数据包和路由它。
IPv4 与 IPv6 的比较
描述 | IPv4 | IPv6 |
---|---|---|
地址 | 长度为 32 位(4 个字节)。地址由网络和主机部分组成,这取决于地址类。根据地址的前几位,可定义各种地址类:A、B、C、D 或 E。IPv4 地址的总数为 4 294 967 296。IPv4 地址的文本格式为 nnn.nnn.nnn.nnn,其中 0<=nnn<=255,而每个 n 都是十进制数。可省略前导零。最大打印字符数为 15 个,不计掩码。 | 长度为 128 位(16 个字节)。基本体系结构的网络数字为 64 位,主机数字为 64 位。通常,IPv6 地址(或其部分)的主机部分将派生自 MAC 地址或其他接口标识。根据子网前缀,IPv6 的体系结构比 IPv4 的体系结构更复杂。IPv6 地址的数目比 IPv4 地址的数目大 1028(79 228 162 514 264 337 593 543 950 336)倍。IPv6 地址的文本格式为 xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx,其中每个 x 都是十六进制数,表示 4 位。可省略前导零。可在地址的文本格式中使用一次双冒号(::),用于指定任意数目的 0 位。例如,::ffff:10.120.78.40 表示 IPv4 映射的 IPv6 地址。 |
地址分配 | 最初,按网络类分配地址。随着地址空间的消耗,使用“无类域间路由”(CIDR)进行更小的分配。没有在机构和国家或地区之间平均分配地址。 | 分配尚处于早期阶段。“因特网工程任务组织”(IETF )和“因特网体系结构委员会”(IAB)建议基本上为每个组织、家庭或实体分配一个 /48 子网前缀长度。它将保留 16 位供组织进行子网划分。地址空间是足够大的,可为世界上每个人提供一个其自己的 /48 子网前缀长度。 |
地址掩码 | 用于从主机部分指定网络。 | 未使用 |
地址前缀 | 有时用于从主机部分指定网络。有时根据地址的表示格式写为 /nn 后缀。 | 用于指定地址的子网前缀。按照打印格式写为 /nnn(最多 3 位十进制数字,0 <= nnn <= 128)后缀。例如 fe80::982:2a5c/10,其中前 10 位组成子网前缀。 |
地址类型 | IPv4 地址分为三种基本类型:单点广播地址、多点广播地址和广播地址。 | IPv6 地址分为三种基本类型:单点广播地址、多点广播地址和任意广播地址。 |
专用地址和公用地址 | 除由 IETF RFC 1918 指定为专用的三个地址范围 10.X.X.X (10/8)、172.16.0.0 至 172.31.255.255 (172.16/12) 和 192.168.X.X (192.168/16) 之外,所有 IPv4 地址都是公用的。专用地址域通常在组织内部使用。专用地址不能通过因特网路由。 | IPv6 有类似的概念,但还有重要差别。地址是公用或临时的,先前称为匿名地址。 请参阅 RFC 3041。与 IPv4 专用地址不同,临时地址可进行全局路由。动机也不一样:IPv6 临时地址要在它开始通信时屏蔽其客户机的身份(涉及隐私)。临时地址的生存期有限,且不包含是链路(MAC)地址的接口标识。它们通常与公用地址没有区别。IPv6 具有受限地址作用域的概念,它使用其设计的作用域指定。 |
组播地址 | 224.0.0.0/4 | FF00::/8 |
广播地址 | 255.255.255.255 | 没有广播地址,只有任播地址 |
未指定地址 | 0.0.0.0 | :: |
回路地址 | 127.0.0.1 | ::1 |
ISP 地址 | 公用 IP 地址 | 可汇聚全球单播地址 |
私有地址 | 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 | FEC0::/48 |
Microsoft 自动专用 IP 寻址自动配置的地址 | 169.254.0.0/16 | FE80::/64 |
表达方式 | 点分十进制 | 冒号十六进制式(取消前置零、零压缩) |
子网掩码表示 | 以点阵十进制表示法或前缀长度表示法(CIDR) | 仅使用前缀长度表示法(CIDR) |
地址作用域 | 此概念不适用于单点广播地址。有指定的专用地址范围和回送地址。将该范围之外的地址假设为全局地址。 | 在 IPv6 中,地址作用域是该体系结构的一部分。单点广播地址有两个已定义的作用域,包括本地链路和全局链路;而多点广播地址有 14 个作用域。为源和目标选择缺省地址时要考虑作用域。作用域区域是特定网络中作用域的实例。因此,有时必须输入 IPv6 地址或使它与区域标识相关联。语法是 %zid,其中 zid 是一个数字(通常较小)或名称。区域标识写在地址之后前缀之前。 例如,2ba::1:2:14e:9a9b:c%3/48。 |
地址解析协议(ARP) | IPv4 使用 ARP 来查找与 IPv4 地址相关联的物理地址(如 MAC 或链路地址)。 | IPv6 使用因特网控制报文协议版本 6(ICMPv6)将这些功能嵌入到 IP 自身作为无状态自动配置和邻节点发现算法的一部分。因此,不存在类似于 ARP6 之类的东西。 |
地址生存期 | 通常,除使用 DHCP 分配的地址之外,此概念不适用于 IPv4 地址。 | IPv6 地址有两个生存期:首选生存期和有效生存期,而首选的生存期总是小于等于有效的生存期。首选生存期到期后,如果有同样好的首选地址可用,那么该地址便不再用作新连接的源 IP 地址。 有效生存期到期后,该地址不再用作入局信息包的有效目标 IP 地址或源 IP 地址。根据定义,某些 IPv6 地址有无限多个首选生存期和有效生存期,如本地链路。 |
IP 报头 | 根据提供的 IP 选项,有 20-60 个字节的可变长度。 | 40 个字节的固定长度。没有 IP 报头选项。通常,IPv6 报头比 IPv4 报头简单。 |
IP 报头选项 | IP 报头(在任何传输报头之前)可能附带各种选项。 | IPv6 报头没有选项。而 IPv6 添加了附加(可选)的扩展报头。扩展报头包括 AH 和 ESP(和 IPv4 的一样)、逐跳扩展、路由、分段和目标。目前,IPv6 支持一些扩展报头。 |
IP 报头协议字节 | 传输层或信息包有效负载的协议代码,例如,ICMP。 | 报头类型紧跟在 IPv6 报头后面。使用与 IPv4 协议字段相同的值。此结构的作用是允许以后的报头使用当前定义的范围并且易于扩展。下一个报头将是传输报头、扩展报头或 ICMPv6。 |
IP 报头“服务类型”字节 | 由 QoS 和差别服务用来指定通信类。 | 但使用不同的代码来指定 IPv6 流量类。目前,IPv6 不支持 TOS。 |
片段 | 如果一个信息包对于要传送它的下一链路来说太大,那么可由发送方(主机或路由器)对其分段。 | 对于 IPv6,只能在源节点进行分段,且只能在目标节点完成重新装配。使用分段扩展报头。 |
LAN 连接 | LAN 连接由 IP 接口用来到达物理网络。存在许多类型,例如,令牌环和以太网。有时,它称为物理接口、链路或线路。 | IPv6 可与任何以太网适配器配合使用并且可通过虚拟以太网在逻辑分区间使用。 |
最大传输单元(MTU) | 链路的最大传输单元是特定链路类型(如以太网或调制解调器)支持的最大字节数。对于 IPv4,最小值一般为 576。 | IPv6 的 MTU 下限为 1280 个字节。也就是说,IPv6 不会在低于此极限时对信息包分段。要通过字节数小于 1280 的 MTU 链路发送 IPv6,链路层必须以透明方式对 IPv6 信息包进行分段及合并。 |
配置 | 新安装的系统必须在进行配置之后才能与其他系统通信;即,必须分配 IP 地址和路由。 | 根据所需的功能,配置是可选的。IPv6 可与任何以太网适配器配合使用并且可通过回送接口运行。IPv6 接口是使用 IPv6 无状态自动配置进行自我配置的。还可手工配置 IPv6 接口。这样,根据网络的类型以及是否存在 IPv6 路由器,系统将能与其他本地和远程的 IPv6 系统通信。 |
重新编号 | 重新编号通过手工重新配置完成,可能存在 DHCP 的例外情况。通常,对于站点或组织,重新编号是应尽可能避免的复杂且烦琐的过程。 | 重新编号是 IPv6 的一个重要结构元素,特别是在 /48 前缀中已很大程度上实现自动化。 |
路由 | 从逻辑上讲,是一组 IP 地址(可能只包含 1 个)的映射,这些 IP 地址映射为物理接口和单个下一中继段 IP 地址。使用该线路将其目标地址定义为该组的一部分的 IP 信息包转发至下一中继段。IPv4 路由与 IPv4 接口关联,因此,它是一个 IPv4 地址。缺省路由为 *DFTROUTE。 | 从概念上讲,与 IPv4 类似。一个重要差别是:IPv6 路由与物理接口(链路,如 ETH03)而不是接口相关联(绑定)。路由与物理接口相关联的一个原因是 IPv6 与 IPv4 的源地址选择功能不同。 |
传输层 | TCP、UDP 和 RAW。 | IPv6 中存在相同的传输。 |
未指定地址 | 顾名思义,未定义的地址。套接字编程将 0.0.0.0 用作 INADDR_ANY。 | 定义为 ::/128(128 个 0 位)。 它在某些邻节点发现信息包和各种其他的上下文(如套接字)中用作源 IP。套接字编程将 ::/128 用作 in6addr_any。 |
虚拟专用网络(VPN) | 虚拟专用网络(使用 IPsec)允许在现有的公用网络上扩展安全的专用网络。 | 同样支持 IPv6。 |
因特网控制报文协议(ICMP) | 由 IPv4 用来进行网络信息通信。 | 因特网控制报文协议版本 6(ICMPv6)提供一些新的属性。保留了基本错误类型,如目标不可到达、回传请求和应答。 添加了新的类型和代码以支持邻节点发现和相关的功能。 |
因特网组管理协议(IGMP) | IGMP 由 IPv4 路由器用来查找需要特定多点广播组通信的主机,并由 IPv4 主机用来向 IPv4 路由器通告(主机上)现有的多点广播组侦听器。 | IGMP 在 IPv6 中由 MLD(多播侦听器发现)协议取代。MLD 执行 IGMP 对 IPv4 所执行的必要操作,但通过添加一些特定于 MLD 的 ICMPv6 类型值来使用 ICMPv6。 |
第 2 层隧道协议(L2TP) | 可将 L2TP 看作是虚拟 PPP,并通过任何支持的线路类型工作。 | 同样支持 IPv6。 |
回送地址 | 回送地址是地址为 127...*(通常是 127.0.0.1)的接口,只能由节点用来向自身发送信息包。该物理接口(线路描述)被命名为 *LOOPBACK。 | 与 IPv4 的概念相同。单个回送地址为 0000:0000:0000:0000:0000:0000:0000:0001 或 ::1(简短版本)。虚拟物理接口被命名为 *LOOPBACK。 |
点到点协议(PPP) | PPP 支持基于各种调制解调器和线路类型的拨号接口。 | 同样支持 IPv6。 |
端口 | TCP 和 UDP 有独立的端口空间,分别由范围为 1-65535 之间的端口号标识。 | 对于 IPv6,端口的工作与 IPv4 相同。因为它们处于新地址系列,现在有四个独立的端口空间。 例如,有应用程序可绑定的两个 TCP 端口 80 空间,一个在 AF_INET 中,一个在 AF_INET6 中。 |
简单网络管理协议(SNMP) | SNMP 是一个用于系统管理的协议。 | 同样支持 IPv6。 |
开放式最短路径优先协议(OSPF) | OSPF 是在优先于 RIP 的较大型自治系统网络中使用的路由器协议。 | 同样支持 IPv6。 |
路由信息协议(RIP) | RIP 是路由守护程序支持的路由协议。 | 目前,RIP 不支持 IPv6。 |
跟踪路由 | 跟踪路由是进行路径确定的基本 TCP/IP 工具。 | 同样支持 IPv6。 |
通信跟踪 | 通信跟踪是一个收集进入和离开系统的 TCP/IP(及其他)信息包的详细跟踪资料的工具。 | 同样支持 IPv6。 |
Netstat | Netstat 是一个用于查看 TCP/IP 连接、接口或路由状态的工具。在使用 IBM Navigator for i和字符界面时可用。 | 同样支持 IPv6。 |
PING | PING 是测试可达性的基本 TCP/IP 工具。 | 同样支持 IPv6。 |
节点信息查询 | 不存在。 | 一种简易的网络工具,其工作方式应类似于 ping,只是内容不同:IPv6 节点可查询目标 DNS 名称的另一个 IPv6 节点、IPv6 单点广播地址或 IPv4 地址。 目前不受支持。 |
Telnet | Telnet 允许登录并使用远程计算机,就好象直接与其连接一样。 | 同样支持 IPv6。 |
网络地址转换(NAT) | 集成到 TCP/IP 中的基本防火墙功能。 | 目前,NAT 不支持 IPv6。通常,IPv6 不需要 NAT。IPv6 扩展了地址空间,这样就解决了地址短缺问题并使重新编号变得更加容易。 |
源地址选择 | 应用程序可指定源 IP(通常,使用套接字 bind())。如果它绑定至 INADDR_ANY,那么根据路由来选择源 IP。 | 与 IPv4 一样,应用程序可使用 bind() 指定源 IPv6 地址。和 IPv4 类似,它可通过使用 in6addr_any 让系统选择 IPv6 源地址。但是,因为 IPv6 线路有许多 IPv6 地址,所以选择源 IP 的内部方法不同。 |
套接字 API | 应用程序通过使用这些 API 来使用 TCP/IP。不需要 IPv6 的应用程序不受为支持 IPv6 所做的套接字更改的影响。 | IPv6 使用新的地址系列:AF_INET6 增强了套接字以便应用程序现在可使用 IPv6。设计了这些增强以便现有的 IPv4 应用程序完全不受 IPv6 和 API 更改的影响。希望支持并发 IPv4 和 IPv6 通信或纯 IPv6 通信的应用程序可以容易地适应使用 IPv4 映射的 IPv6 地址格式 ::ffff:a.b.c.d,其中 a.b.c.d 是客户机的 IPv4 地址。新的 API 还支持从文本至二进制及从二进制至文本的 IPv6 地址转换。 |