ipv6的表示、ipv6与ipv4之间的转换、ipv6地址大小判定

本文对初步接触到ipv6时,常遇到的三个疑问(ipv6的表示、ipv6与ipv4之间的转换、ipv6地址大小判定)进行了简单介绍。

ipv6的表示

关于单个ipv6地址的基本表示有:标准表示、压缩表示、ipv4内嵌表示,网段的表示常见的有:地址前缀表示(类似于ipv4的掩码形式),此类资料网上众多,可直接访问 http://freepeng.blog.51cto.com/723479/251999 或者访问 http://download.csdn.net/detail/chenjhit/9812788 下载文档进行了解。
除上述形式外,在实际应用中还可能遇到一种情况,如下所示:
短格式地址段表示为:”2001:d02::14:0:0:95-25f4:55ed”(单个ipv6基本表示-不包含::的单个ipv6后半部分表示)
长格式地址段表示为:”2001:d02::14:0:0:95-::25f4:55ed”(单个ipv6基本表示-单个ipv6基本表示)
所表示的是一组ipv6地址范围,此范围以第一个ipv6地址为起点至第二个ipv6地址或者补全的ipv6地址为终点。

ipv6与ipv4之间的转换

由于ipv4到ipv6之间有一个漫长的过渡过程,因此,需要将ipv6兼容ipv4或者映射为ipv4。
在兼容情况下:如果ipv4表示为“X.X.X.X”,那么对应的ipv6即为“::X.X.X.X”(高位补零)
在映射情况下:如果ipv6表示为“::FFFF:X.X.X.X”(33-128位为::FFFF),这类情况下的ipv6将会被映射为ipv4,使用java.net.InetAddress包中的InetAddress.getByName(str)方法将自动实现映射。

ipv6地址大小判定思路

在实际处理ipv6的过程中常常会需要对ipv6的大小进行判定,用于排序、判断区间等应用。但是,直接按照字符串进行比较会出现判定不正确的问题,比如,2001:d02::14:0:0:95会比2001:1d02::14:0:0:95大,而实际是更小。因此,在ipv6排序的时候需要对ipv6字符串进行处理。
1.首先,将ipv6转换为字符串(java下,使用getHostAddress()方法);
2.将所有形式的ipv6地址字符串转换为完整形式的ipv6字符串(XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX),即,将压缩掉的0全部补全;
3.对字符串进行字符串比较即可。
ps:同样的思路可应用于ipv4的排序中。

==========================================
疑问?帮助?批评?欢迎评论 | QQ:593159978

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值