こんにちは、小澤です。
今回も、教科書「プロフェッショナルIPv6」に従って解説していきます。今回は、IPv6パケット、特にIPv6ヘッダの構成について取り上げます。教科書では「4.1 IPv6ヘッダの各フィールド」(93ページ〜103ページ)の部分です。IPv6の挙動を理解するためには、IPv6ヘッダのフォーマットと各フィールドの意味を把握することが重要です。
なお、「プロフェッショナルIPv6」の電子書籍は無償でダウンロードできます。以下をご覧ください。
https://booth.pm/ja/items/913273
IPv6パケットの主要な構成
まず、IPv6パケットの主要な構成要素について説明することにしましょう。IPv6パケットは主に3つの部分から構成されます。
1. IPv6ヘッダ(基本ヘッダ)
IPv6ヘッダには、送信元および宛先のIPv6アドレス、トラフィッククラス、ペイロード長などのIPv6パケットの制御情報が含まれています。
IPv6ヘッダとIPv4ヘッダは異なる設計思想に基づいているので、IPv6ヘッダをIPv4ヘッダを見比べると、双方には直接の互換性がないことが分かります。IPv6ヘッダとIPv4ヘッダの主な違いは以下です。
- アドレス長…IPv4が32ビットであるのに大して、IPv6は128ビットです。
- ヘッダの最適化…IPv6では、エラーチェックやフラグメント関連のフィールドなど、一部のフィールドが取り除かれています。
- 拡張性…IPv6には拡張ヘッダがあり、新しい機能やオプションを追加することが可能です。
- TTLとホップリミット…IPv4のTTLに相当するものが、IPv6では「ホップリミット」として扱われています。
2.拡張ヘッダ
IPv6パケットには、IPv6ヘッダに続いて0個以上の拡張ヘッダが存在する場合があります。拡張ヘッダは可変長のヘッダとして設計されており、さまざまなオプションや追加の情報を持つことができます。IPv6ヘッダをシンプルに保ちつつ、拡張ヘッダを使用して追加の機能を提供します。具体的な拡張ヘッダの例としては、Hop-by-Hop オプションヘッダ、ルーティングヘッダ、フラグメントヘッダなどがあります。次回、拡張ヘッダについて詳しく解説します。
3.ペイロード
ペイロードは実際のデータを含む部分であり、通常はトランスポート層のデータがここに格納されます。ペイロードにはアプリケーションデータやメッセージが含まれます。
IPv6は、IPヘッダでのチェックサムの廃止や、ヘッダを固定長にしたうえで拡張ヘッダという仕組みにしたという工夫が行われています。
IPv6ヘッダ
それでは、IPv6ヘッダについて説明しましょう。IPv6ヘッダの構成は次のようになっています。
- バージョン(4ビット)
使用しているIPプロトコルのバージョンを示すために使われるので、IPv6なので、常に6(0110)です。
- トラフィッククラス(8ビット)
トラフィッククラスは、「パケットの優先度を示すために使われるフィールド」です。パケットの優先順位やサービスの質(QoS)を指定するのに使われます。
- IPv6ヘッダ内にある8ビットのフィールド
- パケットの優先順位を表す数値が設定される
- ルータがパケットを優先制御するのに利用できる
- QoSを実現するために使われる
要するに、このトラフィッククラスの値によって、パケットがどの程度優先的に転送されるべきかが決まります。ルータはこの値を見て、重要なパケットを優先的に転送したり、遅延を小さく保つことができます。
- フローラベル (20ビット)
フローラベルとは、「同じ通信フローに属するパケットを識別するためのラベル」です。
- 20ビットの長さを持つフィールド
- 送信元が任意に設定できる
- 同じフローラベルのパケットはまとめて処理される
- ルータがパケットの転送を最適化できる
- フロー単位の通信を実現するために使われる
フローラベルを設定することで、ルータはパケットがどの通信フローに属しているかを識別できます。同じフローのパケットは、経路制御やキューイングなどの処理をグループとして最適化できるようになります。例えば、同じフローラベルのパケットは同じ経路で転送したり、順番に遅延させずに送信することができます。IPv6ではフローの概念が重視されているため、フローラベルが設けられました。
- ペイロード長(16ビット)
ペイロード長は、「IPv6パケットのデータ部の長さ」を示すフィールドです。
- 16ビットのフィールド
- バイト単位でデータ部の長さを示す
- データ部には上位層ヘッダと実データが含まれる
- データ部の長さをルータがすぐに把握できるようにする
- パケットの分割や再構成を行う際に利用される
IPv6では可変長のパケット長を扱えるため、ペイロード長フィールドが必要になります。ルータはこの情報を見て、パケットのデータ部にどのくらいのデータが含まれているかを把握でき、パケットの転送処理を適切に行うことができます。
- ネクストヘッダ(8ビット)
ネクストヘッダ(次ヘッダ)は、「次に続く拡張ヘッダーの種類を示すフィールド」です。
- 8ビットのフィールド
- 次に存在する拡張ヘッダーの種類を数字で示す
- TCP/UDPなどの上位層ヘッダーも示すことができる
- 複数の拡張ヘッダーを連結できるために必要
- ルータがパケットを正しく処理できるようにする
IPv6では拡張ヘッダをフレキシブルに連結できるので、その連結されたヘッダの種類と順番を示す情報を提供するのがネクストヘッダです。ルータはこの情報をもとに、拡張ヘッダや上位層ヘッダを順に適切に処理します。
- ホップリミット(8ビット)
ホップリミットとは、「パケットが通過できるルーターの上限数」を示すフィールドです。IPv4のTTLと同様の目的で使用されます。
- 8ビットのフィールド
- ルータを通過するたびに値が1ずつ減算される
- 初期値は通常64に設定される
- 値が0になるとパケットは破棄される
- パケットがループするのを防ぐために利用
ホップリミットは、パケットがルータを何回通過できるかを制限する仕組みです。値が0になればそれ以上転送できないため、パケットがネットワーク内でループされることを防ぎます。ホップリミットは、IPv6パケットのルーティングを安定稼働させる上で必要不可欠な働きをしています。
- 送信元アドレス(128ビット)
送信元アドレスは、「パケットの送信元を示すIPv6アドレス」のことです。
- IPv6ヘッダ内の128ビットのフィールド
- 128ビットのIPv6アドレスが設定される
- パケットの送信元を一意に特定する情報
- 宛先アドレスと対になる重要な情報
- ルータがパケットを適切に配送するために必要
送信元アドレスには、パケットを送信したノードのIPv6アドレスが設定されます。ルータはこのアドレスから、パケットの送信元を特定できるため、適切なインターフェースにパケットを転送できます。
- 宛先アドレス(128ビット)
宛先アドレスは、「パケットの送信先を示すIPv6アドレス」のことです。
- IPv6ヘッダ内の128ビットのフィールド
- 128ビットのIPv6アドレスが設定される
- パケットの送信先を一意に特定する情報
- 送信元アドレスと対になる重要な情報
- ルータがパケットを適切に配送するために必要
宛先アドレスには、パケットを受信するノードのIPv6アドレスが設定されます。ルータはこのアドレスから、パケットの送信先を特定します。したがって、宛先アドレスも送信元アドレスと同様に、IPv6パケットが正しい相手に届けられるかどうかを決定する最も基本的な情報です。
まとめ
今回は、IPv6ヘッダについて説明しました。IPv6の基本ヘッダはシンプルな構成であり、効率的なネットワーク通信をサポートする設計となっています。このヘッダの構造とその重要性を理解していただけたかと思います。
次回は、IPv6拡張ヘッダについて詳しく説明します。拡張ヘッダを使用することで、さらなる柔軟性と多くの機能を追加できます。引き続きご覧ください。
<お知らせ>
IPv6の学習のチェックにIPv6基礎検定はいかがでしょうか?全国350か所で通年受験が可能です。詳細は以下をご覧ください。
https://network-engineer.jp/ipv6basic