IPv4与IPv6的互操作性
2016-12-11 17:16
239 查看
IPv4与IPv6的互操作性
ipv4客户与ipv6服务器
IPv6客户和IPv4服务器
IPv6地址测试宏
IPV4监听套接字只能接受来自IPV4客户的连接
如果一个服务器绑定了一个IPV6监听套接字,而且该套接字未设置IPV6_V6ONLY套接字选项,那么该监听套接字既能接收来自IPV4客户端的请求,也能接受来自IPV6客户端的请求
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);
nt 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);
前7个测 试IPV6地址的基本类型, 后5个测试IPV6多播地址的范围
ipv4客户与ipv6服务器
IPv6客户和IPv4服务器
IPv6地址测试宏
IPv4与IPv6的互操作性
双栈主机的一个基本特性是其上的IPv6服务器既能处理IPV4客户,也能处理IPV6客户,这是通过IPV4映射IPV6地址实现的ipv4客户与ipv6服务器
>IPV6服务器创建一个ipv6监听套接字,IPV4客户端通过gethostbyname找到服务器的一个A记录,(虽然IPV6服务器有A记录和AAAA记录),IPv4客户端只使用A记录,客户端通过connect,导致客户端向服务器主机发送一个IPV4 SYN到服务器, 服务器(IPV6)接收这个IPV4 SYN,设置一个标志指示本链接使用IPV4映射IPV6地址,然后响应一个IPV4 SYN/ACK, 建立链接后,ACCEPT返回给服务器的地址就是个IPV4映射的IPV6地址 当服务器往这个ipv4映射的ipv6地址发送TCP分节时,,其IP栈产生的目的地址为所映射IPV4地址的ipv4载送数据包
IPV4监听套接字只能接受来自IPV4客户的连接
如果一个服务器绑定了一个IPV6监听套接字,而且该套接字未设置IPV6_V6ONLY套接字选项,那么该监听套接字既能接收来自IPV4客户端的请求,也能接受来自IPV6客户端的请求
IPv6客户和IPv4服务器
那么IPvc6的客户端会调用getaddrinfo() 查找IPv4的地址,,既然服务器值支持Ipv4,那么服务器主机只有A记录, getaddrinfo()返回给客户的是一个IPv4地址到ipv6地址的映射IPv6地址测试宏
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);
nt 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);
前7个测 试IPV6地址的基本类型, 后5个测试IPV6多播地址的范围
相关文章推荐
- 《Unix网络编程》卷1:套接字联网API(第3版):名字与地址互换、IPv4和IPv6互操作性
- IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
- UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
- Unix网络编程学习笔记之第12章 IPv4与IPv6的互操作性
- IPv4和IPv6的互操作性
- IPv4和IPv6的互操作性
- IPv4 和 IPv6的互操作性
- UNXI网络编程笔记 第12章IPV4与IPV6的互操作性
- Unix网络编程学习笔记之第12章 IPv4与IPv6的互操作性
- IPv4与IPv6的互操作性
- UNIX网络编程--Ipv4与Ipv6的互操作性(十二)
- UNP总结 Chapter 12~14 IPv4与IPv6的互操作性、守护进程和inet超级服务器、高级I/O函数
- UNP函数笔记九: IPv4与IPv6的互操作性
- UNP Chapter 10 - IPv4和IPv6的互操作性
- ipv4头部可选项和ipv6头部的区别
- Tomcat ipv6改成ipv4
- IPv4 和 IPv6 头部结构主要区别
- redhat7.2 彻底关闭防火强(ipv4/ipv6)
- 实现ipv4和ipv6转换的winsock编程?
- 全球IP地址短缺的危机 思科可同时支持IPv4和IPv6