ホーム > 読んだ > 国内

TCP/IPネットワーク
ティーシーピーアイピーネットワーク

書誌

text唯野
author浅羽登志也, 佐々木太良, 阿部豊彦, 和田弘之, 則房雅也
publisher技術評論社
year『Software Design 1999.3』p.15-57

履歴

2002.3.12読了
2002.3.18公開
2002.11.28修正

感想

ルーティングとスイッチングというのは、確かに分かっているようで曖昧な知識しか持っていなかった領域といえるので、手頃そうな雑誌記事を読んでみた。感想としてはちょっと物足りない感じだが、その辺は関連記事などでおいおい補っていきたいと思う。(本当はちゃんとした本を買うべきなのだが...)

なお NIC 2 枚刺しによる IP ルータの構築が最後に載っていたが、これは最近、個人的に Linux で単純なルータを構築したときには、(最近のインストーラが賢いせいだろうけど)インストール時点で既に NIC が 2 枚とも検出されていたため、そのまま IP アドレス等を振るだけでルータとしては使えてしまったので驚いた。少し前だと、この辺は ML なんかでもよく聞かれるトピックだったと思うので、そういう意味では Linux なんかも確実に進化しているんだな――というのを実感した印象がある。

# だからといって原理を知らなくてよいという訳ではないので、
# こういう記事を読んだわけですが、この記事も少し古いため、
# 最新の事情とはずれているところがあるかもしれません。

抄録

浅羽登志也「ルーティングとアドレッシングの基礎」

TCP/IP のネットワークでは、全てのデータは適当な大きさの IP パケット(正確には IP データグラム)に分割されて転送される。パケット通信網では回線交換網と異なり事前に通信を行うホスト間が通信経路を確立するわけではないので、各パケットは独立してネットワーク上を流れていく。そして、IP のパケットはネットワークリンク(線)と、それらをつなぐルータ(点)によって構成され、あるリンクからのデータは各パケットのヘッダ部情報を元に転送先が判断されて配送される。

IP アドレスは階層構造を取るので、現行の主流である IPv4 (32 ビット)の場合は、これがネットワーク部、サブネット部、ホスト部に分解される。サブネット部に何ビットを割り当てるかは、そのネットワークでのホスト数や物理的なトポロジによって決まる。例えば、192.168.1.0/24 なら、先頭から 24 ビットが固定なので、利用できるアドレスブロックの数は 256 個ということになる。(このように表現されたアドレスブロックのことをプレフィクスという。)

ルータとはこれら複数のネットワーク間で転送されるデータグラムへの交通整理を行っている。つまり、受け取ったパケットのヘッダにあるデスティネーションアドレス(送信先、送信元はソースアドレスという)を調べて、それが自分の直接つながるネットワークなのであればそこに流し、そうでなければ自分の持つルーティングテーブルに従って次に送り出すべき隣接ネットワークのアドレス(Next Hop)を調べてそこに流す。この動作のことをフォワーディング(forwarding)という。これは具体的に以下の手順で行う。また、ルーティングテーブル中の default は、マッチするものがなかった場合の経路を示す。

  1. IP パケットのヘッダからデスティネーションアドレスを取り出す
  2. デスティネーションアドレスとルーティングテーブルの各エントリにおけるプレフィクスを比較する
  3. 先頭から最も長くマッチしたプレフィクスのエントリを選ぶ
  4. 選んだエントリの Next Hop のアドレスに対して IP パケットを転送する

このルーティングテーブルの設定方法には静的(static)と動的(dynamic)がある。静的な方法は管理者があらかじめ作成しておいたルーティングテーブルをルータへ転送するもので、いったん設定されたものは変化しないため、末端部分でのルータなどに向いている。これに対し動的な方法は OSPF や BGP といったルーティングプロトコルを用いて、経路情報を交換しながらルーティングテーブルを構築する。そのため、後者のルータにはルーティングエンジン(ルーティンテーブルを元に自分を経由した他ネットワークへの到達性情報を NLRI : Network Link Reachability Information)として他のルータへ通知し、それらの情報を元に最適な経路となるルーティングテーブルを構築)とフォワーディングエンジン(ルーティングエンジンによって構築されたルーティングテーブルに基づいてフォワーディングを行う)とが存在する。動的ルーティングは大きくて複雑なネットワーク野経路制御に向いている。

佐々木太良「ルーティング技術の実際」

ある計算機における経路設定技術(route コマンド)と経路検索技術(routed デーモンの設定)はあくままでも別物である。大部分の PC のようにネットワークへの接続口がひとつしかないような状況で経路を決めるのであれば以下を行うだけでよい。

  • 自分宛のパケットならループバックインタフェースに送信
  • 自分宛以外のパケットなら唯一のネットワークインタフェースに送信

ループバックインタフェースとは自分宛のパケットを外部へ出さないように仮想的に存在するインタフェースのことで、ネットワーク「127.0.0.0/8」に接続された唯一の計算機(自分)「127.0.0.1」へのパケット送信を指す。(元々は UNIX での習慣だが、現在では Windows/Mac でも利用できる。)そして自分宛以外ならインタフェースとして default gateway を使う。

これがダイヤルアップでプロバイダに接続した場合には、ダイヤルアップが確立して DHCP サーバより IP アドレスを割り当てられた時点で、ちょうど「route add default DEFAULT_GATEWAY」(DEFAULT_GATEWAY はプロバイダ側ゲートウェイの IP アドレス)が行われたのと同じことが行われている。

同様に一台の PC が 2 枚の NIC を持っている場合には、OS のカーネルがゲートウェイ機能を受け持つことになる。例えば、NIC がそれぞれ内部と外部のネットワークに接続されている場合、パケットは宛先からそれぞれの NIC へ流すことになり、そうでなければ default gateway (即ち外部宛の NIC)へパケットは転送されることになる。このような場合、動的経路制御はかえって上流側の routed を混乱させるだけなので、default router が固定となる PC で routed は動かさない。もちろん逆に一定以上のネットワークでは RIP (ルーティング情報)のやりとりを前提とした動的経路制御を使う。このようにインターネットでの経路選択はあくまでも近くにあるルータの経路情報のつなぎ合わさることで実現されている。

阿部豊彦「スイッチの基礎知識」

Ethernet の世界ではスイッチの普及する以前ではブリッジによってネットワークを接続することが多かった。スイッチの基本動作原理はブリッジと同じであり、ブリッジは OSI データリンク層の MAC (Media Access Control)層で規定され、LAN セグメント間の中継を行う。同一ネットワーク内におけるフレーム中継(データリンク層でのデータのまとまりのことをフレームという)がメインで、大規模 LAN への拡張、通信制御などは行わない。

ほとんどのブリッジは学習型で、フレーム内の MAC アドレスを元に、どのポートにどんな MAC アドレスのノードが接続されているかをテーブルとして構築していく。典型的なブリッジは 2 ポートを備えるのが一般的だったが、その後 4 ポート程度のものまで製品化された。この多ポートブリッジに複数のポート間通信の処理能力、ポート数の更なる追加、スター型トポロジ配線への対応をしたものがスイッチである。ブリッジと LAN スイッチとの大きな違いはフレームの扱い方で、スイッチでは同時に複数のポート間のフレーム転送が行える。しかし、フレーム衝突の可能性は残るため、それを避けるためにはポートと NIC の双方が前二重に対応している必要がある。

スイッチの入力ポートの処理方法には主に以下の 3 つがある。

  • Store & Forwared (蓄積交換方式)
  • フレームの全てを読み取ってチェック後に指定ポートへの出力を行う。遅延は大きくなるがエラーフレームが減るため帯域の有効利用ができる。
  • Cut & Through
  • フレームヘッダの MAC アドレスを読み取った段階で指定ポートへの出力を行う。遅延は小さくなるがエラーフレームなども転送してしまう。
  • Fragment Free & Cut Through
  • 最小フレームサイズ(先頭 64 バイト)を読み込んだ時点で指定ポートへの出力を行う。上記の折衷方式。フレームの衝突頻度に応じて自動で転送モードを切り替えるものもある。

また、エラーフレームとして以下のようなものがある。

状態内容
正常フレームフレーム長 64-1518 (FCS 込)バイト、CRC 正常
FCS エラーフレーム長 64-1518 (FCS 込)バイト、CRC 異常
runt (ラント)フレーム長 64 (FCS 込)バイト未満、CRC 正常
フラグメントエラーフレーム長 64 (FCS 込)バイト未満、CRC 異常
ジャバーフレーム長 1518 (FCS 込)バイト以上、CRC 異常
ロングフレームフレーム長 1518 (FCS 込)バイト以上
ショートフレームフレーム長 64 (FCS 込)バイト未満
アライメントエラー8 で割り切れないフレーム長

そして、フレームに対するスイッチ内部処理としては主に以下の 3 つがある。

  • CPU スイッチング方式
  • 専用 ASIC (Application Specific Integrated Circuit : 特定用途向け集積回路)などでフレームをメモリに書き込み、その宛先 MAC アドレスで学習したアドレステーブルを検索して、出力ポートの決定・読み出しを行う。一般的なルータのフレーム転送方式に近いため、ソフトウェア側での柔軟性は高いが、ポート数増加などによる並行処理が増えたときの処理能力低下が起こりやすい。
  • 高速バス方式
  • 4 ポート単位程度に配置された ASIC ごとに MAC アドレスを学習して、受信フレームの宛先 MAC アドレスがアドレステーブルになければ、そのフレームを高速データバスに転送する。1 ポートに対する複数出力ポートの処理に優れるため、ブロードキャスト、マルチキャストを得意とし、低価格スイッチで採用されることが多い。
  • マトリックス(クロスバー)方式
  • 入力ポートのデータラインと出力ポートのデータラインをマトリックス状のシリコンスイッチに接続して、そのスイッチの学習したアドレステーブルで制御を行って高速なフレーム転送を行う。1 入力に対する 1 出力の遅延が一定になるため、ブロードキャストなどを考慮しなければ理論上では非常に高速となる。大規模かつ高速なハイエンド用途に採用されることが多い。

スパニングツリープロトコル(STP)とは、ブリッジの時代にできた通信のループを防ぐためのブリッジ間プロトコルでスイッチにも継承されている。これはループキャンセラと呼ばれる仕組みを使い、例えば単純に 2 台のスイッチ間を二重化すると必ず片方が利用できない(ブロッキング)される。これはスイッチが 2 台に分かれている場合でも利用できるが、スイッチの台数が増えるとブロッキングの計算で負荷がかかる、電源投入後やノードの接続後、STP のポートステートが Forwarding になるまで通信できないなどの欠点があるので、あえて使わない場合もある。或いは、逆にあらかじめ経路をループ状に複数用意した上でスパニングツリーを有効にしておき、障害発生時に他の経路へ切り替えるような使い方をする。

オートネゴシエーションとは Ethernet の 10/100M、全二重/半二重の通信モードを相手ポートに応じて自動選択することを指す。これは 100M 全二重 -> 100M 半二重 -> 10M 全二重 -> 10M 半二重と通信を速い順から試すことで適合状態への設定を行っている。なお、スイッチはその動作原理上、ピアツーピア型の通信で最適化されているため、ランダムなノード間での多量の通信で最も性能を発揮する。逆にいうと、マルチメディア系、ファイル共有、X 端末といった一極集中型の通信では十分な性能を出すことができない。一極集中への解決策としてはビッグパイプなどがあり、これは大きな通信帯域を確保することで実現する。(例えば 10M スイッチなら 100M 全二重のアップリンクを持つなど。)具体的なアップリンクの方法として以下がある。

  • 単純セグメント延長
  • 同一 VALN ポート群の高速なポートをアップリンクとして使い、VALN の延長にする
  • 複数 VLAN 分割延長トランク
  • スイッチ内の複数 VLAN やダウンリンクからトランク(trunk : VLAN を接続する配線)された VLAN をアップリンクに 1 本で接続する。Cisco 独自の ISL (Inter-Switch Link)や標準化された IEEE 802.1Q Tagging などがある。
  • マルチリンクによる延長
  • 上を複数の配線で実現する場合。アップリンク用の高速ポートでなくても余ったポートを複数束ねることでアップリンクとして使う。Cisco 独自の Fast EtherChannel、Gigabit EtherChannel、Nortel 独自の MultiLink Truck などがある。実装でハードウェア依存となる部分が多いため標準化されていない。(現時点でどうかは不明:唯野注)
  • レイヤ 3 によるルーティング延長
  • レイヤ 3 スイッチを用い IP セグメントとしてアップリンクを利用する。ルータ処理となるためアップリンク帯域を有効利用できるが通常のスイッチより高価。

レイヤ 3 スイッチ(L3)とは OSI の第 3 層で動作するという意味で、レイヤ 3 スイッチとはスイッチの速度でルーティングを行うという意味合いで用いられる。L3 と区別するために通常のスイッチをレイヤ 2 (L2)と呼ぶことがある。L3 スイッチは専用 ASIC によるフレーム転送、ルーティング処理が従来のルータの 10-100 倍まで高速化されている点が最大の特徴となる。従来、複数のルータやネットワーク機器を用いて行っていたことが L3 スイッチによって高速化、集約化できるため、最近のトレンドとなっている。但し、L3 スイッチではルーティングできるプロトコルに制限があり、従来のルータの方が柔軟性を持つため両者は混在していくものと予想される。(これも現在どうなのかは不明:唯野注)また、L3 スイッチの高速化は ASIC に負う部分が大きいため機能追加だけでハードウェアのアップグレードを迫られる場合がある。

和田弘之「VLAN ならできる ! 柔軟なネットワーク」

スイッチが不要なパケットを他のポートに流さないとはいっても、それはあくまでも宛先の決まっているパケット(ユニキャストパケット)に限られるため、宛先の不特定なパケット(ブロードキャストパケット)は当然ながら全てのポートに流される。ブロードキャストパケットの届く範囲がネットワークでの一セグメント(ブロードキャストドメインとなる。スイッチはこのブロードキャストパケットの届く範囲を制限することによって物理的に接続されたネットワークを論理的に分割する。これを仮想 LAN (VLAN)という。VLAN の方式には以下のものなどがある。

  • ポートベース VLAN
  • スイッチの接続ポートによってグループ分けを行う場合。VLAN の分割がポートとして一元管理されるため変更がスイッチのみで済むという利点を持つ。
  • MAC アドレスベース VLAN
  • 各端末が持つ MAC アドレスをスイッチに登録して、それを元に VALN の定義を行う。スイッチの物理ポートに依存しないため端末の移動が多い環境などで有効。
  • プロトコルベース VLAN
  • スイッチの受信したプロトコルごとに VLAN を分割する。部門単位に使用するプロトコルが異なる場合など。
  • IP サブネットベース VLAN
  • TCP/IP のみの場合で、スイッチの受信した IP パケットの送信元 IP アドレスを元に、あらかじめ設定された VLAN へ転送を行う場合。

98 年に標準化された IEEE802.1Q では Ethernet フレーム内に VLAN 情報を組み込む VLAN Tagging が定義されたことによって、複数スイッチを経由した VLAN の定義が可能となった。VLAN Tagging 方式ではパケットの属する VLAN ID (VID)のあるタグフレームをパケットに含むことにより、受信スイッチ側でその識別を行う。

実際の VLAN の構築ケースとして VLAN 機能付きのバックボーンスイッチによる複数 VALN への切り分け、VLAN Tagging による柔軟性のある VLAN 構築などが挙げられる。

則房雅也「VPN 構築のポイントと実現方式」

VPN (Virtual Private Network)は、かつては公衆電話網を用いた構内電話網という意味で使われていたが、近年ではインターネット VPN : インターネットを間に置いて遠隔地の LAN やユーザをつなぎ、あたかも同一 LAN 上で作業しているようにアクセスできる――という使われ方が広まっている。VPN の構築では一般的なインターネット接続に比べて外部から内部へのアクセスを許可することに伴うセキュリティ管理が重要となる。そのため、運用するアプリケーションと対象ユーザ、アクセス形態とセキュリティポリシーの明確化などが求められる。そして、それらに基づいて VPN のネットワーク構成を決定していく。

VPN サーバを導入する場合でも、既存のインターネット接続に支障を出すわけにはいかないので、まず IP ルーティング(パケットの転送)と DNS (名前解決)を通信可能性保証の基本として行っていく必要がある。(その際に内部ネットワークと切り離して運用されるサーバは DMZ (De-Militarized Zone)と呼ばれる領域で管理する。DMZ で管理できない要求に VPN を利用していく。)その上で、(場当たりではない)標準化されたプロキシやトンネリング技術を用いて通信経路を確保していく。具体的には SOCKS、HTTP プロキシなどが挙げられる。

トンネリングとは IP 以外のプロトコルのパケットを IP パケットに包んで送信することで、IPSec、IPv6、IP マルチキャストなどを既存のインターネットインフラから利用する際で利用される。もちろん、プライベート IP アドレス間のパケット通信でも利用できる。ちなみに、NAT (Network Address Translation)とプロキシは効果が似ているが、前者が IP パケット中の IP アドレスを書き換えるのに対し、後者はそれを行わない点で大きく異なる。ここでの違いをまとめると以下のようになる。

  • トランスポート層より上位の技術 (SOCKS、HTTP)
  • ユーザやアプリケーションを識別できるが、その分、処理が増えて性能が犠牲になる。性能を少し犠牲にしても管理のしやすさを重視する場合。例えばユーザ認証と通信経路の管理を同時に行うなど。
  • ネットワーク層の技術 (IP トンネリング)
  • IP パケットだけを見て処理を行うので、ユーザやアプリケーションという概念がない。性能の低下よりもトンネルされることを重視する場合。

現状のインターネットでは End to End の全ての通信を暗号化することは無理なので(全てのコンピュータとアプリケーションが対応しなければならないから)、VPN サーバという接点間で暗号化するというのが現実的な運用になる。VPN の構築に廉価性を求めた場合では、必要なトレードオフを見極めなければならない。基本的にアクセス管理は、ユーザ、コンピュータ、アプリケーション、利用時間によって変化するので、そのレベルに合わせた認証を行うようにする。またはプロバイダを利用した VPN を構築することで管理の手間を軽減するなども考えられる。

参考文献

岩崎有平「スパニング・ツリーの役割としくみは ?」日経 NETWORK 2002.4/p.134-135

Up