1.Java对IPv6的支持

相对其他开发语言而言,Java对IPv6的支持是比较透明的,

如果全部采用域名(主机名)的方式进行通信,那么基本不需要修改也无需编译原来的代码就可以直接在IPv6上运行。

Java从其1.4版开始对IPv6提供了较好的支持,对程序员基本屏蔽了IPv4和IPv6的差异。

1.1作为Server端

Windows平台必须升级到JDK/JRE 5.0或以上版本,其他平台JDK/JRE应该至少使用1.4.2版本。

使用Tomcat,jetty等web服务器的Web应用,缺省将监听本地所有IP地址,包括IPv6和IPv4。

自己写的ServerSocket,在调用ServerSocket.accept时候如果监听没有指定绑定地址,则将监听本地所有IP地址。

如果只监听了IPv4的地址,则只能接受IPv4的包。

1.2作为Client端

Windows平台必须升级到JDK/JRE 5.0或以上版本,其他平台JDK/JRE应该至少使用1.4.2版本。

如果Socket连接使用域名进行访问,则不会有任何问题,如果使用的是IPv4的地址,那么对方必须是IPv4或者IPv4/IPv6双栈节点。

使用URL方式访问IPv6地址时候,要在IPv6地址前后分别加“[”和“]”,这个不仅仅适用于Java,它本身是RFC2732定义的国际标准格式。

比如下面是个包含IPv6的http URL的例子http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html

2.使用IPv6地址

在浏览器中使用IPv6的地址访问web资源,IPv6的地址必须要使用中括号“[]”包起来,如下:

http://[2001:db8:1:0:20c:29ff:fe96:8b55]:6080

相对的,使用IPv4地址是不需要加的,如下:

http://10.43.159.11:6080

相对的,使用主机名地址也是不需要加的,如下:
http://zdh-11:6080

不管zdh-11实际对应的是IPv4还是IPv6地址,都不需要加中括号。

主机名可以配置为如下二选一:

10.43.159.11 zdh-11

2001:db8:1:0:20c:29ff:fe96:8b55 zdh-11

3.查看IPv4和IPv6地址

3.1 Linux平台

3.1.1 查看网络信息

ifconfig

3.1.2 检查IPv4网络

ping localhost

ping 127.0.0.1

ping 10.43.159.11

3.1.3 检查IPv6网络

ping6 localhost

ping6 ::1

ping6 2001:db8:1:0:20c:29ff:fe96:8b55

3.2 Windows平台

3.2.1 查看网络信息

ipconfig

3.2.2 检查IPv4网络

ping localhost

ping 127.0.0.1

ping 10.43.159.11

3.2.3 检查IPv6网络

ping -6 localhost

ping -6 ::1

ping -6 2001:db8:1:0:20c:29ff:fe96:8b55

说明Windwos中dos下面的ping命令支持如下两个参数:

-4 强制使用 IPv4

-6 强制使用 IPv6

如果知道网络地址的协议类型,可以使用如上参数强制指定。

ping也可以不指定具体类型,命令会自动检查并且ping成功,

特别是在测试主机名时,不知道主机名对应的地址类型,

可以直接使用如下命令,此时兼容IPv4和IPv6的情况:

ping zdh-hostname

4.检查Server支持的IP地址类型

4.1使用netstat查看端口

netstat -an | grep 3306

4.2监听端口绑定IPv4(0.0.0.0),只支持IPv4地址连接,如下:

0.0.0.0:3306

4.3监听端口绑定IPv4和IPv6(::),支持IPv4和IPv6地址连接,如下:

:::3306

5.Java虚拟机中IPv6相关配置

在IPv4/IPv6双环境中,对于使用Java开发的网络应用,

比较值得注意的是以下两个IPv6相关的Java虚拟机系统属性:

java.net.preferIPv4Stack=<true|false>

java.net.preferIPv6Addresses=<true|false>

preferIPv4Stack(默 认 false)表示如果存在IPv4和IPv6双栈,Java程序是否优先使用IPv4套接字。

默认值是优先使用IPv6套接字,因为IPv6套接字可以与对应的IPv4或IPv6主机进行对话;

相反如果优先使用IPv4,则只不能与IPv6主机进行通信。

preferIPv6Addresses(默认 false)表示在查询本地或远端IP地址时,

如果存在IPv4和IPv6双地址,Java程序是否优先返回IPv6地址。

Java默认返回IPv4地址主要是为了向后兼容,以支持旧有的IPv4验证逻辑,以及旧有的仅支持IPv4地址的服务。

6.浏览器对IPv6的支持

在使用过程中遇到firefox浏览器不能打开IPv6地址的网站,

然而同一个网站使用IPv4地址就能打开,

发现是Linux自带的firefox浏览器版本太低(17),

将其升级到最新的版本(60),即可正常访问。

7.参考文章

IPv6技术详解:基本概念、应用现状、技术实践(上篇)

IPv6技术详解:基本概念、应用现状、技术实践(下篇)

使用 Java 开发兼容 IPv6 的网络应用程序

Java支持IPv6研究的更多相关文章

  1. Java IP地址字符串与BigInteger的转换, 支持IPv6

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  2. iOS应用支持IPV6,就那点事儿

    原文连接   果然是苹果打个哈欠,iOS行业内就得起一次风暴呀.自从5月初Apple明文规定所有开发者在6月1号以后提交新版本需要支持IPV6-Only的网络,大家便开始热火朝天的研究如何支持IPV6 ...

  3. HP-Socket v5.0.1:支持 IPv6 及多 SSL 证书

    HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...

  4. 配置阿里云ECS支持IPv6,解决苹果app审核失败问题

    前几天iOS的App提交给苹果审核没通过,给出的原因是:该应用在 IPv6 的环境下无法使用.检查发现:阿里云优化过的系统没有启用IPv6协议,需要配置启用一下,但是只单独启用IPv6也是无法直接提供 ...

  5. Java 检查IPv6地址的合法性

    Java 检查IPv6地址的合法性 由于IPv4资源即将耗尽,IPv6将要正式启用,这是大势所趋. 一些现有的服务和应用逐步要对IPv6支持,目前还处在过渡阶段. 提前了解一些IPv6的知识,还是有必 ...

  6. MySQL支持IPv6

    开启和验证MySQL支持IPv6的方法, 此处使用的MySQL版本为mysql-5.5.35-linux2.6-x86_64. 1.验证操作系统支持IPv6,此处是Linux操作系统 ping6 :: ...

  7. iOS 支持 IPv6

    苹果的规定:2016年6月1日提交到App Store必须支持IPv6-only网络. 官方文档:https://developer.apple.com/library/mac/documentati ...

  8. linux centos6.5支持ipv6

    1.用ifconfig查看有没有inet6 addr,我的这个已经支持了,如果不支持请看第二步. 2.vim /etc/sysconfig/network 把这句改成:NETWORKING_IPV6= ...

  9. iOS应用支持IPV6

    一.IPV6-Only支持是啥? 首先IPV6,是对IPV4地址空间的扩充.目前当我们用iOS设备连接上Wifi.4G.3G等网络时,设备被分配的地址均是IPV4地址,但是随着运营商和企业逐渐部署IP ...

随机推荐

  1. GO 定时器NewTimer、NewTicker使用

    package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时, ...

  2. 【Service】【Database】【MySQL】基础概念

    1. 数据模型:层次模型.网状模型.关系模型 关系模型: 二维关系: 表:row, column 索引:index 视图:view 2. SQL接口:Structured Query Language ...

  3. CPU中的上下文

    目录 一.简介 二.进程切换 三.线程切换 四.中断切换 五.中断检测和查看 六.模拟 一.简介 Linux是多任务操作系统,cpu划分固定时间片,分给每个进程,当前进程时间片执行完毕,将挂起,运行下 ...

  4. Pytorch入门上 —— Dataset、Tensorboard、Transforms、Dataloader

    本节内容参照小土堆的pytorch入门视频教程.学习时建议多读源码,通过源码中的注释可以快速弄清楚类或函数的作用以及输入输出类型. Dataset 借用Dataset可以快速访问深度学习需要的数据,例 ...

  5. mobile app 与server通信的四种方式

    Have you ever wondered how the information gets into the application installed in your mobile device ...

  6. 2020腾讯犀牛鸟网络安全T-Star高校挑战赛writeup

    签到 浏览器禁用js,在www目录下有 key 命令执行基础 使用 | 可以执行其他命令,在 ../目录下有 key.php cat 一下读出来 你能爆破吗 一开始随便输了个账号的时候不是这个页面,抓 ...

  7. 【二进制】【WP】MOCTF逆向题解

    moctf 逆向第一题:SOEASY 这个是个 64 位的软件,OD 打不开,只能用 IDA64 打开,直接搜字符串(shift+F12)就可以看到 moctf 逆向第二题:跳跳跳 这个题当初给了初学 ...

  8. Linux centos 安装Docker

    安装docker需要centos7 内核3.1以上 基本上centos7以上的都支持, 然后先更新到最新 sudo yum update 然后直接安装 sudo yum install docker ...

  9. CF831B Keyboard Layouts 题解

    Content 给你 \(26\) 个字母的映射(都是小写,大写的映射方式相同),再给你一个字符串 \(s\),求它的映射结果(如果有非字母的字符保持不变). 数据范围:\(1\leqslant |s ...

  10. TCP超时、ping不丢包排查

    现象就是:1. 每隔一段时间,问题服务器的公网地址不可访问,目前只开放了8080和22,这两个端口不可访问的时间是一致的,不可访问时间约在2分钟以内2. 已经建立的连接在不可访问期间不受影响,开的几个 ...