码迷,mamicode.com
首页 > 其他好文 > 详细

IPv6的奇葩事

时间:2018-07-24 20:54:19      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:soc   改变   add   ref   set   zh-cn   map   .com   ddr   

在双栈操作系统上,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的奇葩事

标签:soc   改变   add   ref   set   zh-cn   map   .com   ddr   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!