・インターネット聞きかじり

 更新日: 2010/11/29

不要なサービス、スタートアップ項目を調査していた所、ネットワーク関連の知識不足が発覚。用語の意味自体理解できていないので、この際上っ面だけでも勉強しておく事にした。従って、キチンとネットワークの知識を得たい方には殆ど役に立たない内容である事を最初にお断りしておく。 知識不足発覚の元凶は、フレッツ・光プレミアム(NTT西日本)導入時、想定内のONU(回線終端装置)に加え、CTU(加入者網終端装置)なる不思議な機器が設置された事から始まる。ADSL 時代のLAN ケーブルを再利用する為、玄関に各機器を配置したまでは良かったが、『ひかり電話』もついでに導入してしまったので、VoIPアダプタというシロモノまで設置され、下駄箱上がカレコレ賑やかな状態となってしまった。 
閑話休題、フレッツ・光プレミアム 各種ツールを導入すると、スタートアップ項目の追加や、無効にされたサービスが見つかる。

IPv6アドレス取得ツール IPv6 Helper Service

先ずは、『IPv6ってなんだぁ?』辺りから始めて各ネットワーク用語を学習するつもりだが、上っ面だけの解釈故、誤まった表現があれば御指摘頂ければ幸い。

・IPv6アドレス ・階層(Layer) VLSM NAT MTU TCP DNS

[XPの設定に戻る]   [リンク元に戻る]

・IPv6アドレス

IPv6(Internet Protocol version 6)は、1995年に標準化されたそうで以外と歴史がある。当時、IPv4アドレスの枯渇が問題となり、早急な次世代インターネットプロトコルへの移行が検討されたそうだ。 ところが、2009年終盤もシブとく生き残っているIPv4アドレスを先ずは勉強してみる事にしよう。 なお、『プロトコルってなんだぁ?』と疑問の方は、とりあえず『お約束』程度に解釈しておこう。

IPv4 の標準化は 1978年であるが、IPv4アドレス32bit(ビット/binary digit の略/最小単位の意。)にしたのは、当時としては必要十分であるとの判断なのだろうが、 32bit とは、232=4,294,967,296 約43億の組合せであり、現在のインターネット普及率を考えると、やはり不足しているようだ。 では、『何故に枯渇していないのか?』を考える前に、IPv4アドレスをラフに考察。

11000000 10101000 00011000 00000010

2進数(Binary number)で、IPv4アドレスを表現すると上記の様に32桁の数字となるが、実際の表記は、8bit(1byte=1octet) 毎に10進数(Decimal number)に変換し、ドットを挿んだ状態になる。

192.168.24.2

良く見るような表記になったが、8bit とは、28=256種類の組合せであり、10進数では、0〜255の数字にて表現できるという事だけ覚えておこう。詳しい事は後述する。 それでは、 IPv6アドレスは、どんな表記をするのか調べてみる。

CTU_tracert

不思議な事に、CTU というシロモノはNTTの所有物であり、(全てレンタル品なので、オークション等に出品された物は盗品と思われる。)また、その設定も専用サイトにて行なう事になっている。 上記はCTU設定サイト(https://ctu.fletsnet.com/CtuC101/init.do)に Tracert(トレースルート)コマンドを行なったものだが、こちらの表記が、IPv6アドレスである。

IPv6アドレスは、128bit(2128、約3.4×1038、約340澗(かん 1兆×1兆×1兆))という途方もない数の組合せとなり、128桁に及ぶ2進数表記は、間違いなくミスタイプするので省略させて頂くが、IPv6アドレス16bitづつつのフィールドに分け、コロンを挿んだ表記となる。 また、IPv4アドレスのように10進数で表記した場合無駄に桁が増えるので、各フィールドを16進数(Hexadecimal number)で表記する。16進数表記では、4bit分を1桁にできるので各フィールドは4桁となる。

4桁と書いたばかりだが、各フィールド内、上位の桁のは省略できるというルールがある。
例 [:0001:]→[:1:]、[:0000:]→[:0:]、[:0d70:]→[:d70:]。
フィールドを越えたの連続も一箇所だけ省略できる。二箇所省略した場合、どのフィールドを省略したのか判らないのでNG。
例 [2001:d70:7:0:0:0:0:2]→[2001:d70:7::2]。
これらによって視認性が良くなっている事が解る。次に、ipconfig /all コマンド実行。

クリックで拡大⇒ipconfig_all_small⇒[戻る]ボタンで復活。

先ずは『Ethernet adapter ローカルエリア接続』の項目に注目。Intel (R) PRO/1000 CT Network Connection と表示されているのが、PCマザーボード(MB)内蔵のLAN用チップセットである。 PCIカードでなくても、NIC(Network Interface Card)と呼ばれ、こちらのMACアドレス(Media Access Control addres)が、Ethernet(イーサネット)ではとても重要になる。 Physical Address と表示されている通り、NIC毎に固有のアドレスを持ち、48bit を8bitづつつのフィールドに分け、各フィールドを16進数で表記する。当然、各フィールドは2桁となる。
00-11-09-**-**-** と伏字にした意味は後述する。

MACアドレスの上位24bit(上位3フィールド)は、IEEE(Institute of Electrical and Electronic Engineers)からベンダーが登録割り当てを受けたもので、OUI(Orgaizationally Unique Identifier)と呼ばれる。当然、
OUI からベンダーを特定できる。⇒ http://standards.ieee.org/develop/regauth/oui/public.html で、001109 を調べてみると、『Micro-Star International(MSI)』であった。 国産メーカーPCではあるが、NICがMBに内蔵されているので、MB製造ベンダーになる。下位の24bitは各ベンダーが重複のないように設定したシリアル番号で、同一ベンダーの同一機種でもMACアドレスは重複しない。では、『MACアドレスは枯渇しないのか?』を考えて見る。

48bit 故、予約された7bit目のU/L(Universal/Local)bit と、8bit目のI/G(Individval/Group)bit を除いた、2(48−2) 約70兆の組合せとなり、全然大丈夫で良いのだろうか?世間では多くの人が『端末=PC』と思っているが、実は、通信型ゲーム機器等も立派な端末なのである。 その販売実績から下位24bit(224=16,777,216、約1678万)の組合せでは、まるで足りなくなった Nintendo 等は、多数のOUI(上位24bit)を取得しつつ事なきを得ている。 暫くは心配する必要はないが、将来ネット家電が急激に増えるとどういう状況になるかは不明である。

IPv6 if 4

多数のプロトコルそれぞれが、7つの階層(Layer)上に存在するのだが、link-layer address (データリンク層アドレス)は、Ethernetプロトコルが、物理(Physical)層(Layer 1)からデータリンク層(Layer 2)にまたがっている為の表現で、MACアドレスに等しい。IPv6 では、このアドレスを元にしてIPv6アドレスを自動的に生成する。

先ずは、preferred link-local という項目に注目してみよう。こちらが、リンクローカル・ユニキャストアドレスと呼ばれるもので、同一リンク上だけで有効な固定アドレスである。

fe80:: + Interface ID (64bit)

Interface ID は、48bit のMACアドレスから、64bit のEUI-64(Extended Unique Identifier-64)フォーマットに変換されたもので、7bit目のU/L(Universal/Local)bit を反転し、OUI と下位24bitの間に、ff:fe を封入しつつ自動生成される。

00-11-09-**-**-**
0000 0000-11-09-**-**-**
0000 0010-11-09-**-**-**
02-11-09-**-**-**
0211:09ff:fe**:****
211:9ff:fe**:****
fe80::211:9ff:fe**:**** ⇐(リンクローカル・ユニキャストアドレス)

このままでは、CTUに繋がった機器のみとの通信となるので、上の項目 Neighbor Discovery について調べてみた。
NTT技術参考資料からNDP (Neighbor Discovery Protocol 近隣探索プロトコル)を引用する。

4.5.4.2.2   NDP
IPv6 対応端末機器が IP 通信網に接続した際、RFC2461 に規定される NDP に基づき、重複検出を行なった後、ルータ検索メッセージを受信すると、IP 通信網から契約者回線毎に割り当てた 64bit のIPv6 Prefix を含むメッセージを当該 IPv6 対応端末に送信します。 IPv6 Prefix を含むメッセージを受信した IPv6 対応端末機器は、グローバル・ユニキャストアドレスを生成し、このアドレスについて再び重複検出を行い、重複がない場合は、接続用 IP アドレスとして使用することが可能となります。

解り難い内容だが、『IP 通信網に接続した』とは、『CTUに接続した』と読み替えると良いだろう。RFC**** とは、インターネット標準文書の事で、Request For Comments『(改善のための)コメント募集』の意がある。後述のDAD(Duplicate Address-Detection)が重複検出に相当する。
NDP 自体は IPv6 特有のもので、ICMPv6(Internet Control Message Protocol for IPv6)の拡張情報メッセージから、アドレス自動設定(Address Autoconfiguration)、アドレス解決(Addres Resolution)等を行ない、 IPv4の ARP(Address Resolution Protocol)を兼ねている。

ICMPv6 の拡張情報メッセージから抜粋すると、
Type=133  ルータ要請メッセージ (RS:Router Solicitation)
Type=134  ルータ応答メッセージ (RA:Router Advertisement)
Type=135  近隣要請メッセージ   (NS:Neighbor Solicitation)
Type=136  近隣通知メッセージ   (NA:Neighbor Advertisement)
Type=137  リダイレクトメッセージ(Redirect Message)、  等がある。

先に進む前に、少し用語を整理しておく。先ずは、数学(グラフ理論)の『ネットワークとは⇒点(node) と、線=辺(edge) の集合』との定義から、ノード(node)という表現が多用される事。また、ネットワークとネットワーク間を相互接続するゲートウェイ(玄関口)が、インターネットではルータ(router)に相当する事。そして、ルータ以外のノードをホスト(host)と呼ぶ事。 最後に、各ノードが通信を行なうには、互いの論理アドレス(IPアドレス)と物理アドレス(MACアドレス)双方を把握(アドレス解決)する必要がある事を覚えておこう。

ARP (アープ)では、ブロードキャストを使ってアドレス解決(IPアドレスとMACアドレスを対応させる)を行なっていたが、NDP では、マルチキャストを利用する。IPv6 では、先頭の8bit が『ff』から始まるのがマルチキャストアドレスだが、本来マルチキャストは、ユニキャストの一対一の通信に対して一対多の通信を指し、『映像配信』等を効率良く行う為のものだ。 次の4bit は、0(0000 固定 permanent)か、1(0001 短期的 temporary)のフラグを示す。フィールド最後の4bit が、到達範囲(スコープ Scope)で、一対多の通信では重要な部分だ。
1(0001)interface-local2(0010)link-local3(0011)subnet-local
4(0100)admin-local5(0101)site-local8(1000)organizationE(1110)grobal 等々。

ipv6_if_multicast

次が、::1の場合、全ノード(all-nodes)が対象で、::2の場合、全ルータ(all-routers)が対象となる。
::9が全RIPルータ等、詳細は省略する。上図では、ff02::1 は『リンクローカルスコープ全ノードマルチキャストアドレス』という事になる。
ff02::1:ff**:**** は、要請ノード(solicited-node)マルチキャストアドレスと呼ばれるもので、**:****には、IPv6アドレス(リンクローカルアドレス)の下位24bit を充て、NS(近隣要請)で宛先に使用する。同一リンク(セグメント)内に該当するノードが有れば、そのノードからNA(近隣通知)が返り、MACアドレス等を知らせる。 DAD では、自分(仮アドレス)宛のNSを送信し、NAが帰ってこない場合(1秒以内)重複がないと判断する。

RA(ルータ応答)は、ff02::1(all-nodes)宛にルータから定期的に発信される。内容は『ルータのMACアドレス』『Prefix』『生存時間』『自動アドレス設定にするかどうかのフラグ』・・・その他オプションとなるが、RAを受信したホストは『Prefix』情報等から、グローバル・ユニキャストアドレスを自動生成し、再び重複検出を行い、重複がなければ接続用IPアドレスとして使用する。 2001:a0b0:****:0:211:9ff:fe**:****(public)がそうだが、もう一つのアドレス(temporary)はランダムな数値で作られた匿名アドレスで、こちらについても重複検出は行なわれる。ホストがルータに最初に接続した時や、再起動した際に RS(ルータ要請 ff02::2 all-routers)を送信する。この場合は、即座にRA(ルータ応答)が返される。

IPv6アドレスの取得には、NDP の他、DHCPv6(Dynamic Host Configuration Protocol for IPv6)サーバーを利用する方法(自動取得する場合と、一部手動の場合がある。)、静的(Static つまりは、完全手動入力)に行なう方法がある。
賢明な方なら既にお気付きのように、CTU 自体がルータとして機能している訳だが、図下段のff02::1:ff**:**** のアスタリク部分には、CTU のリンクローカルアドレス下位24bit が収まる。 MACアドレスから生成される場合、下位24bit は MACアドレス、Interface ID、リンクローカル・ユニキャストアドレス、グローバル・ユニキャストアドレス、全て同じ値になる。ちなみに、OUI が 00-00-87 なので日立製のCTUとなる。

TOP

・階層(Layer)

Layer

ウェブ上の、ネットワーク解説の基礎編には『OSI参照モデル』なるものが必ず登場する。各階層の説明はあるのだがイマイチ理解できない。各プロトコルが、『どの階層になるのか?』という解釈も結構マチマチだ。我々シロウトはの色分け程度を理解すれば充分と思われるが、レイヤ3以下の機器に関しては、対応状況ぐらいは知っておく必要がありそうだ。

とりあえず、レイヤ5以上は無視して、先ずは物理層(レイヤ1)の機器を見てみると、リピータHUB等がある。こちらでは、信号の増幅といった仕事しかしないようだ。Ethernetでは、一回線上の複数のノードが同じタイミングで送信すると衝突(collision)が発生するので、CSMA/CD(Carrier Sense Multiple Access with Collision Detection)という方式が導入されている。 送信したいホストはまず、他のホストが回線を使用していないかキャリア検知(CS)を行い、回線が空いていればマルチアクセス(MA)に移って送信を行ない、その後、衝突検知(CD)で確認する。衝突が検知された場合、ランダムな時間経過後、再送信する。一定時間だと再衝突の可能性が高いからだ。リピータHUBに接続された全ホストのように、衝突が起こる可能性のある範囲をコリジョンドメインと呼ぶ。

データリンク層(レイヤ2)の機器には、スイッチングHUB(以下、スイッチ)、ブリッジと呼ばれるものがある。こちらは、物理アドレス(MACアドレス)を認識し、宛先ノードが接続しているポート以外には信号を送出しない為、コリジョンドメインを分割できる。ただ、論理アドレス(IPアドレス)は認識できない為、ブロードキャストは通過してしまう。ブロードキャストが到達する範囲をブロードキャストドメインと呼ぶ。

ネットワーク層(レイヤ3)の機器には、ルータ、レイヤ3スイッチ等がある。論理アドレス(IPアドレス)の方も認識できる機器なので、ブロードキャストドメインを分割できる。この層の機器は、自身の持っている経路表(ルーティングテーブル)に従い、宛先IPアドレスまでの適切なルートを判断し、パケットを転送する。インターネットでは重要な役割を持つ。

トランスポート層(レイヤ4)以上は、特殊な場合を除くと各ホストが処理をする。インターネットの中間に存在するルータやスイッチはできるだけ転送のみに徹し、この層以上の複雑な処理は、エンド(端)に存在するホストが担当する。これを『エンド・ツー・エンド』の原則と呼ぶ。

Layer_2

パケット(packet 小包の意)という単位(PDU)は今日子供でも知っているが、元々は時分割多重方式(Time Division Multiplexing)からの発想で、一つの回線で通信の際、一つのデータの転送が終ってから次のデータを転送するのでは効率が悪い為、時間ごとに各データを分割して送信し、受信側で分割された各データを集めて元通りに戻す所から来ている。

アプリケーション層で作成されたメッセージは、トランスポート層に送られた後分割され、それぞれにポート番号や順序番号等を含んだL4ヘッダを付加し(TCPでの単位は、セグメント)、次のネットワーク層に送られた後、送信元IPアドレスや宛先IPアドレスを含んだL3ヘッダを付加し(単位はパケット)データリンク層に送られる。 データリンク層では、宛先MACアドレス等を含んだ固定(112bit=14bytes)サイズのL2ヘッダと、簡単なチェック機能を持ったFCS(Frame Check Seaquence :4bytes)というトレーラーを付加し(単位はフレーム)、ビット列情報として物理層に渡された後、電気信号に変換され送信に至る。

下層に転送する際に、ヘッダ等を付加する事をカプセル化(encapsulation)と呼ぶ。隣接した上下層については認識するが、離れた階層のデータ等全く関知しないようになっている。宛先に至るまでにスイッチやルータ等を経由するが、スイッチではL2ヘッダ、ルータではL3ヘッダを参照してルーティングが行なわれる。その際にスイッチではL2のカプセル開放・カプセル化、ルータではL3のカプセル開放・カプセル化が行なわれる。

無事宛先まで伝送された電気信号はビット列情報に変換され、順次カプセル開放(ヘッダ等を取り除いて隣接上位層に送る)が行なわれた後、分割されたデータを復元し、所定のアプリケーションが処理をする。

TOP

・VLSM(可変長サブネットマスク  Variable Length Subnet Mask)

IPv6アドレスの中で『Prefix(プレフィックス)接頭辞の意』の説明をしていなかった事を思い出した。難しく説明すると、『IPアドレスでは、ネットワークとして利用する部分とホスト(端末)として利用する部分を分離し、ホスト部のIPアドレスをネットワーク部に束ね、それをルータの経路情報としている。』つまり、『ネットワーク部が判れば「××のネットワーク」という一つの宛先に束ねる事ができる。』ので、ネットワーク部とホスト部を識別する為の『ネットマスク』という概念が用いられるようになり、その一つの表記が『Prefix』となる。 例として、IPv6アドレスの割り当てられている一部のアドレスを示す。

IPv6アドレス 2進数← Prefix →16進数 アドレス空間内の割り当て
グローバル・ユニキャスト  0010000000000000 2000::/3 1/8
0010000000000001  2001::/16 1/65536,IPv6 インターネット
0010000000000010  2002::/16 1/65536,6to4 トンネリング
ユニークローカル 1111110000000000 fc00::/7 1/128
リンクローカル 1111111010000000 fe80::/10 1/1024
マルチキャスト 1111111100000000 ff00::/8 1/256

/(スラッシュ)に続いた数字(10進数)で、上位から何ビット目までが定義されているかが判る。IPv6アドレスでは膨大なアドレス空間を有する為、グローバル・ユニキャストアドレスではホスト部を64bit と固定するのが普通で、ネットワーク部を識別する必要はないが、ネットワーク部自体を階層的に表現する為に使用される。 グローバル・ユニキャストアドレスは上位3bitが指定されているが、現在インターネット用に割り当てられているアドレスは2001::/16 で、2003::/16 〜 3ffd::/16 は未割当てとなっている。 グローバル・ユニキャストアドレスは 2 から始まると勘違いしやすいが、4bit目がの場合は 3 から始まる。ユニークローカルアドレス fc00::/7 は、8bit目がの fc00::/8 と、8bit目がの fd00::/8 を含んでいる。 つまり、プレフィックス表記はネットワークの規模を表し、指定外の下位bitを全てにする事で、そのネットワーク全体を示す訳だ。
6to4
 については、http://technet.microsoft.com/ja-jp/library/cc163044.aspx より引用する。

IP Version 6 Helper Service は、インターネット プロトコル Version 4 (IPv4) ネットワーク上でインターネット プロトコル Version 6 (IPv6) の接続を行います。IPv4 で指摘されているアドレスの枯渇や、セキュリティ、自動構成、拡張性などに関する多くの問題を解決するために設計されました。・・・このサービスは「6to4」と呼ばれることもあり、IPv6 対応のサイトとホストが、インターネットなどの IPv4 インフラストラクチャ上で IPv6 を使用して通信できるようにします。 IPv6 のサイトとホストは、6to4 のアドレスプレフィックスとインターネットを使用して通信できます。・・・6to4 は RFC 3056 で説明されているトンネリング技術です。6to4 ホストでは手動の構成は必要なく、標準の自動構成を使用して 6to4 アドレスを作成します。6to4 は 2002:WWXX:YYZZ::/48 というグローバル アドレス プレフィックスを使用します。この WWXX:YYZZ はサイトまたはホストに割り当てられた IPv4 のパブリック アドレス (w.x.y.z) のコロン区切りの 16 進表記で、6to4 の NLA (Next Level Aggregator) 部分とも呼ばれます。・・・

冒頭の『ネットワーク部・ホスト部を分離して、IPアドレスをネットワーク部に束ね、経路表に掲載する情報を減らす。』方法として、IPv4では、当初『クラス別 IPアドレス割り当て』という方式が採用されていた。クラスAとは、2進数表記された先頭1bitが[0]で定義され、アドレス空間内の割り当ては /1 より1/21=1/2と、全体の半分に及ぶ。 クラスBでは、先頭2bitが[10]で定義され、アドレス空間内の割り当ては /2 より1/22=1/4となる。クラスCでは、先頭3bitが[110]で定義され、アドレス空間内の割り当ては /3 より1/23=1/8となる。
ネットワーク部は、それぞれ、 →/8 →/16 →/24 となる為、クラスA一つのネットワークに、2(32-8)−2=224−2⇒約1677万ものホストを収容できる事になる。 クラスBでは、2(32-16)−2=216−2=65534、クラスCでは、2(32-24)−2=28−2=254 のホストを収容できる。なお、ホスト部の2進数表記で、全てはネットワーク自体を示し、全てはブロードキャストとなり、双方共ホストに割り当てができない。

90年代ウェブの増加や、ISP(インターネットサービスプロバイダ)の登場により急速にインターネットが普及した頃には、既に、クラスAは米国の大学機関等におおかた割り当てられた状況で、80年代から多数のホスト数が必要でない場合でも、簡単にクラスBが割り当てられていた影響もあり、クラスBも枯渇状態。代わりに、連続したクラスCが割り当てられるようになった。 ただ、一万のホストを持つ会社でクラスBが割り当てられた場合は経路を一つに集約できるが、クラスCでは10000/254、40経路となり、その負荷により当時の機器では通信に支障があったようだ。『クラス別 IPアドレス割り当て』は、90年代早々に行き詰まる事になる。

1992年に、短期的な解決策として『VLSMCIDR』の採用、長期的な解決策として『アドレス空間を拡張した次世代IP』への移行という方針が示される。可変長サブネットマスク(VLSM)とは『クラスを廃止して、ネットワーク部分を可変長にした IPアドレスの集約方式』との解説があるが、その前にサブネットマスクを見てみよう。 『ローカルエリア接続のプロパティ』から『インターネットプロトコル(TCP/IP)』のプロパティを覗いてみる。

TCP/IP

一般家庭のPCでは、『IPアドレスを自動的に取得する』が選択されてるケースが多いだろう。その場合は、『DHCP Client』という自動設定サービスが起動されており、『DHCP Server』から、IPv4アドレスを取得している状態だ。 ちなみに、サービスを提供するのがサーバー、受ける側をクライアントと呼ぶ。サブネットマスクも、1byte(=1octet) 毎に10進数(Decimal number)に変換しつつドットを挿んだ状態だが、こちらの値『クラス別 IPアドレス割り当て』では、255か、0 しかない。 クラスAは、255.0.0.0クラスBは、255.255.0.0クラスCは、255.255.255.0 となり、2進数表記では、1がそれぞれ、 →8個、 →16個、 →24個 連続で並び、ネットワーク部を表している。
この区切を可変長にしたのが『VLSMCIDR』方式である。

図のクラスCの例から、2進数表記にした IPアドレスとサブネットマスクを、アンド演算する。

198.168.50.9
255.255.255.0

11000000 10101000 00110010 00001001
11111111 11111111 11111111 00000000

アンド素子

11000000 10101000 00110010 00000000

プレフィックス表記では、198.168.50.0/24 となり、そのネットワーク部を表す。

次は、198.168.50.0/24 と、198.168.51.0/24 の連続したアドレスを使用できると仮定する。
198.168.51.1 の IPアドレスを2進数表記の上、23bit が1のサブネットマスクとアンド演算する。

11000000 10101000 00110011 00000001
11111111 11111111 11111110 00000000

11000000 10101000 00110010 00000000

プレフィックス表記では、198.168.50.0/23 のネットワークに集約できた事になる。

この場合のサブネットマスクは、255.255.254.0 となり、198.168.50.0/23 では、2(32-23)−2=29−2=510 のホストを収容できる。 サブネットマスクは、2進数表記した場合上位桁が全て 1の必要があり、下位フィールドは、0128192224240248252254255 から選択される。

CIDR(サイダー)の解釈を抜粋すると、『そのアドレス空間は 194.0.0.0〜207.255.255.255 である。32ビットで表すIPアドレスの内、ネットワーク・アドレスに25ビット以上を割り当てられる為、クラスCの割り当て単位である256個以下のホストで構成するサブネットを多数作れる。』という事になる。
運用は、NIC(Network Information Center)等の団体がISP毎にアドレス・ブロックを割り当て(assignment)て、エンドユーザーへの個別割り当てはISPが担当する。エンドユーザーのIPアドレスはISPのアドレス・ブロックに含まれ、その経路情報はISPの経路情報に集約される。インターネット全体で利用する経路情報が大幅に削減される訳だ。現在、日本ネットワークインフォメーションセンター(JPNIC)が新規に割り当てるIPアドレスは、CIDR方式を採用している。

・おまけ

10進数から2進数に変換する一番簡単な方法は、電卓を呼び出し[表示]から[関数電卓]クリック、[10進]選択を確認後、目的の10進数値をタイプして[2進]を選択すると変換される。

関数電卓

こんな事を堂々と書いていると、『ブーイングの嵐』となるので、紙と鉛筆しかない場合も説明しておこう。

2で割る 余り 2で割る 余り
254÷2=127 15÷2= 
127÷2=  63 ÷2= 
63÷2=  31 ÷2= 
31÷2=  15 ÷2= 

2で割った商を再び2で割り、これを商が0になるまで繰り返す。大事なのは『余り』で、最後の余りから順序を逆に並べた『11111110』が目的の値となる。 割算が8回より少なく終り、8桁に揃える必要がある場合は足りない分だけ0を上位桁に並べれば良い。

TOP

・NAT(Network Address Translation:ネットワークアドレス変換)

1995年頃の予想では、IPv4アドレス は既に1、2年も前に枯渇している筈であったが、2009年終盤も細々と生き残っている。その一番の理由とされるのが、NAT(ネットワークアドレス変換)の存在である。 ポート番号も変換する場合、NAPT とも呼ばれる。

RFC1918では『10.0.0.0/8172.16.0.0/12192.168.0.0/16 のネットワークに限っては、 IPアドレスをインターネットに広告(経路情報の通知)しないことを条件に誰もが自由に使って良い。』と規定しており、このアドレスをプライベートIPアドレスと呼ぶ。 クラスAの『10.0.0.0/8』は理解しやすいが、少々判り難いのがクラスBの『172.16.0.0/12』で、172.16.0.0/16172.31.0.0/16 の連続したアドレス空間を指す。 同様にクラスCの『192.168.0.0/16』は、192.168.0.0/24192.168.255.0/24 を指す。

ブロードバンドルータ経由でインターネット接続している場合の多くはプライベートIPアドレスを使用しており、逆に、このアドレス以外がグローバル(一意的な)IPアドレスと覚えておけば良いだろう。
プライベートIPアドレスは、連続したアドレス設定をする事で自由な集約が可能となり、規模の大きい組織内ネットワークも効率的に管理できる。ただし、外部組織でも同じくプライベートIPアドレスが使用される為、外側に向けてはグローバルなアドレスに変換する必要がある。 表現を変えると『貴重なグローバルIPv4アドレスを、複数のホストで共有する。』為に考えられたものが、NAT とも言える。

192.168.24.0/24 のプライベートネットワークとインターネットがルータ経由で接続されていると仮定してみよう。 ルータのWAN 側には 203.178.136.21 というグローバルIPアドレス、LAN 側には 192.168.24.1 というプライベートIPアドレスがつけられているとする。
このネットワーク内にあるPC(192.168.24.60)が、ググる為に www.google.co.jp(72.14.203.104)に接続するには、まずルータ(192.168.24.1)にパケットを送信する。 パケットを受信したルータは、パケットの送信元IPアドレス(192.168.24.60)を自身のグローバルIPアドレス(203.178.136.21)に書き換えて、www.google.co.jp と接続する。
 www.google.co.jp はルータからのパケットを受信後、今度はルータ(203.178.136.21)にパケットを送信する。ルータはパケットを受信後、宛先をグローバルIPアドレス(203.178.136.21)からプライベートIPアドレス(192.168.24.60)に変換する。 書けば長くなるが、当のPC(192.168.24.60)を操っている本人は、こんな事を意識せずにググれる訳だ。ただ、一部のアプリではデータ部に送信元IPアドレス(192.168.24.60)を埋め込む為、データ部のアドレスがそのまま参照されると不具合が起こる。

『賢明な方なら既にお気付きのように、CTU 自体がルータとして機能している。』と、以前に記述したが、CTU に接続された各ホストは、初期状態で 192.168.24.0/24 のプライベート(IPv4)アドレスも割り当てられる。 CTU 自体、『NATルータ』、『DHCP Server』、『DNS Server(一部分)』、デフォルトゲートウェイとして機能するようだ。 詳細は、もう少し学習してからにするが、IPv4 と IPv6 のデュアルスタックとなっている。

TOP

・MTU(Max Transfer Unit)

こちらを訪れる多数の方は、ネットワーク何某より、『どうやれば快適にインターネットを活用できるか?』しか興味がないだろう。KEW自身も基本は同じであり、『Cisco Router の設定』等には全く興味はないが、インターネット上の情報は『玉石混交』であり、結局、頼りになるのはネットワーク技術者による『その辺まで踏み込んだ情報』になってしまう。

ネットワークエンジニアとして』というサイトの『BフレッツのMTUサイズ(1492ではなく1454の理由)』を、猿真似して『Flet's ADSL(非対称デジタル加入回線)の論理イメージ』の図を作ってみた。

flet's ADSL

図を少しでも見易くする為、PCを ADSL Modem に直結した(セキュリティー的にはかなりヤバイ)例とした。それでも、ISP に辿り付くまでに多数のカプセル化(encapsulation)、カプセル開放が行なわれている。
PPP(Point-to-Point Protocol)を初めに勉強しようと思っていたが、詳しく解説されたサイトがなかなか見つからない。電話回線(ダイアルアップ接続)時代では必須の筈だったのだが・・・。Ethernet が主流の現代、PPPoE(PPP over Ethernet)をわざわざ使用するのは、『ユーザー認証』、『グローバルIPv4アドレスの自動取得』等のPPP機能を利用する為のようだ。

Flet's ADSLでのPPPoE接続は、NTT収容ビル内にある機器(DSL集合モデム DSLAM)までだそうで、Flet's Cloud(辞書では『雲海』が最初にヒットするが、こちらの業界では『網』と訳す。)では、L2TP(Layer 2 Tunneling Protocol)が使用される。
ATM(Asynchronous Transfer Mode:非同期転送モード。ちなみに現金自動預け払い機は、Automatic Teller Machine)、AAL5(ATM Adaptation Layer 5)、Bridge、Ethernet、PPPoE、PPP(Point-to-Point Protocol)等々、奇妙な単語が続くが、『L2TP とは、 ダイヤルアップ通信で使用されている PPP で、インターネット等の公衆回線網上に、(IPパケットを所定のカプセルに収納する事で)あたかも通信相手と直結しているかのような仮想的なトンネルであるVPN(Virtual Private Network)を作って接続を可能にする事である。』と考えれば良い。
BAS まで到達してやっと、ISP(インターネットサービスプロバイダ)から、『ユーザー認証』、『グローバルIPアドレスの自動取得』等が行なわれる。

本題の MTU であるが、Ethernet のフレームサイズが『64〜1518bytes』とされているので、その最大値から『Ethernet header + FCS = 18bytes』を引き算した『1500bytes』としたい所だが、残念ながら、経路途中に各種カプセル化から発生するヘッダ分のロスがあり、一番ロスの大きい部分を基準に MTU を設定しなければならない。 カプセル化したものを、またカプセル化する事によって肝心のデータ領域が圧迫されている訳だ。

L2TPが実装されているFlet’s 網におけるMTU値
Ethernet
frame
- Ethernet
header/FCS
- IP
header
- UDP
header
- L2TP
header
- PPP
header
= MTU
1518 18 20 8 16 2 1454

PPPoE が実装されている Ethernet 型 LAN におけるMTU値
Ethernet frame - Ethernet header/FCS - PPPoE
header
- PPP
header
= MTU
1518 18 6 2 1492

MTU 1454bytes(octet)から『IPheader + TCPheader = 40bytes(octet)』を引き算した『1414bytes(octet)』が、MSS と呼ばれる。 レイヤ4のデータ部分に当たる『セグメント』の最大サイズだ。

TCP(Transmission Control Protocol)ヘッダ
送信元ポート番号
(16ビット)
宛先ポート番号
(16ビット)
シーケンス番号
(32ビット)
確認応答番号
(32ビット)
ヘッダ長
(4ビット)
予約ビット
(6ビット)
コードビット
(6ビット)
ウィンドウサイズ
(16ビット)
U
R
G
A
C
K
P
S
H
R
S
T
S
Y
N
F
I
N
チェックサム
(16ビット)
緊急ポインタ
(16ビット)
(オプション)

ヘッダの中身を表示する際は、32bit=4bytes(octet) 単位で改行するのが掟のようだ。TCPヘッダのサイズはオプションがない場合、32bit×5行=160bit ⇒ 20bytes(octet)となる。『ウィンドウサイズ』が、確認応答無しに一度に受信できるデータバッファ量を表す。 16ビットなので最大値は 65535 となるが、ここが通信速度に見合った適度な値(MSS の整数倍)になると、効率良くデータを受信できる。RWIN(TCP Receive Window Size)値を設定する事で実現できるが、TCPでは通信相手同士が互いに現在の『ウィンドウサイズ』を通知しあう事で、フロー制御を行なっている。

RWIN 値を 65535 以上に設定する場合は、Window scale (RFC1323)というオプションを使用する事になり、『オプションを適用するとTCPヘッダサイズが増えて、MTU − 40bytes(octet)=MSS の値が違ってくるのでは?』と少々心配になるが、 こちらのオプションは『3ウェイハンドシェイク』と呼ばれる TCP 独自のコネクション確立の際にのみ適用され、データ転送時においては『MTU − 40bytes(octet)=MSS』はキープされている。

IPv4(Internet Protocol version 4)ヘッダ
Version
(4ビット)
ヘッダ長
(4ビット)
TOS
(8ビット)
パケット長
(16ビット)
識別子
(16ビット)
フラグ
(3ビット)
フラグメント・オフセット
(13ビット)
TTL
(8ビット)
プロトコル番号
(8ビット)
ヘッダ・チェックサム
(16ビット)
送信元IPv4アドレス
(32ビット)
宛先IPv4アドレス
(32ビット)
オプション
長さ不定
パディング

上記の流れ通り、やはり IPヘッダもオプションがない場合 20bytes(octet)となる。では、経路途中に MTU 値が更に低いネットワークが存在した場合を考えて見よう。その際、間近のルータはフラグメント(断片化)処理を行なう。要はパケットを更に細分化するのだ。細分化されたデータには、それぞれ IPヘッダが付加され、基本的にヘッダはコピーされるのだか、『フラグ』、『フラグメント・オフセット』が書き換えられる。 

『フラグ(3ビット)』の最初のビットは未使用で値は常に0。2番目がDF(Don't Fragment)bit で、1(分割禁止)、0(分割可)となる。3番目がMF(More Fragment)bit で、1は、『途中のパケット』を示し、0の場合『最後のパケット、もしくは、断片化無し』を示す。『フラグメント・オフセット(13ビット)』は、フラグメント処理前の IPデータでは、どの位置にあたるかを示すものだ。『識別子』は、任意の初期値から、パケット毎に1つ加算されるが、フラグメント処理後の各 IPバケットでは同じ値となる。

レイヤ3のネットワーク層では、パケットの到達順序など一切保障されていないが、『フラグ』、『フラグメント・オフセット』、『識別子』のデータから、フラグメント処理前の IPデータには復元できる。しかし、それはフラグメント処理された全てのテータが、時間内に正常に揃った場合だけで、欠落がある場合はパケット自体が破棄される。TCPのような、足りないデータの再送要求等の機能は一切無い。そもそも、途中経路でフラグメント処理を行なう事自体が効率が悪い事であり、IPv6 では、フラグメント処理は行なわれない。

ICMP(Internet Control Message Protocol)共通ヘッダ
Type
(8ビット)
Code
(8ビット)
ICMPヘッダ・チェックサム
(16ビット)

NDPの説明で、ICMPv6の一部機能を紹介したが、ICMPの他の機能も見てみる。ヘッダ自体は『タイプ』、『コード』を示す、4bytes(octet)の共通ヘッダ部分と、『各タイプ毎のオプションヘッダ』からなる簡潔なものだが、結構色々な場面で使用される。

ping

ping は、接続の確認等に良く使われるコマンドだ。上の例では、フレッツ・光プレミアムの MTU 値を調べる為に使用しているが、こちらでも ICMPが利用されている。 『Packet needs to be fragmented but DF set』とは、『パケットサイズからフラグメント処理する必要があるが、分割禁止(Don't Fragment)とされている。』というエラーメッセージである。ping -f -l 1410 [Address] を実行すると下のパケットが送信される。

ping (IPv4 header + ICMPv4 header + Data)
Version
(4/0100)
ヘッダ長
(5/0101)
TOS
(0/0000 0000)
パケット長
(1438/0000 0101 1001 1110)
識別子
(16ビット)
フラグ
(010)
フラグメント・オフセット
(0 0000 0000 0000)
TTL
(128/1000 0000)
プロトコル番号
(1/0000 0001)
ヘッダ・チェックサム
(16ビット)
送信元IPv4アドレス
(32ビット)
宛先IPv4アドレス
(32ビット)
Type
(8/0000 1000)
Code
(0/0000 0000)
ICMPヘッダ・チェックサム
(16ビット)
識別子
(16ビット)
シーケンス番号
(16ビット)
ping データ(abcd・・・等の無意味なファイル)
(1410 bytes)

ICMP Type = 8 エコー要求(Echo)メッセージ(ICMPv6 は、Type = 128)が送信される訳だが、-f オプションから分割禁止のフラグ(010)が適用され、次の -l 1410 オプションから、ping データサイズが[1410 bytes]と指定される。 宛先ホストヘ(の全経路で)無事パケットが転送されると、要求に応じて、ICMP Type = 0 エコー応答(Echo Reply)メッセージ(ICMPv6 は、Type = 129)が返信される。一般に ping が通る最大データサイズに、IPv4 header 部分の 20bytes と ICMPv4 header 部分の 8bytes を加えた値を MTU 値とする。

Reply from 66.249.89.103: bytes=64 (sent 1410) time=17ms TTL=51』等が、エコー応答を受信した事を示している。4個 Reply があるのは、ping では指定しない場合、4回 Echo メッセージを送信する為である。 time=17ms は宛先ホストとの往復遅延時間で RTT 値そのものだが、 RWIN 値設定が目的の際は、少なくとも(-n オプションを使用して)10回の Echo メッセージを送信し、その Reply から平均値を測定する。
TTL(一般に『生存時間』と訳される)は、通過できるゲートウェイ(ルータ)数を示すもので、一つのゲートウェイを通過する度に一つ減じて行く宿命を持っている。ping で表示されるのは、宛先ホストが設定した TTL 値から、送信元ホストに Reply を返す際に通過したゲートウェイ(ルータ)数を減算したものだ。

ping データサイズが[1411 bytes]の際、『Packet needs to be fragmented but DF set』と示されているが、これは宛先ホスト到達以前のゲートウェイ(ルータ)から、 Type = 3 宛先到達不能(Destination Unreachable)エラーメッセージ(ICMPv6 は、Type = 1)の Code = 4 『Fragmentation Needed and Don't Fragment was Set』が、返信された事になる。

tracert

冒頭の、IPv6 項目で既に登場している『tracert』も ICMPが利用されている。こちらでは、IP header 内の TTL 値がキモとなる。ICMP Type = 8 エコー要求(Echo)メッセージ(ICMPv6 は、Type = 128)が送信されるのは同じだが、TTL 値の初期値が『1』のメッセージが3回送信される。間近のゲートウェイ(ルータ)は、TTL 値を一つ減じて『0』とし、ICMP Type = 11 時間超過(Time Exceeded)エラーメッセージ(ICMPv6 は、Type = 3)を3回返し、ICMPv4 では Code = 0 『Time to Live exceeded in Transit』が付加される。そのエラーメッセージから、往復遅延時間、ゲートウェイ(ルータ)のIPアドレス等が解るのだ。次に、TTL 値を『2』にしたエコー要求を行い、2つ目のゲートウェイの情報を得、順次 TTL 値を増やして行き、宛先ホストに到達するまで繰り返す。デフォルトでは、最大30ホップまでの制限となる。なお、TTL 値が『0』となったエコー要求パケットは破棄される。*(アスタリク)が表示されているゲートウェイ(ルータ)では、ICMP へのフィルタリングが行なわれておりエラーメッセージは返信されない。

ICMP では、レイヤ4以上のデータは一切含まれていない事から、これらのコマンドでエラーが無いのにネットワークの異常がある場合は、レイヤ4以上(一般には各ホスト)の問題と思われる。

ICMP/type,codes の詳細はこちら⇒ http://www.iana.org/assignments/icmp-parameters

つづきは、こちら⇒TCP

参考図書『これならわかるネットワーク インターネットはなぜつながるのか?』長橋賢吾 著(講談社ブルーバックス)

TOP

Kitamura Engineering Workshop