VLAN -ポートVLAN-

VLANという技術があります。これはTCP/IPのレイヤ2に対する技術です。ある程度以上の規模のネットワークになるとVLANを使用していないネットワークはほぼ皆無になると思います。実際のネットワーク構築時には理解していることがほぼ必須になるのでよく理解しておく必要があります。自分の役割がサーバー管理者であり、ネットワーク管理者が別にいるとしても概念はきちんと抑えておかないといけません。 まず、前提知識としてレイヤ2のことを理解しておく必要があります。 - [レイヤ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/) - [レイヤ2 -データリンク層- スイッチングハブの動作](https://windowsadmin.ebisuda.net/2009/02/18/%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-%e3%82%b9%e3%82%a4%e3%83%83%e3%83%81%e3%83%b3%e3%82%b0%e3%83%8f%e3%83%96%e3%81%ae%e5%8b%95%e4%bd%9c/) スイッチングハブの動作の説明で、スイッチングハブのおかげでホストが受け取るパケットは基本的に以下のものだけだ…という話をしました。 - 自分(のNIC)宛のフレーム - ブロードキャストやマルチキャストなどの明示的に届けられるもの 自分宛のフレームは受け取るのは当たり前としても、ネットワークにホスト数が非常に多くなり、ブロードキャストやマルチキャストなどが多数飛び交うようになるとやはりネットワークのパフォーマンスが悪くなってしまいます。ブロードキャストが騒がしい環境では自分は何も通信していないのにパケットキャプチャを行うと沢山のパケットが見えます。すべてのパケットを「自分宛ではない」と判断して捨てることになるのでかなりの無駄が発生してしまいます。これを避けるためにはどうすればいいか・・・?というと、スイッチを分割すれば良いことになります。 上の図のような状態を下の図のような状態に分割すればブロードキャストの届くホストの数は半分になります。 もちろん単純にこれだけだとPC1~4とPC5~8の間での通信ができなくなってしまうので、間をルーターでつないだ上で、更にネットワークアドレスをそれぞれで変更する必要が出てきます。具体的には以下のような感じです。 ルーターを使ってネットワークを分けた、という言い方でもいいかもしれません。これでお互いに通信できつつ、ブロードキャストの届く範囲(=ブロードキャストドメイン)を分割しネットワークの混雑を緩和できます。 ですが、分割するのに、物理的にスイッチを用意して、接続を繋ぎ変えて…とやるのはさすがに面倒ですよね。なので、VLANがここで登場します。 ポートVLAN コンピューターがつながっているポート単位でVLANを設定し、同一のVLAN番号であれば同じスイッチにつながっているのと同じように設定する技術がポートVLANです。前に出てきた例をポートVLANで行うと以下のようになります。 スイッチのポートにVLAN番号を割り当てました。物理的にスイッチを分割しなくても、スイッチの設定を変更するだけで所属するセグメントを変更可能で非常に便利です。 アクセスリンクとトランクリンク さらに、VLANの仕様はIEEE802.1Qで標準化されており、複数ベンダーの複数スイッチをまたがってVLANタグの共有が可能です。例えば下図の様に複数のスイッチにまたがって自由にポート毎にVLANを割り当てることができます。 この時、それぞれのPCがつながっているスイッチのポートは単一のVLANにのみ所属していればいいわけですが、スイッチ同士をつないでいるポートに関してはそういうわけにはいかず、流れているパケットがVLAN1に所属するものなのか、VLAN2に所属するものなのかがわかるようにしないといけません。これが行えるのが「トランクリンク」で、トランクリンクではイーサネットフレームに対してVLANタグ番号を追加した「タグVLAN」方式のフレームが流れることになります。 これと区別して通常のPCが接続されるVLANを意識しない通常のフレームが流れるポートのことを「アクセスリンク」と呼びます。 ※アクセスリンクになっているポートのことを「アクセスポート」、トランクリンクになっているポートのことを「トランクポート」とも呼ぶようです。 このあたりがポートVLANの基本です。

April 16, 2013 · 1 min · 胡田昌彦

レイヤ2 -データリンク層- スイッチングハブの動作

レイヤ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アドレステーブルをチェックするということを発想できるようになりましょう。 ...

February 18, 2009 · 1 min · 胡田昌彦

レイヤ2 –データリンク層- 宛先はMACアドレス

今回はレイヤ2の話です。 レイヤ2と一口に言ってもPPPやHDLCやADCCP等多数のデータリンクプロトコルがありますが、まずはなんといってもイーサネットに関しての理解が必要です。 MACアドレス レイヤ2において色々と理解すべきことはありますが、まずは何と言っても「MACアドレス」を理解しなくてはいけません。大げさに言えば、私はMACアドレス、レイヤ2の概念をきちんと理解しているかどうかが素人とプロのまず大きな違いだと思っています。そのくらい重要です。 昨今ではTCP/IPが全盛なので、「コンピューターはIPアドレスを持っていて、IPアドレスを住所のように使って通信している」という理解をしている人が多いですし、確かにそれは間違いではありません。ですが、それはレイヤ3を考えた時の話です。レイヤ2で同じようなレベルで理解をするならば「NICはMACアドレスを持っていて、MACアドレスを住所のように使って通信している」ということになります。 「NIC」というのは「Network Interface Card」の略で「LANカード」などとも言われます。このNICに、MACアドレスというものが指定されているわけです。 MACアドレスを確認する 「IPアドレスは設定したことあるけど、MACアドレスなんて設定したことないよ?」という人も多いと思います。まずは自分が今使っているコンピューター(についているNIC)のMACアドレスを確認してみましょう。 コマンドプロンプトで「ipconfig /all」を実行してみてください。 「Physical Address. . . . . . . . . : XX-XX-XX-XX-XX-XX」という行があります。これがMACアドレスです。上の例だと「00-0F-B5-8E-0B-54」ですね。 このMACアドレスはメーカーが工場でNICを生産する際に埋め込みます。ですので基本的に私たちが設定するものではありません。(例外はありますがまずはこの理解でいいでしょう。) MACアドレスからベンダーを調べる このMACアドレスは重複しないようにメーカーごとに割り当てることができる範囲が決まっています。ですので、MACアドレスを見ればどのメーカーのNICなのかわかるようになっています。具体的にはMACアドレスの先頭24ビットがベンダーをあらわしています。具体的には以下のようなサイトで調べることができます。 IEEE Registration Authority - IEEE OUI and Company_id Assignments サイトに行って「Search the public OUI listing . . .」という項目に自分のNICのMACアドレスの先頭24ビットの値を入力して「Search!」して見ましょう。 上の例であれば「00-0F-B5」というのは「NETGEAR Inc」のNICであることがわかります。 フレームの構造 レイヤ2のレベルで考えたときには宛先、送信元にMACアドレスが入力され、Ethernetに電気信号として伝えられます。これの塊をレイヤ2では「フレーム」と呼びます。「フレーム」は以下のような構造をしています。 「プリアンブル」「タイプ」「FCS」などの理解はとりあえず後回しで大丈夫です。重要なのは「宛先MACアドレス」と「送信元MACアドレス」です。 原則としてEthernetでは全てのフレームが全てのコンピューターに届けられます。レイヤ1レベルではただの電気信号なので繋がっている全てのコンピューターまで届くわけです。NICはフレーム内の宛先MACアドレスが自分のMACアドレスと等しいかを確認し、自分宛のものであれば上位の層(具体的にはレイヤ3)にデータを渡す、という動きをします。(※例外あり、後述) どうやって通信相手のMACアドレスを知るのか では、何か通信をしたい時、送信元MACアドレスには自分が知っている自分自身のMACアドレスを入れればいいとして、宛先MACアドレスはどうしたらいいでしょうか?どうしたらわかるでしょうか? たとえばpingを考えてみましょう。「ping x.x.x.x」という形でコマンドを打つときには、宛先のipアドレスはコマンドを打つ人が入力してくれますが、このときにMACアドレスを入力するということはしません。 ですので、IPアドレスからMACアドレスを知る仕組みが必要になるわけです。NICの気持ちになって考えてみると「x.x.x.xのIPアドレスを持っている人MACアドレス教えて」という事をネットワークに流せばよさそうです。そしてMACアドレスを教えてもらう。このやり取りを**ARP(Address Resolution Protocol)**と言います。 ARPは正確にはレイヤ3に属するプロトコルなのですがレイヤ2のMACアドレスを理解するために重要なのでここで登場してもらいました。 ブロードキャスト ところで、「x.x.x.xのIPアドレスを持っている人MACアドレス教えて」という時には宛先MACアドレスには何を入れればいいでしょうか?宛先MACアドレスを知るための通信をするときの宛先MACアドレスです。 なかなか難しいですが、正解は「全員宛て」です。全員に通信を受け取ってもらって、受けとったコンピューターのうち、x.x.x.xのIPアドレスを持っているコンピューターからのみ返事をもらえればいいわけです。 このような「全員宛て」という意味で「FF-FF-FF-FF-FF-FF」というMACアドレスが使われます。先ほど「NICはフレーム内の宛先MACアドレスが自分のMACアドレスと等しいかを確認し、自分宛のものであれば上位の層(具体的にはレイヤ3)にデータを渡す」というように説明しましたが、より正確にはここで宛先MACアドレスとして「ブロードキャストアドレス(FF-FF-FF-FF-FF-FF)」やマルチキャストアドレス「01-00-5E…」であっても受け取って上位層に渡します。 MACアドレスだけではなぜいけないのか? さて、MACアドレスというものを知りました。宛先のアドレスはブロードキャスト、ARPを使って知ることができます。この仕組みだけあれば他にアドレスは必要ないようにも思います。なぜMACアドレスだけでは駄目なのでしょうか? 実際、昔Windowsネットワークで使われていたNETBEUIというプロトコルには他にアドレスは存在しません。NETBIOS名というものはつけますが、NETBEUIにおいてNETBIOS名はMACアドレスと一対一に対応付けられます。サブネットマスクだのデフォルトゲートウェイだのルーティングだの面倒なことはなにもありません。ネットワークに接続しさえすればきちんと通信できるのです。こっちのほうが楽でいいのではないでしょうか? この問いへの答えはブロードキャストのことを考えるとわかります。実際にデータを届けるには相手のMACアドレスが必要なわけですからブロードキャストするわけです。そのフレームは全コンピューターに届かなくてはいけません。これは小規模なネットワークなら問題にならないでしょう。ですが、今日最大のネットワークであるインターネットではどうでしょうか? インターネット上の全てのコンピューターの発するブロードキャストが全てのコンピューターが受信する必要があるとしたら、おそらくブロードキャストパケットだけでネットワークは飽和してしまうでしょう。 ...

February 12, 2009 · 1 min · 胡田昌彦