您的位置:首页 > 其它

UNP Chapter 10 - IPv4和IPv6的互操作性

2012-01-19 16:04 288 查看
10.1 概述

本章中假定所有的主机上都运行着双重协议栈(dual stacks)。

10.2. IPv4客户和IPv6服务器

拥有双重协议栈的主机的一个基本特性就是:其上运行的IPv6服务器既能应付IPv4客户,又能应付IPv6客户。这是通过使用IPv4映射的IPv6地址实现的。



在一个双重协议栈的主机上,根据接收套接口的类型(TCP或UDP),对一个收到的IPv4或IPv6数据报进行处理的流程:



10.3. IPv6客户与IPv4服务器



客户与服务的组合情况总结



10.4. IPv6地址测试宏

有一小部分IPv6应用程序必须知道与其通信的对方是否使用IPv4协议,这些应用程序需要知道对方的地址是不是一个IPv4映射的IPv6地址。为测试IPv6地址的某些特性共定义了12个宏:

#include <netinet/in.h>
int IN6_IS_ADDR_UNSPECIFIED(const struct in6_addr * aptr);
int IN6_IS_ADDR_LOOPBACK(const struct in6_addr * aptr);
int IN6_IS_ADDR_MULTICAST(const struct in6_addr * aptr);
int IN6_IS_ADDR_LINKLOCAL(const struct in6_addr * aptr);
int IN6_IS_ADDR_SITELOCAL(const struct in6_addr * aptr);
int IN6_IS_ADDR_V4MAPPED(const struct in6_addr * aptr);
int IN6_IS_ADDR_V4COMPAT(const struct in6_addr * aptr);
int IN6_IS_ADDR_MC_NODELOCAL(const struct in6_addr * aptr);
int IN6_IS_ADDR_MC_LINKLOCAL(const struct in6_addr * aptr);
int IN6_IS_ADDR_MC_SITELOCAL(const struct in6_addr * aptr);
int IN6_IS_ADDR_MC_ORGLOCAL(const struct in6_addr * aptr);
int IN6_IS_ADDR_MC_GLOBAL(const struct in6_addr * aptr);
//返回值:非零表示IPv6地址是指定类型的,否则返回零


10.5. IPV6_ADDRFORM套接口选项

IPV6_ADDRFORM套接口选项能把一个套接口从一种类型转变成另一中类型,它受到以下限制:

1. 一个IPv4套接口总能转变为IPv6套接口。所有与该套接口关联的IPv4地址被转换成IPv4映射的IPv6地址。

2. 一个IPv6套接口只有在与之关联的地址是IPv4映射的IPv6地址的情况下才能转变成IPv4套接口。

10.6. 源代码可移植性

10.7. 小结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: