IPv4与IPv6地址转换

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

RFC4291

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

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

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

IPv6地址81-96位全为1的兼容方式见图2。
图2 81-96位全为1的兼容方式
图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地址

图3 IPv6地址内嵌IPv4地址

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

图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:限制组播范围,不同值对应范围如下表所示。

valuedomain
0reserved
1Interface-Local scope
2Link-Local scope
3reserved
4Admin-Local scope
5Site-Local scope
6(unassigned)
7(unassigned)
8Organization-Local scope
9(unassigned)
A(unassigned)
B(unassigned)
C(unassigned)
D(unassigned)
EGlobal scope
Freserved

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

图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地址映射

图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组播地址映射
图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组播地址转换

图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 ↩︎ ↩︎

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值