若手部員 宇田くん
  LANスイッチってリピータ・ハブよりも複雑な処理をしているみたいだけれど,どこが複雑なのかな。実験で確かめてみようよ。そうすれば,実感できると思うよ。  

若手部員 貴子さん
  LANスイッチは送受信パケットを無関係なポートには転送しないみたいよ。いろいろなポートにパソコンをつないで送受信パケットをキャプチャしてみれば動作が理解できそうね。  



図1 リピータ・ハブとLANスイッチはどこが違う?
リピータ・ハブとLANスイッチの違いを調べるため,PC1からPC2にpingコマンドを打ち,このやりとりとは無関係なPC3でパケットをキャプチャしてみる。

[画像のクリックで拡大表示]

図2 PC3でパケットをキャプチャしてみた結果
リピータ・ハブの場合は,pingコマンドでやりとりされるすべてのパケットがキャプチャできたが,LANスイッチだとブロードキャスト・パケット以外はキャプチャできなかった。

[画像のクリックで拡大表示]

図3 LANスイッチの挙動
LANスイッチは受信パケットに書かれた送信元のMACアドレスと受信ポートの番号をアドレス・テーブルに記録する。そして,このアドレス・テーブルを参照して転送先ポートを判断する。ただし,ブロードキャスト・パケットは受信ポート以外の全ポートに転送する。

[画像のクリックで拡大表示]

 今回は前回に引き続いて,リピータ・ハブとLANスイッチの違いを調べていこう。リピータ・ハブよりLANスイッチの方が複雑な処理をしているように思えるが,どこが複雑なのかを実験で確かめていく。

宇田:リピータ・ハブとLANスイッチの最大の違いは,受信パケットの転送方法にあるみたいだよ。LANスイッチは不要なパケットを無関係なポートに転送しないんだ。先輩に聞いてきたんだけれど。

貴子:どういうこと?

宇田:リピータ・ハブはパケットを受信すると,そのパケットを受信ポート以外の全ポートに転送するんだ。ところが,LANスイッチは受信パケットのあて先MACアドレスを見て,適切なポートにだけ転送するんだよ。

貴子:なんとなく理解したわ。でも,LANスイッチのどのポートにどんなMACアドレスの機器がつながっているかは,どうしてわかるの?

宇田:LANスイッチが自動学習するって話していたんだけど…。自動学習ってどういうことなんだろう。そんなことより,実験しようよ。

貴子:また,話をうやむやにしたままで次に進もうとするんだから。でも,今回は仕方ないから,実験を始めましょう。準備を進めておいてね。私は自動学習のしくみを調べるから。

宇田:何かうまく丸め込まれたような気もするけど,まっいいか。調べものは任せるよ。

ポートとアドレスの対応表を持つ

 LANスイッチは内部のメモリーにアドレス・テーブルという対応表を持っている。ここには,「1番ポートにはMACアドレスがxxxとyyyの機器がつながっている,2番ポートにはzzz…」というように,ポート番号とそこにつながる機器のMACアドレスの対応が書かれている。

 アドレス・テーブルの内容は自動学習という方法で更新される。LANスイッチの電源を投入した直後はアドレス・テーブルには何も登録されていない。パケットを受信したとき,送信元MACアドレスを読み取って受信ポートの番号と対にして登録し,テーブルを作っていく。

 LANスイッチは,パケットを受信すると,受信パケットのあて先MACアドレスも読み取る。そしてでき上がったアドレス・テーブルと照合して適切なポートにだけ転送する。

貴子:実験の準備はできた?

宇田:完璧だよ。ところで,自動学習の意味はわかったんだよね。教えてよ。

貴子:参考書で調べたら,受信パケットの送信元MACアドレスを読み取って,受信したポートの番号とセットにして対応表に自動で登録していくと書かれていたわ。

宇田:それなら,ユーザーがいちいち登録する手間はないね。その対応表を見て,LANスイッチは受信パケットを適切なポートへ転送するんだ。

貴子:そうよ。で,今回の実験は何をするの?

宇田:実験自体は簡単だよ。3台のパソコン(PC1,PC2,PC3)をLANスイッチまたはリピータ・ハブにつないで,PC1からPC2に向けてpingコマンドを打つんだ。そして,pingコマンドの実行中に,PC3でパケットをキャプチャしてみるのさ(図1)。

貴子:面白そうね。早速やってみましょう。

宇田:実験はあっという間に終わったね。まずはリピータ・ハブを使ったときの結果から見てみよう(図2a)。

ブロードキャストは全ポートに転送

貴子:最初はPC1がPC2のMACアドレスを調べるためにARP要求パケットを送っているわ。

宇田:2番目のパケットはARP要求に対する応答だね。そして3~10番目がpingパケットのやりとりだ。

貴子:PC1とPC2の通信には無関係なPC3にも,すべてのパケットが届いているみたいね。

宇田:リピータ・ハブは受信パケットを受信ポート以外の全ポートに転送するんだから,これでつじつまが合っているんだよね。

貴子:そうね。次はLANスイッチの方を見てみましょう。

宇田:LANスイッチは無関係なポートにパケットを転送しないはずだから,PC3にはパケットが届かないはずだよ。

貴子:そうとも言えないみたいよ。PC1が最初に送信したARP要求パケットだけは,PC3でもキャプチャできているわ(図2b)。

宇田:本当だ。変だな。

貴子:あ! もしかしたら,ARP要求パケットはブロードキャストだからじゃないかしら。あて先MACアドレスが「FFFFFFFFFFFF」になっているじゃない。

宇田:そうだよ。ブロードキャストはLAN上の全端末に届くように送られるんだから,LANスイッチも受信ポート以外の全ポートに転送したんだ。

 リピータ・ハブはパケットを受信すると,どんな場合も受信ポート以外の全ポートに転送する。  一方,LANスイッチは受信パケットのあて先MACアドレスを読み取り,アドレス・テーブルと照合することで,あて先の機器がつながっているポートにだけパケットを転送する。このため,2人が行った実験では,通信と無関係なPC3にはパケットが届かなかった。

 ただし例外はある。それはブロードキャストだ。ブロードキャスト・パケットのあて先MACアドレスは「FFFFFFFFFFFF」になっている。LANスイッチは,このあて先MACアドレスを読み取って受信ポート以外の全ポートに転送したのである。

送信元アドレスを基に覚える

貴子:LANスイッチはブロードキャスト以外のパケットはPC3へ転送していないわね。アドレス・テーブルにPC1とPC2がつながっているポートの番号が登録されていたからだと思うんだけれど,どうやって学習したのかしら。

宇田:貴子さんに調べてもらったしくみを前提に検証してみようか。

貴子:そうね。送信元MACアドレスを読み取ってアドレス・テーブルに登録していくんだったわね。

宇田:LANスイッチの電源を入れた直後は,アドレス・テーブルに何も登録されていないんだよね(図3のStep1)。

貴子:そうよ。最初の通信はPC1が送信したARP要求パケットね。これには,送信元MACアドレスとしてPC1のMACアドレスが書かれているはずよ。

宇田:だから,LANスイッチはこのARP要求パケットを受信した時点で,1番ポートにはPC1がつながっていることを覚えたんだよ(Step2)。

貴子:じゃあ,2番目のARP応答パケットはどうかしら。こちらは送信元がPC2で,あて先がPC1になるわね。

宇田:LANスイッチは,PC1が1番ポートにつながっていることをすでに学習しているから,1番ポートにだけ転送したんだ(Step3)。

貴子:しかも,このARP応答パケットの送信元MACアドレスを読み取って,2番ポートにはPC2がつながっていることも学習したんだわ。

宇田:そうだよ。このあとのpingパケットのやりとりは,アドレス・テーブルにすでに登録されている情報を見れば済むから,ほかのポートには転送されなかったんだね。