概述

在IPv4到IPv6发展的过度阶段,必然出现v4和v6主机之间互操作的问题,下面从机制层面讨论互操作的可能性,并假设主机之间网络路由已经打通。

IPv4客户端访问IPv6服务端

IPv4客户端访问IPv6服务端指的是服务端是双栈主机,客户端是纯v4主机。

假设服务端在v6地址上起了一个服务,客户端通过DNS获取服务器的A记录,通过v4地址访问服务端该端口的服务,服务端收到v4报文后,内核发现目的端口绑定本机的一个v6套接字,于是会把源v4地址转换成v4映射v6的地址(将v4地址往前补齐,变成v6地址)。

  • 在应用程序调用accept的时候,内核返回v4–>v6的映射地址给应用程序。
  • 应用程序往该地址发送数据的时候,内核将目的地址改成客户端v4地址,源地址使用服务器的v4地址。

客户端应用程序认为自己在和v4服务通信,服务端应用程序认为自己在和v6客户通信,中间的转换过程由服务端协议栈完成,对于客户端和服务端是透明无感知的。

IPv4客户端访问IPv6服务端的步骤总结如下:

  1. 服务端创建v6监听套接字
  2. 客户端通过DNS获取服务端的A记录
  3. 客户端向服务端的v4地址发起请求
  4. 服务端协议栈通过v4地址和客户端完成三次握手,并将v4到v6的映射地址返回给服务端应用程序
  5. 服务端向客户端发送数据时,服务端协议栈将源目地址都转为v4地址
  6. 整个转换过程均由服务端的IP协议栈完成,客户端和服务端均无感知
  7. v4客户端能访问v6服务端的前提是v6客户端是双栈主机

上面是TCP的过程,UDP类似,当v4客户端访问v6服务时,recvfrom会返回v4映射v6地址,sendto的时候,协议栈也会把目的地址改成v4。

IPv6客户端访问IPv4服务端

IPv6客户端访问IPv4服务端指的是客户端是双栈主机,服务端是纯v4主机。

当IPv4服务端在指定端口启动服务后,一个双栈主机的客户端通过IPv6访问该服务时,首先通过DNS获取服务端v4地址的映射v6地址,然后用该地址作为参数调用connect,然后客户端协议栈识别出目的地址是映射的v6地址,将本机v4地址作为源地址,客户端的v4地址作为目的地址,发送v4的数据包给服务端。

客户端调用getaddrinfo获取服务端的AAAA记录时,hints必须设置AI_V4MAPPED,用以获取服务端v4映射v6地址。

双栈主机之间的互访

双栈主机之间互访场景包括:

  • v4客户端访问v4服务端:直接能通
  • v6客户端访问v6服务端:直接能通
  • v4客户端访问v6服务端:v4客户端访问服务端主机的v4地址,由服务端主机协议栈进行v4到v6的转换
  • v6客户端访问v4服务端:v4客户端通过getaddrinfo获取到服务端的AAAA记录,如果使用服务端的v6地址,那么通不了;如果使用服务端的v4地址的v6映射,那么可以通

v4、v6客户端分别指双栈客户端通过v4或v6套接字去访问;

v4、v6服务端分别指双栈服务端的服务在v4或v6套接字上监听。

总结

IPv4和IPv6主机之间互访的总结如下:

  1. 纯v4客户端访问双栈服务端的v6服务时,通过v4网络传输,到服务端后由服务端协议栈将v4映射成v6进行通讯。
  2. 双栈客户端v6访问纯v4服务端的v4服务时,客户端需获取服务端v4映射v6地址,客户端程序访问该v6地址,客户端协议栈将源地址转成本机v4地址,目的地址转成服务端v4地址,通过v4网络传输,完成和服务端的通讯。
  3. 双栈客户端访问双栈服务端的服务时,可以选择不同的协议进行通讯。

IPv4和IPv6的互操作性相关推荐

  1. java ipv4和ipv6通信_IPv4和IPv6的差异;如何实现IPv4和IPv6双协议栈的通信

    1 IPv4和IPv6的差异 1.1 地址空间 IPv6 与 IPv4 比较最显著的一个改动就是使用 128 比特上的地址来代替了 32 比特长的 IPv4 地址. IPv6 中取消了广播地址, 其功 ...

  2. java http ipv6_如何在Java上同时支持IPv4和IPv6

    小编典典 我怀疑这不是Java编程问题,而是OS网络堆栈/ OS网络配置问题: 在某些操作系统上,单个本机TCP套接字可以同时侦听IPv4和IPv6上的端口.它能够接受来自远程IPv4和远程IPv6客 ...

  3. 记录一次nginx升级,支持ipv4和ipv6访问https

    项目要求,需要让现有网站项目支持https,并同时支持ipv6访问,经过分析,现在nginx版本较老,所以决定升级nignx,并且同步配置https和ipv6. 升级准备 服务器网络环境需要支持ipv ...

  4. 漫话:全球 IPv4 地址正式耗尽?是时候说说到底什么是IPv4和IPv6了!

    2019年11月25日,负责英国.欧洲.中东和部分中亚地区互联网资源分配的欧洲网络协调中心(RIPE NCC)宣布,其最后的 IPv4 地址空间储备池在 11 月 25 日 UTC + 1 15:35 ...

  5. IPv6相比IPv4在那些方面做出了改进?IPv4 to IPv6过渡的三种tunnel技术各自的特性...

    改进 地址空间的扩容,地址容量为2^128(或(43亿)^4) 配置更加简单,支持非DHCP自动配置地址: 层次化网络结构,每个地区使用相同前缀的地址范围,更加容易管理: 报头格式简单灵活,去除了IP ...

  6. 【计算机网络】网络层 : 总结 ( 功能 | 数据交换 | IP 数据报 | IPv4 地址 | IPv6 地址 | 路由选择协议 | 路由算法 )★★★

    文章目录 一.网络层功能 二.数据交换方式 ★ 三.IP 数据报 ★ 四. IPv4 地址 ★★ 1 . IP 地址 发展 : 2 . 分类 IP 地址 3 . NAT 转换 4 . 子网划分 5 . ...

  7. 【计算机网络】网络层 : IPv6 协议 ( IPv6 数据包格式 | IPv6 地址表示 | IPv6 地址类型 | IPv4 与 IPv6 协议对比 | IPv4 -> IPv6 过渡策略 )

    文章目录 一.IPv6 发展 二.IPv6 数据报格式 三.IPv6 和 IPv4 对比 四.IPv6 地址表示 五.IPv6 地址 类型 六.IPv4 向 IPv6 过渡策略 一.IPv6 发展 I ...

  8. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_产品 | 工信部发声IPv6即将部署,你的路由需要更换吗?...

    提到说话算数不得不表扬一下工信部,从最早的"提速降费"到现在的"携号转网",每一件事情都办的有条不紊,件件落实到咱们老百姓的生活上. 最近两年工信部都在忙一件大 ...

  9. 厚积薄发,看腾讯云如何快速从IPv4向IPv6演进?

    IPv6技术在国内沉寂数十年后,在国家推进下重新登上重要舞台.2018年工业和信息化部发布了关于贯彻落实<推进互联网协议第六版(IPv6)规模部署行动计划>的通知.不但展示国家推动IPv6 ...

最新文章

  1. 最新的全球编程语言,操作系统,web服务器等使用率分析报告
  2. PLSQL developer 连接不上64位Oracle 解决办法
  3. 如何用MLflow做机器学习实验效果比对
  4. 除了PS,原来这个也可以轻松实现图像处理!
  5. linux oracle流复制,oracle 流复制
  6. 【JS 逆向百例】转变思路,少走弯路,X米加密分析
  7. 在eclipse中使用hadoop插件
  8. C语言的“编译时多态”
  9. 支付宝研究员兼OceanBase总架构师杨传辉:我在数据库梦之队的十年成长路
  10. 爬虫神器:一条命令下载《复仇者联盟3:无限战争》
  11. 计算机组装已维护的学术报告,计算机硬件组装维护的策略研究
  12. python画柱状图-Python Excel 绘制柱形图
  13. pku 3592 Instantaneous Transference tarjan缩点重建图+spfa求最长路
  14. 论文笔记_S2D.63_2020-ICRA_LiStereo:从雷达和双目立体图像生成稠密深度图
  15. 这是阿里人手机里,这一年最舍不得删的照片
  16. 计算机算法常用英语,计算机术语 算法相关术语
  17. SLAM--位姿图优化和PnP求解
  18. Mysql授权root账户允许远程连接访问
  19. js彻底解决中文乱码问题
  20. .Net(C#)腾讯信鸽推送

热门文章

  1. SpringBoot整合Druid,开启druid监控平台
  2. Linux网络通信——TCP通信流程
  3. C# SHA1加密算法,并转为大写
  4. [Nacos] 业务实例如何指定IP注入Nacos
  5. ASP.NET中的过滤器
  6. 写个关于使用cocostudio Armature实现动画自由切换的小demo
  7. 机器学习算法系列(五)- Lasso回归算法(Lasso Regression Algorithm)
  8. opencv中的RGB改变通道的数值,而对整张图的影响
  9. email是指利用计算机网络及时地,2015石家庄信息技术中考选择题
  10. unity 中2d游戏游戏角色与场景物体层级关系问题解决