当前位置: 首页 > news >正文

接收与发送ipv6数据包

一、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)

类型IPv4IPv6
单播支持(如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.1IPv4与IPv6兼容通信

二、接收ipv6数据包

        ipv6数据包的主要接受方法是ipv6_rcv(),它是所有ipv6数据包的处理程序。

接收的流程如下:

 

三、发送ipv6数据包

         IPv6 传输路径很像 IPv4 传输路径,使用方法名称基本都很像,在 IPv6 中,也有两个从第 4 层发送 IPv6 数据包的主方法:一个是方法ip6_xmit(),由 TCP、流控制传输协议和数据报拥塞控制协议使用;一个是方法ip6_append_data(),由 UDP 和原始套接字等使用。

 

相关文章:

  • 北斗设备启动流程与时长解析
  • W80x使用WM IoT SDK 2.X 开发(二)驱动tft屏幕
  • JavaScript |(六)DOM事件 | 尚硅谷JavaScript基础实战
  • JVM 学习前置知识
  • 2025年渗透测试面试题总结-某四字大厂实习面试复盘 一面 二面 三面(题目+回答)
  • 【赵渝强老师】达梦数据库MPP集群的架构
  • Rust练手项目第一章
  • STM32 SPI总线驱动CH376T实现U盘/TF卡读写全解析—CH376数据手册分析(中上) | 零基础入门STM32第七十三步
  • XXE漏洞
  • Ollama详解,无网环境导入运行本地下载的大模型,无网环境pycharm插件大模型调用(更新中)
  • 招聘面试季--一文顿悟,Java中字节流和字符流的区别及使用场景上的差异
  • Linux安装go环境
  • Linux练习
  • 训练过程中实时显示 epoch 进度和动态指标
  • Babel 从入门到精通(二):Plugin插件和Preset预设配置详解
  • 红数码影视(RED Digital Cinema)存储卡格式化后的恢复方法
  • 从理论到实践:RK3576边缘逻辑引擎在冷链物流的成功案例
  • C++关键字汇总
  • 【蓝桥杯—单片机】IAP15F2K61S2专项 | 真题整理、解析与拓展 | 省赛题(更新ing...)
  • 单臂路由实验
  • 网站建设合同 费用/域名收录查询工具
  • 宝鸡手机网站开发/少儿编程
  • 京东商城在线网上购物/湖北搜索引擎优化
  • 做网站花了2万多/批量外链工具
  • 做网站先做前台还是后台/360搜索引擎下载
  • 怎样做网站表白墙/产品推广渠道