今月はJava SE 7のネットワーキングに関する変更について紹介していきます。

 ネットワーキングに関する機能強化としては、次のような項目があります。

  • Stream Control Transmission Protocol (SCTP)のサポート
  • Sockets Direct Protocol (SDP)のサポート
  • Transport Layer Security (TLS) 1.2のサポート

 これらの機能のうち、SCTPはTCPなどと同じトランスポート層のプロトコルですが、輻輳制御などの機能を持つプロトコルです。Java SE 7ではSolarisのみのサポートになっています。

 SCTPを使用する場合、sun.nio.sctp.SctpServerChannelクラスもしくはsun.nio.sctp.SctpServerChannelクラスを用います。しかし、sunで始まるパッケージであることからもわかるように、今のところ非標準という扱いのようです。

 SDPはInfiniBandで使用されるプロトコルです。Java SE 7では、SolarisとLinuxだけがサポートされています。TLSは1.2をサポートしたことにより、TSL/SSLのハッシュアルゴリズムにSHA256が使用できるようになりました。

 この三つの機能のうち、ここではSDPについて紹介します。

 また、これ以外にもAPIレベルの変更がいろいろとあります。それらについても解説していきます。

Socket Direct Protocol

 SDPは前述したようにInfiniBandで使用されるプロトコルです。

 もともとInfiniBandはPCIなどと同じようにコンピュータの内部接続用のインタフェースもスコープに入れたものでしたが、PCI Expressの登場により内部接続用途はほとんどなくなってしまいました。

 しかし、現在ではInfiniBandはデータセンター内のコンピュータを接続するためのネットワークとして注目されています。

 InfiniBandは広帯域、低レイテンシ、ホストCPUのオーバヘッドが少ないなどの特徴を持ったネットワークです。しかし、通信プロトコルとしてTCPを使用してしまうと、InfiniBandの特徴を活かしきれません。

 そこで、使用されるのがSockets Direct Protocol (SDP)です。

 とはいうものの、JavaではSDPを意識することなく、TCPを使って通信をすることができます。InfiniBandを使用して直接通信できる場合、TCPがバイパスされ、SDPを用いて通信が行われます。

 従って、APIの変更はなにもありません。再コンパイルをする必要もありません。

 必要なのはInfiniBandを使用する場合についての設定のみです。設定がされていれば、java.ioパッケージのソケットだけではなく、java.nio.channelsのソケットチャネルでもSDPを使用することが可能です。