ipv6技术介绍

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

 

一、IPv6地址结构定义
 
}
IPv6128位的地址结构。
  例: 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的大小,避免溢出

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值