IPv6についてわかりやすく解説

ネットワーク

現在ではIPv6は普及してきていますが、10年ほどまでは全く普及していませんでした。

しかし、Iotの発展、世界中の人々がスマホ、パソコンを持つ世の中となってきました。

これまで使われていたIPv4のフォーマットではIPアドレスは約43億しかなく、世界中の人に対して一人一つ割り当てることもできない量となっています。

そこで、IPアドレスを増やすためにIPv6のフォーマットが作成されました。

IPv6のフォーマット

IPv6のフォーマットは以下のようになっています。

IPv4のフォーマットと比べてみると

IPv4とIPv6で一致しているのはバージョン、送信元IPアドレスと宛先IPアドレスのみとなっています。

IPv4で使われていたものがIPv6で使われていない理由はIPv4で使用していたものはルータや上位層(OSI参照モデル4層以上)で実行できるものだからです。

それでは、IPv6のフォーマットを一つ一つ見ていきましょう。

バージョン

バージョンは4bitで構成されています。

このバージョンの役割はIPv4と同じでIPv6を使っていることを示すために0110(二進数)が入っています。

トラフィッククラス

トラフィッククラスは8bitで構成されています。

トラフィッククラスはQoSを使うために設置されています。

QoSとは

QoSは音声通話やビデオ通話など重要なデータを送信する際に他のデータにネットワークを占有されないようにするためのものです。

QoSは優先度を決め、データ転送の品質を決めます。

重要なデータに優先度をつけられるため、重要なデータを喪失することなくネットワークを利用することができます。

トラフィッククラスは8bitの内6bitはDSCP、2bitはECNで構成されています。

DSCPはパケットの優先度を決める値です。

DSCPでは前半の3bitはトラフィックのクラスを表し、0~7まであり、値が大きいほど優先度が高くなります。

後半の3bitではパケットの破棄優先度を決めます。優先度の値が大きいほど破棄されやすくなります。

つまり、前半の3bitが大きく、後半の3bitが小さいほどパケットが破棄される可能性が少なく、重要なデータであることがわかります。

残りの2bitのECNではネットワークの混雑状況を通知する役割があります。

00であればECNをサポートしておらず、ネットワークの混雑状況を知ることができません。

01、10であればECNをサポートしていることを表しています。01と10の違いは独自のシステムやネットワーク機器を構築する場合にアプリごとに異なる制御をする場合に使うことはできますが、基本的に01、10は同じものと考えて構いません。

そして、11はルータなどネットワークが混雑した場合に受信側から11を返してネットワークが混雑していることを知らせます。

ネットワークが混雑していなければ01、10のどちらか最初に設定していた値が返ってきます。

フローラベル

フローラベルは20bitで構成されています。

ここでは通信方式に一貫性を持たせるために同じ値を挿入します。

例えば、VoIPを使うのであればVoIPを使っているセッション間は一貫して最初に送信側で設定したフローラベルの値を保ちます。

基本的にフローラベルは送信元IPアドレス、宛先IPアドレス、プロトコルと組み合わせて認識され、これらがすべて同じであれば同じ経路を使ってデータを転送することができます。

これで、データ転送の遅延が減少し、ネットワークを効率的に利用することができます。

ペイロード長

ペイロード長は16bitで構成されています。

ペイロード長ではヘッダを除く、データ部、拡張ヘッダの長さを表しています。

16bitなのでペイロード長さは0から65535バイトの長さを指定することができます。

しかし、現在の世の中はEthernetを使うことがほとんどでそのEthernetの規格は最大1500バイトでヘッダの長さを引くと最大1460バイトとなります。

そのため、65535バイトまで使うことはほとんどありません。

ただ、この65535バイトを超えるデータを送信することがあります。

この場合は、ペイロード長では足りないので拡張ヘッダを使うことで4Gほどのデータを持たすこともできます。

ネクストヘッダ

ネクストヘッダは8bitで構成されています。

ネクストヘッダでは上位層で使われているプロトコルが挿入されます。

しかし、AHやESPなどオプションとして情報を持たせている場合このフィールドに挿入されます。

そのため、これらのオプションがあればIPv6ヘッダでは上位層のプロトコルを挿入できません。

しかし、上位層プロトコルがないと処理するときに困るので拡張ヘッダに挿入します。

例えば、AHを使用し、上位プロトコルがTCPだとすると、

ネクストヘッダにAHをいれ、拡張ヘッダでAHのデータをいれ、そのAHのネクストヘッダの部分にTCPをいれます。

ホップ制限

ホップ制限は8bitで構成されています。

このホップ制限はIPv4の生存時間(TTL)と同じ役割があります。

現在、100以下のルータを経由すればどこのネットワーク機器にも接続することができます。

そのため、このTTLには基本的に128を入れます。

ルータを一つ経由するごとにこの128から順番に127→126という風に減っていきます。

そして、この値が0になればそのデータは削除され、ルータはICMPエラーメッセージを送信側に送信します。

送信元IPアドレス

送信元IPアドレスは128bitで構成されています。

送信元IPアドレスは送信する自分のIPアドレスを挿入します。

宛先IPアドレス

宛先IPアドレスは128bitで構成されています。

宛先IPアドレスはDNSサーバからもらったIPアドレスをここに入れます。

ここまでがIPv6ヘッダとなります。

拡張ヘッダ

ここからはIPv6ヘッダには含まれず、データの一部となります。

拡張ヘッダはIPv6ヘッダだけでは含ませることができない情報をこのフィールドに設置します。

よく使われるものとして、フラグメントやDestination Options Headerなどがあります。

データ

そして、最後に上位層で使われるデータがこのデータ部に入っています。

今回はIPv6ヘッダについて解説しました。

IPv6ではIPv4に比べて柔軟で効率的なネットワーク運用が可能となり、将来的にも拡張していきやすい設計となりました。

コメント

タイトルとURLをコピーしました