首页 > 其他 > 详细

IPv6的奇葩事

时间:2018-07-24 20:51:19      阅读:193      评论:0      收藏:0      [点我收藏+]
在双栈操作系统上,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的奇葩事

原文:http://blog.51cto.com/guojuanjun/2149649

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!