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的大小,避免溢出
一、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的大小,避免溢出
相关文章推荐
- 获得客户端IP地址和IPV6简单介绍
- Java 处理 XML 的三种主流技术及介绍
- java缓存技术的介绍
- rootkit技术之IoCallDriver介绍
- DirectShow技术介绍(长篇)-3
- oracle产品服务和技术级别介绍,OrACLE服务
- [置顶] 可信执行环境(TEE)技术介绍(Trusted Execution Environment)
- WMI技术介绍和应用——使用VC编写一个半同步查询WMI服务的类
- java的注解技术介绍
- 企业级TurboMail邮件系统的安全防范技术介绍
- 介绍几种室内定位技术
- Java处理XML的三种主流技术及介绍
- 深入理解嵌入式开发之系统开发篇全覆盖(MC9S12单片机、CAN技术介绍)
- FastCGI技术介绍
- 介绍用winrar压缩/解压缩的技术文章
- nginx技术(1)nginx高并发介绍和nginx安装
- SAP采购定价过程-条件技术介绍
- WMI技术介绍和应用——WMI概述
- matlab程序性能优化与混合编程技术介绍