インストラクター：このレッスンでは､
IPv6（インターネット・プロトコル・バージョン6）にまつわるコンセプトを紹介します｡
ここまではIPv4の話でしたが､
IPv4が抱える問題のひとつは､
アドレス空間が限られていることです｡
これは､ IPv4アドレスを構成するビットが32ビットしかなく､
4つしかないからだ｡ 20億通りのアドレスの組み合わせが可能｡
今､ 私は4つを知っている｡ 20億というと､ IPがたくさんあるように聞こえますが､
APIPAアドレスやローカルホストアドレス､
プライベートIPなど､ 部分的なものを丸ごと取り出してしまうと､
サブネットを使い始める前に膨大な無駄が発生してしまい､ これが大きな問題となり､ IPv4内のネットワークアドレスが不足し始めたのです｡
これは住所疲弊と呼ばれるもので､ 実際にあることだ｡
実際､ 2019年11月､ 欧州､ 西アジア､
旧ソ連の地域インターネットレジストリであるRIPE
NCCとNASAは､ すでにIPv4アドレスのプールをすべて使い果たしている｡
しかし幸運なことに､ インターネット技術タスクフォース（IETF）はすでに将来を見据え始めており､
1995年にIPv6のビジョンを文書化したRFCでIPv6を標準として開発した｡
さて､ IPv6は利用可能なアドレスの数という点で､ IPv4よりも大幅に改善されていることがお分かりいただけただろう｡
IPv6では､ IPv4のように32ビットのアドレスを使うのではなく､
128ビットのアドレスを使う｡
これによって､ アドレス空間が格段に広くなる｡
実際､ 340ウン千億のIPアドレスが得られる可能性がある｡
これは､ 地球上のすべての男性､
女性､ 子供のIPアドレスに相当する｡
これは2の128乗である｡
実際､ 地球上には非常に多くのIPアドレスが存在するため､
一人一人の男女､ そして子供に対して何個ものIPアドレスが存在する｡
さて､ 皆さんはIPv4からIPv6に移行したことを不思議に思うかもしれない｡
バージョン5はどうなったのですか？
なぜバージョン6に移行したのか？
バージョン5は作られたが､ 公式なプロトコルや標準として完全に採用されることはなかった｡
そのため､ 生産が開始されることはなかった｡
その代わり､ バージョン5が実験的なプロトコルであったために開発されたコンセプトの多くが､
IPv6が正式な標準になったときに持ち込まれた｡
では､ IPv6の利点について話そう｡
最大の利点のひとつは､
128ビットアドレスのおかげでアドレス空間が格段に広くなったことだ｡
さらにIPv6は､
IPv4のブロードキャスト・データ・フロー・タイプを削除することで､
ネットワークの効率も向上させた｡
また､ IPv6にはパケットやデータグラムの断片化がないため､
より安全である｡
また､ 各パケットに一定のサイズのMTUがあるIPv4とは異なり､
各セッション内でのディスカバリーの最大伝送単位もない｡
IPv4では､ 最大伝送単位サイズより大きなパケットを送ると､
実際にフラグメント化されてネットワーク上に送られる｡
そして目的地に着くと､ 再び組み立てられて読まれる｡
これは実はセキュリティ上のリスクだった｡
また､ 余分な処理も必要となり､ インターネット接続速度が向上した現代のネットワークでは､
非常に非効率的なやり方となったため､ 実際にネットワークが遅くなる可能性もあった｡
そこでIPv6では､ フラグメンテーションを完全に廃止することにした｡
IPv6が完全に受け入れられ､
受け入れられるためには､ IPv4との後方互換性を確保し､
IPv6とIPv4の両方が同じネットワーク上で共存できるようにしなければならない｡
結局のところ､ IPv6が開発されリリースされたのは1990年代後半で､
すでに世界中で多くのコンピューター・ネットワークが構築されていた｡
だから､ 1日ですべてを入れ替えることは不可能だ｡
ガス自動車から電気自動車への移行を考えてみよう｡
これは､ 2020年代から2030年代にかけてずっと起こっていることだ｡
2025年1月1日に､ もう誰もガソリン車を使うなというのは無理な話だ｡
その日のうちにすべて電気自動車に置き換わる｡
もし政府がそれをやろうとしたら､
おそらく革命を起こすだろう｡ なぜなら､
すでに多くの人々がガス自動車を所有し､ その自動車とそれを支えるインフラに膨大な資金と投資を行っているからだ｡
そのため､ 一夜にしてすべてのガス自動車を置き換えることはできない｡
その代わり､ 2030年か2040年までには､
世界で販売される新車の多くが電気自動車として販売され､ ガス自動車は販売されなくなるだろう｡
これとまったく同じことがIPv6でも起こっている｡
そのため､ IPv6はIPv4とIPv6の両方を同じネットワーク上で共存させることを可能にし､
これらのネットワークを実行する機器はデュアルスタックとして知られるようになる｡ これは単に､ 同じネットワーク機器上でIPv4プロトコルとIPv6プロトコルの両方を同時に実行できることを意味する｡
デュアルスタックデバイスの場合､ クライアントがIPv6をサポートしていれば､
ルータースイッチはIPv6を使用することを好み､ その方式で会話を行う｡
デバイスがIPv6をサポートできない場合､
デバイスはIPv4プロトコルを使って話をすることになる｡
そうすれば､ 私はまだあなたをサポートできる｡
もうひとつの方法はトンネリングと呼ばれるものだ｡
これはIPv6がIPv4デバイス上にトンネルされる場所である｡
これにより､ 古いIPv4ルーターでもIPv6トラフィックを伝送できるようになる｡
IPv6は基本的に､ IPv6パケットをIPv4ヘッダーでカプセル化し､
IPv6データをIPv4ルーターやすでに存在するその他のインフラで伝送するメカニズムとしてトンネル化される｡
これは､ ソースとデスティネーション間にポイント・ツー・ポイントのトンネルを作り､
その情報をカプセル化することで実現する｡
これにより､ 分離されたIPv6クライアントとサーバーは､
その間に存在するIPv4を使用するルーターやスイッチ・インフラをすべてアップグレードする必要なく通信できるようになる｡
さて､ いつかはIPv4が完全に引退する日が来るかもしれない｡
しかし､ 今のところ､ それは起こっていない｡
そして個人的には､ 期待はしていない｡
私が読んだいくつかの記事によると､
IPv4は少なくとも2040年まで残るという予測があります｡
従って､ ネットワーク技術者として当面の間､ IPv4とIPv6の両方を扱う方法を知っておく必要があるでしょう｡
IPv6のもう一つの利点は､ ヘッダーが簡素化されていることだ｡
そのため､ IPv4では12個あったフィールドが､
IPv6では5個になり､ ヘッダーがスリム化され､
ネットワーク上での送信効率が大幅に向上した｡
では､ IPv6のヘッダーとはどのようなものなのだろうか？
これからお見せしますが､ 試験のためにこれを暗記する必要はありません｡
その代わり､ これはIPv4とIPv6で異なるフィールドを示したものである｡
そして今､ IPv6がIPv4に比べてどれほどシンプルなものかがお分かりいただけただろう｡
さて､ 試験のために理解しておかなければならないことに戻ろう｡
例えば､ IPv6アドレスは実際にどのように見えるのか？
長さが128ビットということは､
2進数で書くと128個の1か0になるということだ｡
さて､ IPv4でやったようにドット付き10進数表記を使うこともできるが､
それでも128ビットすべてを表すのに16オクテットが必要なので､
書き出すオクテット数は多くなる｡
そこでIETFは､ この問題を解決するために､
代わりに16進数を使うことを決定した｡
16進数は16進数で､ 高校の代数の授業で習った覚えがある人もない人もいるだろう｡
さて､ 16進数では､
16進数の各桁は実際には4ビットである｡
これにより､ 4桁の16進数を組み合わせてセグメントを構成することで､
IPv6アドレスを表現できるようになる｡
セグメントには16ビットが入る｡
これは16進数の4桁で表される｡
そしてコロンを加え､
128ビットになるまでセグメントを増やし続ける｡
これで合計32桁の16進数になるが､
それでもかなり長い｡
さて､ IPv6アドレスは128ビットで表現されるため､
これらのセグメント内には32桁以上の16進数は存在しないことになる｡
さて､ なぜ私はこの8つのセグメントの合計の長さを32桁以内と言ったのだろうか？
32桁×1桁4ビットで128ビットになるのだから､
16進数32桁でいいのでは？
というのも､ IPv6では､ 非常に長いIPv6アドレスを簡略化するための省略形が使えるからだ｡
速記法のルールは本当に重要だ｡
つまり､ セグメントに4つのゼロがある場合､
代わりに1つのゼロを入れて､ 先頭のゼロを取り除くことができる｡
例えば､ 私が2018:0000:0000:0000:0000:0000:4815:54aeという本当に長いIPv6アドレスを持っているとしよう｡
単純なルールを使えば､ ゼロが複数あるセグメントをすべてゼロひとつに置き換えることができる｡
これで2018:0:0:0:0:4815:54aeとなる｡
これで16進数の桁数が32から17に減ったので､
長さは約半分になった｡
我々は良くなってきているが､ そこで止まるつもりはない｡
IPv6略語の世界では､
もう一つ使えるルールがある｡
このルールは､ 複数のセグメントにすべてゼロが入っていて､
他の16進数で表されていない場合は､
ダブルコロンでまとめて､ すべてのゼロを取り除くことができるというものだ｡
さて､ このルールは特別で､
IPv6アドレスの中でダブルコロンが使えるのは1回だけだからだ｡
ダブルコロンのルールを使えば､
2018:0:0:0:0:0:4815:54aeを要約すると､ 5つのゼロをすべて取り除き､ ダブルコロンに置き換えることで､ 2018::4815::54aeを得ることができる｡
だから､ 32桁の16進数から17桁の16進数へ､
そして今は17桁から12桁へと､ ずっと小さく､ ずっと作業しやすくなった｡
この省略形がいかに役に立つか､ おわかりいただけただろう｡
では､ どうやってIPv6アドレスとIPv4アドレスを見分けるのですか？
さて､ 最初の方法は､ IPv4が何であるかを見ることだ｡
IPv4は常に4オクテットのドット付き10進数表記を使う｡
一方､ IPv6は数字の間にコロンを使い､
16進数で表記される｡
さて､ 試験当日に出題されるかもしれない問題のひとつに､
IPv6アドレスを見たときにそれを識別するというものがある｡
例えば､ 次のうちどれがIPv6アドレスですか？
これはあなたに尋ねるべき公正な質問だろう｡
192のような選択肢も出てくるだろう｡ 168. 1. 1､ これはIPv4アドレスなので､
それではないことはわかっている｡
12:34:56:78:90:AB､ または1234::5678::90ABとなる｡
ちょっと待って､ 今言った最後の2つは本当に似ているよね？
そうだが､ 有効なIPv6アドレスは1つだけだ｡
どれだかわかる？
ほとんどの学生はここで混乱するからだ｡
さて､ ここで2つ目の選択肢は､ 実はIPv6アドレスではない｡
代わりにMACアドレスだ｡
レイヤー2の物理アドレスであるMACアドレスは､
常に12桁の16進数で､ コロンで区切られていることを覚えておいてほしい｡
通常､ 2桁ずつ6つのグループに分け､
それぞれをコロン1つで区切ります｡
一方､ IPv6アドレスは常に4桁ずつのセグメントで記述され､
ダブルコロンがない限り常に16セグメントでなければならない｡
この例では､ 3つ目のオプションの最初のセグメントと2つ目のセグメントの間にダブルコロンがあります｡
このアドレスの1番目と2番目のセグメントの間のゼロをすべて取り除いたので､
IPv6アドレスであることがわかる｡
つまり､ IPv6アドレスのように見えるものを数えてみて､
それが12桁､ 正確に12桁の16進数で､ シングルコロンで区切られていて､
ダブルコロンがどこにも見当たらない場合､
それはMACアドレスであって､
IPv6アドレスではない｡
そうでなければ､ このように見えて16進数が含まれていれば､
試験当日はIPv6アドレスになる｡
試験では､ IPv6アドレスがどのようなものかを認識し､
ゼロを取り除いてダブルコロンのトリックを使って1つにまとめることができればよい｡
この2つができれば､ 試験当日のIPv6アドレッシングは問題ないだろう｡
さて､ IPv6アドレスに関しては､
ユニキャストアドレス､ マルチキャストアドレス､
エニーキャストアドレスの3種類のアドレスが使用できる｡
IPv6がIPv4と大きく異なる興味深い点は､
クライアントの1つのインターフェースに複数のIPv6アドレスを割り当てることができることだ｡
そしてこれらの割り当ては､ ユニキャスト､
マルチキャスト､ エニーキャストという3つの異なるタイプのいずれかを混在させることができる｡
そのため､ ワークステーションやノートパソコンにネットワーク・インターフェース・カードが1枚しかなくても､
その1枚のカードに複数のIPv6アドレスや異なるタイプのIPv6アドレスが割り当てられている可能性がある｡
ユニキャストアドレスは､ 1つのインターフェイスを識別するために使われる｡
これらはグローバルルーティングされたユニキャストアドレスとリンクローカルアドレスに分けられる｡
グローバルにルーティングされたユニキャストアドレスは､
A､ B､ Cクラスのユニキャストアドレスを使ったIPv4のパブリックアドレスと似ている｡
さて､ IPv6では､ グローバルルーティングされたユニキャストアドレスは､
常に最初のセグメントが2000-3999で始まる｡
さて､ 最初のセグメントとして2000-3999が表示された場合､ これはグローバルにルーティングされたユニキャストアドレスであることを意味します｡
例えば､ 2584:0db8:8583:1234:5678:882e:0370:7334のIPv6アドレスは､
最初のセグメントに2584が含まれているため､
ユニキャストアドレスとしてグローバルルーティングされ､
2000と3999の間にある｡
一方､ リンクローカルアドレスは､ ローカルユースアドレスとも呼ばれ､
IPv4におけるプライベートIPアドレスのように使われる｡
IPv6のリンクローカルアドレスはローカルエリアネットワークでのみ使用でき､
IPv6アドレスの最初のセグメントは常にFE80で始まる｡
現在､ IPv6システムが起動するときはいつでも､ グローバルにルーティング可能なアドレスがすでに手動で設定されていたり､
DHCPのようなコンフィギュレーション・プロトコルで取得されていたとしても､
そのシステム上の各IPv6インターフェースにリンクローカル・アドレスを実際に作成するようになっています｡
そのために､ SLAAC（ステートレス・アドレス自動コンフィギュレーション､
S-L-A-A-C）として知られるものを使用する｡
ステートレス自動コンフィギュレーションでは､
ホストはDHCPのような集中型サーバーからアドレスやその他のコンフィギュレーション情報を取得する必要はありません｡
その代わりに､ リンクローカルアドレスを独自に割り当て､
そのリンクローカルアドレスの一意性をテストし､
リンクローカルアドレスを自分自身に割り当て､
ルーターに連絡し､ 自動コンフィギュレーションの進め方についてノードに指示を与えることができる｡
さらに､ 使用したいグローバル・ユニキャスト・アドレスを設定することもできる｡
EUI-64とネイバー・ディスカバリー・プロトコルの話を始めるので､
この概念についてもう少し深く掘り下げていくことになるのですが､ これらのプロセスはどちらもSLAACとして知られるステートレスアドレス自動設定プロトコルで使用されるものだからです｡
次にマルチキャストアドレス｡
現在､ マルチキャストアドレスは､ パケットをマルチキャストアドレスに送信し､
グループ内のすべてのインターフェイスに配信できるように､
インターフェイスのグループを識別するために使用されています｡
IPv6では､ マルチキャストアドレスは常に最初のセグメント内の最初の2桁としてFFを含む｡
IPv6アドレスの先頭にFFがあったら､
そのマルチキャストを覚えておこう｡
最後のタイプのアドレスは､ エニーキャスト・アドレスとして知られている｡
エニーキャストアドレスは､ パケットをセットのどのメンバーにも送ることができるように､
インターフェースのセットを識別するために使われる｡
エニーキャストアドレスは､ 実際にはユニキャストアドレス空間から割り当てられる｡
つまり､ IPv6アドレスを見ただけでは､
そのIPv6アドレスがユニキャストかエニーキャストかを判断することはできない｡
さて､ マルチキャストやリンクローカルを見る場合､
これを行う非常に簡単な方法があるが､
ユニキャストとエニーキャストを見分ける簡単な方法はない｡
さて､ SLAAC（ステートレスアドレス自動設定プロセス）について､
もう少し話を戻そう｡
今言ったように､ IPv6ではSLAACと呼ばれる自動設定プロセスがあり､
これを使用してインターフェイスが現在置かれているネットワークを検出し､ EUI-64と呼ばれるプロセスを使用して､ MACアドレスに基づいて独自のホストIDを選択できるようにします｡
さて､ このEUI-64（拡張固有識別子）プロセスによって､ ホストはEUI-64と呼ばれる一意の64ビットIPv6インターフェース識別子を自らに割り当てることができるようになる｡
さて､ このEUI-64フォーマットのアドレスは､ インターフェースの48ビットのMACアドレスを使って得られる｡
MACアドレスはまず2つの24ビット部分に分けられる｡
MACアドレスの前半には､ OUI（組織固有識別子）が含まれる｡
そして後半には､ 特定のネットワーク・インターフェイス・カードが入っている｡
さて､ その間に16ビットの16進数値FFFEを突っ込む｡
こうすれば､ 24ビット､ 16ビット､ 24ビットを組み合わせて64ビットのEUIアドレスを得ることができる｡
これで､ ネットワーク上のインターフェイスを識別するのに必要な64ビットが揃った｡
そして､ インターフェイスは自動検出を使って､
そのインターフェイスが存在するネットワークを決定し､ IPv6アドレスのネットワーク部分を追加する｡
ここで､ ネットワークを表す最初の64ビットを､
MACアドレスから作成したEUI-64アドレスの64ビットの前に置き､
グローバルにルーティング可能なユニキャストIPv6アドレスを作成します｡
このMACアドレスを使って､ グローバルにルーティング可能なアドレスを作成する｡
DHCPはIPv6でも使用できる｡
その場合､ DHCPv6プロトコルを使う必要がある｡
これによって､ DHCPv6サーバーからDHCPに自動的に割り当てることができるようになります｡
しかし､ EUI-64による自動コンフィギュレーション・プロセスはすでにIPv6プロトコルにデフォルトで組み込まれているので､
DHCPv6を使う必要はない｡
しかし､ DHCPv6を使いたい場合は､ SLAACの自動設定プロトコルを使わせる代わりに､
各インターフェイスが取得するアドレスを割り当てることができます｡
今言ったように､ IPv6はデフォルトでMACアドレスに基づいて自分のアドレスを選び､
それからNDP（近隣発見プロトコル）というものを使って､
MACアドレスに基づいてネットワーク上の他のレイヤー2アドレスを知り､ それから自分のホストIDを選びます｡
試験のためにNDPを深く知る必要はありませんが､ IPv6ではNDP（Neighbor
Discovery Protocol）が使用され､
ルーター広告や近隣発見から多くの機能を取り出し､ 代わりに処理してくれることを理解しておく必要があります｡