- 论坛徽章:
- 0
|
IPV6点分地址
从 IPv4 到 IPv6 最明显的变化就是网址的长度不同了,IPv6 地址长度为128比特而 IPv4 地址长度为32比特。所有 IPv6 地址的个数可达3.4x1038个。
IPv6 地址格式
IPv6 地址在许多情况下都由两个逻辑部分组成:64位的网络前缀部分和64位的主机寻址部分,而后者通常都是主机依照 MAC 接口地址自动生成的。IPv6 地址由8组长度为16比特的十六进制数值组成,各组之间由冒号(:)分隔开,示例如下:
aaaa : aaaa : aaaa : aaaa : aaaa : aaaa : aaaa : aaaa
其中每一个aaaa, 一组长度为16比特的十六进制数值,而 a 是一位长度为4比特的十六进制数值,以下就是一个IPV6的实例.
3ffe:ffff:100:f101:210:a4ff:fee3:9566
Ipv6 地址变形:因为IPV6地址位数太多.因此如果出现全零的段(0000),可以省写为 0,这个跟IPV4一样.
如果出现连续的全0段,还可以直接写成::,如
1080:0:0:0:8:810:213C:123A地址可以省写为 1080::8:810:213C:123A,但这种写法在一个地址里只能出现一次.比如本地回环地址: 它的简写就是::1 等同于ipv4的 127.0.0.1
还有一种表达法也是常用. 可以用“IPv6地址/前缀长度”来表示地址前缀. 前缀长度是一个十进制值,指定该地址中最左边的用于组成前缀的位数. 址前缀在一定意义上代表了这个IP地址的类型.
例如: 假如一个IP地址它的地址前缀为16位,IP地址为“1080::8:810:213C:123A”,则用地址前缀法表示就为:1080::8:810:213C:123A/32
决定这些IP地址类型的“地址前缀”(Format Prefix ,FP)。顾名思义,地址前缀就是在地址的最前面那段数字。当然也属于128位地址空间范围之中,通过不同的地址前缀来代表不同的地址类型。下表1就是在IPv6标准中规定的地址前缀所代表的意义。类似于IPV4的子网掩码.
前缀数的换算,/32对应的地址数量为2的(128-32)次方=2的96次方个,/48对应的地址数量为2的(128-48)次方=2的80次方个,/128对应的地址数量为2的(128-128)次方=1个地址。 2的32次方对应的地址数量约为40亿个。
前缀分配
Ipv6网络的使用
ifconfig 会显示IPV6地址.
Ipv6网络不能使用ping 来测试网络,而是采用ping6 来处理,注意地址不能带前缀
这里ping其它机器需要用-I指定从哪一个网卡
Socket如何表示IPV6地址
struct in6_addr {
uint8_t s6_addr[16]; /* 128 bit 字节地址 */
};
#define SIN6_LEN /* required for compile-time tests */
struct sockaddr_in6 {
uint8_t sin6_len; /* = SIN6_LEN */
sa_family_t sin6_family; /* = AF_INET6 */
in_port_t sin6_port; /* */
uint32_t sin6_flowinfo; /* priority and flow label */
struct in6_addr sin6_addr; /* IPV6 的任意地址是 in6addr_any */
}
其余编程象socket,bind,listen,send,recv跟IPV4类似,
IP V 6的点分字符串转成sockaddr_in6使用如下语句
inet_pton(AF_INET6, argv[1], &dest.sin6_addr);
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/105675/showart_2096191.html |
|