3.1 スイッチングの基礎

非常に簡単に言うと、スイッチとはリンクを相互接続してより大きなネットワークを構築するための仕組みと言える。スイッチはいずれかの入力に届いたパケットを一つ以上の出力に転送する多入力多出力デバイスである。そのため、スイッチがあると可能なネットワークの構造にスター型トポロジー (図 56) が加わる。スター型トポロジーには魅力的な特徴がいくつかある:

最後の特徴は前章で議論した媒体共有型ネットワークでは成り立たない。例えば、同じ 10 Mbps イーサネットセグメントに接続されたホストは同じ媒体を利用するので、その中の二つのホストが絶え間なく 10 Mbps を転送し続けることはできない。これに対してスイッチドネットワーク (スイッチを使って構築されたネットワーク) では全てのホストがスイッチと自身をつなぐ専用のリンクを持つので、スイッチが十分な集約容量を持ってさえいれば多くのホストは完全なリンク速度 (帯域) で転送を行える。高い集約スループットの提供はスイッチの設計目標の一つであり、この話題は後で触れる。完全な速度で多くのホストをサポートできることから、一般にスイッチドネットワークは媒体共有型ネットワークよりスケーラブル (ノードの個数を増やしても問題が起きない) とみなされる。

スイッチがスター型トポロジーを提供する。
図 56.
スイッチがスター型トポロジーを提供する。

高密度波長分割多重化

本書ではほぼパケット交換ネットワークについてだけ議論をするので、特にワイドエリアネットワークにおいて、下位の物理トランスポートが全光 (all-optical) である事実が曖昧になってしまうかもしれない。この層にパケットは存在しない。市販されている DWDM (Dense Wavelength Division Multiplexing, 高密度波長分割多重化) 装置は様々な波長 (色) の光を単一の光ファイバーケーブルで同時に転送できる。例えば、100 個以上の異なる波長でデータを送信でき、それぞれの波長が 100 Gbps のデータを運ぶ DWDM 装置が存在する。

そういった光ファイバーケーブルは ROADM (Reconfigurable Optical Add/Drop Multiplexer) と呼ばれる光デバイスに接続され、ROADM (ノード) と光ファイバーケーブル (リンク) が光トランスポートネットワークを構成する。そのネットワークで各 ROADM は個別の波長をマルチホップの経路に沿って転送でき、論理的なエンドツーエンドの回線が作成される。この光トランスポートの上に構築されるパケット交換ネットワークの視点からは、一つの波長は (複数の ROADM を経由していたとしても) 二つのスイッチをつなぐ一つのポイントツーポイントリンクに見えるので、その上に SONET や 100 Gbps イーサネットといったフレーム化プロトコルを載せることができる。ROADM が「再構成可能 (reconfigurable)」とは、下位層で使われる波長をエンドツーエンドで変化させ、パケット交換層で事実上新しいトポロジーを作成できることを意味する。

スイッチはいくつかのリンクに接続され、それぞれのリンクに対して適切なデータリンクプロトコルを実行することでそのリンクのもう一方の端にあるノードと通信を行う。スイッチの主な仕事はリンクのいずれかからパケットを受け取り、それを他のリンクに転送することである。この機能はスイッチング (switching) あるいは転送 (forwarding) と呼ばれ、OSI 参照モデルではネットワーク層の機能とみなされる (後で見るように、ここでは OSI 参照モデルでは現実世界を完璧に表せない)。

この次の問題は「スイッチは自身が受け取ったパケットを転送すべき出力リンクをどのように判断するのか?」である。一般的な答えは「パケットのヘッダーを見て、判断に使う識別子を確認する」となる。この識別子をどのように使うかは場合によって異なるものの、よく使われるアプローチが二つある。一つ目のアプローチはデータグラム (datagram) あるいはコネクションレス (connectionless) と呼ばれ、二つ目のアプローチは仮想回線 (virtual circuit) あるいはコネクション指向 (connection-oriented) と呼ばれる。また三つ目のアプローチとしてソースルーティング (source routing) と呼ばれるものが存在する。使われる頻度は最初の二つよりずっと低いものの、有用な応用が存在する。

全てのネットワークに共通する事実の一つとして、宛先ノードを識別する手段の存在が挙げられる。通常そういった識別子はアドレス (address) と呼ばれる。イーサネットで使われる 48 ビットアドレスなど、アドレスの例はこれまでにもいくつか見た。イーサネットアドレスに対する唯一の要件は、一つのネットワーク内に同じアドレスを持つノードが二つ以上存在しないことである。この要件はイーサネットカードに対するグローバルに一意な識別子の割り当てを保証することで達成される。本節の後半ではアドレスに付与できるこれ以外の有用な特徴を考えるが、最初はグローバルな一意性があれば十分である。

さらにもう一つ、スイッチで入力のポートと出力のポートを識別する何らかの手段の存在も仮定する必要がある。ポートを識別する実用的な方法は少なくとも二つある: 各ポートに番号を付ける方法と、接続されたノード (スイッチあるいはホスト) の名前でポートを識別する方法である。ここからはポートに番号を付ける方法を用いると仮定する。

3.1.1 データグラム

データグラムの考え方は非常に易しい: 任意のスイッチがパケットを宛先に向かって転送できるだけの十分な情報を全てのパケットに含めるだけだ。つまり、全てのパケットが宛先に関する完全な情報を持つ。この宛先情報を含んだパケットをデータグラム (datagram) と呼ぶ。図 57 のネットワークを例として考えよう。ここでホストのアドレスは A, B, C, ... だとする。パケットを正しく転送するために、スイッチは転送テーブル (forwarding table) を構築する。表 5 に転送テーブルの例を示す。この転送テーブルには例として示したネットワークでスイッチ 2 がデータグラムを転送するために必要な情報が示されている。

ここにあるような簡単なネットワークに対する転送テーブルは、ネットワークの全体図さえあれば簡単に構築できる。ネットワーク運用者が静的に転送テーブルを構成する様子を想像できるだろう。一方で、動的にトポロジーが変化しホスト間に複数の経路があり得るような大規模で複雑なネットワークでは転送テーブルの作成がずっと困難になる。転送テーブルを作成する問題はルーティング (routing) と呼ばれ、第 3.4 節で説明される。ルーティングはパケットの転送とは別にバックグラウンドで行われる処理であり、受け取ったパケットを正しく転送 (スイッチ) するための情報を収集して転送テーブルを構築する。

データグラムの転送: ネットワークの例
図 57.
データグラムの転送: ネットワークの例
宛先 ポート
A 3
B 0
C 3
D 3
E 2
F 1
G 0
H 0
表 5.
スイッチ 2 の転送テーブル

データグラムネットワークは次の特徴を持つ:

最後の事実はデータグラムネットワークの歴史で特に重要だった。インターネットが重視する設計目標の一つが障害耐性であり、データグラムネットワークはこの目標を非常に効率的に達成できることが歴史から示されている。本書で議論されるテクノロジはほとんどがデータグラムベースのネットワークなので、図を使った説明は次節に回し、ここでは他の二つの選択肢を説明する。

3.1.2 仮想回線スイッチング

パケットスイッチングの二つ目のテクニックは仮想回線 (virtual circuit, VC) を利用する。コネクション指向 (connection-oriented) モデルとも呼ばれるこのアプローチでは、送信元ホストと宛先ホストをつなぐ仮想的なコネクションのセットアップがデータの送信前に必要になる。この動作を理解するために、図 58 のネットワークでホスト A がホスト B にパケットを送信したいと思っている状況を考えよう。データの送信は「コネクションのセットアップ」と「データの転送」という二つのステージからなる処理だと考えられるので、ステージごとに説明する。

仮想回線ネットワークの例
図 58.
仮想回線ネットワークの例

コネクションのセットアップでは、送信元ホストと宛先ホストの間にあるスイッチのそれぞれで「コネクション状態」を構築しなければならない。あるコネクションに対するコネクション状態は、そのコネクションが通過する各スイッチが持つ「VC テーブル」のエントリーから構成される。VC テーブルのエントリーには次の情報が含まれる:

これらのエントリーの意味論は次の通りである: 指定された受信インターフェースに到着したパケットがヘッダーに指定された VCI を持つなら、スイッチは指定された送信 VCI をヘッダーに付けた上でパケットを指定された送信インターフェースから送信する。

スイッチがコネクションを識別するとき、パケットの VCI と受信インターフェースの両方が使われることに注意してほしい。当然一つのスイッチで同時に多数のコネクションが構築される可能性がある。また、受信 VCI と送信 VCI は一般に同じでない。そのため VCI はグローバルに有効なコネクションの識別子ではなく、特定のリンクでのみ有効な (リンクにローカルなスコープの) 識別子でしかない。

新しいコネクションを作成するときは必ず、そのコネクションが利用するリンクのそれぞれに新しい VCI を割り当てる必要がある。さらに、その VCI はリンクの両端にあるスイッチで既存のコネクション用に使われていてはいけない。

コネクション状態を構築するアプローチは大きく分けて二つある。一つはネットワーク管理者が状態を構成するアプローチで、この方式を採用する仮想回線を PVC (permanent virtual circuit, 永続仮想回線)と呼ぶ。その名前とは裏腹に管理者は PVC を削除できるので、PVC は「管理者によって構成される」あるいは「寿命の長い」仮想回線と考えた方が良いかもしれない。もう一つのアプローチとして、コネクション状態を構築するためのメッセージをホストに送信させることもできる。このメッセージ送信処理をシグナリング (signalling) と呼び、この方式を採用する仮想回線を SVC (switched virtual circuit, 交換仮想回線) と呼ぶ。SVC の重要な特徴として、仮想回線のセットアップと削除をホストが管理者の手を借りずに動的に行えることがある。なお、SVC を PVC と区別するのは (交換ではなく) シグナリングの利用なので、SVC は「シグナリング仮想回線」と呼んだ方が正確になる。

図 58 のネットワークにおいて、管理者がホスト A とホスト B を結ぶ新しいコネクションを手動で作成しようとしているとする。このとき、管理者はまず A から B に向かう経路を見つける必要がある (図 58 のネットワークではそのような経路が一つしかないものの、一般に経路は複数ある)。それから、管理者は各リンクに対して現在 VCI として利用されていない値を新しいコネクションで用いる VCI として選択する。ホスト 1 とスイッチ 1 を結ぶリンクの VCI として 5 を、スイッチ 1 とスイッチ 2 を結ぶリンクの VCI として 11 を選択したとしよう。このとき、スイッチ 1 の VC テーブルに表 6 に示すエントリーを追加する必要がある。

受信インターフェース 受信 VCI 送信インターフェース 送信 VCI
2 5 1 11
表 6.
スイッチ 1 の VC テーブルに追加されるエントリー

同様に、スイッチ 2 とスイッチ 3 を結ぶリンクでこのコネクションを識別する VCI として 7 を、スイッチ 3 とホスト B を結ぶリンクの VCI として 4 を管理者が選択したとする。このとき、スイッチ 2 とスイッチ 3 の VC テーブルに追加すべきエントリーをそれぞれ表 7表 8 に示す。あるスイッチの「送信 VCI」が次のスイッチの「受信 VCI」になっていることに注目してほしい。

受信インターフェース 受信 VCI 送信インターフェース 送信 VCI
3 11 2 7
表 7.
スイッチ 2 の VC テーブルに追加されるエントリー
受信インターフェース 受信 VCI 送信インターフェース 送信 VCI
0 7 1 4
表 8.
スイッチ 3 の VC テーブルに追加されるエントリー
仮想回線ネットワークに送信されるパケット
図 59.
仮想回線ネットワークに送信されるパケット

VC テーブルのセットアップが完了すれば、データ転送フェーズを開始できる。ホスト A はホスト B に送信するパケットのそれぞれに対して、VCI が 5 であるという情報をヘッダーに付与してからスイッチ 1 に転送する。スイッチ 1 はホスト A からのパケットを受信インターフェース 2 で受け取り、受信インターフェースとパケットヘッダーの VCI の組を使って VC テーブルの適切なエントリー (表 6) を見つける。対応するエントリーは VCI を 11 に設定したパケットをインターフェース 1 から送信するようにスイッチ 1 に伝えるので、スイッチ 1 はその通りにする (図 59)。その後 VCI が 11 のパケットが スイッチ 2 のインターフェース 3 に到着する。スイッチ 2 は受信インターフェースの値 3 と VCI の値 11 を使って VC テーブルのエントリー (表 7) を取得し、エントリーが示すように VCI を 7 に更新してから送信インターフェース 2 にパケットを送信する (図 60)。同様の処理がスイッチ 3 でも繰り返され。最終的に VCI が 4 のパケットがホスト B に到着する。ホスト B は VCI を確認し、パケットがホスト A からのものだと理解する。

仮想回線ネットワークを進むパケット
図 60.
仮想回線ネットワークを進むパケット

ここまでに説明した手順だと、それなりのサイズを持つ現実のネットワークに含まれる大量のスイッチに対して VC テーブルを正しく構成する手間は膨大になる。そのため、ネットワーク管理ツールと何らかのシグナリングのいずれかまたは両方が PVC の場合にもまず間違いなく利用される。

PVC ではネットワーク管理者が開始しない限りシグナリングは起こらないのに対して、SVC は基本的にホストが行うシグナリングでコネクションが作成される。続いて、ホストからのシグナリングを使った場合にここまで例として使った仮想回線がどのようにセットアップされるかを見ていこう。

シグナリングのプロセスを開始するために、ホスト A はセットアップ用のメッセージ (コネクション要求) をネットワークに ── つまりスイッチ 1 に ── 送信する。このコネクション要求には宛先 (ホスト B) の完全なアドレスなどの情報が含まれる。コネクション要求はホスト B までたどり着かなければならず、加えてその間に通った全てのスイッチはコネクション状態を構築する必要がある。スイッチは受け取ったコネクション要求を最終的な宛先に届けるためにどこに転送すべきかを知っていなければならないので、コネクション要求の転送はデータグラムの転送に似ていると言える。スイッチはネットワークのトポロジーに関して十分知っており、正しく転送が行えると今は仮定しよう。このときコネクション要求はスイッチ 2 とスイッチ 3 を通って最終的にホスト B に到着する。

コネクション要求を受け取ったスイッチ 1 は、それをスイッチ 2 に転送するのに加えて、自身の VC テーブルに新しいコネクションに対する新しいエントリーを作成する。作成されるエントリーは以前と同じく表 6 のようになる。ただし、受信インターフェースで使われていない VCI を選ぶ処理がスイッチによって行われる点は異なる。この例でスイッチ 1 は VCI として 5 を選択する。このとき VC テーブルは「ポート 2 に VCI が 5 のパケットが到着したら、それをポート 1 に送信せよ」という情報を持つ。ここで発生するもう一つの問題として、ホスト A はホスト B に送信するパケットの VCI を 5 に設定すべきであることを何らかの方法で知らなければならない。この方法は後述される。

スイッチ 2 がコネクション要求を受け取ると、同様の処理が行われる。この例でスイッチ 2 は受信 VCI の値として 11 を選択する。同様にスイッチ 3 は 7 を選択する。それぞれのスイッチは同じポートで現在使用中でない限り好きな値を受信 VCI として利用できる。上述したように VCI はリンクにローカルなスコープを持ち、グローバルな意味を持たない。

最終的に、コネクション要求はホスト B に到着する。B が正常に動作していてホスト A からのコネクションを受け入れようと思っているなら、B もまた新しいコネクションに対する受信 VCI (この例では 4) を用意する。この VCI は B において A からの任意のパケットを識別するのに利用される。

続いて、コネクションの構築を完了させるために、送信元ホストと全てのスイッチは新しいコネクションで下流のノードが期待する (自身が送信するパケットに付与すべき) VCI の値を知る必要がある。ホスト B はコネクション要求の確認応答をスイッチ 3 に送信し、そのとき自身が選択した VCI の値 4 も同時に伝える。この確認応答を受け取ったスイッチ 3 は新しいコネクションで使うべき送信 VCI は 4 だと理解し、VC テーブルの新しいエントリーが完成する。その後スイッチ 3 はスイッチ 2 に確認応答を送り、そのとき VCI は 7 だと伝える。同様にスイッチ 2 はスイッチ 1 に確認応答を送り、同時に VCI は 11 だと伝える。最後にスイッチ 1 がホスト A に確認応答を送り、A はこのコネクションで使うべき VCI は 5 だと理解する。

この時点で、ホスト A からホスト B までトラフィックを流すために必要な全ての情報が知る必要がある全てのノードに伝わる。それぞれのスイッチは新しいコネクションを示す完全なエントリーを VC テーブルに持ち、ホスト A はホスト B とのコネクションに関わる全てのスイッチが正しく動作していることを確認応答から確信できる。この例では三つのスイッチが持つ VC テーブルのエントリーが一つ前の例で管理者によって手動で設定されたものと同じになったものの、以上の処理は A から送られたシグナリングメッセージへの応答として全て自動的に行われる。この後データ転送フェーズは PVC の場合と全く同じように行われる。

ホスト A がホスト B へのデータ送信を停止したい場合は、A から終了メッセージ (teardown message) をスイッチ 1 に送ることでコネクションを終了できる。スイッチ 1 は A と B を結ぶコネクションに対応するエントリーを VC テーブルから削除し、終了メッセージをコネクションに沿って次のノードへ送信する。次のノードでも同様の処理が行われる。この後に VCI が 5 のパケットを A からスイッチ 1 に送ったとしても、そのようなコネクションは存在しないのでパケットは破棄される。

仮想回線のスイッチングに関していくつか注目すべき点がある:

仮想回線の優れた側面の一つとして、データの送信準備が整うまでの間にネットワークに関する多くの知識が得られる点が挙げられる ── 例えば宛先への経路が本当に存在すること、そして宛先がデータを受信できる状態にあり、データの受信を望んでいることはデータを送る前に分かる。さらに、構築される時点で仮想回線用のリソースを確保することもできる。例えば X.25 (現在ではほぼ使われていない、初期の仮想回線ベースのネットワークテクノロジ) は次の三つの部分からなる戦略を用いていた:

  1. それぞれの仮想回線には初期化時にバッファが確保される。

  2. 仮想回線に含まれるリンクのそれぞれでライディングウィンドウプロトコルが実行される。受信ノードで確保されたバッファに収まらないほどのパケットを送信ノードが送らないように、このプロトコルにはフロー制御が付いている。

  3. 各ノードはコネクション要求を処理するとき、自身がバッファを確保できなければ要求を拒否する。

これら三つの戦略を用いることで、各ノードが仮想回線に到着するパケットを待たせておくのに十分なバッファを持つことが保証される。この基本的な戦略はホップバイホップ (hop-by-hop) 方式のフロー制御と呼ばれる。

これに対して、データグラムネットワークはコネクション構築フェーズを持たない。各スイッチはパケットをそれぞれ独立に処理するので、意味のある形で仮想回線ごとのリソースを確保するのが難しい。その代わり、データグラムネットワークでは到着するパケットが他のパケットのバッファ空間を奪っていき、バッファ空間が空いていないときに到着したパケットは破棄される。ただし現実には、データグラムベースのネットワークであっても送信元ホストが同じ宛先ホストにパケットの列を送る場合が多い。このようなケースで各スイッチは現在待たせているパケットを調べ、送信元と宛先の各組が公平なバッファ容量を受け取るようにバランスを取ることができる。

仮想回線モデルでは、各回線に異なる QoS (quality of service, クオリティオブサービス) を提供できる。この文脈で「QoS」はネットワークがパフォーマンスに関する何らかの保証をユーザーに与えることを意味する。このためにはスイッチで一定のリソースを常に取り置いておく必要がある。例えば、特定の仮想回線上の各スイッチで送信リンクの帯域の 1% をその回線に割り振る、といった使い方ができる。別の例として、ある仮想回線上のスイッチは特定の時間よりも長くパケットを遅延させない (処理待ちのままにしない) ことを保証できる場合がある。

様々な仮想回線テクノロジが長年にわたって成功を収めてきた。特筆すべきものとして X.25フレームリレー (Frame Relay)、そして ATM (Asynchronous Transfer Mode, 非同期転送モード) がある。しかしインターネットのコネクションレスモデルが成功を収めたので、現在こういったテクノロジの人口はあまり大きくない。仮想回線を利用するアプリケーションとして最も広く使われるものの一つに VPN (virtual private network, 仮想プライベートネットワーク) がある (第 3.3 節 で詳しく議論される)。しかしこのアプリケーションでさえ、現在では大部分でインターネットベースのテクノロジが使われている。

非同期転送モード (ATM)

ATM (Asynchronous Transfer Mode, 非同期転送モード) は仮想回線ベースのネットワークテクノロジとしておそらく最もよく知られたものである。ATM は 1980 年代から 1990 年代の初頭にかけて重要なテクノロジだった。その理由は様々あるが、中でも電話産業で利用されたことが大きい。当時の電話産業はコンピューターネットワークに関して (ネットワークを構築する人々に回線を提供することを除けば) 積極的ではなかった。ATM はちょうどいい瞬間にちょうどいい場所にたまたま位置していたテクノロジでもある: イーサネットやトークンリングといった共有媒体が少し遅すぎるのではないかとコンピューターネットワークのユーザーの多くが思い始めていたときに登場した高速なスイッチングテクノロジが ATM だった。ある意味で ATM はイーサネットスイッチングと競合するテクノロジであり、IP と競合しているとみなす人も多くいた。

ATM セルのフォーマット
図 61.
ATM セルのフォーマット

ATM のアプローチにはいくつか興味深い特徴があるので、ここで少し説明しておく。主要な特徴は 図 61 に示した ATM のパケット ── ATM ではセル (cell) と呼ばれる ── のフォーマットに見ることができる。最初の GFC (Generic Flow Control) ビットはまず利用されないので説明を省略する。GFC の後ろには 8 ビットの VPI (virtual path identifier, 仮想路識別子) と 16 ビットの VCI (virtual circuit identifier, 仮想回線識別子) がある。この二つがまとめて 24 ビットのフィールドを構成すると考えれば、そのフィールドがここまでの説明で使ってきた VCI に対応する。VCI が二つのフィールドに分かれているのは、階層的な処理を可能にするためである。一部のケースでスイッチは同じ VPI を持つ全ての仮想回線を一つのグループ (仮想経路) と扱い、VPI だけを使ってスイッチングを行える。このとき VCI ビットを全て無視できるので VC テーブルのサイズが大きく削減され、スイッチの処理が単純化される。

ヘッダーの最後には 8 ビットの CRC 符号がある。ATM では HEC (Header Error Check) と呼ばれる。HEC は CRC-8 を利用し、セルヘッダーだけに対する誤り検出と 1 ビットの誤り訂正能力を持つ。VCI で誤りが生じるとセルが正しく転送されなくなるので、セルヘッダーの保護は特に重要となる。

ATM のセルフォーマットを見たときに気付く最も変わった特徴は、セルが必ず 53 バイトで固定なことである ── これは ATM で「パケット」ではなく「セル」という言葉が使われる理由でもある。どうしてだろうか? 大きな理由の一つとして、ハードウェアスイッチの実装を簡単にすることが挙げられる。ATM が開発された 1980 年代後半、回線速度に関して最先端だったテクノロジは 10 Mbps イーサネットであり、多くの人々はハードウェアの観点から考えることでイーサネットよりも高速なテクノロジを達成しようとしていた。

加えて、電話産業の世界ではスイッチが重要視されることが多かった ── 電話回線のスイッチは数万人の顧客にサービスを提供することも珍しくない。固定長のパケットは高速かつ高信頼なスイッチを構築する上で非常に役に立つことが示されている。この主な理由として次の二つがある:

  1. 単純な仕事をするハードウェアは簡単に作れる。そしてパケットの処理はその長さが最初から分かっていれば単純になる。

  2. 全てのパケットが同じ長さだと、任意のパケットに対するスイッチングがほぼ同じ時間で完了する。そのためスイッチングを行う回路をたくさん用意してスイッチングを並列に行えるようになる。

並列化が可能になるという二つ目の理由はスイッチ設計のスケーラビリティを大きく向上させる。セルが固定長でなければ高速な並列ハードウェアの作成は不可能とは言わないまでも、セルが高速な並列ハードウェアの作成を容易にしたこと、そして ATM 規格が策定された時代にもハードウェアのセルスイッチを作成する方法がよく知られていたことは確かな事実である。また、この「固定長だと並列化しやすい」という考え方は現代のスイッチやルーターの多くにおいて可変長のパケットを扱うときでさえ用いられている ── 入力ポートから出力ポートにパケットを転送するとき、可変長のパケットはハードウェアの内部で何らかのセルへと分割される。

小さい ATM セルが有利になる点がもう一つある。これはエンドツーエンドのレイテンシに関連する。ATM は音声通話 (当時 ATM が圧倒的によく使われたユースケース) とデータの両方を伝達できるように設計されている。通話は低帯域で遅延が許されないという特徴があるので、スイッチで大きなデータパケットの後ろに小さな通話パケットが待たされることは避けなければならない。全てのパケットを小さく (セルのサイズに) 統一すれば、送信元と宛先を結ぶ転送経路上にある全てのスイッチで音声セルの転送とデータセルの転送が区別されなくなり、レイテンシが安定する。さらに、複数のセルを一つのパケットに組み立てる処理を追加すれば大きなデータも扱える。この「小さいセルを使ってエンドツーエンドのレイテンシを向上させる」というアイデアは現在でもセルラーアクセスネットワークで活用されている。

小さい固定長のパケットを使うと決めた後は、固定するサイズをどうするかという問題がある。サイズを小さくすると、実際に伝達されるデータに対してヘッダーが相対的に長くなり、データの転送に使われるリンク帯域の割合が減ってしまう。さらに深刻な問題として、ネットワークを構成するハードウェアで処理できるセルの個数が決まっている場合、ネットワーク全体のデータレートがセルのサイズに比例して小さくなる。例えばネットワークアダプター (セルを大きなパケットの単位にまとめてホストに渡すデバイス) がその例であり、こういったデバイスのパフォーマンスはセルのサイズに大きく左右される。一方、セルを大きくすると、転送データを完全なセルにするために詰める空のパディングデータが増える問題が生じる。セルのペイロードが 48 バイトなら、1 バイト転送したいときは 47 バイトのパディングが必要になる。小さなデータの転送が頻繁に発生するなら、回線の利用率は非常に低くなる。ペイロードがヘッダーに対して比較的大きい ATM では、一部だけしか埋まっていないセルを頻繁に転送すると効率が大きく落ちることが実際にあり、利用者の間ではセル税 (cell tax) と呼ばれた。

結局、ATM セルのペイロードのサイズは妥協案として 48 バイトが採用された。これより大きなサイズとすべき理由もあれば、これより小さなサイズとすべき理由もある。48 バイトは誰も満足させない ── コンピューターは間違いなく 2 のべきの方が処理しやすいだろう。

3.1.3 ソースルーティング

仮想回線とも伝統的なデータグラムとも異なる三つ目のスイッチングのアプローチとしてソースルーティング (source routing) がある。パケットをネットワーク内で転送するために必要なネットワークのトポロジーに関する情報が全て送信元ソースによって提供されるために「ソースルーティング」と呼ばれる。

ソースルーティングを実装する方法はいくつかある。一つの方法として、各スイッチの出力ポートに番号を割り当て、その番号の列をパケットのヘッダーに付与するという方法がある。このときスイッチングの処理は非常に簡単になる: 入力に到着する各パケットに対して、スイッチはヘッダーに付いているポート番号を読み、その番号の出力ポートにパケットを転送するだけで完了する。ただし、送信元ホストと宛先ホストの間には一般に複数のスイッチがあるので、パケットのヘッダーは転送経路上の全てのスイッチに転送先を伝えられるだけの情報を持つ必要がある。これを行う一つの方法として、スイッチのポート番号を含んだ順序付きリストをヘッダーに付け、各スイッチでこのリストを循環シフトさせることで常にリストの先頭に使うべきポート番号が来るようにするという方法がある。このアイデアを図 62 に示す。

 スイッチドネットワークにおけるソースルーティング (各スイッチはヘッダーの最も右にある値を読む)
図 62.
スイッチドネットワークにおけるソースルーティング (各スイッチはヘッダーの最も右にある値を読む)

この例において、ホスト A からホスト B まで転送されるパケットは三つのスイッチを通り抜ける必要がある。パケットはスイッチ 1 ではポート 1 から抜け、次のスイッチ 2 ではポート 0 から抜け、最後のスイッチ 3 ではポート 3 から抜けなければならない。そのため、最初のヘッダーには (3, 0, 1) というポート番号のリストが含まれる。ここではスイッチがパケットを転送すべきポート番号を右から読むという約束があると仮定されている。次のスイッチが適切なスイッチを読めるように、各スイッチはポート番号を読み取った後にリストを右に向かって一度だけ循環シフトする。つまり、スイッチ 1 から送信されるパケットのヘッダーにはリスト (1, 3, 0) が含まれる。スイッチ 2 でも同様の処理が行われ、リスト (0, 1, 3) をヘッダーに持ったパケットがポート 0 から送信される。図 62 には示されていないものの、スイッチ 3 でも同様の循環シフトが行われるので、ヘッダーに含まれるリストはホスト A が送ったものに戻る。

ソースルーティングのアプローチに関して言っておくべきことがいくつかある。第一に、このアプローチは転送経路上の全てのスイッチに対して正しい転送先を伝えられるだけのネットワークトポロジーに関する十分な知識をホスト A が持っていることを仮定する。これはデータグラムネットワークにおける転送テーブルの構築、あるいは仮想回線ネットワークにおけるセットアップパケットの送信方向の決定と似た問題と言える。しかし実際には、ソースルーティングの情報をパケットに追加するのはネットワークの入口にあるスイッチであり、そのスイッチに接続された送信元のエンドホストではない。

第二に、ヘッダーは転送経路上のスイッチ一つごとに一つのワードが必要になるので、ヘッダーのサイズの予想が付かない。これはヘッダーが上限を持たない可変長になることを意味する。ただしパケットが通過するスイッチの最大個数が確実に分かるならヘッダーを固定長にできる。

第三に、このアプローチには変種がいくつかある。例えば、ポート番号のリストを循環シフトさせる代わりに使った番号を切り捨てる方法が考えられる。ただし、循環シフトには切り捨てが持たない利点を持つ: ホスト B がポート番号のリストの完全なコピーを受け取るので、それをホスト A への返信に役立てることができる。また、ヘッダーに「次に使うポート」エントリーを指すポインタを追加し、ポート番号のリストではなくこのポインタをスイッチに更新させる方法もある。この方法はより効率的に実装できるだろう。この三つのアプローチを図 63 に示す。それぞれのケースで現在のスイッチは A を読み、次のスイッチは B を読む。

ソースルーティングのヘッダーに含まれるポート番号のリストを処理する三つの方法 (ラベルは右から左に向かって読む) (a) 循環シフト (b) 切り捨て (c) ポインタ
図 63.
ソースルーティングのヘッダーに含まれるポート番号のリストを処理する三つの方法 (ラベルは右から左に向かって読む) (a) 循環シフト (b) 切り捨て (c) ポインタ

ソースルーティングはデータグラムネットワークと仮想回線ネットワークの両方で利用できる。例えば IP (インターネットプロトコル) では大部分のパケットに対するスイッチングが伝統的なデータグラムモデルで行われるものの、選択したパケットをソースルーティングで転送するオプションが存在する。一部の仮想回線ネットワークで最初のセットアップ要求を伝達する際にもソースルーティングは利用される。

ソースルーティングは「厳密 (strict)」と「緩慢 (loose)」の二つに分類される場合がある。これまでに説明してきたのは厳密なソースルーティングで、転送経路上の全てのノードに対する経路が指定される。これに対して緩慢なソースルーティングでは通過するいくつかのノードが指定されるだけで、指定されたノードを結ぶ正確な経路は指定されない。緩慢なソースルーティングは完全なルートではなく途中のチェックポイントを指定しているのだと考えることができる。送信経路を作成するために送信元が保持しなければならない情報の量を抑えたいとき緩慢なソースルーティングは役立つ。現実的な大規模ネットワークでは、任意の宛先に対する厳密な転送経路を正しく構築するのに必要な全ての情報をホストに持たせるのは難しい可能性が高い。しかし以降の章で見るように、二種類のソースルーティングはどちらも特定のシナリオで実際に利用されている。

広告