削除された内容 追加された内容
タグ: モバイル編集 モバイルアプリ編集 Androidアプリ編集
m編集の要約なし
1行目:
'''IPv6アドレス'''とは、[[IPv6]][[コンピュータネットワーク]]においてコンピュータ等の[[ノード (ネットワーク)|ノード]]の[[ネットワークカード|ネットワークインタフェース]]を判別するための番号([[IPアドレス]])である。
 
IPアドレスは、[[ホスト (ネットワーク)|ホスト]]の個々のネットワークインタフェースを特定し、ホスト間でIP[[パケット]]の[[ルーティング]]を行うために使用される。IPアドレスはパケットのヘッダに記載され、そのパケットの送信元と送信先を示している。
 
IPv6は、[[インターネット]]において最初に使用された[[IPv4]]を継承している。IPv4が[[32ビット]]のIPアドレスを使用するのに対し、IPv6は[[128ビット]]のIPアドレスを使用する。このため、IPv6はIPv4と比べて非常に大きなIPアドレス空間を持っている。
9行目:
==IPv6アドレスの種類==
IPv6アドレスは、以下の3種類に分類される<ref name="rfc4291">RFC 4291, ''IP Version 6 Addressing Architecture'', R. Hinden, S. Deering (2006年2月)</ref>。
*[[ユニキャスト]]アドレス - 単一のインタフェースのための識別子。インターネットプロトコルは、ユニキャストアドレスに送られたパケットを、そのアドレスによって識別されるインタフェースに配送する。
*[[エニーキャスト]]アドレス - インタフェース集合(通常は異なるノードに属する)のための識別子。エニーキャストアドレスに送られたパケットは、そのアドレスで識別されるインタフェースの内で、ルーティングプロトコルの距離の定義に従って「最も近く」(nearest)にあるただ1つのインタフェースに配送される。エニーキャストアドレスはユニキャストアドレスと同じフォーマットのため、表記上は区別がつかない。ただ、同じアドレスが複数のインタフェースに設定されるかどうかの違いしかない。
*[[マルチキャスト]]アドレス - エニーキャストと同様にインタフェース集合のための識別子であるが、マルチキャストアドレスに送られたパケットは、そのアドレスを持つすべてのインタフェースに配送される。
 
IPv6には[[ブロードキャストアドレス]]は存在せず、その機能はマルチキャストアドレスが果たす。
26行目:
of an address as a whole address.
-->
[[ユニキャスト]]アドレスと[[エニーキャスト]]アドレスは、通常2つの部分に分けられる。前半の64ビット(サブネットプリフィックス)は[[ルーティング]]に使用され、後半の64ビット(インタフェース識別子)はサブネット内での個別のインタフェースを指し示す。
:{| class="wikitable" style="width: 750px"
|+ 一般的なユニキャストアドレスのフォーマット(ルーティングプリフィックスのサイズは可変)
38行目:
|style="text-align: center;"| ''ルーティングプリフィックス''
|style="text-align: center;"| ''サブネットID''
|style="text-align: center;"| ''インタフェース識別子''
|}
ネットワークプリフィックス(「ルーティングプリフィックス」と「サブネットID」)は、アドレスの中の上位64ビットである。ルーティングプリフィックスのサイズは可変である。プリフィックスのサイズが大きくなると、その分だけサブネットIDのサイズが小さくなる。サブネットIDのビットのフィールドは、ネットワーク管理者が与えられたネットワーク内でサブネットを定義するのに使用することができる。64ビットの「インタフェース識別子」は、インタフェースの[[MACアドレス]]から[[#Modified EUI-64|modified EUI-64]](注意<ref name="EUI64" group="注">Modified EUI-64の使用はセキュリティの観点からは非推奨とされるが、RFCで公式に非推奨(deprecated)とはなっていない。モバイル・IoT機器では依然として多数採用されている。[https://www.nic.ad.jp/ja/materials/iw/2016/proceedings/t02/t2-kitaguchi-2.pdf]</ref>)を使用して自動的に決定されるか、[[DHCPv6]]サーバから取得するか、ランダムに決定されるか、手動で設定するかのいずれかで決められる。
 
[[リンクローカルアドレス]]もまたインタフェース識別子に基づいているが、ネットワークプリフィックスとは異なるフォーマットになっている。
:{| class="wikitable" style="width: 750px"
|+ リンクローカルアドレスのフォーマット
54行目:
|style="text-align: center;"| ''prefix''
|style="text-align: center;"| ''0''
|style="text-align: center;"| ''インタフェース識別子''
|}
''prefix''(プリフィックス)フィールドは二進数の値 1111111010 であり、54個のゼロがその後に続く。全てのリンクローカルアドレスのネットワークプリフィックスは同じ(fe80::/64 : [[#ローカルアドレス|リンクローカルアドレスプリフィックス]])になり、それがルーティング不可であることを示す。
188行目:
ネットワークアドレスの範囲は[[Classless Inter-Domain Routing|CIDR表記]]で表される。ネットワーク表現は、ブロックの最初のアドレス(最後のビットが全て0になる)の後に[[スラッシュ (記号)|スラッシュ]](/)および、プリフィックスのビット長を十進数で書く。例えば、2001:db8:1234::/48 と表現されるネットワークは、2001:db8:1234:0000:0000:0000:0000:0000 に始まり 2001:db8:1234:ffff:ffff:ffff:ffff:ffff で終わる。
 
インタフェースアドレスのルーティングプリフィックスは、直接にアドレスとCIDR記法で表すことができる。例えば、2001:db8:a::/64 のサブネットに接続されているアドレス 2001:db8:a::123 のインタフェースの設定は、 2001:db8:a::123/64 のように書くことができる。
 
===アドレスブロックのサイズ===
201行目:
 
===UNCパス名におけるIPv6アドレスの表現===
[[Microsoft Windows]][[オペレーティングシステム]] (OS) では、IPv4アドレスは[[Uniform Naming Convention]] (UNC) のパス名に含めることができる。しかし、UNCパス名ではコロンは文法的に意味を持っているため、IPv6アドレスはそのままではUNCパス名に使用できない。このため、[[マイクロソフト]]はUNCパスに使用できるドメイン名にIPv6アドレスを含められるような変換アルゴリズムを実装している。このために、マイクロソフトは[[セカンドレベルドメイン]]''ipv6-literal.net''をインターネット上で登録し、保持している<ref>{{cite web|title=ipv6-literal.net Domain History|url=http://www.who.is/domain-history/ipv6-literal.net|publisher=who.is|accessdate=2016-02-24}}</ref>。IPv6アドレスは、以下のように、この名前空間のホスト名やサブドメイン名に変換される。
:2001:db8:85a3:8d3:1319:8a2e:370:7348
は以下のように変換される。
230行目:
| <tt>0x0</tt> || ''予約'' ||
|-
| <tt>0x1</tt> || interface-local || interface-localスコープは、ノードの1つのインタフェースのみで有効である。これは、マルチキャストのループバック転送にのみ使用される。
|-
| <tt>0x2</tt> || link-local || link-localとsite-localのマルチキャストスコープは、ユニキャストスコープが一致する同一トポロジの範囲にのみ転送される。
276行目:
 
===予約されたエニーキャストアドレス===
それぞれのサブネットプリフィックスの最も低いアドレス(インタフェース識別子を全て0に設定したもの)は、「サブネット・ルータ・エニーキャストアドレス」として予約されている<ref name="rfc4291" />。アプリケーションはこのアドレスを利用可能な1つのルータとの通信に利用できる。このアドレス宛のパケットはただ1つだけのルータに届く。
 
/64のサブネットプリフィックスの最上位の128個のアドレスは、エニーキャストアドレスとして予約されている<ref name="rfc2526">RFC 2526,''Reserved IPv6 Subnet Anycast Addresses'', D. Johnson, [[スティーブ・ディアリング|S.Deering]] (March 1999)</ref>。これらのアドレスは、インタフェース識別子の最初の57ビットが1で、残りの7ビットがエニーキャストIDである。この場合、そのアドレスが世界的に唯一ではないことを示すために、[[#Modified EUI-64|universal/localビット]]は0にしなければならない。エニキャスト識別子0x7eは[[mobile IP|mobile IPv6]]ホームエージェント・エニーキャストアドレスとして定義されている。エニキャスト識別子0x00から0x7dまでと0x7fは予約されており、何にも使用されていない。
 
==特別なアドレス==
287行目:
 
====未指定アドレス====
* ::/128 — 全ビットが0のアドレスは未指定アドレス(unspecified address)と呼ばれる。IPv4における「0.0.0.0/32」に相当する。<br/>このアドレスは、いかなるインタフェースも割り当ててはならない。このアドレスは、初期化中のホストの自分自身のIPアドレスを知る前にIPv6パケットを送る場合の送信元アドレスとして使用される。ルータは未指定アドレスを持つパケットを転送してはならない。
 
====デフォルトルート====
293行目:
 
====ローカルアドレス====
* ::1/128 — [[ループバック]]アドレスはユニキャスト[[localhost]]アドレスである。ホストのアプリケーションがこのアドレス宛にパケットを送信したときは、IPv6スタックはそのパケットを同じ仮想インタフェースにループバックする。IPv4における「[[localhost|127.0.0.1/8]]」に相当する。
* fe80::/10 — リンクローカルプリフィックスのアドレスは、単一の接続の中でのみ有効であり唯一である。このプリフィックスにおいては1つのサブネットのみが割り当てられ(残り54ビットは0)、効果的なフォーマットは fe80::/64 と与えられる。下位64ビットはインタフェースのハードウェアアドレスから[[#Modified EUI-64|modified EUI-64]]によって決められるのが一般的である。[[リンクローカルアドレス]]は、あらゆるIPv6対応インタフェースで必要とされる。IPv6ルーティングがないときは、アプリケーションはリンクローカルアドレスの存在に頼るかもしれない。これらのアドレスは、IPv4における自動設定アドレス 169.254.0.0/16 に相当する。
 
====ユニークローカルアドレス====
{{Main|ユニークローカルアドレス}}
* fc00::/7 — [[ユニークローカルアドレス]] (ULA) はローカルな通信のために使われる。それらは、設定されたサイトの中でだけルーティングできる<ref name="rfc1918">RFC 1918, ''Address Allocation for Private Internets'', Y. Rekhter, B. Moskowitz, D. Karrenberg, G.J. De Groot, E. Lear (February 1996)</ref>。このブロックは2つの部分に分割される。後半半分(fd00::/8)は「確率論的にユニークな(probabilistically unique)」アドレスとして使用され、40ビットの[[擬似乱数]]を用いて/48の割り当てを得る。これは、結合または互いと通信しようとする2つのサイト間で競合するアドレスができてしまう可能性が僅かにあるということを意味するが、どの程度僅かなのかは不詳である。前半半分(fc00::/8)は割り当てない方式のために定義されている。これらのアドレスは、IPv4の[[プライベートネットワーク|プライベートアドレス]](10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)に相当する。
 
====IPv4アドレス埋め込みIPv6アドレス====
335行目:
| <tt>ff0X::1</tt>
| 全てのノードアドレス
| 1 (インタフェースローカル), 2 (リンクローカル):
* <tt>ff01::1</tt> → All nodes in the インタフェースローカル
* <tt>ff02::1</tt> → All nodes in the リンクローカル
|-
| <tt>ff0X::2</tt>
| 全てのルータ
| 1 (インタフェースローカル), 2 (リンクローカル), 5 (サイトローカル):
* <tt>ff01::2</tt> → インタフェースローカルの全てのルータ
* <tt>ff02::2</tt> → リンクローカルの全てのルータ
* <tt>ff05::2</tt> → サイトローカルの全てのルータ
404行目:
 
====要請ノードマルチキャストアドレス====
{{仮リンク|要請ノードマルチキャストアドレス|en|Solicited-node multicast address}}のグループIDの下位24ビットは、インタフェースのユニキャストアドレスまたはエニーキャストアドレスの下位24ビットである。このアドレスは、ローカル・ネットワーク上の全てのノードを妨げずに、[[近隣探索プロトコル]](NDP)による[[リンク層]]アドレス解決をすることができる。ホストは、設定されたユニキャストアドレスまたはエニーキャストアドレスの要請ノードマルチキャストグループに参加しなければならない。
 
==ステートレスアドレス自動設定==
システムの起動時、ノードは、それぞれのIPv6が利用可能なインタフェースについて[[リンクローカルアドレス]]を自動的に生成する。グローバルにルーティングできるアドレスが、手動で設定されるか、後述する「設定プロトコル」から得られる場合でも同様である。
それは、[[近隣探索プロトコル]]の機能を使用したステートレスアドレス自動設定(SLAAC)<ref name="rfc4862">RFC 4862, ''IPv6 Stateless Address Autoconfiguration'', S. Thomson, T. Narten, T. Jinmei (September 2007)</ref>によって、独立して、そして、事前設定なしで動作する。このアドレスはプリフィックス fe80::/64 の中から選択される。
 
IPv4に「設定プロトコル」はDHCPやPPPを含む。[[DHCPv6]]もあるが、IPv6のホストはグローバルにルーティング可能なユニキャストアドレスを作るのに[[近隣探索プロトコル]]を用いる。ホストはルータ要請(RS: router solicitation)を送信し、IPv6[[ルーター]]は割り当てられたプリフィックスとともに応答を返す<ref name="rfc4861">RFC 4861, ''Neighbor Discovery for IP version 6 (IPv6)'', T. Narten, E. Nordmark, W. Simpson, H. Holiman (September 2007)</ref>。
 
アドレスの下位64ビットは、64ビットの[[#Modified EUI-64|modified EUI-64]]フォーマットによるインタフェース識別子である。この識別子は、通常そのインタフェースの全ての自動的に構成されたアドレスによって共有される。その利点は、1つのマルチキャスト・グループだけが近隣探索のために参加する必要があることである。このためには、ネットワークプリフィックス ff02::1:ff00:0/104 とアドレスの下位24ビットからなるマルチキャストアドレスが用いられる。
 
===Modified EUI-64===
64ビットのインタフェース識別子は、48ビットの[[MACアドレス]]から生成するのが最も一般的である。MACアドレス 00:0C:29:0C:47:D5 は、真ん中に FF:FE を入れることで64ビットの[[EUI-64]] 00:0C:29:<u>FF:FE</u>:0C:47:D5 に変換される。このEUI-64をIPv6アドレスの中で使うとき、次のように変形される<ref name="rfc4291"/>。 ''Universal/Local''ビット(EUI-64の最上位ビットを第1ビットとしたときの第7ビット)を反転する。ネットワークプリフィックス 2001:db8:1:2::/64 と上記のMACアドレスを用いてIPv6アドレスを生成すると、 2001:db8:1:2:0<u>2</u>0c:29ff:fe0c:47d5 となる。ここで、下線部は''Universal/Local''ビットが1に反転された箇所である。1は''Universal''、0は''Local''を意味する。
 
グローバルユニキャストアドレスのインタフェースIDには、MACアドレス等から生成されるModified EUI-64フォーマットが使用されることが多いが、プライバシー上の懸念がある<ref group="注" name="EUI64"/>ため、一意性およびプライバシーの双方を満たす仕様(一時アドレス)への変更が推奨されている(RFC 7217、RFC 7721)。
 
===重複アドレス検出===
インタフェースに[[ユニキャスト]]IPv6アドレスを割り当てた後、''Neighbor Solicitation''(近隣要請)と''Neighbor Advertisement''(近隣広告)([[ICMPv6]]のtype 135と136)メッセージを使ってそのアドレスが唯一のものであるかの確認を行う。確認を行っている間、そのアドレスは「仮」(''tentative'')の状態にある。
 
ノードは仮のアドレスの要請ノードマルチキャストグループに参加し(まだ参加していない場合)、仮アドレスを宛先、未指定アドレス(::/128)を送信元として''Neighbor Solicitation''メッセージを送信する。ノードは、''Neighbor Advertisement''が受信できるようにするために全ホストマルチキャストアドレス ff02::1 にも参加する。
 
ノードが自身の仮アドレスを宛先とする''Neighbor Solicitation''を受信した場合、そのアドレスはユニークではない。ノードが、仮アドレスを送信元とする''Neighbor Advertisement''を受信した場合も同様である。アドレスがユニークであると確認できた時だけ、そのアドレスが割り当てられ、インタフェースによって使用される。
 
この仕組みを重複アドレス検出(DAD: Duplicate address detection)という。
 
===アドレスの有効期限===
インタフェースに割り当てられたIPv6アドレスは固定された有効期限(lifetime)を持つ。より短い期間に設定されない限り、有効期限は無制限である。アドレスには、''preferred lifetime''と''valid lifetime''の2つの有効期限がある<ref>
{{Cite news| journal=The Internet Protocol Journal| year=2006| volume=9| issue=3| pages=16–29| title=IPv6 Internals| author=Iljitsch van Beijnum |url=http://www.cisco.com/web/about/ac123/ac147/archived_issues/ipj_9-3/ipv6_internals.html}}</ref>。有効期限は、ルーターで設定されて自動設定によって値が提供されるか、インタフェースに手動で設定する。
 
アドレスがインタフェースに割り当てられたとき、そのアドレスは"preferred"の状態にあり、preferred-lifetimeの間それが継続する。preferred-lifetimeが経過すると"deprecated"の状態になり、そのアドレスを使って新しい接続はできなくなる。valid-lifetimeが経過すると"invalid"の状態になり、そのアドレスはインタフェースから除かれ、インターネットから新しいアドレスの割り当てを受ける。
 
注意: ほとんどの場合、新しい''Router Advertisement''(RA)を受信することで有効期限のタイマーが元に戻るので、有効期限は期限切れになることはない。しかし、RAが受信できない場合、preferred-lifetimeが経過してアドレスは"deprecated"状態になる。
 
===一時アドレス===
ステートレスアドレス自動設定でインタフェース識別子を生成するのに、グローバルにユニークな固定のMACアドレスを使用している。そのため、時間がたってIPv6ネットワークプリフィックスが変わったとしても、MACアドレスによってネットワーク機器を、そしてユーザを追跡することができる<ref>[http://portal.acm.org/citation.cfm?id=1852723&dl=GUIDE&coll=GUIDE&CFID=103687796&CFTOKEN=17254293 The privacy implications of stateless IPv6 addressing]. Portal.acm.org (2010-04-21). Retrieved on 2011-09-28.</ref>。IPv6アドレスの一部とユーザが永久に結びつく危険性を減らすため、ノードは「一時アドレス」(temporary address)を作ることができる。一時アドレスは、時間によりランダムに変化するビット列に基づいたインタフェース識別子<ref name="rfc4941">RFC 4941, ''Privacy Extensions for Stateless Address Autoconfiguration in IPv6'', T. Narten, R. Draves, S. Krishnan (September 2007)</ref>を使用し、有効期限を比較的短く(数時間から数日)することで短い時間で新しいアドレスに置き替えられる。
 
外部ホストがDNS問い合わせのできるパブリックアドレスを使っている場合、接続を始めるための送信元アドレスとして、一時的なアドレスを使用することができる。
 
[[Mac OS X Lion]]以降の[[macOS]]、[[Microsoft Windows Vista|Windows Vista]]・[[Microsoft Windows 2008 Server|Windows 2008 Server]]以降の[[マイクロソフト]]のOSでは、IPv6のネットワークインタフェースの設定で、デフォルトで一時アドレスを使用する設定になっている。
 
実際には、ISPから配布されるプレフィックスが契約ごとに固定されている運用が多く、プレフィックスと他の情報を組み合わせて使用してユーザを追跡することができるため、プライバシー保護の観点からは、限定的な効果しかない。
509行目:
 
==リンクローカルアドレスとゾーンインデックス==
ホストの全てのリンクローカルアドレスは共通のプリフィックスを持つので、リンクローカルの宛先にパケットを送信するとき、出て行くインタフェースを選ぶのに通常のルーティング手順を用いることができない。そこで、ゾーンインデックス(''zone index'')と呼ばれる特別な識別子<ref name="rfc4007"/>を用いて付加的なルーティングの情報を提供する。
 
アドレスが文字で書かれているとき、ゾーンインデックスはアドレスの後に[[パーセント記号]](%)で区切って付加する。ゾーンインデックスの実際の構文は、OSに依存する。
* [[Microsoft Windows]]は、数値のゾーンインデックスを使用する(例 fe80::3%1)。インデックスは、インタフェース番号で決定される。
* 多くの[[Unix系]]OS([[Berkeley Software Distribution|BSD]], [[Linux]], [[macOS]]など)は、インタフェース名をゾーンインデックスに使用する(例 fe80::3%eth0)。
* BSD系のOS(macOSを含む)では、数値のゾーンインデックスを2番目の16ビットフィールドに入れることでも表現できる(例 fe80:1::3)。