技术开发 频道

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

  【IT168 文档

  导读:根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽。因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6。对于 Java,从其 1.4 版开始对 IPv6 提供了较好的支持,对程序员基本屏蔽了 IPv4 和 IPv6 的差异,但其中仍有一些 IPv6 引起的变化需要我们小心处理。针对这一情况,本文介绍了如何运用现有的 Java 技术应对这些变化。

  IPv6 背景介绍

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

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

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

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

  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. 双栈结构

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

  对于分隔栈系统,Java 则创建 IPv4/v6 两个套接字(如图 2)。如果是 TCP 客户端程序,一旦其中某个套接字连接成功,另一个套接字就会被关闭,这个套接字连接使用的 IP 协议类型也就此被固定下来。如果是 TCP 服务器端程序,因为无法预期客户端使用的 IP 协议,所以 IPv4/v6 两个套接字会被一直保留。对于 UDP 应用程序,无论是客户端还是服务器端程序,两个套接字都会保留来完成通信。

  图 2. 分隔栈结构

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

0
相关文章