3種類のキャストこれまでのメールに関するお話から、いきなりTCP/IPの深いところに戻ってきてしまいましたが(笑)、今回はユニキャスト/マルチキャスト/ブロードキャストのお話をしたいと思います。ネットワークの話をするときに時折出てくるこの用語ですが、簡単に言えば以下のことを指しています。ユニキャスト図1:ユニキャストの通信例まず、ユニキャストでの通信方式を説明しましょう。図1のような構成でノードAからノードBへメッセージを送る場合、その通信はノードBだけが受け取ることができ、ノードC~ノードZは「通信があった」ということも原則として感知しません。した通信方式を、ユニキャストと言います。通信方式としては専らTCP/IPを利用します。厳密に言えば、UDP/IPを用いてユニキャストすることも可能ですし、これを実際に使った例もあります。UDP/IPの場合は、相手にメッセージが届くという保証がなく(第12回参照)、上位層で信頼性を確保する手間をかけるくらいなら、TCP/IPを使った方が良いということで、1対1の通信にも関わらず信頼性は必要としないという稀なケースでのみUDP/IPが利用されます。ところで、UDP/IPは1対多の通信に使われるものだから、1対1にならないんじゃないかと思われる方もおられるでしょうが、実はその通りです。図1のようなケースでUDP/IPを使った場合には、ノードC~ノードZにもその通信が届いてしまう可能性はあります。その場合はノードC~ノードZでは届いたパケットを見て「これは自分宛じゃない」と判断して破棄してしまうため、結果として届かない状態に近いということです。「それでは盗聴される可能性があるのでは?」と思われるかもしれませんが、これもその通りです。一方で、「それではTCP/IPだから盗聴されないか?」といえば、そうでもない場合もあります。実はTCP/IPでもUDP/IPでも、IPのレベルで見れば同一なので、図2のような状態でノードA→ノードBのメッセージがノードC~Zに届くか否かは、(1)メッセージの宛先アドレス、(2)間に入っているのがスイッチングハブか、リピータハブかどうかで決まってきます。(1)に関してはこのあと説明するので、(2)について説明しておきましょう。リピータハブの場合、受け取ったメッセージを“すべてのポートに”送り出します。電気的にすべてのポートが接続された状態なので、そこに流れているパケットがTCPなのかUDPなのかは一切関係なく、すべてのノードがすべてのパケットを受信できます。スイッチングハブの場合、必要なパケットを必要なポートにだけ送り出す仕組みになっているので、この場合はノードC~ノードZはパケットを受信しないことになります。細かく言えば、スイッチングハブの種類によってこのあたりの振る舞いも微妙に変わってくるのですが、ここでは省略します。次はマルチキャストです。この方式では、主としてUDP/IPを用いて複数のノードに同時にメッセージを送ることができます。ここで複数のノードに同時に送れるといっても、「すべてのノードに」送るわけではないのが、次に説明するブロードキャストと異なる部分です。マルチキャストでは、宛先に通常のIPアドレスではなく、マルチキャストアドレスと呼ばれる独自のアドレスを指定します。第2回でIPアドレスの話をご紹介した際に、プライベートIPアドレスにはクラスA/B/Cがある(実はこれはプライベートのみならず、グローバルIPアドレスにも当てはまるのですが)というお話をしましたが、このマルチキャスト用のアドレスをクラスDと呼びます。ちなみにクラスDの範囲は224.0.0.0~239.255.255.255です。図3の場合、ノードAはクラスDの任意のアドレスに向けてメッセージを送り出します。ノードBとノードCは事前にそのアドレスを知っておくことで、これが受信できる仕組みです。ノードD~ノードZはアドレスを知らないので、受信ができないことになります。ブロードキャスト最後にブロードキャストです(図4)。技術的に見れば、ブロードキャストとマルチキャストはほぼ同じ仕組みで、主にUDP/IPを使いすべてのポートにメッセージを送ります。図2でスイッチングハブを使っている場合でも、マルチキャスト/ブロードキャストのメッセージは、すべてのポートにメッセージがコピーして送り出されるので、全ノードで受け取ることができます。IPアドレスの観点で言えば、マルチキャストとブロードキャストの違いは、アドレスの指定の違いです。IPネットワークを構築する場合、必ずブロードキャストアドレスと言われるものが決まっています。自宅のLANが「192.168.1.xxx」だとすると、ブロードキャストアドレスは「192.168.1.255」になるのが一般的です。マルチキャストとは異なり、このメッセージは接続されているすべてのノードが受け取り、処理することになります。Addressを求めるために利用するもの。第11回でも少し出てきました)に使われたりと、もっぱらIPネットワークの維持管理に利用されるのが主で、これをユーザーのメッセージ通信に使うことはまずないようです。国内某メーカーのネットワーク関係「エンジニア」から「元エンジニア」に限りなく近いところに流れてきてしまった。ここ2年ほどは、企画とか教育、営業に近いことばかりやっており、まもなく肩書きは「退役エンジニア」になると思われる。