C++中的IPv6网络程序设计
IPv4最初是由美国国防部开发的用于网际互联(IP)协议,后来它不仅发展了TCP,而且还进一步发展了IPv4(IP协议4.0版)。IPv4现在已经广泛应用于Internet网络中,同时也应用于大多数计算机系统,局域网和广域网中。然而,随着Internet中的计算机数量突飞猛涨,IPv4的局限性越发明显: 1.IPv4地址数目面临耗尽,日近紧张; 2.IPv4寻址并非完全分等级,这使得Internet枢纽路由器必须维持大量的路由表,负担过重。 3.IPv4的地址必须被静态分配或通过配置协议(如:DHCP)进行分配。IPv6的开发目标之一就是将提供更为简便的配置方案。 于是IPv6(6.0版本)应运而生。在Window系统中,Windows XP 提供了IPv6的developer-release版本;Windows 2000也可在http://www.microsoft.com/ipv6 下载 IPv6协议预览。下图在本人计算机上成功安装的示例图: 图-1 IPV6 安装示例 一.IPv4地址及其寻址 1.IPv4地址 IPv4地址(常称IP地址)用一个32位数表示;通常表示位十进制格式,地址的每8位字节被表示转为一个十进制的数值,并由句点分隔,如:192.168.0.1;IPv4地址 通常分为A、B、C、D、E 五类。 2.IPv4寻址 在Winsock 中,通过SOCKADDR_IN 结构来指定IPv4的地址和服务断口信息: struct sockaddr_in { short sin_family ;//必须为AF_INET,表示使用IPv4地址簇 u_short sin_port; //TCP/UDP 端口 struct in_addr sin_addr;// IP地址(以网络字节顺序排列, 4个字节) char sin_zero[8];//填充项 } 二.IPv6地址及其寻址 1.IPv6地址 IPv6地址与IPv4地址的显著的不同是128位,长度是IPv4地址的4倍。IPv6地址由16位字节分段表示,显示为冒号分隔的十六进制: 21DA:00D3:0000:2F3A:B234:ED12:9C5A:DAC3 IPv6地址的分配 分配 地址前缀 保留地址0000 0000 为NSAP预留0000 0001 可聚合的全球单播地址001 链接-本地单播地址1111 1110 10 站点-本地单播地址1111 1110 11 多播地址1111 1111 2.IPv6的寻址 Winsock中,寻址使用一下结构:
三.独立于协议的地址及名称解析 由此可见在寻址时,IPv4使用16字节的SOCK_ADDR_IN 结构,IPv6则使用28 字节的SOCK_ADDR_IN6 结构。为了解决这个问题,IPv6中引入了新的寻址函数。 [Page] 1.getaddrinfo(),它提供独立于协议的名称解析:
l 第一参数:nodename,以空字节结束的主机名或文字地址 l 第二参数:servname,包含端口或服务名(如:FTP,TELNET)的以空字节结束的字符串 l 第三个参数:hins 是一个结构(addrinfo),包含名称解析的执行方式选项 l 第四个参数:res ,用于返回 addrinfo 结构的一个或多个链表 结构addrinfo 的定义:
l ai_flags 选值:AI_PASSIVE:可以用来获取能够传递给bind函数的地址,此时nodename应设置为NULl ,servname为欲绑定的端口;AI _CANONNAME 表示nodename 是主机名;AI_NUMBERICHOST 表示, nodename 是一个文字字符串地址(如:“192.168.0.1”) l ai_family 选值: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |