ipv6 java代码影响_Java对IPv6的支持详解:支持情况、相关API、演示代码等

原标题:Java对IPv6的支持详解:支持情况、相关API、演示代码等

本文由朱益盛、杨晖、傅啸分享,来自IBM Developer社区,原题“使用 Java 开发兼容 IPv6 的网络应用程序”,本次收录时有改动。

1、引言

前几天,有个群友跟我讨论用 MobileIMSDK 写的IM服务端想支持IPv6的问题。因为众所周之的原因,IPv4早就不够用,现在国内从国家层面都在大力推广IPv6的普及,所以包括事业单位、国企在内,现在搞信息化建议,都要考虑IPv6的支持。

我忽然感觉这个问题很难回答,因为对于普通的网络通信程序开发者来说,目前真正的IPv6的开发和测试环境并不容易得到,所以想要真正说清楚Java对于IPv6地支持情况,只能借助零碎的资料和网贴,可能并不完整和准备。

理论上,Java对IPv6的支持对于程序员来说都是透明的,几乎不需要代码层面的处理。但它到底是怎么支持的?支持到什么程度?对JDK版本有什么要求?对操作系统有什么要求?等等,我认为还是有必要详细研究了解一下。

6be1d018376aee30fbea2edf7d5424d7.png

本文将用通俗易懂的文字,来讲解Java对IPv6的支持现状,包括关的技术原理、可以使用的API、以及一些可以运行的演示代码片段等,希望能让你更直观的了解Java对于IPv6的支持情况。

阅读提示:限于篇幅,本文假设你已了解IPv6技术是什么,如您对它一无所知,建议先阅读白话式入门文章:《一文读懂什么是IPv6》。

(本文同步发布于:http://www.52im.net/thread-3236-1-1.html)

2、推荐资料

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

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

3、技术背景

目前我们使用的是第二代互联网 IPv4 技术,它的最大问题是网络地址资源有限,从理论上讲,可以编址 1600 万个网络、40 亿台主机。但采用 A、B、C 三类编址方式后,可用的网络地址和主机地址的数目大打折扣,以至目前的 IP 地址近乎枯竭。网络地址不足,严重地制约了全球互联网的应用和发展。

1e2530a634eff2ce11a4cebb59138dcd.png

▲ 本图引用自《网络编程懒人入门(十一):一文读懂什么是IPv6》

一方面是地址资源数量的限制,另一方面是随着电子技术及网络技术的发展,计算机网络将进入人们的日常生活,可能身边的每一样东西都需要连入全球因特网。在这种网络空间匮乏的环境下,IPv6 应运而生。它的产生不但解决了网络地址资源数量的问题,同时也为除电脑外的设备连入互联网在数量限制上扫清了障碍。

如果说 IPv4 实现的只是人机对话,那么 IPv6 则扩展到任意事物之间的对话,它不仅可以为人类服务,还将服务于众多硬件设备,如家用电器、传感器、远程照相机、汽车等,它将是无时不在,无处不在的深入社会每个角落的真正的宽带网,它所带来的经济效益也将非常巨大。

当然,IPv6 并非十全十美、一劳永逸,不可能解决所有问题。IPv6 只能在发展中不断完善,也不可能在一夜之间发生,过渡需要时间和成本,但从长远看,IPv6 有利于互联网的持续和长久发展。目前,国际互联网组织已经决定成立两个专门工作组,制定相应的国际标准。

4、Java 对 IPv6 的支持

随着 IPv6 越来越受到业界的重视,Java 从 1.4 版开始支持 Linux 和 Solaris 平台上的 IPv6。1.5 版起又加入了 Windows 平台上的支持。

相对于 C++,Java 很好得封装了 IPv4 和 IPv6 的变化部分,遗留代码都可以原生支持 IPv6,而不用随底层具体实现的变化而变化。

那么 Java 是如何来支持 IPv6 的呢?

Java 网络栈会优先检查底层系统是否支持 IPv6,以及采用的何种 IP 栈系统。如果是双栈系统,那它直接创建一个 IPv6 套接字(如图 1)。

图 1 - 双栈结构:

5e42de9deb51eb6b08ca0474e335216f.png

对于分隔栈系统,Java 则创建 IPv4/v6 两个套接字(如图 2):

1)如果是 TCP 客户端程序:一旦其中某个套接字连接成功,另一个套接字就会被关闭,这个套接字连接使用的 IP 协议类型也就此被固定下来;

2)如果是 TCP 服务器端程序:因为无法预期客户端使用的 IP 协议,所以 IPv4/v6 两个套接字会被一直保留;

2)对于 UDP 应用程序:无论是客户端还是服务器端程序,两个套接字都会保留来完成通信。

图 2 - 分隔栈结构:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值