セグメント(サブネットワーク)で通信する際にルータは必須なのか

「セグメント(サブネットワーク)で通信する際にルータは必須なのか」について調べたので整理しておきます。

セグメントとサブネットワーク

まずセグメントについてですが、「ネットワークセグメント(LANセグメント)とは – 意味をわかりやすく – IT用語辞典 e-Words」にあるように、物理的にネットワークが分離されているときに使われることが多いはずです。

サブネットワークはセグメントとは別の話です。32 台のパソコンにより構成されるネットワーク A があったとして、それに含まれる8台をまとめてネットワーク A1 として管理したいとします。ただし、ネットワーク A を構成するパソコンは変更したくないという条件もつけるとします。こういった場合に、ネットワーク A1 はネットワーク A のサブネットワークとして用意します。

このように、サブネットワークは、ネットワークに含まれるネットワークがあるときに使われる概念です。サブネットワーク A1 に含まれる 8 台と、ネットワーク A 内の他の 24 台について、それぞれ別のセグメントにするかどうかは、別の話です。ネットワーク管理上、効率良くネットワーク通信をするには、セグメントを分けておくことが多いので、「セグメント(サブネットワーク)で通信」といった表現をされることが多いだけです。

ということで、「セグメント(サブネットワーク)で通信する」といった場合は、「物理的にネットワークが分離されている環境下でセグメントをまたいで通信をする」という意味と考えるのが妥当でしょう。

ルータ

さて、ここで、セグメントとサブネットワークは別物だという話をしました。セグメントが分離されていない環境でもサブネットワークを設定して論理的に分離したネットワーク環境を構築することはできます。論理的に分離されているネットワーク間で通信をするには、ルーティング情報を使ったルーティングが必要になります。ルーティング情報を使ってルーティング制御をする装置がルータになります。e-Wordsによる用語説明は「ルータ」となります。

単に「セグメントをまたいで通信できるようにする」という話だと、セグメント間にスイッチングハブやブリッジといったデバイスを置けば良いということになります。e-Wordsによる用語説明だと、スイッチングハブブリッジとなります。

これが「サブネットワーク間で通信できるようにする」という話だと、ルータが必要になります。

セグメントは物理的な話で、物理的な世界では別のものを用意して分ければ良いだけなので理解しやすく単純ですが、仮想化されたネットワークを利用するときには逆に面倒な話になります。物理的に同じネットワークインタフェースカードでやりとりしているデータを仮想的に分離しないといけないため、きちんとセグメントが分離できているのかどうかを確認するにしてもログや状態を表示するといった作業を明示的にする必要があります。

単に使用するネットワークの IP アドレスについて、片方を 192.168.0.1 とし、もう片方を 192.168.1.2 としたりするだけだと通信ができてしまうこともあります。物理的な世界でも同じ電気信号が流れるハブ(ルーティング機能のないもの)へ、これらのマシンをLANケーブルで接続したら電気信号は流れるし、各マシンは自分宛ての電気信号が流れたら取り込んでしまいます。

最近は Docker ネットワークや WSL2 用のネットワークのような仮想ネットワークも良く使うことになるため、ネットワークについてのより深い理解が必要になってきています。自分も最近になって改めて「そういうことだったのか」と思う事柄もあり、面白いものです。

ネットワーク通信

セグメントやサブネットワークといった用語の説明は、ネットワーク通信の基礎を理解した上で読んでみないと理解がしにくいものが多いです。簡単にですが、ネットワーク通信の原理(単に通信といわないのは、IPC(Inter-Process Communication、プロセス間通信)など他の通信と区別するため)からチェックしなおすと良いはず。

まず、通信は電気信号レベルでされているという点は忘れてはいけません。

  • 電気信号を使って通信可能
  • コンピュータマシン間を通信ケーブルで接続して通信可能
  • 電気信号を中継するハブ装置と通信ケーブルで接続して複数のコンピュータマシン間で通信可能
  • コンピュータマシンが多くなると、通信をするときの電気信号が衝突しやすくなるので、それを解消するために、よく通信するコンピュータマシンとそうでないコンピュータマシンをセグメント
  • 電気信号を効率良く通信するコンピュータへ伝えるためにルーティング機能を用意してパケットのルーティングをする

次に通信をする相手を特定する話

  • コンピュータマシンのネットワークインタフェースカード(Network Interface Card, NIC)では、物理的には、通信ケーブルを流れる電気信号を全部読み取りバッファリングし、データとして保持、ドライバソフトウェアで自分宛てのデータだけ取り込み処理をする
  • ネットワーク通信だと、バッファリングしたデータからパケットデータを構築して、その単位で処理する。だから、ネットワーク上を流れる通信では、MACアドレスで通信しているコンピュータマシンがわかる。
  • MAC アドレスは NIC などの物理デバイスへメーカーが付与するのが基本。通信しやすい採番となっていない。ネットワーク通信で使いやすい番号付与をする仕組みが必要。インターネット通信では IP アドレスを使って番号を付与する
  • ネットワーク通信用のドライバソフトウェアは、MAC アドレスがわかれば、自分(ドライバソフトウェアが動いているコンピュータマシン)宛てかわかるが、その上でどんなプロトコルで通信しているかはわからない。
  • インターネット通信用のソフトウェアは、IPアドレスがわかれば、自分(ドライバソフトウェアが動いているコンピュータマシン)宛てかわかる。ネットワーク通信用のドライバソフトウェアとインターネット通信用のソフトウェアはうまく連携させないと通信が成立しないので、うまくいくように設計されている。

ネットワークの設計の話。プロトコルにより決まるので、複数のプロトコルが共存できるようにしたい場合は、そうできるようにうまく設計する必要がある。逆に共存させないなら自由に設計できるが、物理的に混ぜて運用することはできなくなる。

  • ネットワーク通信の設計に関しては、OSI (Open Systems Interconnection)という理論上、よく整理されたものがあり、これを使って実装されているネットワーク・プロトコル(通信規約)は説明されることが多い。
  • インターネット通信では TCP/IP, UDP/IP がよく使われている。
  • OSI レイヤー1(物理層): LANケーブルや電波で伝達する電気信号関連で必要な物理的なもの。コネクタ形状や周波数など、互いに合っていないと電気信号レベルでの同期がとれない。つまり、通信ができない。
  • OSI レイヤー2 データリンク層: MACアドレス(後述)で宛先、送信元を特定。宛先、送信元が特定できないと通信ができない。(手紙のやり取りをするときに宛先と自分の住所を書かないと、やりとりが継続できないことを想像すればわかるはず)
  • OSI レイヤー3 ネットワーク層: 使用するネットワークが決まる層。インターネットではIPアドレスでインターネット通信用の宛先、送信元を特定。インターネット通信以外にも Microsoft ネットワークや Netware ネットワークのような他の通信プロトコルでの通信もあって、このネットワーク層では、どのプロトコルで通信するのか判定できるような仕組みを持つようにネットワーク設計がされている。
  • OSI レイヤー4 トランスポート層: データ転送のための層。インターネットではTCPやUDPといったプロトコルによって、どの程度のデータ検証をするか、どのようなフォーマットでデータをやりとりするか、送受信の成功や失敗に関してどのように判定するか、といったことが決められている。

といったあたりの基本をおさえておきたいところです。

同じカテゴリの記事: Linux