前回までは、トランスレータの動作概念を説明してきました。今回は、変換の際にIPv4アドレスをIPv6アドレスで表現する方法を紹介します。

 本連載の第2回で、トランスレータは「送信元にアドレスを通知する」「パケットを(トランスレータに)到達させる」「アドレスを変換する」「プロトコルを変換する」「アドレス解決をする」などの機能がかみ合って動作すると説明しました。今回説明する内容は、上記すべての機能に関連します。

 これまでIPv4アドレスをIPv6アドレスで表現する方法としては、IPv4-mappedアドレスおよびIPv4-translatedアドレスを使うものと、ネットワーク管理者が自分の管理するアドレス空間(Network-Specific Prefix)の中から任意に選択することのできるプレフィックスを用いるものがありました。前者は、「Stateless IP/ICMP Translation Algorithm(SIIT)」(RFC2765)で定義されています。後者は、「Network Address Translation - Protocol Translation(NAT-PT)」(RFC2766、廃止)や「An IPv6-to-IPv4 Transport Relay Translator(TRT)」(RFC3142)で紹介されています。

 さらにIETFでは、2008年の10月からトランスレータに関する議論か活発に行われており、このなかでIPv4アドレスをIPv6アドレスで表現する方法についても新たな提案が出されています。今回は、これまで定義されてきたものに加え、新しい提案も紹介したいと思います。

 IPv4のアドレスをIPv6のアドレスで表現するためには、プレフィックスを用います。いずれの手法もこの点は変わりません。なお今回のこれ以降の説明では、IPv4アドレスをIPv6アドレスで表現することを「アドレスのマッピング」と呼びます。では、具体的に見ていきましょう。

IPv4-mappedアドレスとIPv4-translatedアドレス

 SIITでは、アドレスのマッピングにIPv4-mappedアドレスとIPv4-translatedアドレスを定義しています。これら2種類のアドレスは、Well-Knownな(既知の)プレフィックスを利用します。

 IPv4-mappedアドレスは、IPv4ノードをIPv6アドレスで表す際に用います。具体的には、IPv6アドレスの最後の32ビットにIPv4アドレスを格納し、その前の96ビットを「0:0:0:0:0:ffff」とします。つまり「::ffff:/96」となります(図1のa)。

 IPv4-translatedアドレスは、IPv6ノードに割り当てたIPv4アドレスをIPv6で表すために用います。具体的には、IPv4アドレスの前に「::ffff:0:/96」を付加します(図1のb)。これらのプレフィックスは、付加したときにTCPやUDPのチェックサム値が元のアドレスを用いたときと同じ値になる性質を持っています。そのためトランスレータにおけるチェックサムの再計算が不要となり、トランスレータの処理が軽くなります。

図1●SIITで定義されているIPv4アドレスを表現するためのIPv6アドレス
図1●SIITで定義されているIPv4アドレスを表現するためのIPv6アドレス

 IPv4-translatedアドレスの説明は、SIITの仕組みを理解しないとわかりにくいかもしれませんので、これを簡単に説明しておきます。実はSIITでは、IPv6のノードにもIPv4のアドレスを割り当てる必要があります。ちょっと奇妙に聞こえるかもしれませんが、こうすることでIPv6とIPv4の通信の状態を管理する必要がなくなり、トランスレータの負荷が減ります。そのため、このような仕様になっているのです。