ipv4和ipv6的兼容性问题

ipv4和ipv6的兼容

现今大多知名网站都是同时支持ipv6和ipv4,这种可以分为两种情况讨论:

  1. 一个IPv4的网络和一个IPv6的网络通信;
  2. 一个IPv6的网络和一一个IPv6的网络通信,但是中间需要经过一一个IPv4的网络。

先以第一种为例:

若一个ipv6服务器想要访问一个ipv4服务器,具体步骤如下:

  1. 客户端通过DNS64服务器查询AAAA记录:IPv6客户端向DNS64服务器查询目标域名的AAAA记录。DNS64是一种将IPv6地址和IPv4地址兼容的DNS服务。当目标域名只有IPv4地址时,DNS64服务器会合成一个伪造的AAAA记录。
  2. DNS64服务器返回含IPv4地址的AAAA记录:如果目标域名只有IPv4地址,DNS64服务器会查询该域名的A记录,然后将其转换为IPv6地址(通常以特定前缀,例如64:ff9b::/96 开头),并返回给客户端一个伪造的AAAA记录。如果目标域名本身有AAAA记录,DNS64服务器会直接返回这些记录。
  3. 客户端将请求发送给NAT64路由器:客户端接收到伪造的AAAA记录后,将其作为目标地址,并根据此地址生成IPv6报文。这个报文被发送到NAT64路由器。
  4. NAT64路由器将IPv6地址转换为IPv4地址,并访问IPv4网络:NAT64路由器识别出伪造的IPv6地址中的IPv4部分,将该地址转换为真实的IPv4地址,并将IPv6报文转换为IPv4报文。然后,NAT64路由器将IPv4报文发送到目标IPv4服务器。
  5. 消息返回到客户端:目标IPv4服务器处理请求并返回响应,响应报文到达NAT64路由器后,NAT64路由器将其转换回IPv6报文,然后将其转发给IPv6客户端。

整个过程的关键是DNS64和NAT64的协调工作,确保IPv6客户端能够通过伪造的AAAA记录访问仅有IPv4地址的服务器。这样,客户端对目标服务器的访问是透明的,无需知道其实际的IPv4地址。

(在这个过程中,其实dns64就相当于提前转换及生成ipv6,nat64相当于双方在进行数据交换过程中的转换)

image-20240711142416116

问题

大家可能在阅读中唯一的疑问就是,当客户端先前往dns64进行目标ipv4转假ipv6的过程中,并未事先通知nat64,为什么nat64能直接从假ipv6中获取到真ipv4呢?这是因为这个转换是可逆的。

具体规则如下(由IETF制定的 RFC 6146(NAT64)和 RFC 6147(DNS64)标准):

  1. IPv4 嵌入 IPv6 地址
    • 当 DNS64 服务器将 IPv4 地址转换为 IPv6 地址时,它会使用一个特定的前缀(例如 64:ff9b::/96)。这个前缀是预定义的,用于标识这些地址。
    • IPv4 地址的32位部分被嵌入到 IPv6 地址的后32位中。例如,一个 IPv4 地址 192.0.2.33 被转换为 IPv6 地址 64:ff9b::c000:0221。
  2. IPv6 地址中的 IPv4 提取
    • 当 IPv6 客户端向伪造的 IPv6 地址(例如 64:ff9b::c000:0221)发送请求时,NAT64 路由器会识别这个前缀(64:ff9b::/96)。
    • NAT64 路由器提取 IPv6 地址的后32位,将其转换回原始的 IPv4 地址(192.0.2.33)。
示例:

假设 IPv4 地址是 203.0.113.1,它在 DNS64 的转换下会变成如下的 IPv6 地址:

  • 原始 IPv4 地址:203.0.113.1
  • IPv6 地址前缀:64:ff9b::
  • 转换后的 IPv6 地址:64:ff9b::cb00:7101

当 NAT64 路由器接收到这个 IPv6 地址时,它会识别前缀 64:ff9b::,然后将后32位 cb00:7101 转换回 IPv4 地址 203.0.113.1。

是不是瞬间清醒了。

另一种:一个IPv6的网络和一个IPv6的网络通信,但是中间需要经过一个IPv4的网络。

这个时候需要用到隧道(tunnel)技术,隧道技术有很多种,但原理基本差不多,就选一种方式详细讲一下:

6to4 隧道工作流程

  1. 生成 6to4 地址
    • 每个 IPv6 节点使用其 IPv4 地址(公共ipv4地址)生成一个 6to4 地址。
    • 6to4 地址的前缀为 2002::/16,IPv4 地址嵌入在地址的后部分。
  2. 封装 IPv6 报文
    • 当节点 A 发送一个 IPv6 报文时,它将报文封装在 IPv4 报文中。封装后的 IPv4 报文包含 IPv6 报文数据。
  3. 通过 IPv4 网络传输
    • 封装后的 IPv4 报文通过 IPv4 网络传输到节点 B。
  4. 解封装 IPv6 报文
    • 节点 B 接收到 IPv4 报文后,将其解封装,提取出原始的 IPv6 报文。
示例详细步骤

假设节点 A 和 B 的具体情况如下:

  • 节点 A
    • 公共 IPv4 地址:192.0.2.1
    • 生成的 6to4 地址:2002:c000:0201::/48
  • 节点 B
    • 公共 IPv4 地址:198.51.100.1
    • 生成的 6to4 地址:2002:c633:6401::/48
  1. 节点 A 向节点 B 发送数据
  • IPv6 报文
    • 源地址:2002:c000:0201::
    • 目的地址:2002:c633:6401::
    • 数据:Hello
  • 封装为 IPv4 报文
    • IPv4 源地址:192.0.2.1
    • IPv4 目的地址:198.51.100.1

封装后的 IPv4 报文通过 IPv4 网络传输到节点 B。

  1. 节点 B 接收并解封装
  • IPv4 报文
    • IPv4 源地址:192.0.2.1
    • IPv4 目的地址:198.51.100.1
    • 包含封装的 IPv6 报文数据
  • 解封装
    • 节点 B 提取出原始的 IPv6 报文:
      • 源地址:2002:c000:0201::
      • 目的地址:2002:c633:6401::
      • 数据:Hello
  1. 节点 B 发送响应
  • IPv6 报文
    • 源地址:2002:c633:6401::
    • 目的地址:2002:c000:0201::
    • 数据:Hi
  • 封装为 IPv4 报文
    • IPv4 源地址:198.51.100.1
    • IPv4 目的地址:192.0.2.1

封装后的 IPv4 报文通过 IPv4 网络传输回节点 A。

  1. 节点 A 接收并解封装
  • IPv4 报文
    • IPv4 源地址:198.51.100.1
    • IPv4 目的地址:192.0.2.1
    • 包含封装的 IPv6 报文数据
  • 解封装
    • 节点 A 提取出原始的 IPv6 报文:
      • 源地址:2002:c633:6401::
      • 目的地址:2002:c000:0201::
      • 数据:Hi

是不是很神奇,这个已经说的很清楚了,如果还是没有看懂,不妨下去再查一查相关的知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870489.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思大模型——MindFormers的使用----从零开始安装配置环境

MindSpore Transformers套件的目标是构建一个大模型训练、微调、评估、推理、部署的全流程开发套件,提供业内主流的Transformer类预训练模型和SOTA下游任务应用,涵盖丰富的并行特性。期望帮助用户轻松的实现大模型训练和创新研发。 MindSpore Transform…

Linux编程第三篇:Linux简介,开源软件简介(Linux是否安全?参考TESEC指标)

业精于勤荒于嬉,行成于思毁于随。 今天这篇算是Linux的正式学习,废话不多说,我们开始吧 第三篇 一、UNIX与Linux发展史1.1、UNIX发展历史和发行版本1.2、UNIX主要发行版本1.3、Linux发展历史1.4、Linux内核版本1.5、Linux主要发行版本 二、开…

渐变且描边文字

效果: 用 background-image:linear-gradient实现渐变、 text-shadow实现描边 元素同时添加: background-image: linear-gradient(to bottom, rgba(255, 255, 255, 1), rgba(143, 180, 253, 1));-webkit-background-clip: text;background-…

Spring支持人工智能应用框架-SpringAi

简介 人工智能技术和日益成熟,开发企业级人工智能的应用已成为一个热门的趋势。Spring AI 是一个用于 AI 工程的应用框架,目的是为了简化AI应用的对接、部署、维护和扩展。 SpringAi的灵感来自LangChain和LlamaIndex,但是SpringAi并不是直接…

Python实现动态迷宫生成:自动生成迷宫的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame定义迷宫生成类主循环 完整代码 引言 迷宫生成算法在游戏开发和图形学中有着广泛的应用。它不仅可以用于创建迷宫游戏,还可以用于生成有趣的图案。在这篇博客中,我们将使用Python…

基于Java的校园交友网站系统

你好,我是专注于计算机技术研究的学姐码农小野。如果你对校园交友网站系统的构建或者相关技术感兴趣,欢迎私信交流。 开发语言 Java 数据库 MySQL 技术 Java语言、SpringBoot框架、B/S结构 工具 MyEclipse、Navicat、Maven 系统展示 首页 个人…

Postman:Body类型中的x-www-from-urlencoded参数可以接受GET请求吗?

不可以 今天学习Spring Web MVC,在借助Postman学习 RequestMapping 注解时,发现Body类型中的x-www-from-urlencoded参数不支持GET请求。 按理说 RequestMapping 注解可以支持全部类型的请求,但为何在这里不能支持GET请求呢? 以下是…

Diffusion 加速系列之三 | LCM

0. 资源链接 论文: LCM:https://arxiv.org/abs/2310.04378 项目: https://github.com/luosiallen/latent-consistency-model 1. 背景动机 现有的高分辨率的 diffusion 模型推理存在的问题: Diffusion 模型推理过程包含多步去噪的流程,这会…

VMware虚拟机使用标准分区后对分区进行扩容

前言: 使用虚拟机创建系统后,/ 盘 想要扩容需要几步才能实现,下面将介绍具体流程 确定根分区磁盘以及分区号,和起始扇区和结束扇区 # 查看磁盘名称和分区 # 如下可看出根分区为 /dev/sda2 ,磁盘为sda [root192 ~]# ls…

【鸿蒙学习笔记】元服务

官方文档:元服务规格 目录标题 什么是元服务特征第一个元服务-案例介绍创建项目源码启动模拟器启动entry创建卡片出发元服务 什么是元服务 特征 免安装分包预加载老化和更新机制 第一个元服务-案例介绍 创建项目 源码 Entry Component struct WidgetCard {buil…

qt 线程举例

qt 线程举例 在Qt中,使用线程的一个常见方式是通过QThread类。下面是一个简单的例子,展示了如何创建一个线程并在其中执行任务。 步骤 1: 创建一个Worker类 首先,创建一个继承自QObject的Worker类,这个类将包含要在线程中执行的…

three完全开源扩展案例02-跳动的音乐

更多案例尽在https://threelab.cn/ 演示地址 import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";let mediaElement; let analyser; let scene; let camera; let renderer; let controls; …

RabbitMQ中常用的三种交换机【Fanout、Direct、Topic】

目录 1、引入 2、Fanout交换机 案例:利用SpringAMQP演示Fanout交换机的使用 3、Direct交换机 案例:利用SpringAMQP演示Direct交换机的使用 4、Topic交换机 案例:利用SpringAMQP演示Topic交换机的使用 1、引入 真实的生产环境都会经过e…

1. openstack

openstack 一、云的简介1、优势2、类型2.1 根据提供的服务范围2.2 根据提供服务不同 二、openstack核心组件1、核心组件2、nova组件2.1 nova核心进程 3、glance组件4、cinder组件5、neutron组件6、swift组件7、cellometer组件8、keystone组件9、heat组件10、dashboard 一、云的…

韦东山嵌入式linux系列-LED 驱动程序框架

1 回顾字符设备驱动程序框架 图中驱动层访问硬件外设寄存器依靠的是 ioremap 函数去映射到寄存器地址,然后开始控制寄存器。 那么该如何编写驱动程序? ① 确定主设备号,也可以让内核分配;② 定义自己的 file_operations 结构体&…

【LeetCode:1071. 字符串的最大公因子 + 模拟 + 最大公约数】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

水库大坝安全监测险情应对措施

汛期暴雨洪涝灾害发生后,为保证大坝及下游人民生命财产安全,应及时进行大坝安全现场检查和快速评估。评估内容包括大坝沉降和水平变形、裂缝、坝坡是否塌滑、下游坡是否存在集中渗漏或大面积渗水、溢洪道启闭设备能否正常运行、近坝库岸是否有大的滑坡体…

react学习——26react-redux实现求和案例(完整版)

1、目录结构 2、components/count/index.js import React, {Component} from "react"; export default class Count extends Component {//加法increment()>{const {value} this.selectNumthis.props.jia(Number(value))}//减法decrement()>{const {value} …

一场夏测杀出个“双冠王”,极越01成为纯电SUV标杆

文 | AUTO芯球 作者 | 雷慢 万万没想到,懂车帝夏测运动会杀出一匹最大的黑马,竟然是极越01。 当前正在进行的懂车帝夏测运动会,在“纯电SUV/MPV续航达成率”赛事中,极越01以85.8%的续航达成率获得第一名。并且由于赛制规则限制…

应力 (Stress) 是指单位面积上所承受的力

应力 (Stress) 是指单位面积上所承受的力 flyfish 轴向力 轴向力 (Axial Force) 是指沿着物体的纵轴施加的力。对于一根杆或柱子,轴向力可以是拉力或压力,具体取决于力的方向。 拉力 (Tensile Force):使物体拉长的力。 压力 (Compressive…