UNIX网络编程笔记(8)—IPv4和IPv6互操作
来源:互联网 发布:dnfdll源码 编辑:程序博客网 时间:2024/05/17 08:47
UNIX网络编程笔记(8)—IPv4和IPv6互操作
1.概述
本章说的互操作性,其实就是考虑四种情况的排列组合:
不过这里的客户端和服务器又牵涉了单栈和双栈,感觉都是概念性的东西,简单了解一蛤。
2.IPv4客户端和IPv6服务器
双协议栈,指的是在同一台设备上同时启用IPv4和IPv6协议,这样的话设备既能和IPv4通信又能和IPv6通信。一般情况,这事通过使用IPv4映射的IPv6地址实现的。
我们可以把允许一个IPv4的TCP客户和一个IPv6的TCP服务器进行通信的步骤总结如下:
(1)IPv6服务器启动后创建一个IPv6的监听套接字,并绑定通配地址。
(2)IPv4客户调用gethostbyname
找到服务器的A记录(IPv4地址),当然服务器还有一个AAAA记录(IPv6地址),这里对于我们的IPv4地址来说只需要一个A记录。
(3)客户调用connect发起主动连接,这伴随着一个SYN分节发送到服务器主机。
(4)服务器接收到SYN分节,accept返回给服务器的地址就是IPv4映射的IPv6地址,并响应给客户端一个IPv4 SYN/ACK
(5)客户和服务器通信使用IPv4载送数据报。
(6)客户端不知道自己是与一个IPv6服务器通讯,服务器也不知道自己在与一个IPv4客户端通信。这些细节由双栈协议来处理。
大多数双栈主机在处理监听套接字时应该使用以下规则:
(1)IPv4监听套接字只能接收来自IPv4客户的外来连接。
(2)如果服务器有一个绑定了通配地址的Ipv6监听套接字,那么该套接字一般来说可以接收来自Ipv4客户的外来连接,又能接收来自Ipv6客户的外来连接。
在使用这些规则的时候,要注意一个重要的套接字选项IPv6_V6ONLY
,顾名思义,这表明该套接字只能接收来自IPv6客户的外来连接。
3.IPv6客户端和IPv4服务器
运行在双栈下面的客户主机和只支持IPv4的服务器:
(1)服务器创建IPv4监听套接字
(2)客户查找IPv6地址,但IPv4服务器只有A记录,因此返回给客户一个IPv4映射的IPv6地址。
(3)客户使用返回的服务器映射的IPv6地址connect发起连接。内核检测到映射地址后将发送一个IPv4 SYN到服务器。
(4)服务器响应IPv4 SYC/ACK 并使用IPv4数据报建立连接。
4.小结
根据排列组合原理,给出了客户服务器各种组合,这里有一个重要的参考点:
不论调用connect还是调用sendto,IPv4客户不能指定一个IPv6地址,因为IPv6超出了IPv4的套接字结构的长度。
5.参考
1.http://blog.csdn.net/yusiguyuan/article/details/11856099
2.《UNP1 》
- UNIX网络编程笔记(8)—IPv4和IPv6互操作
- Unix网络编程学习笔记之第12章 IPv4与IPv6的互操作性
- UNIX网络编程--Ipv4与Ipv6的互操作性(十二)
- 《网络编程》IPv4 与 IPv6 相互操作
- IPv4 和 IPv6 的网络接口操作
- IPv4 和 IPv6 的网络接口操作
- IPv4和IPv6互操作问题
- 《Unix网络编程》卷1:套接字联网API(第3版):名字与地址互换、IPv4和IPv6互操作性
- UNXI网络编程笔记 第12章IPV4与IPV6的互操作性
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- IPv6下网络编程socket, TCP和UDP例子,以及兼容IPV4和IPV6的类
- 《数据通信与网络》笔记--IPv4 VS IPv6
- ipv6和ipv4(1)
- UNIX网络编程学习(5)--只支持IPv4的inet_pton和inet_ntop的简化版本
- java网络协议(IPV4/IPV6)
- AIX V5.3 中 IPv4 和 IPv6 的网络接口操作
- Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
- Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
- UVa12716 GCD XOR
- scala基础10-主构造器/辅助构造器/私有构造器
- 大江大海 —— 海洋法
- 为什么 GNU grep 如此之快?
- python 实现固定格式筛选最大值的代码
- UNIX网络编程笔记(8)—IPv4和IPv6互操作
- hdu_5718_Oracle(大数模拟)
- 巴什博奕
- Phaser运行阶段性并发任务【在指定的文件夹和子文件夹中获得文件扩展名为.log的文件列表】
- 二分查找不一定比顺序查找到的效率高
- 《Linux学习》之图形界面和字符界面的切换
- 文本框(JTextField)和文本域(JTextArea)的使用详解
- MVP、MVVM,MVC设计模式的实例分析
- 微软笔试题-Constraint_Checker