IPv4とIPv6の違い

2011/1/31-1

ここでは、プロトコルに起因するIPv4とIPv6の違いを扱っています。 デュアルスタック環境に伴う問題点などは今回は範疇外です。

  • IPv4のアドレスは32ビット、IPv6のアドレスは128ビットである点が最も大きな違いです。 ただし、IPv6のアドレスのうち上位64ビットがネットワークアドレスとして利用されるため、実際には「128ビットという無限のアドレス」というのは運用上は事実ではなく、インターネットの43億倍の数倍(ネットワーク数なので正確には言いにくいため)ぐらいです。
  • IPv4では「198.51.100.254」のような表記ですが、IPv6では「2001:db8:aaaa:bbbb:cccc:dddd:eeee:1」のように「:」で区切る表記になります。 「::1」のように、ゼロを省略することも可能です。
  • IPv4では通信の種類は、ユニキャスト、ブロードキャスト、マルチキャストの3種類でしたが、IPv6ではブロードキャストがマルチキャストへと統合されました。 IPv4でブロードキャストで行われていたものは、IPv6ではマルチキャストを利用して行われます。
  • IPv6では、通信の種類は、ユニキャスト、マルチキャスト、エニーキャスト(anycast)の3種類となりました(IPv4でのエニーキャストや、IPv6でのエニーキャストの詳細は割愛)。
  • IPパケットヘッダの大きさとフィールドが違います。 IPv4は20バイト(IP Header Optionがある場合は+αなので実際は可変長)、IPv6は40バイトです。
  • IPv4ヘッダは可変長でしたが、IPv6ヘッダは40バイトの固定長です。 IPv6でIPv4のIP Header Optionに相当する機能(Extension Header,拡張ヘッダ)はNext Headerで実現されています。 IPv6のNext Headerは次に来るプロトコルを示すものですが、拡張ヘッダが利用されない場合、TCPやUDPなどが「Next Header」になります(この例はTCPやUDPパケットの場合です)。 逆に、拡張ヘッダがある場合には、拡張ヘッダのプロトコル番号がNext Header内に記述され、拡張ヘッダ中のNext HeaderフィールドにTCPやUDPのプロトコル番号が記述されます。
  • IPv4では、一つのネットワークインターフェースに一つのIPアドレスしか設定されません(厳密には設定される場合も存在しています)。 IPv6では、仕様として複数のIPアドレスが単一のネットワークインターフェースに設定可能となりました。
  • IPv6では、同一リンク内だけでの通信を行うためのLink Local Addressというものがあります。 ルータは、Link Local Addressに関連するIPv6パケットをフォワードしません。 単一のネットワークインターフェースに複数のIPv6アドレスを設定可能であるという仕様のもと、自動的にLink Local Addressが設定されるシステムが非常に多いです。
  • IPv6では、サイト内でのみ有効となるSite Local Addressというものも定義されてましたが、RFC3879で廃止されました。
  • IPv4ではICMP,ARP,IGMPなど様々なコントロールプロトコルがありましたが、IPv6ではICMPv6に統合されました。
  • IPv4のARPは、ICMPv6のND(Neighbor Discovery)で行われます(RFC4861参照)。
  • IPv4では、中継ノードでのパケットのフラグメントが可能でしたが、IPv6では中継ノードでのフラグメントが行われないので、Path MTU Discoveryが非常に重要となります。 ICMPを無条件でフィルタしたりするとPath MTU Discoveryが正常に動作しなくなるので注意が必要です。
  • IPv6では、フラグメントが送信元ノードで行われます。 このとき、IPv6拡張ヘッダであるフラグメントヘッダが利用されます。
  • IPv4ではIGMP(Internet Group Membership Protocol)が利用されていましたが、IPv6ではICMPv6のMLD(Multicast Listener Discover)機能を利用します。
  • 最小MTUがIPv4では576バイト、IPv6では1280バイトです
  • IPv6でネットワークに接続された機器が自動的にIPアドレスを生成する方法としては、ステートフルとステートレスの2通りの方法があります。 ステートフルのアドレス割当てには、IPv4と同様にDHCPが使われ、IPv6用にDHCPv6が定義されています。 ステートレスのアドレス割当てでは、SLAAC(StateLess Address AutoConfiguration)によってルータからRA(Router Advertisement)が送信され、RA内のプレフィックス情報を基に各機器は各自でIPv6アドレスを自動で生成する事が可能になっています。 DNSサーバの情報は、IPv6設計当初はRAで送れない仕様となっておりDHCPv6を別途利用して配布することになっていましたが、RFC5006(実験的RFC)としてRAでのDNSサーバ情報配布の仕様が公開されていました。RFC5006は2010年11月にRFC6106としてStandard Track RFCになりました(参考)。(関連してRFC4861も参考にどうぞ)
  • IPv6では一般家庭でNATが利用されない可能性が高いと思われます(66NATというものもありますが、いまのところは一般家庭では利用されない可能性が高いと推測しています)。 IPv4ではISP等からユーザが受け取るIPアドレスが一つでしたが、IPv6では64ビットのネットワークアドレスを受け取り、残りの64ビットをユーザ側で設定可能となるため、ユーザが家庭で複数の機器をインターネットに繋ぐためにNATが必須ではなくなります。 これに関しては、セキュリティ上NATを利用したいという意見と、NATは既に必要がないという意見の両方があります。
  • NAT444、NAT464、Dual Stack-LiteなどIPv6への移行技術としては、NATが各所で利用されるものと思われます。
  • IPv4ではユーザがISPにアクセスする度にIPアドレスが変わる可能性がある環境が多く運用されていました。 IPv6では、同一の契約を行うユーザは、毎回同じIPv6プレフィックスを割り当てられるという運用が行われる環境が増えるものと思われます。 ユーザは、IPv6アドレスの下位64ビットを変更可能ですが、上位64ビットが毎回固定になると、Webなどを閲覧するときの匿名性が下がる可能性があります。
  • OSの設定によっては、IPv6アドレスの下位64ビットはMACアドレスを基に生成されます(クライアントとして利用されるPCでこのような設定がデフォルト値となっている場合がある)。 通信インターフェースに設定されるMACアドレスは世界で一意(少なくとも建前上は。たまに安売りNICで全部同じMACアドレスというのも存在はしています)となっており、IPv6の上位64ビットが変わっても下位64ビットが同じであれば同じ機器を利用して通信を行っていたセッション同士を推測して関連付けることができる場合があります。 IPv6アドレスの下位64ビットによるプライバシの低下を防ぐための仕組みとしてPrivacy Address Extension(RFC3041)が定義されています。 これを利用すると、IPv6アドレスの下位64ビットがMACアドレスによる固定値になり続けることを防げます。
  • 複数の上位ネットワークと接続されたマルチホーム環境では、ユーザ機器に複数のIPv6アドレスが設定される可能性があります。 そのとき、ユーザ機器側が各通信に「利用する」と選んだIPv6アドレスに応じて通信路が変わります(NTT-NGNのマルチプレフィックス問題は、マルチホーム環境におけるIPv6の挙動と、閉域網であるNTT-NGNが組合わさった問題です)。

過去に書いたIPv4アドレス枯渇/IPv6関連記事

最近のエントリ

過去記事

過去記事一覧

IPv6基礎検定

YouTubeチャンネルやってます!