トランスレータの役割というと,「IPv4ヘッダーとIPv6ヘッダーの変換」や「IPv4アドレスとIPv6アドレスの変換(マッピング)」を思い浮かべるかもしれません。しかしながら,これらだけでは不十分です。

 トランスレータは,きちんと通信を継続できる形でIPv4ヘッダーとIPv6ヘッダーを変換しなくてはなりません。そもそも,トランスレータがパケットを変換するには,パソコンなど端末が送ったパケットがトランスレータに届かなくてはなりません(図1)。トランスレータは,パケット変換用のアドレスやプレフィックスを持っています。これらのアドレスやプレフィックスを端末に通知し,端末はここをあて先アドレスとして通信します。こうしたアドレス変換や通知のしくみを組み合わせることで,IPv4パケットとIPv6パケットの変換が可能になるのです。

図1●パケット変換を実現するためのしくみ
図1●パケット変換を実現するためのしくみ
ヘッダーやアドレスの変換のほかに,変換対象のパケットをトランスレータに到達させることや,あて先アドレスを通知する役割と連携することで相互に通信できるようになる。

 本連載では今回から,これらのしくみを解説していきます。今回と次回は,IPv4パケットとIPv6パケットの変換について説明します。前回(第1回)で説明した通り,IPv4とIPv6ではヘッダー・フォーマットが異なります。いちばん大きな違いは,IPv6では拡張ヘッダーが導入されたことです。また,IPv6で新規に追加または削除されたフィールドも存在します。トランスレータは,IPv4とIPv6のネットワークの境界に置かれパケットを双方向に変換するため,二つのプロトコルの違いを吸収する必要があります。

IPヘッダーの変換内容を理解する

 IPv6のヘッダー・フォーマットは,IPv4のヘッダー・フォーマットに比べて簡略化されたものになっています。IPv6のヘッダーは常に必要となるものだけを標準ヘッダーとして残し,そうでないヘッダーは拡張ヘッダーとして必要に応じて付加するようになっているのです。これにより,IPv6はヘッダーをシンプルに保てるほか,新規機能を追加する際には拡張ヘッダーを定義すればよいので,拡張性に優れています。

 トランスレータは,それぞれのプロトコルのフィールドを理解し,相互に変換する必要があります。ヘッダーの中には,IPv6とIPv4のどちらか一方のプロトコルにのみ存在するフィールドがあります。トランスレータは,こうしたフィールドを変換する際に破棄します。パケット変換そのものを実施しないこともあります。

 それでは,トランスレータがヘッダーをどのように変換するのかを見ていきましょう。主に,IPv4ヘッダーをIPv6ヘッダーに変換するケースを例に説明します(図2)。双方のプロトコルでフォーマットが異なる部分は,それぞれのフォーマットに則した形に変換します。

図2●トランスレータによるIPv4ヘッダーとIPv6ヘッダーの変換
図2●トランスレータによるIPv4ヘッダーとIPv6ヘッダーの変換
[画像のクリックで拡大表示]

●IPv4とIPv6のVersionフィールド
IPプロトコルの種類が入ります。IPv4では4,IPv6は6なので数字を変換します。

●IPv4のTotal LengthおよびHeader Lengthフィールド
Total Lengthはパケット全体の長さ,Header Lengthはヘッダーの長さを示します。Total LengthからHeader Lengthを引いた値は,IPv6ヘッダーでデータ部全体の長さを示すPayload Lengthになりますので,これを基に変換します。

●IPv4のType Of Serviceフィールド
IPパケットの優先度などを設定するType Of Serviceフィールドは,IPv6ではTraffic Classに相当しますので,ここへコピーします。

●IPv4のTime To Liveフィールド
通過するルーターの台数(ホップ数)の制限を設定するTime To Liveフィールドは,IPv6のHop Limitフィールドに相当しますので,ここへコピーします。そして,パケットがトランスレータを通過することは,ルーターを通過することと同じ意味になりますので,1を減算します。

●IPv4のProtocolフィールド
上位プロトコルの種類を設定するProtocolフィールドは,IPv6のNext Headerフィールドに相当しますので,ここへコピーします。

●IPv4のIdentification,Flags,Fragment Offsetフィールド
Identification,Flags,Fragment Offsetの各フィールドは,IPパケットの通り道が途中で狭くなったときに分割するために使います。これらはIPv6の拡張ヘッダーの一つであるFragmentヘッダーへ変換します。ここは後でまた説明します。

●IPv4のHeader Checksumフィールド
IPv4で誤り訂正に使われるHeader Checksumフィールドに相当するものはIPv6にはありませんので,ここは変換しません。

●IPv6のFlow Labelフィールド
IPv6でIPパケットを分類するために使われるFlow Labelフィールドに相当するものはIPv4にはありませんので,ここは変換しません。

●IPv4とIPv6のSource AddressフィールドおよびDestination Addressフィールド
Source Addressには送信元アドレス,Destination Addressにはあて先アドレスが入ります。IPv4ヘッダーとIPv6ヘッダーのどちらにもありますので変換します。