レイヤ2においてはまずMACアドレスを意識することが重要だという話をしました。

- 参考:[レイヤ2 –データリンク層- 宛先はMACアドレス](https://windowsadmin.ebisuda.net/2009/02/12/%e3%83%ac%e3%82%a4%e3%83%a42-%e3%83%87%e3%83%bc%e3%82%bf%e3%83%aa%e3%83%b3%e3%82%af%e5%b1%a4-%e5%ae%9b%e5%85%88%e3%81%afmac%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9/)

MACアドレスを理解したら、次に理解したいのはリピータハブとスイッチングハブの違いです。

リピータハブで接続されたネットワーク上の通信

まずは復習です。リピータハブで接続されているネットワークでは大まかに以下のような動きをします。

- コンピューターが通信を行う
- NICがデータを受け取り、宛先MACアドレスをセットする(レイヤ2)
- NICが電気信号としてデータを流す(レイヤ1)
- リピータハブは電気信号をそのまま伝える(レイヤ1)
- **リピータハブは受け取った電気信号を全ポートにそのまま流す(レイヤ1) **
- (別のコンピューターの)NICが電気信号を受け取る(レイヤ1)
- **受け取るべきフレームであるかどうかをMACアドレスを元に判断する(レイヤ2) **
- 受け取るべきであれば上位層にデータを渡す。受け取るべきフレームでなければ破棄する。(レイヤ2)

ここでのポイントは、5と7の動きです。リピータハブは全ポートに電気信号をそのまま流すので、リピータハブにつながっている全PCで受信してしまいます。PC-1からPC-2への通信をしているときに、その全てが他のコンピューターにまで全部届くのです。1GBのファイルをコピーするとしたら、まったく無関係なのに1GB分のデータが流れてくるのです。これは非常に無駄ですし、ネットワークがすぐに混雑してしまいます。

本来、PC-1宛ての通信であればPC-1だけに届き、PC-2宛ての通信であればPC-2だけに届いてくれさえすればいいのです。

スイッチングハブの動き

で、これを実現してくれるのがスイッチングハブです。結局必要なコンピューター(=ポート)にだけ、電気信号を流してあげればいいわけです。コンピューター(NIC)が7で行っていることをスイッチングハブもしてあげればいいわけです。

はい。あとは考えればどうしたら良いのかは考えれば分かると思いますので、考えてみてください。

[問題]スイッチングハブはどのような動きをするでしょうか?

考えましたか?間違っていたとしても、きちんと自分の頭で考えてみることで血肉になっていきますのできちんと考えてくださいね。

スイッチングハブの動作 - MACアドレステーブル

「スイッチングハブがフレーム内の宛先MACアドレスを見て、そのMACアドレスがつながっているポートにのみ電気信号を流せばいい。」のですが、それでは「どのポートにどのMACアドレスがつながっている」ということはどのように把握できるでしょうか。

これを実現するために、スイッチングハブには「MACアドレステーブル」が備わっています(Arpテーブルとは別物ですので注意)。どのポートの先にどんなMACアドレスがあるかを記憶しておくわけです。

以下はスイッチングハブの気持ちになって一緒にMACアドレステーブルを更新してみましょう。

まずポート1からフレームが流れてきました。フレームにはもちろん送信元MACアドレスが書いてありますから(ここではMAC Aとしましょう)、ポート1の先にはMAC Aがある、とMACアドレステーブルに書き留めておきます。

ポート1

MAC A

流れてきたフレームにはもちろん宛先MACアドレスも書いてあります(ここではMAC Bとしましょう)。MAC B宛のフレームはどのポートに流せばいいでしょうか?MACアドレステーブルを見てみると、MAC Bがどのポートの先にいるかはわかりません(まだ学習していません)。ですから全てのポートに対してとりあえず流します。この「全てのポートに対してフレームを流す」という動作を「フラッディング」と言います。

MAC Bの持ち主は実際にはポート2の先にいたとしましょう。全ポートに対してフラッディングしましたので、もちろんポート2の先にいるコンピューター(NIC)もフレームを受け取ります。その上で宛先MACが自分宛ですから受け取って上位層に渡し処理をしてもらいます。ここでは、お返事をする必要があったことにしましょう。

(スイッチの気持ちになって。)今度はポート2からフレームが流れてきました。送信元MACアドレスはMAC Bです。MACアドレステーブルに書き留めておきます。

ポート1

MAC A

ポート2

MAC B

流れてきたフレームの宛先MACアドレスはMAC Aになっています。MAC Aはポート1の先に繋がっていることを知っているので、ポート1のみにフレームを流します。

・・・。

文字だけで書くとかなりわかりづらいですが、このようにフレームから「送信元MACアドレス」を読み取り、それをポートに対して対応付けておくことで、次回以降の通信の際には宛先MACアドレスを見て必要なポートにのみフレームを流すことができる。これがスイッチングハブの動作です。

ちなみに明示的にブロードキャストを要求された場合(宛先MACアドレスがFFFFFFの場合)にはきちんとフラッディングしてくれるので大丈夫です。

MACアドレステーブルはいつまで覚えているのか?

でも、ちょっと待ってください。それは確かにあるときは1つのポートに繋がっているでしょうけど、そのうちポートを変更するかもしれません(座席移動などで)。そうなると、必要なフレームが必要な場所に流れてこないのではないでしょうか?

この疑問は正しくて、MACアドレステーブルが更新されないとフレームは流れてきません。なので、きちんとMACアドレステーブルが更新される以下のような仕組みが備わっています。

- 一度覚えたMACアドレスは一定時間たつと消える
- 学習済みのMACアドレスからのフレームが別のポートから入ってきたら、既存のものを消し、新しいポートに学習しなおす

基本的には何も考えなくてもポートを差し替えただけで繋がりますが、何かおかしいと思ったときにはMACアドレステーブルをチェックするということを発想できるようになりましょう。

スイッチングハブのおかげでネットワークは今日も静かに

スイッチングハブがこのような動作をしてくれますので、基本的にコンピューター(NIC)が受け取るのは

- 自分(のNIC)宛のフレーム
- ブロードキャストやマルチキャストなどの明示的に届けられるもの

だけとなり、赤の他人同士の通信を受け取る必要がなくなりました。これによって非常にパフォーマンスが良くなりました。