Mobile IP

Mobile IP（モバイル アイピー）は、通信機器（ノード）が実際につながっているネットワークに関わらず、いつでも一意のIPアドレスで接続（アクセス）できるようにするプロトコルである。ISOのOSI参照モデルではネットワーク層（レイヤ3）にあたる。
現在のインターネットで用いているTCP/IP（ティーシーピーアイピー）は、IPアドレスが識別子であると同時に、ネットワーク上の位置も意味している。そのため、あるネットワークに接続しているノードを、別のネットワークに繋ぎかえると、IPアドレスを変えることになる。IPアドレスを変えると、互いのIPアドレス(とポート番号)で接続（セッション）を識別しているTCPの接続（セッション）が継続不可能になることになる。IPアドレスが不変であることを前提にしたサービスを待ち受けているサーバ用途には使えない。
Mobile IPは、ノードに一意のアドレスを割り当て、TCP/IP処理（スタック内）で実際に使用しているIPアドレスと入れ換えることによって、上位層（レイヤ）や通信相手に対し、どこのネットワークでも割り当てた一意のアドレスで通信しているように見せる仕組みを提供する。これにより、移動ノードでのサービス待ち受けや長時間接続（セッション）の継続が可能になる。

**用語**
 移動ノード(mobile node) :接続するネットワークが変わるノード。ネットワークが変わってもIPアドレスを変えない場合を検討する。
 ホームエージェント(home agent) :移動ノードが外部ネットワーク（リンク）にいるときに移動ノード宛のパケットを捕獲して移動ノードの現在位置に登録する。留守番役
 外部エージェント(foreign agent) :外部リンクで移動ノードからの移動要求を中継したり、パケットを配送する等移動ノードをサポートする。
 対向ノード(correspondent node) :移動ノードと通信しているノードを便宜上こう呼ぶ。特にMobile IPv6では経路最適化を行う場合には、対向ノードでも標準のIPv6には入っていないMobileIPv6用の拡張ヘッダに対応している必要がある。
 ホームアドレス(home address) :移動ノードに割り当てられる不変のアドレス
 気付けアドレス、ケアオブアドレス(care-of address) :移動ノードが実際に通信に使用しているアドレス
 ホームリンク(home link) :ホームアドレスと同じネットワークアドレスを持つネットワーク。ここにホームエージェントを置いている。
 外部リンク(foreign link) :ホームリンク以外の全てのネットワーク。移動ノードが移動してくる。

**プロトコル概要**
Mobile IPにはIPv4用のものとIPv6用のものがあり、移動ノードが外部にいるときにホームエージェントに現在の位置を通知し、ホームエージェントが移動ノード宛(ホームアドレス宛)のパケットを実際の移動ノードの位置(気付けアドレス宛)に転送する。
実際にはIPv4とIPv6という違い以上に、実際の動作や用語など、多々異なる部分もあるので、ここでは別々に見ていくこととする。

**Mobile IPv4**
ホームリンクにはホームエージェントを置いている。
*移動ノードにはいつでもホームアドレスがついており、移動ノードがホームリンクにいるときは、通常のIPノードとまったく同じ動作をする。
*外部リンクには外部エージェントを置いていることもある。
*ホームエージェントや外部エージェントは、そのリンク上にエージェントの存在を知らせるために、ICMP Router Discovery(RFC1256)を拡張した、エージェント広告(Agent Advertisement)を行っている。これを受信することで移動ノードは、自分がいまどのリンクにいるのかを知ることができる。
Mobile IPの動きは以下の通り。
#移動の検知: 移動ノードはネットワークに流れているエージェント広告を聞いて、自分が今外部リンクにいるのかホームリンクにいるのかを知る。外部リンクにいる時は、外部エージェントの広告よりその気付けアドレスとMACアドレスを知ることができる。
#移動登録: 移動ノードはホームアドレスと気付けアドレスを外部エージェントを通してホームエージェントに登録パケットを出す(登録要求; Registration Request)。
#ホームエージェントはその登録要求をうけて、ホームアドレスと気付けアドレスの組を管理しているデータベース(バインディング; binding)を更新(または登録)する。もしこの登録要求が新規登録なら、ホームエージェントはホームリンクに対し、そのホームアドレスのMACアドレスがホームエージェントであるようなGratuitous ARPパケットを出す。これによって、そのネットワークいるルータを含めたノードのARPキャッシュを更新する。また今後ホームアドレスへのARP requestに対してはホームエージェントが答えるようになるため、ホームアドレス宛パケットをホームエージェントが捕獲できるようになる。
#移動ノードへのパケットの配送: ホームアドレス宛のパケットがホームリンクまで届くと、それは前記の仕組みによりホームエージェントが捕獲する。ホームエージェントは自身が管理しているバインディングから、そのホームアドレスをもつ移動ノードの実際の位置(気付けアドレス)がわかるので、そこに向けてIP in IPトンネリングを行う。
#外部エージェント、移動ノード間は両者とも既に相手のMACアドレスがわかっているので、外部エージェントはトンネルを解除した上で、移動ノードに転送する。移動ノードには宛先が自分のホームアドレス宛のパケットが到着する。
#移動ノードからは、どこのネットワークからでも送信元アドレスをホームアドレスにして送信する。一般にIPパケットは宛先アドレスだけで配送するので、既存のネットワーク変更なしに配送するが、そのネットワークでingressフィルタリングを設定している場合は、一度ホームエージェントにトンネリングした上で、そこから配送する方法もある。
ここでは外部リンクに外部エージェントが存在する場合の概要を紹介しているが、移動ノードに外部エージェント機能を組み込んだ、共有気付けアドレス(co-located care-of address)という方式もある。
これは外部リンクに移動した移動ノードが自力でDHCPなどで実際の接続可能なアドレスを取得し、登録要求、パケット転送等を行う。このとき移動ノードには接続可能な気付けアドレスと不変のホームアドレスが共存していることになる。

**Mobile IPv4で使うパケット**
登録要求(Registration Request)、登録確認(Registration Reply)などの制御メッセージは送信元/送信先ともにポート番号434のUDPが使用される。

**Mobile IPv4のセキュリティ**
To Be Written Soon

**Mobile IPv6**
Mobile IPv6のMobile IPv4との大きな違いは以下の通りである。
*外部エージェントがない。全ての移動ノードは移動登録/パケット転送等の処理を行う。
*制御メッセージはUDPではなく、新たに設けたモビリティヘッダで運ぶ。
*制御メッセージ名を変更している。
*ingressフィルタリングを避けるために、IPv6の宛先オプションとして、ホームアドレスオプションというオプションを新設した。
*経路最適化が基本スペックの中に定義されている。また経路最適化を行うために、対向ノードとの間のセキュリティ確保のためにreturn routabilityという仕組みを導入した。
*ホームエージェントのアドレスの自動発見
Mobile IPv6のシーケンスは以下の通り
#移動の検知IPv6ルータがリンクに送信している、ルータ広告(router advertisement)を聞いて新しいネットワークに移動したことを知り、また同時にこのルータ広告からIPv6のアドレス自動設定の仕組みによって気付けアドレスを取得する。
#移動ノードがホームエージェントアドレスを知らない場合、ホームリンクのあるエニキャストアドレスにホームエージェント発見要求パケットを送信し、ホームエージェントの一覧を得る。
#移動ノードは自分で保持しているホームエージェントの一覧より一つを選び、登録要求(バインディングアップデート; binding update)パケットを送信する。気付けアドレスはこのパケットの送信元アドレス、ホームアドレスはホームアドレスオプションに入れて送信する。
#ホームエージェントはホームアドレスと気付けアドレスを自身で管理しているデータベース(バインディングキャッシュ; Binding cache)を更新し、もしこの登録要求が新規登録なら、ホームエージェントはホームリンクに対し、そのホームアドレスのMACアドレスがホームエージェントであるようなUnsolicited Neighbor Advertisementパケットを出す。これによって、そのネットワークいるルータを含めたノードの近隣キャッシュを更新し、また今後ホームアドレスへの近隣探索要求に対してはホームエージェントが答えるようになるため、ホームアドレス宛パケットをホームエージェントが捕獲できるようになる。
#移動ノードの現在位置を知らない、すなわちバインディングキャッシュを持っていない対向ノードから送出されるパケットはホームリンクに到達し、ホームエージェントに捕獲され、移動ノードにトンネリングされる。移動ノードは、トンネリングをほどき、ホームアドレス宛のパケットを受け取る。
#移動ノードの現在位置を知っている、すなわちバインディングキャッシュを持つ対向ノードは、ホームエージェントを経由せずに直接移動ノードにパケットを送ることができる。これが経路最適化である。このパケットは送信先アドレスは移動ノードの気付けアドレスになり、更にIPv6の経路オプションが付き、そこにホームアドレスが入る。このパケットは移動ノードの気付けアドレスに到着すると、経路オプションに従って最終到着アドレスをホームアドレスに設定して再び送信処理をすると、移動ノードのホームアドレスに到着する。
#移動ノードからのパケットには、ソースアドレスに気付けアドレス、宛先オプションにホームアドレスオプションを付加してそこにホームアドレスが入り、通常のIPルーティングに従って配送する。しかし、このパケットにはIPv6標準ノードでは解釈されないホームアドレスオプションが入っているので、相手ノードによってはこのパケットを拒絶する(ICMP6 parameter problemが返ってくる)。このような対向ノードに対しては、ホームエージェントにトンネルし、そこから配送する。
#パケットをホームエージェントから配送する等、対向ノードがバインディングキャッシュを持っていないと認識した移動ノードは、その対向ノードにバインディングアップデートを送信することができる。

**Mobile IPv6のセキュリティ**
Mobile IPv6では、移動ノード-ホームエージェント間、移動ノード-対向ノード間で別々のセキュリティ確保方式を採用している。
これは、もともと移動ノードのホームアドレスはホームリンクから切り出されたものである以上、移動ノードとホームエージェント間には何らかの信頼関係が確保しうるが、対向ノードは移動ノードとは全く関係のないノードなので、そのような信頼関係は持てない、という前提による。
*移動ノード - ホームエージェント間
この場合は、モビリティヘッダをIPsecのESPで保護する。
*移動ノード - 対向ノード間
Return routabilityと呼ばれる新しい仕組みを導入している。

**標準化**
標準化はIETFで行われた。Mobile IPv4は移動プロトコル関係が分化する前のmobileip wgにて基本部分の標準化を行い、その後mip4 wgに引き継がれた。Mobile IPv6はmip6 wgにて標準化が行われた。

**規格類**
5944 - IP Mobility Support for IPv4, Revised
*6275 - Mobility Support in IPv6
*4636 - Foreign Agent Error Extension for Mobile IPv4
*4721 - Mobile IPv4 Challenge/Response Extensions (Revised)

**動向**
Mobile IPv4のRFCを1996年に発行し、Mobile IPv6のRFCは2004年7月に発行した。現在までにMobile IPは、PHSの基地局など一部のネットワーク管理部分を除いて、普及している報告は少ないdate=2019年4月。これには次のような理由が考えられる。
#現在利用されているインターネットのプロトコルのほとんどは短い間にセッションが終了してしまうものがほとんどであるdate=2019年4月。そのため、あまり長時間のセッションを持ち運びたいと言う要求はない。
#もともとダイアルアップ接続の頃から、多くのユーザーはノードのIPアドレスは頻繁に変わるものだという前提でインターネットと接してきているdate=2019年4月。そのため多くのアプリケーションもIPアドレスを識別子としては利用しておらず、何らかの理由でノードの同定が必要な場合でも別の手段でアプリケーションで処理している場合がある。
#上位層ではSIPというプロトコルによる切り替えを実現している。
#物理層、データリンク層でも移動に対応した方式について、それぞれの層の識別子を利用した移動の提案がある。

**脚注**

**関連項目**
 MANET

**外部リンク ==