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相当于双方在进行数据交换过程中的转换)

问题

大家可能在阅读中唯一的疑问就是,当客户端先前往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

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

相关推荐
发光小北16 小时前
Modbus TCP 转 Profinet 主站网关如何应用?
网络·网络协议·tcp/ip
易连EDI—EasyLink19 小时前
易连EDI–EasyLink实现OCR智能数据采集
网络·人工智能·安全·汽车·ocr·edi
@insist12319 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
SmartRadio20 小时前
ESP32-S3 双模式切换实现:兼顾手机_路由器连接与WiFi长距离通信
开发语言·网络·智能手机·esp32·长距离wifi
_.Switch20 小时前
东方财富股票数据JS逆向:secids字段和AES加密实战
开发语言·前端·javascript·网络·爬虫·python·ecmascript
金色光环21 小时前
FreeModbus释放底层的 TCP 监听端口
服务器·网络·tcp/ip
数智化精益手记局21 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
灰子学技术1 天前
Envoy HTTP 过滤器处理技术文档
网络·网络协议·http
Olivia051405141 天前
Voohu:音频变压器的屏蔽接地技术对50Hz工频噪声抑制的影响
网络·机器人·信息与通信
byoass1 天前
智巢AI知识库深度解析:企业文档管理从大海捞针到精准狙击的进化之路
开发语言·网络·人工智能·安全·c#·云计算