一、ipv6的概念
IPv6 是英文 “Internet Protocol Version 6”(互联网协议第 6 版)的缩写,是互联网工程任务组(IETF)设计的用于替代 IPv4 的下一代 IP 协议,其地址数量号称可以为全世界的每一粒沙子编上一个地址。
由于 IPv4 最大的问题在于网络地址资源不足,严重制约了互联网的应用和发展。IPv6 的使用,不仅能解决网络地址资源数量的问题,而且也解决了多种接入设备连入互联网的障碍。
互联网数字分配机构(IANA)在 2016 年已向国际互联网工程任务组(IETF)提出建议,要求新制定的国际互联网标准只支持 IPv6,不再兼容 IPv4。
以下是关于IPv6四种地址类型的讲解:
1. 单播地址(Unicast Address)
定义:唯一标识一个网络接口,发送到单播地址的数据包会精确传输到该地址对应的接口。
特点:
点对点通信:类似于IPv4的单播,用于一对一的直接通信(如浏览网页、发送邮件)。
地址分类:IPv6单播地址包括全球单播地址(类似IPv4公网地址)、链路本地地址(用于本地链路通信)等。
示例:
2001:db8::1
是一个全球单播地址。
2. 任意播地址(Anycast Address)
定义:同一地址分配给多个接口,但数据包仅发送到“最近”的一个接口(基于路由协议计算的路径最优性)。
特点:
服务冗余与负载均衡:常用于提高服务可用性(如DNS根服务器、CDN节点)。
路由优化:路由器自动选择最短路径,用户无需感知具体服务节点。
注意:IPv6任意播地址格式与单播地址相同,需通过配置实现功能区分。
3. 组播地址(Multicast Address)
定义:标识一组接口,发送到组播地址的数据包会传输到该组所有接口。
特点:
一对多通信:适用于视频会议、实时数据分发等场景。
地址格式:IPv6组播地址以
ff00::/8
开头(如ff02::1
表示链路本地所有节点)。组成员动态管理:接口可自由加入或离开组播组。
对比IPv4:IPv6原生支持组播,无需依赖额外协议(如IGMP)。
4. IPv6无广播地址
原因:IPv6取消了广播机制,改用组播实现类似功能。
替代方案:
所有节点组播地址:
ff02::1
(链路本地范围)可替代IPv4的广播。优势:减少网络拥塞,仅需通信的节点监听组播组,避免广播风暴。
地址解析:IPv6使用**邻居发现协议(NDP)**替代ARP,通过组播请求完成地址解析(如MAC地址查询)。
总结对比(IPv4 vs. IPv6)
类型 IPv4 IPv6 单播 支持(如192.168.1.1) 支持(如2001:db8::1) 广播 支持(如255.255.255.255) 无,由组播替代(如ff02::1) 组播 支持(依赖IGMP) 原生支持(地址以ff00开头) 任意播 非正式支持 原生支持
IPv6 地址分为 3 类:单播地址、任意播地址及组播地址。IPv6 地址由 8 个部分组成,每部分 16 位,共计 128 位。IPv6 地址格式类似于:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx(其中 x 为十六进制位)。在 Linux 中,IPv6 地址使用。
1.ipv6报头
每个ipv6数据包都以ipv6包头开头,ipv6报头的长度固定40字节。整体结构如下图:
在Linux中结构ipv6hdr定义如下:
2.特殊 地址类型以及用途
IPv6特殊地址类型及用途详解
1. 链路本地单播地址(Link-Local Unicast Address)
格式:
fe80::/64
用途:
用于同一物理链路上的设备通信(如路由器邻居发现、本地服务发现)。
每个IPv6接口必须自动生成一个链路本地地址,无需手动配置。
示例:
fe80::1a2b:3c4d:5e6f:7a8b
2. 全局单播地址(Global Unicast Address)
通用格式:
| 全局路由前缀(n位) | 子网ID(m位) | 接口ID(128-n-m位) |用途:
用于互联网上的全局通信(类似IPv4公网地址)。
由ISP或网络管理员分配。
示例:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
3. 环回地址(Loopback Address)
地址:
::1
用途:
用于本地主机的自我通信(类似IPv4的
127.0.0.1
)。测试网络协议栈是否正常工作(如
ping ::1
)。
4. 未指定地址(Unspecified Address)
地址:
::
用途:
在初始化过程中,设备未分配地址时作为源地址。
关键应用:重复地址检测(DAD,Duplicate Address Detection),避免地址冲突。
5. 映射IPv4的IPv6地址(IPv4-Mapped IPv6 Address)
格式:
::ffff:<IPv4地址>
结构:前80位为0,接下来16位为
ffff
,最后32位为IPv4地址。用途:
允许IPv6设备与IPv4设备通信(双栈环境下)。
例如:
::ffff:192.168.1.1
表示IPv4地址192.168.1.1
。
对比总结
地址类型 IPv6地址示例 功能 链路本地地址 fe80::1a2b:3c4d:5e6f
本地链路通信,必选地址 全局单播地址 2001:db8::1234
全球互联网通信 环回地址 ::1
本地协议栈测试 未指定地址 ::
临时源地址,DAD检测 映射IPv4地址 ::ffff:192.168.1.1
IPv4与IPv6兼容通信
二、接收ipv6数据包
ipv6数据包的主要接受方法是ipv6_rcv(),它是所有ipv6数据包的处理程序。
接收的流程如下:
三、发送ipv6数据包
IPv6 传输路径很像 IPv4 传输路径,使用方法名称基本都很像,在 IPv6 中,也有两个从第 4 层发送 IPv6 数据包的主方法:一个是方法ip6_xmit()
,由 TCP、流控制传输协议和数据报拥塞控制协议使用;一个是方法ip6_append_data()
,由 UDP 和原始套接字等使用。