前言
ipv6标准制定了这么多年,终于要开始被大力推进了。最近要求hdfs既要支持ipv4,又要支持ipv6。所以特意研究了,怎么同时能支持ipv4和ipv6。
理论基础
ipv4和ipv6都是属于网络层,我们平常做的程序很少有机会去做到网络层,除非做的路由器和交换机。我们开发的程序大都是在传输层以上,基于tcp协议或者udp的协议。所以,我猜测应该我需要做的东西不是很多。找了找java建立网络的相关api。果然就被我发现了。
1 | /** |
我们在建离socket连接,就是tcp的连接的时候,需要传递三个参数。我去查了下这三个数的含义。从上面的注释可以发现,port表示要绑定的端口号,backlog等待建立连接的最大连接数,binAddr则就是要绑定的端口号。如果不传入binAddr这个参数,那么就会默认监听这台机器上所有地址。
那么问题,基本上就简单解决了好多,我只要在建立rpc请求的时候,不绑定ip地址和端口号,那么我不就可以同时监听ipv4和ipv6的地址么。果然,我在hdfs中找到了相关的配置项。
1 | <property> |
果然配置成0.0.0.0,namenode的50070端口,ipv4和ipv6的端口都可以访问。