5. IPマルチキャスト
- 5.1. マルチキャスト
- 5.2. MulticastSocketクラス
- 5.3. マルチキャスト送受信プログラム
UDP通信では、マルチキャストを利用して同時に複数の相手にデータを送信することができます。本節では、MulticastSocketを利用したマルチキャスト通信の方法を学習します。
5.1. マルチキャスト
UDPにおけるデータの送信方式には3つの方法があります。
- ユニキャスト−特定の一台のホストに対してデータを送信します。宛先としては送信先のマシンに割り当てられたIPアドレスを指定します。TCPはユニキャストしか行うことができません。
- ブロードキャスト−あるネットワークに属する全てのホストに対してデータを送信します。宛先IPアドレスとしてブロードキャストアドレス(IPアドレスのホストアドレス部を全て2進数表記で1にしたもの)を指定します。
- マルチキャスト−複数の特定のマシンに対してデータを送信します。宛先IPアドレスとしてマルチキャストアドレスを指定します。
マルチキャストアドレスはクラスDのアドレス(224.0.0.1〜239.225.225.225)を用います。クラスDのアドレスはの通常のIPアドレスのように個別のホストに対して割り当てることはできません。クラスDのアドレス一つが、一つのホストグループを表します。
マルチキャストのパケットは、基本的にネットワークの全てのホストに向けて送信されます。パケットを受信した各々のホストは、自分がそのホストグループに含まれているがどうかを判断し、パケットを取捨選択します。
なお、通常マルチキャストパケットはルータを通過することができません。マルチキャスト対応のルータでマルチキャストを有効に設定した場合のみ、ルータを通過することができます。一般的なインターネットプロバイダはマルチキャストパケットを通過させていません。
5.2. MulticastSocketクラス
MulticastSocketクラスはマルチキャスト通信を行うためのソケットを表すクラスです。MulticastSocketクラスはDatagramSocketクラスのサブクラスであり、DatagramSocketにマルチキャスト通信のための機能がいくつか追加されています。
DatagramSocketより追加された重要なメソッドは、マルチキャストグループに参加・脱退するためのメソッドです。
- public void joinGroup(InetAddress mcastaddr)
- public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
- public void leaveGroup(InetAddress mcastaddr)
- public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
joinGroupメソッドがグループに参加するメソッド、leaveGroupメソッドがグループから脱退するメソッドです。mcastaddrで参加・脱退するマルチキャストアドレスを指定します。自ホストが複数のネットワークインタフェースを持つ時に、netifでどのインタフェースに対して設定するかを指定します。
これら以外に追加されたメソッドにはTTL(TimeToLive)値を取り扱うメソッドがあります。ソケットから送信されるパケットのTTL値を設定・取得します。
- public int getTimeToLive()
- public void setTimeToLive(int ttl)
TTL値はIPパケットの生存期間を表します。TTL値はルータを通過するたびに1減少し、TTL値が0となったパケットはそれ以上転送されません。TTLの値を大きくすればするほど広範囲のネットワークに対してパケットが送信されることになります。ただし前述のとおり、TTL値を大きな値としてもマルチキャスト非対応のルータは通過できません。
MulticastSocketクラスのデフォルトのTTL値は1です。つまり、デフォルトでは、マルチキャストパケットはルータによって区切られたネットワーク内のみに転送されます。