今月は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を使用することが可能です。