IPv6
IPv6で使われるプロトコル
GREETINGS:
こんにちは。
今回もIPv6にちょぴっと踏み込んだ内容です。
前回の記事では、IPv6で使われるアドレスのタイプについて解説しました。
今回の記事ではIPv6で使われるプロトコルについてのお話です。
SECTION 01: NDP
以前の記事でIPv4とIPv6ではアドレス形態が違うということについて触れたと思いますが、使用するプロトコルにも違いがあります。
例えばIPv4でデータリンク層のアドレス解決をするために使用されるARP。これはIPv6ではNDP(Neighbor Discovery Protocol)というプロトコルを代わりに使用します。
「近隣探索プロトコル」「近隣探索」「ND」と記載される場合もあるので、技術リサーチの際にはそちらでも調べてみることをお勧めします。

そんなNDPですが、IPv4のARPと比べてどこに違いがあるのでしょうか。
ARPではブロードキャストアドレスを使用して同一セグメント上でアドレス解決を行いますが、IPv6においてはブロードキャストアドレスが廃止となっているため、要請ノードマルチキャストアドレス(solicited-node multicast address)に向けて送信します。
これを近隣要請もしくはNS(Neighbor Solicitation)と呼び、ICMPv6というプロトコルを使用が利用されます。
近隣要請を受信したノードは送信元に対して近隣広告、NA(Neighbor Advertisement)と呼ばれるパケットを送信し、自身のMACアドレスをアドバタイズします。

SECTION 02: SLAAC
この様にIPv6におけるアドレス解決が行われるのですが、NDPの機能はそれだけにとどまりません。
RFC4861(Neighbor Discovery for IP version 6)で言及されていますが、IPv4で使われるIRDP ( ICMP Router Discovery Protocol )やICMPリダイレクトといった機能もNDPは兼ね備えているため、デフォルトルートの通知やネクストホップの最適化も行うことができます。
さらに、NDPにはもう一つ重要な機能としてアドレス自動設定があります。
この機能もICMPv6によってルータ要請(Router Solicitation / RS)とルータ広告 (Router Advertisement / RA)をホストと宛先でやり取りすることで、ルータから受信したプレフィックスを基にホストは自身のIPアドレスを設定します。
インターフェース部分を自動で生成する場合には以前に紹介したEUI-64のフォーマットで自動生成が行われます。
このようにプレフィックスのみを通知してホストでインターフェースIDを生成するため、払い出した側はそれ以降(再びルータ要請を受け取るまで)ホストのIPアドレスについて関与しません。これをステートレス自動設定(SLAAC)と呼びます。

SECTION 03: DHCPv6
ステートレス自動設定とは対照的にIPv6ではDHCPv6を用いたステートフル自動設定も行うことが出来ます。
DHCPv6でのアドレス払い出しについては、従来のIPv4でのプロセスと大きな違いはありません。パケットはICMPv6ではなくDHCPv6が使用されます。
それならばステートレス自動設定の方が楽だし、ステートフルは不要なのでは?と思われるかもしれませんが、ステートレス自動設定ではデフォルトゲートウェイの通知はできても、DNSサーバやNTPサーバのアドレスなどを通知することが出来ません。
また、DHCPv6ではデフォルトゲートウェイの配布が出来ないため、SLAACで使われるルータ広告 (Router Advertisement)を利用することから、活用にはお互いの機能をを補い合うような設計をすることが理想となります。

IPv6で使われるプロトコルについてはまだまだありますが、今回は一旦ここまで
次回はIPv6のセキュリティリスクについて解説していきます。
(→ 続編へ続く!)