您的位置:首页 > 其它

ipv6技术介绍

2011-03-02 11:18 295 查看
主要由于ipv4拥有地址空间资源短缺的局限性,ipv6将会成为新一代的网络应用技术规范.所以下面介绍一下ipv6

一、IPv6地址结构定义

}
IPv6有128位的地址结构。
例:fffe:ffee:ff22:12:7e:89:e3:10
FF01:0:0:0:0:0:0:101 等价于 FF01::101

}2.子网掩码表示的不同
IPv6更习惯用掩码的长度来表示子网掩码。 例:输入ifconfig命令会看到这样的地址表示方式:
fffe:ffee:ff22:12:7e:89:e3:10/64
64就是子网掩码的长度,这是为了表示的方便。相当于FFFF: FFFF: FFFF: FFFF::0

}3.IPv6地址分类
a.IPv6地址分为单播地址、泛播地址、多播地址。和IPv4相比,取消了广播地址类型,增加了泛播地址类型;没有了地址划分.
b.多播地址格式前缀为1111 1111,

c.

}4.IPv6中特殊的地址
a.未指定的IPv6地址
格式0::0
b.IPv6环回地址
格式::1。此地址与IPv4中的127.0.0.1类似

所有格式前缀不是多播格式前缀(1111 1111)的IPv6地址都是IPv6单播格式(泛播和单播格式相同)

连续出现的0可用::代替,但::只能出现一次 1.地址格式

二、IPv6常用命令

1.linux#ifconfig interface inet6 add ipv6-address/prefixlength

使用ifconfig命令给指定接口分配一个静态IPv6地址。inet6 add参数指定添加一个IPv6地址,ipv6-address是分配给接口的静态地址,prefixlength参数定义前缀的长度

2.linux#ip -f inet6 addr add ipv6-address/prefixlength dev interface

使用IP命令给指定接口分配一个静态IPv6地址。-f inet6 addr add参数指定添加IPv6地址,ipv6-address是分配给接口IPv6地址,prefixlength参数定义前缀的长度,dev参数标识给定的接口interface。这个命令和前面的命令提供同样的结果

给接口eth0分配一个前缀长度为64比特的静态IPv6地址fec0:0:0:0::1
3. Linux上添加默认IPv6路由的route和ip命令
linux#route -A inet6 add ::/0 gw gateway[dev interface]

linux#ip -f inet6 route add ::/0 via gateway [dev interface]

使用ipconfig的实例:
linux#route -A inet6 add ::/0 gw fe80::260:3eff:fe47:1533 dev eth0
使用ip的实例:
linux#ip -f inet6 route add ::/0 gw fe80::260:3eff:fe47:1533 dev eth0

使用ifconfig的实例:
linux#ifconfig eth0 inet6 add fec0:0:0:0:1::1/64
使用ip的实例:
linux#ip –f inet6 addr add fec0:0:0:1::1/64 dev eth0

三、开发中的注意事项

1.Socket编程
增加<netinet/ip6.h>头文件
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};

struct sockaddr_in6 {
sa_family_t sin6_family; /* AF_INET6 */
in_port_t sin6_port; /* transport layer port # */
uint32_t sin6_flowinfo; /* IPv6 traffic class & flow info */
struct in6_addr sin6_addr; /* IPv6 address */
uint32_t sin6_scope_id; /* set of interfaces for a scope */
};
struct in6_addr {
uint8_t s6_addr[16]; /* IPv6 address */
};
例子:
struct sockaddr_in6 local;
local.sin6_family = AF_INET6;
local.sin6_addr = in6addr_any;(相当于ipv4的INADDR_ANY);
local.sin6_port = port;
skt=socket( AF_INET6, SOCK_DGRAM, 0 );
bind( skt,(struct sockaddr *)&local, sizeof(local);
connect( skt, (struct sockaddr *)& local, sizeof(local) );

转换字符串到网络地址
int inet_pton(int af, const char *src, void *dst); 第一个参数af是地址族,转换后存在dst中
例:

struct in6_addr m_ip;
inet_pton(AF_INET6,”ff::1”, &m_ip);

转换网络地址成字符串 const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt); 这个函数转换和上面的只是多了一个参数socklen_t cnt,他是所指向缓存区dst的大小,避免溢出
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: