UNIX网络编程笔记(8)—IPv4和IPv6互操作

UNIX网络编程笔记(8)—IPv4和IPv6互操作

1.概述

本章说的互操作性,其实就是考虑四种情况的排列组合:

IPv4服务器IPv6服务器
IPv4客户端书中之前所有的例程书中12.2节
IPv6客户端书中12.3节简单修改IPv4客户/服务程序

不过这里的客户端和服务器又牵涉了单栈和双栈,感觉都是概念性的东西,简单了解一蛤。


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的套接字结构的长度。

IPv4服务器单栈IPv6服务器单栈IPv4服务器双栈IPv6服务器双栈
IPv4客户单栈IPv4(无)IPv4IPv4
IPv6客户单栈(无)IPv6(无)IPv6
IPv4客户双栈IPv4(无)IPv4IPv4
IPv6客户双栈IPv4IPv6(无)IPv6

5.参考

1.http://blog.csdn.net/yusiguyuan/article/details/11856099
2.《UNP1 》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值