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

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

ipv6的表示

关于单个ipv6地址的基本表示有:标准表示、压缩表示、ipv4内嵌表示,网段的表示常见的有:地址前缀表示(类似于ipv4的掩码形式)

-----------------------------

IPV6 32位的 址被分割为,其中每个,并且每个 来分开128位的16位段来表示0x0000~0xFFFF之间的十六进制的数宇表示 :
0100 00bc , 当然书写这些地址也不是一件令人愉快的事情 幸运地是有两条规则可以用来简化 : 任何一个 ; 任何一个 , 就认为忽略书写的数字是起始的  3 6 ,  1944  0  d0b 这里要注意的是 ; , 因为这样做会使 0 是在所写的数字之前还是在其之后。 另外 5 个分段全部是 ,   址中具有—长串的 ff02 0000 0000 ff02  0  0 : 任何由全 16 位段的单个连续的字符串 , 上面例子中的地址可以表示成如下格式 , 这条规则强调的是仅仅对于单个连续不间断的全 , 在一个 :
0000 0000 ,   为它们都只使用了 2001  0 2001  0 , 请读者注意 , 2001 95
之所以认为上面这个缩写方式是错误的 0 字符串的长度是含混不清的   0d02 0014 0095
0000 0014 2001 0014:0000 0095
不像 ) 可以通过点分十进制或十六进制地址掩码标识 ,IPv6 协议的前缀始终通过位计数的方式来标识。更确切地说  / IPv6 地址的起始位有多少位是前缀位 。举一个例子 :3ffe  a d0b/64 当读者需要书写一个 IP 叫地址一样的书写方式将所有的主机位设置为 3ffe  a   成的   在本书中   第—个实例就是缺省地址   中讨论   形式 /0

第二个使用全 址的实例是未指定地址,用来标识一个还未确定的实际,它与缺省地址的书写方式是有区别的/128

-----------------------------

除上述形式外,在实际应用中还可能遇到一种情况,如下所示: 
短格式地址段表示为:”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的排序中。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值