IPv6的奇葩事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IPv6的奇葩事相关的知识,希望对你有一定的参考价值。

在双栈操作系统上,IPV6的套接字可以访问IPV4与IPV6的协议栈。所以只用创建一个IPV6 Socket,就可以接受来自IPv4和IPv6的连接。

接受的IPv4的连接,会做IPv4到IPv6的地址转换(IPv4-mapped),以适应IPv6的数据结构。

有时我们用netstat看到服务只监听在IPv6的通配地址上,却可以接受IPv4的连接就是这样道理。(见参考1)

禁用ipv6的Socket接受IPv4的连接的方法,对于C,C++等程序,可以通过setsocketopt选项IPV6_V6ONLY来完成,这样ipv6的Socket就不再接受IPv4的连接。

然而对于Java程序,目前无法做到。只能通过更改linux配置,来改变系统层面Socket的默认行为:
例如: echo “1” > /proc/sys/net/ipv6/bindv6only

特殊之处:0.0.0.0仍然可以做ipv6的通配符来用
serverSocket.bind(new InetSocketAddress(InetAddress.getByName("0.0.0.0"), 8080))
暂未深究。

https://www.cnblogs.com/wlzjdm/p/8684202.html
https://docs.microsoft.com/zh-cn/windows/desktop/WinSock/dual-stack-sockets

以上是关于IPv6的奇葩事的主要内容,如果未能解决你的问题,请参考以下文章

Google 做过的 12 件奇葩事

vs2017的一件奇葩事

找工作遇到的奇葩事

php7扩展安装奇葩事

几年前奇葩事

奇葩的老板