在IPv6网络中,IPV6_V6ONLY标志用于确保套接字只使用IPv6,特别是不会将ipv4到ipv6的映射用于该套接字。在许多操作系统上,IPV6_V6ONLY不是默认设置的,但在一些操作系统(例如Windows7)上,它是默认设置的。
我的问题是:引入这面旗帜的动机是什么?是否存在有关IPv4到IPv6映射的问题,因此人们需要一种方法来禁用它?在我看来,如果有人不想使用ipv4到IPv6的映射,他们就不能简单地指定一个ipv4映射的IPv6地址。这里我漏掉了什么?
发布于 2010-04-23 03:32:25
我不知道为什么它会是默认的;但无论默认是什么,我总是会显式地使用这种标志。
关于为什么它首先存在,我猜它允许你保留现有的纯ipv4服务器,并且只在相同的端口上运行新的服务器,但仅用于IPv6连接。或者,新服务器可以简单地将客户端代理到旧服务器,使IPv6功能易于添加到旧服务中。
发布于 2010-05-11 00:41:40
并不是所有支持IPv6的平台都支持双堆栈套接字,所以问题是,需要最大化IPv6兼容性的应用程序如何知道支持双堆栈或在不支持双堆栈的情况下单独绑定?唯一通用的答案是IPV6_V6ONLY。
在双协议栈环境中,忽略IPV6_V6ONLY或在支持双协议栈的IP堆栈存在之前编写的应用程序可能会发现单独绑定到V4失败,因为IPv6双协议栈套接字绑定到IPv4阻止IPv4套接字绑定。由于协议或应用层寻址问题或IP访问控制,应用程序也可能不期望IPv6上的IPv4。
这种或类似的情况很可能促使MS等人将默认值设为1,即使RFC3493声明0为默认值。1理论上最大化了向后兼容性。具体来说,Windows XP/2003不支持双堆栈套接字。
不幸的是,也不缺少需要传递较低层信息才能正确运行的应用程序,因此此选项对于规划最适合需求和现有代码库的IPv4/IPv6兼容策略非常有用。
发布于 2010-05-10 01:04:17
最常被提及的原因是服务器具有某种形式的ACL (访问控制列表)的情况。例如,假设有一台服务器,其规则如下:
Allow 192.0.2.4
Deny all它在IPv4上运行。现在,有人在装有IPv6的机器上运行它,根据某些参数,IPv4请求在IPv6套接字上被接受,映射为::192.0.2.4,然后不再与第一个ACL匹配。突然之间,访问就会被拒绝。
无论操作系统有什么默认设置,在应用程序中显式(使用IPV6_V6ONLY)都可以解决这个问题。
https://stackoverflow.com/questions/2693709
复制相似问题