4.5 携帯デバイスのルーティング
携帯デバイスによってインターネットのアーキテクチャに新たな課題がもたらされると知っても大きな驚きではないだろう。インターネットはコンピューターが移動できない大きなデバイスであった時代に設計されている。インターネットを設計した人々の頭の中に将来発明される携帯デバイスという概念があった可能性はあるものの、携帯デバイスへの対応が最優先の課題でなかったことは間違いない。もちろん現代ではノート PC やスマートフォンをはじめとする携帯コンピューターがありとあらゆる場所に存在し、ドローンのような新しい形の携帯コンピューターも増加している。本節では携帯デバイスの存在下で生じる課題、およびそれに対処するために現在使われているアプローチを紹介する。
4.5.1 携帯ネットワークの課題
今では誰でも簡単に無線ホットスポットを立ち上げ、それを IEEE 802.11 などの無線ネットワークプロトコルでインターネットに接続し、非常に優れたインターネットサービスにアクセスできる。ホットスポットを可能にする上で鍵となるテクノロジの一つが DHCP である。コーヒーショップに入ってノート PC を開けば、そのノート PC に対する IP アドレスが自動的に取得され、デフォルトルーターと DNS サーバーとの対話が可能になり、あなたが使う様々な種類のアプリケーションが全て利用可能になる。
しかし、少し深く考えると、一部のアプリケーションが抱えるシナリオではユーザーが移動するたびに DHCP で新しい IP アドレスを割り当てるだけでは不十分であることが分かる。例えばノート PC やスマートフォンで VoIP (Voice over IP, IP を使った通話) をしながら移動しているユーザーがいたとして、そのユーザーのデバイスが接続するホットスポットが切り替わったらどうすればいいだろうか? あるいは、インターネットへの接続が Wi-Fi からセルラーネットワークに切り替わったら?
ユーザーが移動して別のネットワークに加わるとき、新しい IP アドレス (新しいネットワークにおける IP アドレス) をユーザーのデバイスに割り当てる必要が明らかにある。しかし、通信相手のコンピューターまたは電話はユーザーが移動したこと、および新しい IP アドレスの値をすぐには認識できない。そのため、特別な仕組みを用意しなければ、通信相手はパケットを新しい IP アドレスではなく以前の IP アドレスに送信し続ける。この問題を図 122 に示す。この図では右にあるモバイルノード (mobile node) が 802.11 ネットワークからセルラーネットワークに移動しており、このとき左にある対向ノード (correspondent node) からのパケットを新しいネットワークに移動したモバイルノードに届ける仕組みが必要になる。この問題を解決する方法は数多く存在する。本節では、そのいくつかを紹介する。
パケットを古いアドレスではなく新しいアドレスに転送する手段が手に入ったとしても、セキュリティの問題がすぐに現れる。例えば「私の新しい IP アドレスは X です」と対向ノードに伝えるための仕組みがあったとして、悪意ある攻撃者がユーザーの許可なく同様のメッセージを対向ノードに伝えることを防ぐにはどうすればいいだろうか? これを防げないと、攻撃者はユーザーのパケットを受け取ったり、関係ない第三者にリダイレクトしたりできるようになる。そのため、セキュリティとモビリティは密接に関連している。
以上の議論で明らかになる問題は、IP アドレスが二つの役割を持っている事実である。IP アドレスはエンドポイントの識別子 (identifier) として使われ、さらにエンドポイントの位置指定子 (locator) としても使われる。識別子はエンドポイントに対する永続的な名前、位置指定子はパケットをエンドポイントにルーティングするために使われる (一時的な可能性のある) 情報と考えるとよい。デバイスが移動しない (あるいは移動が稀な) 場合には、単一のアドレスで二つの情報を表すのが理にかなっている。しかしデバイスが移動する場合には、移動しても変わらない識別子 ── エンドポイント識別子 (endpoint identifier) またはホスト識別子 (host identifier) と呼ばれるもの ── と位置指定子が別々に必要になる。識別子と位置指定子を分離するアイデアは長い間存在しており、これから説明するモバイルデバイスに対処するアプローチの多くもそういった分離を提供する。
IP アドレスが変更されないという仮定は様々な場面で利用されている。例えば TCP のようなトランスポートプロトコルは歴史的に接続が開始されてから終了するまでの間に IP アドレスが変化しないことを仮定している。そのため、エンドポイントアドレスの変更に対応できるようにトランスポートプロトコルを再設計することがアプローチの一つとして考えられる。
しかし、TCP を変えようとするよりも、クライアントの IP アドレスが変化する場合に備えてアプリケーションに定期的に TCP 接続を再確立させるアプローチの方がよく使われる。奇妙に思えるかもしれないが、HTTP ベースのアプリケーション (例えば Chrome のようなウェブブラウザ、あるいは Netflix のようなストリーミングアプリケーション) では本当にこの処理が起こる。言い換えれば、この戦略ではユーザーの IP アドレスが変わらないように見せかけることはせず、ユーザーの IP アドレスが変更される可能性がある状況への対処をアプリケーションに任せている。
移動するエンドポイントは誰でも想像できる。しかしルーターも移動する場合があることは強調に値する。モバイルなエンドポイントよりは明らかに少ないものの、モバイルなルーターが理にかなっている状況は数多く存在する。モバイルなルーターを必要とする組織の例として、自然災害によってインフラ設備が破壊された後にネットワークを配備しようとする緊急事態対応チームがある。エンドポイントだけではなくネットワーク内の全てのノードが移動する場合は懸案事項がさらに増える。この懸案事項は本節の後半で議論する。
モバイルデバイスをサポートするためのアプローチをいくつか見ていく前に、いくつかの点をはっきりさせておく。まず、ネットワークが無線であることをモビリティと混同する人が多くいる。この二つは明らかな理由で同時に目にする場合が多いので無理もない。しかし無線通信とはデータを別の地点まで物理的な線を使わずに届けることであり、モビリティとはノードが通信を行いながら移動する状況をサポートすることを言う。無線通信を行うモバイルでないノードは多く存在し、ときにはモバイルノードが有線通信を行うことも (稀ではあるが) ある。
次に、本節で焦点を当てるのはネットワーク層におけるモビリティである。つまり、あるネットワークから別のネットワークに移動するノードに関する問題を考える。同じ IEEE 802.11 ネットワークに属する二つのアクセスポイントの間を移動するノードは IEEE 802.11 特有の仕組みによって対処され、セルラーネットワークも同様の仕組みを持つ。しかしインターネットのような大規模で不均一なシステムでは、ネットワークをまたいだモビリティのサポートが必要となる。
4.5.2 モバイル IP
現代のインターネットアーキテクチャにおいて、モバイルホストに対するパケットのルーティングという問題に対処するための主要な仕組みはモバイル IP (Mobile IP) である。モバイル IP はいくつかの新たな機能を追加しつつも、非モバイルホストおよび大部分のルーターには変更が必要にならない ── そのため段階的な配備が行える。
モバイルホストは永続的な IP アドレスを一つ持つと仮定される。この永続的な IP アドレスをホームアドレス (home address) と呼び、ホームアドレスのネットワークプレフィックスが表すネットワークをホームネットワーク (home network) と呼ぶ。他のホストがモバイルホストに初めてパケットを送るときはホームアドレスが利用される。ホームアドレスは変更されないので、ホストが動き回る場合でも長く実行されるアプリケーションから安全に利用できる。ホームアドレスはホストの永続的な識別子と言える。
ホストが動き回ってホームネットワークを離れ、新たな外部ネットワーク (foreign network) に入ったとする。このときホストはそのネットワークにおける新しいアドレスを DHCP などの手段で取得する。このアドレスはホストが新たなネットワークに入るたびに変更されるので、ホストの位置指定子と言える。ここで重要な点として、外部ネットワークで新しいアドレスを取得したとしてもホストはホームアドレスを失わない。これから見るように、移動しながら通信を保持する機能においてホームアドレスは重要な役割を果たす。
DHCP はモバイル IP とほぼ同時期に考案されたので、モバイル IP の規格の初期バージョンは DHCP を必須としていない。ただ現在では DHCP はユビキタスである。
ネットワークにモビリティのサポートを追加するとき大部分のルーターはそのままとなるものの、少なくとも一つのルーターには新しい機能が必要になる。このモビリティ用の機能を持つノードをモバイルノードのホームエージェント (home agent) と呼ぶ。このルーターはモバイルホストのホームネットワークに位置する。一部のケースでは、外部エージェント (foreign agent) と呼ばれる別のルーターにも追加の機能が必要になる。外部エージェントはモバイルノードがホームネットワークから離れたときに接続するネットワークに位置する。これから外部エージェントが使われる場合のモバイル IP の動作をまず見ていく。説明に使う例を図 123 に示す。この図にはホームエージェントと外部エージェントも含まれている。
ホームエージェントと外部エージェントはどちらも、自身が属するネットワークに自身の存在を知らせるエージェント広報メッセージを定期的に送信する。モバイルホストは新しいネットワークに参加するとき広報を要求することもできる。ホームエージェントからの広報を受け取ることで、モバイルホストはホームネットワークを離れる前にホームエージェントのアドレスを学習する。外部ネットワークに接続したモバイルホストは外部エージェントの広報を受け取り、自身のホームエージェントのアドレスを外部エージェントに渡すことで自身を登録する。これを受けて外部エージェントは新しいモバイルホストのホームエージェントと連絡を取り、気付アドレス (care-of address) を知らせる。通常は外部エージェントの IP アドレスが気付アドレスとなる。
モバイルホストにパケットを送信しようと思った任意のホストは、当然そのモバイルノードのホームアドレスを宛先にしてパケットを送信する。そのパケットは通常の IP 転送を通じてモバイルノードのホームネットワーク (ホームエージェントが属するネットワーク) に到着する。このとき、これ以降のパケット転送処理は次の三つの部分に分割できる:
-
ホームエージェントがモバイルノードに宛てられたパケットを横取りする。
-
ホームエージェントが外部エージェントにパケットを届ける。
-
外部エージェントがモバイルノードにパケットを届ける。
図 123 を見ただけだと、一つ目の問題は簡単だと思うかもしれない。この図では送信側ホスト (対向ノード) とホームネットワークを結ぶ唯一の経路にホームエージェントが含まれるので、モバイルノードに宛てられたパケットは必ずホームエージェントに到達する。しかし対向ノードがネットワーク 18 の中に存在していたり、ネットワーク 18 に別のルーターが存在して任意のパケットがホームエージェントを通るとは限らなかったりしたら、どうするべきだろうか?
この問題を解決するために、ホームエージェントはプロキシ ARP (proxy ARP) と呼ばれるテクニックを使ってモバイルノードに変装する。プロキシ ARP の動作は基本的に通常の ARP と同様だが、ホームエージェントは ARP メッセージに自身の IP アドレスではなくモバイルノードの IP アドレスを入れて送信する。そのメッセージのハードウェアアドレスにはホームエージェントのものが指定されるので、同じネットワークの全てのノードでホームエージェントのハードウェアアドレスとモバイルノードの IP アドレスの関連付けが作成される。細かい点を指摘しておくと、このプロセスでは ARP 情報がネットワークの他のノードでキャッシュされる事実が重要な意味を持つ。元々のキャッシュをすぐに無効化するために、ホームエージェントはモバイルノードが外部エージェントに登録されたことを認識したら可能な限り早く ARP メッセージを発行しなければならない。このとき送られる ARP メッセージは通常の ARP 要求に対する返答ではないので、GARP (gratuitous ARP, 無根拠 ARP) という名前が付いている。
二つ目の問題は横取りしたパケットを外部エージェントに届ける問題なので、以前に説明した IP トンネルのテクニックが利用できる。ホームエージェントは受け取ったパケットを外部エージェントに宛てられた IP ヘッダーで包み、それをインターネットワークに送り出すだけで済む。こうすれば他のルーターは外部エージェントの IP アドレスが付いた IP パケットを目にするので、通常通りに転送が行われる。ホームエージェントが自身と外部エージェントの間に IP トンネルを構築し、受け取ったパケットをそのトンネルにそのまま放り込むと考えることもできる。
自身に宛てられたパケットを受け取った外部エージェントは、余分な IP ヘッダーを取り除いてモバイルノードのホームアドレスに宛てられた IP パケットを取り出す。明らかに、外部エージェントはこのパケットを通常の IP パケットとして扱ってはいけない: パケットはホームネットワークに戻ってしまう。そうではなく、パケットに記載されたホームアドレスに対応する登録済みモバイルノードの IP アドレスを本当の宛先として認識する必要がある。そして外部エージェントはモバイルノードのハードウェアアドレス (例えばイーサネットアドレス) に宛ててパケットを送信する。このハードウェアアドレスはモバイルノードの登録プロセスで学習される。
以上の手続きをよく観察すると、外部エージェントとモバイルノードが同じボックスの中に存在できることが分かる。つまり、モバイルノード自身が外部エージェントの機能を持っていても構わない。ただしこれを行うには、モバイルノードが外部ネットワークのアドレス空間に属する IP アドレスを (DHCP などで) 動的に取得できる必要がある。このアドレスは気付アドレスとして使われ、図 123 の例ではネットワーク 12 を表すプレフィックスを持つ。このアプローチには、外部ノードを持たないネットワークにモバイルノードが接続できるという魅力的な特徴がある: このため、外部ネットワークで DHCP が使われることを仮定すれば、ホームエージェントの追加とモバイルノードへの新しいソフトウェアのインストールだけでモビリティを達成できる。
逆方向の (モバイルノードから固定ノードに向かう) トラフィックはどうだろうか? 実は、こちらの問題はずっと簡単になる。モバイルノードは IP パケットの宛先フィールドに固定ノードの IP アドレスを、送信元フィールドに自身のホームアドレスを設定すれば、正しいパケットが固定ノードまで通常の方法で転送される。もちろん、通信を行う両方のノードがモバイルなら、ここまでに説明した手続きが両側で行われる。
モバイル IP における経路最適化
上述のアプローチには大きな欠点が一つある: 対向ノードからモバイルノードまでの経路が最短路よりはるかに長くなる可能性がある。最も極端な例は対向ノードとモバイルノードが同じネットワークにあり、モバイルノードのホームネットワークがインターネットのはるか遠くにある場合である。このとき、対向ノードがモバイルノードに宛てて送信するパケットは全て一旦インターネットを通ってはるばるホームネットワークに向かい、そこからモバイルノードと同じネットワークにある外部エージェントに返ってくる。対向ノードとモバイルノードが同じネットワークに存在するためにパケットを直接送信できることを対向ノードが認識できるのが明らかに望ましい。より一般的なケースでは、パケットを対向ノードからモバイルノードにホームエージェントを経由させずに可能な限り直接的に届けることが目標となる。この問題は三角ルーティング問題 (triangle routing problem) と呼ばれる。ホームエージェントを経由する対向ノードからモバイルノードへの路が三角形の二辺となり、二つのノードを直接結ぶ路が残りの一辺となるからである。
三角ルーティング問題を解決する基本的なアイデアは、対向ノードにモバイルノードの気付アドレスを知らせるというものである。こうすれば、対話ノードは外部エージェントへのトンネルを独自に作成できる。これは上述のプロセスの最適化として扱われる。もし送信側が気付アドレスを学習してトンネルを作成するのに必要なソフトウェアを持っているなら、経路は最適化される。そうでなければ、最適でない経路が使われる。
自身がサポートするモバイルノードに宛てられたパケットを受け取ったホームエージェントは、送信側が最適な経路を使っていないと判断できる。このとき、ホームエージェントはデータパケットを外部エージェントに送信するのに加えて「バインディング更新 (binding update)」メッセージを送信側に送り返す。このメッセージを受け取った送信側は (経路の最適化に対応しているなら) バインディングキャッシュ (binding cache) を更新する。バインディングキャッシュにはモバイルノードアドレスから気付アドレスへの対応付けが含まれる。この送信元が次に同じモバイルノードにパケットを送信するときは、キャッシュからバインディングを見つけてパケットを外部エージェントに直接送信する。
この手法には明らかな問題が一つある: モバイルホストが新しいネットワークに移動すると、バインディングキャッシュが無効になる。無効なキャッシュエントリーが使われると、外部エージェントは自身に登録されていないモバイルノードに宛てられたパケットをトンネルから受け取ることになる。この場合、外部エージェントは「バインディング警告 (binding warning)」メッセージを送信側に送り返してキャッシュエントリーの利用を止めるよう送信側に指示する。ただし、この解決法は外部エージェントとモバイルノードが別々のときにしか使えない。そのため、一定時間が経過したキャッシュエントリーは削除する必要がある。削除するまでの正確な時間はバインディング更新メッセージで指定される。
上述したように、モバイルノードのルーティングでは興味深いセキュリティの課題が生じる。ここまでの説明でモバイル IP の動作を理解したなら、その課題はさらに分かりやすくなる。例えば、インターネットワーク内の他のノードに宛てられたパケットを横取りしようと思った攻撃者は、そのノードのホームエージェントに向かって「このノードの新しい外部エージェントは自分だ」と伝えることができる。このため、明らかに何らかの認証機構が必要になる。
IPv6 におけるモビリティ
IPv4 と IPv6 ではモビリティのサポートに大きな違いがある。最も重要なこととして、IPv6 では規格を最初に策定するときからモビリティのサポートを考慮できたので、段階的に配備を行う必要性から生じる問題を回避できた (IPv6 自身が大きな段階的な配備の問題を抱えており、それが解決されればモビリティのサポートがパッケージの一部として提供される、と言った方が正確かもしれない)。
IPv6 に対応する全てのホストは外部ネットワークに接続するときに (IPv6 仕様で規定される仕組みを使って) IP アドレスを取得できるので、モバイル IPv6 では外部エージェントが存在せず、全てのホストが外部エージェントとして振る舞うために必要な機能を持つ。
IPv6 がモバイル IP に与えるこれとは異なる興味深い影響として、本章で以前に説明した拡張ヘッダーの柔軟性がある。拡張ヘッダーは上述した最適化経路を伝えるシナリオで利用される。気付アドレスにあるモバイルノードまでパケットをトンネルするのではなく、IPv6 ノードは気付アドレス宛の IP パケットにホームアドレスを格納したルーティングヘッダーを付けて送信する。このヘッダーは中間のノードでは無視される1ものの、このヘッダーのおかげでモバイルノードは受け取ったパケットをホームアドレスに対して送信されたものとして扱えるようになる。そのため、上位層のプロトコルに対して IP アドレスが固定されているかのように振る舞うことが可能になる。トンネルではなく拡張ヘッダーを使うことで、帯域や処理能力の節約にもなる。
最後に、モバイルネットワークの分野には未解決の問題が多く存在することを指摘しておく。バッテリー容量が制限された小型デバイスの設計において、モバイルデバイスの消費電力はまずます重要になっている。また、アドホックモバイルネットワーク (ad hoc mobile network) の問題 ── 固定されたノードが無い状況でモバイルノードの集合からネットワークを構成する問題 ── も特別な種類の課題を持っている。センサーネットワーク (sensor network) と呼ばれる種類のモバイルネットワークは特に難易度が高い。典型的なセンサーは小さく、安価で、たいていはバッテリー駆動なので、非常に低い電力消費と制限された処理能力という問題にも対処しなければならない。さらに、無線通信とモビリティは強く関連付いているので、止むことのない無線テクノロジの進化がモバイルネットワークに新しい課題と機会を提供し続けている。
-
訳注: これはルーティングヘッダーの通常の動作である。ルーティングヘッダーはパケットが通らなければならない中継点を指定するために利用されるが、ルーティングヘッダーには「現在の宛先に到達するまでに経由すべき中継点のアドレス」ではなく「現在の宛先に到着した後に宛先とすべきアドレス」または「これまでに通過した中継点のアドレス」が (一つ以上) 格納される。 ↩︎