梳理了IETF的相关RFC文档,汇总IPv4与IPv6地址转换映射的方法。笔者资历较浅,难免有错误之处,还望指正。如真正深入研究,可以查看标准RFC文档。IETF官网文档下载链接
本文总体上根据RFC文档出版的时间先后顺序,大概叙述每个文档实现IP地址转换的思路;为了便于理解某些内容,对某些文档描述调整了顺序,可能不符合时间先后顺序。

IPv6与IPv4地址转换

  • RFC4291
  • RFC6052
  • RFC2766(NAT-PT)
  • RFC6146(NAT64)
  • RFC8512
  • RFC 8215( Local-Use IPv4/IPv6 Translation Prefix )
  • RFC3306( Unicast-Prefix-based IPv6 Multicast Addresses )
  • RFC 6219(IVI)
  • RFC 8114
  • 相关资料
  • 参考文献

RFC4291

《RFC4291》1提出两种兼容方式实现IPv4和IPv6的地址转换,81-96位全为0的兼容方式或全为1的兼容方式。IPv6兼容的IPv4地址必须为全球单播地址,81-96位全为0的兼容方式见图1。

图1 81-96位全为0的兼容方式
IPv6地址81-96位全为1的兼容方式见图2。

图2 81-96位全为1的兼容方式

RFC6052

《RFC6052》2规定了IPv4地址转换成对不同前缀长度的IPv6地址格式,IPv6地址前缀位数有32, 40, 48, 56, 64, 72, 80, 8896。32位的IPv4地址直接内嵌至IPv6前缀后格式如图3所示。

图3 IPv6地址内嵌IPv4地址
《RFC6052》规定IPv4地址和IPv6地址实现映射的知名网络前缀 64:ff9b::/96,同时,知名网络前缀只能使用最后一种前缀长度为96的IPv6地址格式。知名网络前缀 64:ff9b::/96不能映射《RFC1918》分配的私有IPv4地址。《RFC6052》中利用 2001:db8:: 特定网络前缀实现映射如图4所示。

图4 特定网络前缀映射

RFC2766(NAT-PT)

介绍NAT-PT前,可能需要了解一下NAT技术,本文不再介绍NAT技术,直接了解NAT-PT原理。(由于论文行文习惯,先叙述文字再放图。为了便于描述,这里先放图,因此该图不视为文内的图4,当做不存在就行。本图摘自《RFC2766》3。)

如图,IPv6侧的A和B主机通过NAT-PT与IPv4侧的IPv4主机C连接。主机A和B位于同一个网络内,具有相同的网络前缀,主机C具有IPv4地址132.146.243.30,且为全为唯一的。
NAT-PT配置有IPv4地址池,可以满足与IPv6地址的一一对应关系。
主机A向主机C发起通信时,源地址fedc:BA98::7654:3210,目的地址prefix::132.146.243.30(prefix为IPv6网络前缀,与NAT-PT IPv6地址网络前缀一致)。如果A发送的是建立会话的初始化数据包,假设NAT-PT为其分配一个120.130.26.10IPv4地址,然后转发至主机C,此时数据包的源地址120.130.26.10,目的地址132.146.243.30。NAT-PT收到主机C的IPv4数据包时,根据源地址132.146.243.30,目的地址120.130.26.10,将其转发至主机A,此时源地址prefix::132.146.243.30,目的地址fedc:BA98::7654:3210。主要原理就是建立一个映射表,存储建立的映射关系,数据包到来时,直接查表。
在此基础上,引入“地址+端口”映射,过程区别不大,主要区别在于数据包( src代表源地址,dest代表目的地址,tcp=3017代表tcp端口号为3017),如下过程所述。
A -> NAT-PT:
src = fedc:BA98::7654:3210, tcp = 3017, dest = prefix::132.146.243.30,tcp=23

NAT-PT -> C:
src = 120.130.26.10, tcp = 1025, dest = 132.146.243.30, tcp = 23

C -> NAT-PT:
src = 120.130.26.10, tcp = 23, dest = 132.146.243.30, tcp = 1025

NAT-PT -> A:
src = prefix::132.146.243.30, tcp = 23, dest = fedc:BA98::7654:3210,tcp=3017

RFC6146(NAT64)

NAT64设备根据《RFC6052》定义的算法,利用自身IPv6前缀和待转换的IPv4地址生成IPv6地址。有状态NAT64转换包含绑定的TCP和UDP端口号。NAT64的IPv6地址池前缀为Pref64::/n。
在《RFC6146》4示例中,根据《RFC6052》知名网络前缀,
在NAT64 IPv6接口端建立的映射关系为: ( 2001:db8::1, 1500 ) <–> ( 203.0.113.1, 2000 )
在IPv4接口端建立的映射关系为:( 64:ff9b::192.0.2.1, 80) <–> ( 192.0.2.1, 80 )
《RFC6146》中NAT64会话映射表为( X’, x), (Y’, y) <–> ( T, t), ( Z, z),其中X’和Y’为IPv6地址,T和Z为IPv4地址。x, y, z和t为端口号,同时y必须等于z。

RFC8512

《RFC8512》5根据《RFC6052》地址转换算法,在NPT和NAT中实现IPv6和IPv4地址转换。IPv6地址2001:db8:1234 ::198.51.100.1采用特定网络前缀,映射至IPv4地址198.51.100.1

RFC 8215( Local-Use IPv4/IPv6 Translation Prefix )

《RFC6052》预留了知名网络前缀64:ff9b::/96,因此《RFC8215》6
64:ff9b::1:0:0 - 64:ff9b:0:ffff:ffff:ffff:ffff:ffff 地址分配给本地内网IPv4和IPv6地址转换使用。另一方面《RFC6052》对于分配的私有IPv4地址的限制,对IPv6前缀64:ff9b:1::/48不适用,因此64:ff9b:1::/48网络前缀可以实现私有IPv4地址转换。

RFC3306( Unicast-Prefix-based IPv6 Multicast Addresses )

在IPv6组播地址格式中,flags:P=0,IPv6组播地址非基于网络前缀;P = 1,表示IPv6组播地址基于IPv6网络前缀,当P=1时,必须满足T = 1。
scope:限制组播范围,不同值对应范围如下表所示。

value domain
0 reserved
1 Interface-Local scope
2 Link-Local scope
3 reserved
4 Admin-Local scope
5 Site-Local scope
6 (unassigned)
7 (unassigned)
8 Organization-Local scope
9 (unassigned)
A (unassigned)
B (unassigned)
C (unassigned)
D (unassigned)
E Global scope
F reserved

reserved:0x00,根据《RFC 3306》7,需要清0该域。
plen:network prefix长度。
network prefix:利用IPv6网络前缀中填充该域,填充位数由plen决定。
group ID:组播ID。
当P=1.且T=1时,基于IPv6网络前缀的组播地址如图5所示。

图5 基于IPv6网络前缀组播地址
IPv4组播地址范围为 224.0.0.0 - 239.255.255.255。当IPv6组播地址为 239.1.1.5时,假设转换设备的IPv6地址由特定网络前缀 2001:db8:122:344::/96(见图1)组成,基于IPv6网络前缀的一种IPv4组播地址转换结果为 ff32:40:2001:db8:122:344:fe01:105。其中, fe01:105239.1.1.5的十六进制,即 fe.01.01.05。ff为固定格式,3代表flags=0011,2代表组播限制在 Link-Local scope。0x40代表基于IPv6网络前缀的长度为64位,即 2001:db8:122:344

RFC 6219(IVI)

《RFC6219》8采用IPv6特定网络前缀解决IPv4和IPv6地址之间的无状态映射,同时利用32-39位标识IVI前缀,40-71位内嵌全球唯一的IPv4地址。IVI实现单播地址映射如图5所示。

图6 IVI单播地址映射
IVI实现IPv4组播地址和IPv6组播地址的映射,IPv4组播地址范围为 232.0.0.0/8 - 232.255.255.255/8,采用的IPv6组播地址为 PIM-SSM( Protocol Independent Multicast - Source-Specific Multicast, 协议无关组播-特定于源的组播)。转换后的IPv6组播地址范围为 ff3e:0:0:0:0:0:f000:0000/96 - ff3e:0:0:0:0:0:f0ff:ffff/96,32位的组播ID中,f0固定,而后24位由IPv4组播地址后24位转换而来。IVI实现IPv4组播地址和IPv6组播地址映射如图7所示。

图7 IVI实现IPv4组播和IPv6组播地址映射

RFC 8114

《RFC8114》8对组播地址转换算法进行描述,分为IPv6组播地址的组成和IPv4组播地址的获取。
IPv6组播地址:结合IPv6组播地址前缀的96位和IPv4地址的32位以获得一个128位的地址。
IPv4组播地址:如果IPv6组播地址前缀为预先配置,即可直接从组播地址后32位获取IPv4组播地址。
如图8为IPv4组播地址与IPv6组播地址转换。

图8 IPv4组播地址与IPv6组播地址转换

请在转载或引用时,说明本文章来源。

相关资料

《RFC7269》NAT64 Deployment Options and Experience
《RFC7857》Updates to Network Address Translation (NAT) Behavioral Requirements
《RFC6889》Analysis of Stateful 64 Translation
github IPv6组播实验源码

参考文献


  1. 《RFC4291》IP Version 6 Addressing Architecture ↩︎

  2. 《RFC6052》IPv6 Addressing of IPv4/IPv6 Translators ↩︎

  3. 《RFC2766》Network Address Translation - Protocol Translation (NAT-PT) ↩︎

  4. 《RFC6146》Stateful NAT64: Network Address and Protocol Translation from IPv6 Clients to IPv4 Servers ↩︎

  5. 《RFC8512》A YANG Module for Network Address Translation (NAT) and Network Prefix Translation (NPT) ↩︎

  6. 《RFC8215》Local-Use IPv4/IPv6 Translation Prefix ↩︎

  7. 《RFC3306》Unicast-Prefix-based IPv6 Multicast Addresses ↩︎

  8. 《RFC8114》Delivery of IPv4 Multicast Services to IPv4 Clients over an IPv6 Multicast Network ↩︎ ↩︎

IPv4与IPv6地址转换相关推荐

  1. mysql如何高效存储IPv4、IPv6地址

    目录 一.IPv4简介 + 高效存储 二. IPv6简介 + 高效存储(兼容IPv4) 三.引用: 一.IPv4简介 + 高效存储 IPv4百度百科,简单地来说IPv4地址是一个4字节的无符号整数.为 ...

  2. IPv4、IPv6地址、组播地址及子网子划分详解四

    6.IPv6 IPv4地址总数=232=4,294,967,296 IPv6地址总数=2128= 340,282,366,920,938,463,374,607,431,768,211,456 201 ...

  3. ipv6正则表达式 java,用正则表达式解析IPv4跟IPv6地址字符串

    用正则表达式解析IPv4和IPv6地址字符串 以下是经过我的.net C# 代码百般测试的,绝对经得住考验! IPv4[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9] ...

  4. 返回本机IP地址本地IP地址,获得本机的ipv6地址,检查本机ipv4,ipv6地址的网站,域名,用于ddns

    返回本机IP地址本地IP地址,获得本机的ipv6地址,检查本机ipv4,ipv6地址的网站,域名 都是我在网上找的 ipv4 https://ipv4.ddnspod.com https://api- ...

  5. IPv4、IPv6地址、组播地址及子网子划分详解二子网划分

    IPv4.IPv6地址.组播地址及子网子划分详解二子网划分 5.子网划分 5.1.子网掩码 5.2.无类域间选择CIDR 5.3.根据子网掩码和CIDR值划分子网 5.4.二进制AND运算在划分子网中 ...

  6. IPv4、IPv6地址、组播地址及子网子划分详解三可变长子网掩码

    IPv4.IPv6地址.组播地址及子网子划分详解三可变长子网掩码 5.5.可变长子网掩码(VlSM) 5.5.可变长子网掩码(VlSM) 先看一下分类组网,路由选择协议RIPv1没有包含子网信息的字段 ...

  7. IPv4、IPv6地址、组播地址及子网子划分详解一

    一.IPv4地址 1.IP地址的定义 IP地址是分配给IP网络中每台机器的数字标识符,它指出了设备在网络中的具体位置.由 32 位二进制数组成.IP地址是软件地址,而不是硬件地址. 在因特网中给每台电 ...

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

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

  9. 4.IPv4和IPv6地址长度

    IPv4地址的二进制形式长度为32,使用我们常用的点分十进制形式进行表示那么最长长度为15,例如"255.255.255.255" 所以在posix的<netinet/in. ...

  10. python 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址_Python编程常用技巧,你知道几个?...

    现在Python是个炙手可热的技能,很多人都想着入手学学Python编程,甚至包括一些知名人士,比如知名地产商潘石屹就开始学Python.关于Python编程的内容在网络上也非常多,本文虫虫给大家总结 ...

最新文章

  1. 20189317 《网络攻防技术》 第二周作业
  2. 力扣【接雨水问题】 leetcode-42:暴力-备忘录-双指针三种方法
  3. window 之命令行的cd
  4. 阿里云数据中台助力零售耐消品新客获取与转化
  5. C# 根据文本设置combobox的两种方法
  6. 程序设计基础-c#和java的区别
  7. Ubuntu下安装Nginx服务器并进行优化
  8. CF1047D Little C Loves 3 II
  9. Linux安装gcc的四种方法
  10. 天正的计算机快捷命令大全,天正建筑快捷键大全:天正建筑cad快捷键命令大全...
  11. 谷歌浏览器任务栏图标变为白色如何快速解决
  12. 这绝对是目前最好用的电脑桌面便签,免费的,墙裂推荐
  13. 校招,面试,学习路线,这个编程学习网站,我爱了
  14. 「雷军万字总结」小米十周年公开演讲全文
  15. 南卡OE Pro上线!开放式耳机新里程碑!前所未有的音质舒适双冠
  16. 帝国cms支付系统的漏单风险
  17. Spacy model download
  18. java用户名重复验证代码_java如何让注册的用户名不重复,在当前页面就可以判断,并抛出提示?...
  19. RMAN 工具 恢复数据库
  20. linux视频教程之tar包的应用

热门文章

  1. linux_systemd启动方式解析,如何开机自动登录,开机自动运行程序
  2. swot分析法案例_型男收割机之SWOT分析法——大龄剩女脱单攻略
  3. 关于补码与booth算法的想法与逻辑推导
  4. 博弈论笔记(0)—— 参考书籍及前置知识
  5. 怎么启动mysql2008_SQL Server 2008初次启动
  6. CNN英文垃圾邮件分类(数据预处理)
  7. win10系统任务栏透明方法
  8. 思科ccnp认证网络工程师关于NAT64协议概述一定要看
  9. CMMB手机电视自毁长城?
  10. 浏览器内核学习笔记一