前回は同一ネットワーク内での通信について学習しました。
「MACアドレス」や「スイッチングハブ」という重要単語も出てきましたが、まだ理解は不十分かと思います。
そこで今回は、ネットワークインターフェース層における通信の流れについて学習をしていきます。

「MACアドレスの学習」や「MACアドレステーブル」についてもう少し詳しく知りたいです!



本来であればIPアドレスの流れについても理解しておく必要がありますが、ここでは一旦MACアドレスだけに焦点を絞って解説をしてみましょうか。



IPアドレスについてはまた今度教えてください。頭がこんがらがりそうで……。
それでは、通信の流れについて学習をしていきましょう。
1.ARPテーブルを見て相手のMACアドレスを調べる



解説の都合上、今回はIPアドレスは既に知っているという前提で、送信元のノードは「PC」とさせてください。



IPアドレスについてはまた今度詳しく教えてくださいね!
通信相手が特定されており、そのIPアドレスがわかっている状況の場合、このIPアドレスをもとに、次の段階で通信のためのMACアドレスを取得する必要があります。
自分のPCには「ARPテーブル」が存在しています。そこにはIPアドレスとMACアドレスの対応が保存されています。
※ARPテーブルは、PCやネットワーク機器が保持しているIPアドレスとMACアドレスの対応表です。
これは、ネットワークインターフェース層での通信を迅速に行うために必要で、各IPアドレスに対するMACアドレスの情報をキャッシュとして保持しています。
このキャッシュは一定時間ごとに更新され、古くなったエントリは削除されます。これにより、同じネットワーク内で頻繁に通信を行うノードとのやり取りが効率化されます。
まず、PCは通信相手のMACアドレスを得るために、現在のARPテーブルを確認します。
もし、既に通信相手のIPアドレスに対応するMACアドレスがARPテーブル内に登録されている場合、そのMACアドレスを使用して通信を続けます。
2.すべてのノードに対してMACアドレスを問い合わせる
もしARPテーブルに目的のIPアドレスが見つからなかった場合、PCは「ARPリクエスト」をブロードキャストします。
※ブロードキャストとは、ネットワーク内で特定のメッセージを全てのノードに向けて送信することです。
この手法では、同じネットワーク上のすべてのノードがそのメッセージを受信します。ブロードキャストはルータを超えることはできません。



今回は自分のPCのIPアドレスは「192.168.1.100」であり、「192.168.1.102」を持つプリンタに送信したいという状況を設定して解説していきますね。


送信元のPC(図の右上のPC)は以下のようなパケットを作成します(一部)。


送信元のMACアドレスとIPアドレスは自分自身の情報ですから当然わかっています。わからないのは相手のMACアドレスだけです。そのため相手のMACアドレス以外の値はセットすることができています。唯一わからなかった相手のMACアドレスだけはオール0にしておきます。オール0はブロードキャストを意味します。
スイッチングハブがこのパケットを受け取ります。スイッチングハブはパケットに格納されている「送信元MACアドレス」「送信元IPアドレス」を見て、そのPC(今回は4番のポートに接続されています)のポート番号とMACアドレスをMACアドレステーブルに記録します。
これで4番ポートに接続されているノードのMACアドレスが保存されたことになります。この情報は後で説明するユニキャストで使われることになります。


宛先MACアドレスはオール0であるため、スイッチングハブはブロードキャストであることを認識します。そしてすべてのポートからパケットを送り出します。これは「このIPアドレスに対応するMACアドレスを持っているノードは誰ですか?」というメッセージです。
具体的に言うと、たとえばオフィス内のLANネットワークでPCがプリンタのMACアドレスを知る必要がある場合を考えてみましょう。
PCは、全てのノードに対して「このIPアドレスに対応するMACアドレスを教えてください」とリクエストを送信します。
このブロードキャストは、オフィス内のネットワークに接続されている全てのノードに届きます。相手のMACアドレス欄が空(0:0:0:0:0:0)になっているので、わからないから全体に聞くというわけですね。



拡声器で「やっほー」と全体に呼びかけているような状態ですね。


3.MACアドレスを返答する
ネットワーク内の各ノードは、このパケットを受け取ると、自分のIPアドレスとパケット内のIPアドレスを比較します。一致しないIPアドレスをもつノードは、受け取ったパケットを破棄します。


一致したノード、つまり「192.168.1.102」を持つノードのみがARPリプライを返すことになります。さっきの「やっほー」に対して手を挙げるイメージですね。このARPリプライはユニキャストで送信されます。
※ユニキャストは、特定の1台のノードに向けてメッセージを送信する通信方式です。
ARPリクエストによって目的のノードのMACアドレスがわかった後、PCはそのMACアドレスを使って特定の相手に直接フレームを送信します。
たとえば、PCがプリンタに印刷データを送る際には、そのMACアドレスを使ってプリンタにのみフレームを送ります。
このような1対1の通信がユニキャストです。
ユニキャストの利点は、ブロードキャストとは異なり、ネットワーク内の他のノードには全く影響を与えないことです。
つまり、余計な通信が発生せず、必要なフレームだけが目的のノードに届けられます。
このため、ユニキャストは効率的で、他のネットワーク資源を消費せずに特定のノードに確実にフレームを送ることができる方法です。
ARPリプライでは、プリンタが自分のMACアドレスを教えるために新たにパケットを作ります。
プリンタ側から見ると送信元MACアドレスは「AB:CD:EF:01:23:45」で、送信元IPアドレスは「192.168.1.102」とです。宛先MACアドレスは「00:1A:2B:3C:4D:5E」、宛先IPアドレスは「192.168.1.100」となっています。





「自分と相手」が入れ替わったことがわかるでしょうか?
プリンタがパケットを送り出すと、スイッチングハブが受け取ります。


ネットワーク上に存在するスイッチは、ARPリクエストやARPリプライなどのフレームを受け取る際、送信元のMACアドレスとそのMACアドレスが接続されているポートの情報を「MACアドレステーブル」に追加します。





これがスイッチングハブによるMACアドレスの学習ですね。



なるほど、前回の学習とつながりました!
これにより、スイッチングハブは次回以降、同じMACアドレス宛のフレームを適切なポートにのみ転送することが可能になります。このプロセスによってネットワークの効率が向上し、余計なフレームが他のポートに送信されることが防がれるのです。
宛先MACアドレスがオール0であればブロードキャストするのですが、今回はそうではありません。「00:1A:2B:3C:4D:5E」となっています。このMACアドレスをMACアドレステーブルから探すと「ポート番号は4」であることがわかります(この情報は先ほど作られた)。
そこでスイッチングハブは4番のポートにだけパケットを流します。ある特定のポートだけにパケットを流すのがユニキャストの動きです。
4.パケットを受け取る
PCは受け取ったパケットに格納されている送信元MACアドレスを自分のARPテーブルに登録します。スイッチングハブがMACアドレステーブルをできるだけ充実させるように動作するように、ノードもARPテーブルを充実させようとします。
今回は送信元IPアドレスは「192.168.1.102」、送信元MACアドレスは「AB:CD:EF:01:23:45」であることがわかり、対応関係がARPテーブルに登録されました。


これにより、次回以降同じIPアドレスへの通信を行う際には、再度ARPリクエストを行わずにMACアドレスを即座に参照することが可能になるのです。
その後の送信
宛先のMACアドレスを持つ機器(「AB:CD:EF:01:23:45」)がわかれば、その特定の機器に向けてフレームを送信することが可能になります。
このときPCから送られたフレームはスイッチングハブを経由しますが、このスイッチングハブはMACアドレスを学習しているので、目的のMACアドレス(「AB:CD:EF:01:23:45」)を持つ機器に接続されたポートにのみフレームを流します。



一度ブロードキャストをしたら、次回以降は必要な相手にだけメッセージを送るんですね。



その通りです。ここまでが同一ネットワーク内での通信の流れでした。
以上が、ネットワークインターフェース層におけるPCがMACアドレスを知るまでの流れです。
ARPテーブルの参照と必要に応じたARPリクエストによって、通信相手のMACアドレスを取得し、物理的な通信を実現します。
まとめ
ARPテーブルとMACアドレステーブルはどちらも、ネットワーク内の通信を最適化する重要な要素です。
ARPテーブルはPCやネットワーク機器などがIPアドレスからMACアドレスを素早く見つけるために使用され、MACアドレステーブルはスイッチングハブがデータフレームを適切なポートに転送するために使用されます。
動きが似ているため混同しやすいですが、ARPテーブルは、PCやルータなどのネットワーク機器に存在し、IPアドレスとMACアドレスの対応関係を保持するキャッシュです。
一方でMACアドレステーブルはスイッチングハブに存在し、MACアドレスとそれが接続されている物理ポートの対応関係を管理します。



なんとなくわかったようなわからないような……。



具体的に言うと、PCがプリンタにデータを送る場合、PCはARPテーブルからMACアドレスを参照し、スイッチングハブはMACアドレステーブルを参照してフレームを適切なポートに送信します。
こうした二つのテーブルの役割が組み合わさることで、ネットワーク全体で効率的かつ迅速な通信が実現されるのです。



つまりどっちも大切ってことですね!



そうですね(笑)それぞれの違いについて、きちんと覚えてくださいね。



はーい。