1. ハブは、なぜ 「みんなに 聞こえる」の?
1. 教室で名前を叫ぶ ── ハブの困りごと
1. なぜハブは全ポートに流すのか ── 宛先を区別できない装置
おおきな 教室で、先生が 「さとうさんに 手紙です」と さけんだと します。さとうさんだけでなく、教室の 全いんに 聞こえて しまいます。
ネットワークの ハブは、これと にて います。ハブは、とどいた データを、とどいた つなぎ口いがいの 全ぶの つなぎ口に そのまま 出します。あて先ごとに わける ことは できません[5]。スイッチは ちがいます。だれが どの つなぎ口に いるかを 表に おぼえて、わかれば その つなぎ口だけに おくります。
もし 2人が 同じ ときに しゃべりだすと、こえが ぶつかります。ハブは、その ぶつかりも ほかの つなぎ口に つたえます。スイッチは つたえません[1]。
では、スイッチは どうやって 「さとうさんの つなぎ口」を さがすのでしょうか。
大きな教室で、先生が「佐藤さんに手紙です」と叫んだとします。佐藤さんだけでなく、教室の全員に聞こえます。
イーサネットのハブは、これとよく似た動きをします。届いたデータを、届いたつなぎ口以外のすべてのつなぎ口へそのまま出し、宛先ごとに区別することはできません[5]。スイッチは違い、誰がどのつなぎ口にいるかを表に覚えて、分かればそのつなぎ口だけへ送ります。
困りごとはもう一つあります。信号がぶつかる「コリジョン」が起きると、ハブはその衝突も他のすべてのつなぎ口へ伝えます。スイッチは伝えません[1]。だから、スイッチでつなぐと、無関係な機器同士が互いの通信に巻き込まれにくくなります。
では、宛先のつなぎ口だけに送るために、スイッチは何を手がかりにするのでしょうか。
2. 「あて先」より さきに 見る ものは?
2. 宛先より先に「送り主」を見る
2. 送信元アドレスからの学習 ── MACアドレステーブルの作られ方
スイッチは、データが とどくと、あて先より さきに 「おくりぬし」を 見ます。そして、その おくりぬしが どの つなぎ口から きたのかを、表に かきとめます[1]。
手紙で いえば、とどいた 手紙の さしだしにんと、その 手紙が きた つなぎ口を、表に うつす ような ものです。手紙が くるたびに、表が ふえて いきます。ただし ほんとうは、書きとめるのは じゅうしょでは なく、きかい 1つ ずつに ついている ばんごう(MACアドレス)です。
この 表が、MACアドレステーブルです。
あとで その 人あての データが きたら、表を 見ます。書いてある つなぎ口が、データの きた つなぎ口と ちがえば、その つなぎ口だけに おくります[2]。おなじ つなぎ口なら、おくりません。
もう 書いてある おくりぬしが また きたら、「まだ いるね」と 時計を 出しなおします[2]。
スイッチは、フレームが届くと、宛先より先に送り主のMACアドレスを見ます。MACアドレスは、機器ごとに付いている番号のようなものです。そして、そのフレームが届いたつなぎ口と一緒に、表に書き留めます[1]。
届いた手紙の差出人を住所録に写していくのと似ています。手紙が届くたびに住所録が増えていきます。ただし実際に書き留めるのは、住所ではなくMACアドレスとつなぎ口の対応です。この表を、MACアドレステーブルと呼びます。
覚えたあとの動き
送り主がすでに表にあれば、スイッチはその記録の時計(エージングタイマー)をやり直します。表になければ、受け取ったつなぎ口と一緒に追加します[2]。
あとで、その機器あてのフレームが届いたら、表を引きます。載っているつなぎ口が届いたつなぎ口と別なら、そのつなぎ口だけへ送ります。同じつなぎ口なら、送りません[2]。
誰かに設定してもらうのではなく、通信が行われるたびに、表が少しずつ育っていくわけです。
Dordalの説明では、スイッチはインターフェースごとに、そこから到着したパケットの送信元として現れた物理(MAC)アドレスの表を保持する[1]。宛先ではなく送信元を見る点が要である。宛先は、そのフレームがどこへ行くかを決めるための情報にすぎず、その機器がどのつなぎ口の先にいるかは、その機器自身が送ったフレームからしか分からない。
フレームを受け取ったとき、送信元がすでに表にあれば、スイッチはその記録のエージングタイマーを更新する。なければ、受信ポートとともに追加する[2]。そのうえで宛先を表で引き、載っているポートが受信ポートと別であれば、そのポートだけに転送する。受信ポートと同じなら転送しない[2]。
この方式なら、管理者による設定なしに、機器が通信するたびに表が更新される。ただし、まだ一度も送信していない機器の位置は、表に載らない。では、その機器あてのフレームはどうなるのか。
3. 知らない 人あての データは、どうする?
3. 知らない宛先には、いったん全員に聞く
3. 宛先が表にないとき ── フラッディング
まだ 一どもしゃべって いない 人あての データが きたら、どうしましょう。表には まだ のって いません。
スイッチは、そのときだけ、データを うけとった つなぎ口いがいの 全ぶの つなぎ口に 出します[2][1]。これを フラッディングと いいます。
こわれた わけでは ありません。ふつうの うごきです[2]。
あて先の 人だけが 「わたしの ことだ」と 気づいて、へんじを します。すると スイッチは、そのへんじの おくりぬしを 見て、表に かきとめます。つぎからは、その つなぎ口だけに おくれます。
宛先のMACアドレスがまだ表にないとき、スイッチは、受信したつなぎ口以外のすべてのつなぎ口へフレームを送ります[2][1]。これをフラッディングといいます。「全部のつなぎ口」ではなく、「受信したつなぎ口を除くすべてのつなぎ口」です。
これは故障ではなく、通常の動作です[2]。ブロードキャストやマルチキャスト宛てのフレームも、同じく受信つなぎ口以外のすべてのつなぎ口へ送られます[2]。
教室でいえば、「佐藤さんはどこ?」と一度だけ全員に呼びかけるようなものです。本人が返事をすれば、その返事の送り主として、表に載ります。次からは、そのつなぎ口だけに送れます。
知らないことは、全員に聞き、答えを聞いて覚える。ここに、最初に誰かが教える必要のない理由があります。
宛先MACアドレスが表にない場合(unknown unicast)、スイッチは受信ポート以外のすべてのポートへフレームを送る。これをフラッディングと呼ぶ[2]。Dordalも、宛先に合う記録がなければ受信インターフェース以外のすべてへ転送すると説明している[1]。故障ではなく通常の動作であり、ブロードキャスト・マルチキャスト宛てのフレームも同様に扱われる[2]。
ここで重要なのは、フラッディングが「全ポート」ではなく「受信ポートを除く全ポート」に送ることだ。フレームが来た方向へ送り返しても意味がないため、そのつなぎ口は除かれる。
宛先の機器が応答すれば、その応答フレームの送信元として、機器のMACアドレスとポートが表に追加される。以後は、宛先を知ったうえで、そのポートだけに転送できる。つまりスイッチは、「知らないことは全員に聞き、返事から学ぶ」という手順を自動で回している。
では、いったん覚えた記録は、ずっと残るのか。
4. 5分 しゃべらないと、わすれられる?
4. 古くなった記録は、静かに消える
4. 覚えた記録はいつ消えるのか ── エージングと既定の時間
スイッチの 表には、きろくごとに 「さいごに 見た 時間」が ついて います[1]。
ある 時間、その きかいから データが とどかないと、その きろくは 消えます。はじめの 目やすを、300びょう(5分)に している きかいも あります[2]。
ただし、これは きまりでは ありません。きかいに よって ちがい、せっていで かえられます[4]。
ふるい きろくを 消して おけば、表が いっぱいに なりにくく、いなくなった きかいの ことも のこりません。
スイッチの表の記録には、時刻が付いています。一定の時間、使われなければ、その記録は削除されます。このしくみをエージングといいます。大学の教科書は、エージング時間の例として5分を挙げています[1]。
機器によっては、初期値が300秒(5分)のものもあります[2]。ただし、これは全機器で決まっている値ではありません。あるメーカーの機種(Extreme Networks の SLX-OS)の資料では、初期値が300秒で、設定の範囲は60秒から86,400秒までです[4]。
誰が消すのか
Juniperの資料では、スイッチのタイマーが定期的にタイムスタンプを確認し、設定した値より古い記録を表から削除します。エージング時間を「無制限」にすれば、削除されません[3]。
古い記録を消しておくことは、使われなくなった機器の情報を残し続けないための、一つの工夫だと考えられます。
学習した記録にはタイムスタンプが付き、一定時間使われなければ削除される(エージング)。Dordalは「たとえば5分」と例示している[1]。NetworkAcademyは、初期値300秒のあいだ再び見えなければ表から消える機器を例に説明する[2]。
ただし、300秒は全機器に共通の値ではない。Extreme Networks の SLX-OS の資料では、初期値は300秒で、設定範囲は60〜86,400秒とされる[4]。機器や設定によって値は変わる。
削除の方法についてJuniperの資料は、スイッチのタイマーが定期的にタイムスタンプを確認し、設定値より古いMACアドレスをテーブルから削除する、と説明している。エージング時間を無制限にすると削除されない[3]。
記録が消えても、その機器がまた通信すれば、送信元として再び表に載る。だから、消すこと自体は通信を止めない。次に同じ宛先へ送るとき、いったんフラッディングになるだけである。
5. 手紙が ぐるぐる まわる ことは ない?
5. 「輪」にしてしまうと、何が困るのか
5. 輪状につなぐ(ループ)と何が困るのか ── フラッディングとの相性
スイッチどうしを、わのように つなぐと、こまる ことが あります。フラッディングで 出した データが、わの まわりを めぐって もどって きて しまうからです。
そこで スイッチで つないだ ネットワークは、わに しないのが ふつうです[1]。おおくは、スパニングツリーと いう しくみで、じどうで 気を つけて います[1]。
スイッチ同士を輪のようにつなぐと、フラッディングされたフレームが輪の中をめぐる恐れがあります。教科書は、スイッチでつながれたネットワークは、原則としてループがあってはならず、多くの機器はスパニングツリーという仕組みで自動的に管理する、と説明しています[1]。
「フラッディングが回り続ける」という点は、ここでは資料の説明ではなく、仕組みからの推測です。ここで確かなのは、ループなしが原則で、スパニングツリーで管理する例が多い、という部分です。
スイッチで結ばれたネットワークは、原則としてループがあってはならず、多くはスパニングツリーで自動管理される[1]。
輪の中を回り続ける、という点は仕組みからの推論である。
逆にいえば、宛先のつなぎ口だけへ送る学習の仕組みは、表が正しく育つことを前提にしている。その前提を保つための工夫が、ネットワークの形にまで及んでいる、と読める。
6. この しくみは、だれが 考えたの?
6. この仕組みは、学習ブリッジという装置から生まれた
6. この仕組みは誰がいつ考えたのか ── 学習ブリッジから初期のスイッチへ
スイッチは、「がくしゅうする ブリッジ」と おなじ しくみです[5]。さいしょの ブリッジは、1983ねんに、DEC社の ケンプさんが はつめいした と いわれます[5]。
その あと、1980年代の おわりから 1990年ごろに、カルパナ社が 7つの つなぎ口を もつ スイッチを 出しました[5]。
7. 自分でも たしかめて みよう
7. 手紙ごっこで、表を作ってみる
7. 手作業でMACアドレス表を作ってみる ── 資料の読みどころ
おうちの 人と、3人いじょうで 「スイッチごっこ」を してみましょう。1人が スイッチやくに なります。ほかの 人は、はなれた 場所や つくえの 席に すわり、それぞれ 名前を きめます。
スイッチやくは、紙の 表を 用意します。「名前」と「どの 席から 手紙が きたか」を 書く 表です。手紙は、「だれから だれへ」と 書いた 紙です。
まず、手紙が きたら、おくりぬしの 名前と 席を 表に 書きます。あて先が 表に あれば、その 席の 人だけに わたします。なければ、ほかの 席の 全員に 見せます。
何回か やると、表が ふえて いきます。ただし、本ものの スイッチは、この 動きを 1びょうより ずっと みじかい 時間で くりかえして います。
家族や友だちと3人以上で、「スイッチごっこ」ができます。1人がスイッチ役になり、ほかの人は離れた場所や机の席に座って、それぞれ名前を決めます。
スイッチ役は、「名前」と「どの席から手紙が来たか」を書く表を用意します。手紙には、「誰から誰へ」と書きます。
手紙が来たら、送り主の名前と席を表に書き込みます。宛先が表にあれば、その席の人にだけ渡します。なければ、ほかの席の全員に見せて、返事が来たら、その送り主を表に加えます。
しばらく手紙が来ない人の行を消すルールも足すと、エージングも試せます。実際の機器は、この作業を人間よりずっと速く繰り返しています。
もっと知りたくなったら、次の資料がヒントになります。大学の教科書(Dordal)のイーサネットの章と、Juniperの日本語ドキュメントです。
手作業で表を育てると、規則の意味が分かる。3人以上で、1人をスイッチ役にして、送信元と席の対応を表に書き、宛先が載っていればその席だけへ、載っていなければ他の全員へ渡す。返事をもらったら表に加える。行に時刻を付け、一定時間で消すルールを足せば、エージングの動きも再現できる。
資料を読むなら、次の点が手がかりになる。Dordalのイーサネットの章は、送信元学習・フラッディング・タイムスタンプ・ループの扱いを一つの流れで説明する[1]。エージング時間の設定は、ベンダーごとに書き方が違う。Juniperの日本語ドキュメント[3]と、Extreme Networksの資料[4]を読み比べて、同じ「記録を消す時間」がどう説明されているか探してみるとよい。
しらべた もとの じょうほう
参考にした情報源
参考にした情報源と、その使い方
スイッチの動き(送信元学習・フラッディング・エージング・ループ)は、大学の教科書、学習サイト、メーカー資料を突き合わせて書きました。
- Peter Dordal, An Introduction to Computer Networks, Ethernet 章(Loyola University Chicago) https://intronetworks.cs.luc.edu/current/html/ethernet1.html (送信元学習・エージング・ループ)
- NetworkAcademy, Switching logic https://www.networkacademy.io/ccna/ethernet/switching-logic (学習とフラッディングの手順・既定300秒)
- Juniper Networks, Junos ドキュメント「MACテーブルのエージング」 https://www.juniper.net/documentation/jp/ja/software/junos/multicast-l2/topics/topic-map/mac-table-aging.html (記録を削除する仕組み)
- Extreme Networks, SLX-OS: MAC address aging https://documentation.extremenetworks.com/slxos/SW/20xx/manage/GUID-56567C68-7222-42F7-A4BE-58E3DAE78DCA.shtml (既定値と設定範囲の一例)
- Wikipedia, Network switch https://en.wikipedia.org/wiki/Network_switch (ハブとの違い・ブリッジの由来)
なおした ところ
更新履歴
更新履歴(改版の記録)
- 初版を公開。
- 記事の題名と、第4〜7章の章題を、初めて見ても何の話か分かる形に変更(本文の事実は変更なし)。
- 低学年むけの「手紙のたとえ」と「記録が消える条件」の言い回しを、分かりやすく直しました。高学年むけでは、5分が一例であることを先に分かるようにしました(先生の目での読み直しによる。事実は変更なし)。
このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。