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. 出口 ── 手作業で表を育て、資料の読みどころを探す
おうちの 人と、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 (ハブとの違い・ブリッジの由来)
なおした ところ
更新履歴
更新履歴(改版の記録)
- 初版を公開。
このサイトでは、公開した記事の本文は原則として書き直しません。誤りが見つかったときや、内容が古くなったときだけ手を入れ、その理由をこの欄に残します。