ネットワーク層 (Network Layer) について

ネットワーク層の機能 = IP (Internet Protocol)

IP とは

IP とは、OSI の7階層のネットワーク層(3層目)に対応する、複数のネット ワークを繋げるためのプロトコルです。複数のネットワークをつなげられるよ うになって、はじめてネットのネットである Internet が構成できるわけです。
1つ下の層である データリンク層 で、ある 1つの ネッ トワークに継った複数のコンピュータがつながることが保証されます。細かく 言うと、MACアドレス というインターフェース(ネットワークの 出入り口であるハードウェア) が固有にもっている 6オクテット ( 48 ビット)の数値で識別され、 CSMA/CD(有線), CSMA/CA(無線) 等のプロトコル にのっとってフレーム(=データの小さな 塊) 単位でのデータ交換を可能としています。
「インターネット」の爆発的普及によりIPアドレス(後述)が枯渇寸前に なっていて(アジア地域では、2011年4月に枯渇しました)、 IPv6 (version 6) 等の次世代技術も開発されていますが、この資料では現在 一般的に使われてるIP (version 4) について述べていきます。
IPv6 ではアドレスが 128 ビットになって桁違いにアドレス空間が広がってい るので当分は枯渇することはないです。(新規に接続申請する組織は、IPv6 し か貰えないので)今後は IPv6 が嫌でも少しずつ普及していくとは思いますが、 すぐに今の (IPv4) ネットワークが使えなくなることも考えにくいです。

IP アドレスとは

インターネットの世界の中で一意に定まった住所(アドレス)のよ うなものです。もう少しいうと、IP プロトコルを使って通信しているコンピュー タを識別するための住所です。住所がわからないとデータをどこに届ければい いかわからないので、まずはその住所の書き方を決める、という感じです。
MACアドレスもアドレスじゃないか、と思うかもしれませんが、MACアドレスは 機器固有のものであってアドレスというよりは機器認識番号という感じで、ネッ トワークとの関連は原則ないです。それに対して IP アドレスはネットワーク を意識してソフトウェア的に設定できるもので、まさにアドレス=住所です

例えばある家をあらわすのに「白壁で、部屋は4つあって…」と詳細に説明す るか(確かに世界で1つしか無いかもしれないが、近所に無い限り、それが何 処にあるのかを探す方法は現実的にはない)住所で説明するか、という感じで しょうか?(詳細は後述)

IP ネットワークとは、IPアドレスを使ってIPデータグラム (datagram, データの塊、データリンク層でのフレームに対応)を適切 な宛先に転送するネットワーク、と言うこともできます。

普通の郵便で例えると、宛先がきちんとかかれていないと郵便は届かないわけ で、 Internet 上での「きちんとした宛先」がIPアドレスと言えるわけです。

例えば阪南大学の住所は国際的表記(?)では

5-4-33, Amami-higashi, Matsubara, Osaka 580-8502 JAPAN
ですが、これは他にはありえないわけで、世界中で1つです。IPアドレスも同 様で、Internet に「直接」接続しているコンピュータについては世界中のコ ンピュータそれぞれに別々のIP アドレスが割り振られています。
実は「直接」繋がってない場合も結構多くあります。そのような時は プライベートアドレス というものを使います(後述)。

IPアドレスの表現

住所の場合は前述のように数字、文字を 使って書くわけですが、IPアドレスはどうなってるかとい うと、40 億くらいまでの単なる整数です。 細かくいうとIP(v4) アドレスは 32ビット = 4オクテット で表現されます。つまり、0か1かが
10010110000010011111111001010001
のように32個並ぶわけですが(10 進数だと 2517213194) 普通は8ビットずつ区 切って、
10010110 00001001 11111110 01010001
とし、さらに各々を(なぜか16進数ではなく) 10進数に直して
150.9.254.81
のように書くのが普通です。つまり、10進数で 0〜255までの数の、4つ 組 でIP アドレスというものが成り立っていてるというわけです。
ちなみにIPv6 ではアドレス 128 ビットを、32桁の16進数 (32x4bit) で表しま す。

ネットワークアドレスとホストアドレス

上でみたように、コンピュータそれぞれに異なるIPアドレスが割り振られてい て、そのアドレスによって通信が可能となってるわけです。が、単純にアドレ スだけで行き先を探すのは結構不便かつ無駄があります。というのは例えば 「大阪府松原市天美東...」から「大阪府吹田市江の木町...」に郵便を送る場合 郵便やさんが沖縄から一軒ずつ順番に宛先を探すとか、東京に一旦集めてそっ から配送する、ということはしないわけです。

Internet でも同様に考えて、近くのコンピュータにデータを送るのに世界中 に問い合わせたり遠くのコンピュータを経由することは原則しません。

VPN 等の例外もあることはあります。
これを実現するのが「ネットワークアドレス」「ホストアドレス」です。IP アドレスというのは実は である、ということを理解してください。 住所に例えると、「大阪府」がネットワークアドレス、「松原市天美東...」 「吹田市江の木町...」がホストアドレスといった感じです。

先の例では、150.9. が阪南大学 (hannan-u.ac.jp) のネットワークアドレス で、254.81 が puffin のホストアドレス、となるわけです。

ホストアドレスが全て1であるアドレスはブロードキャストアドレス (そのネットワーク全体を示す)で、全て0であるアドレスはネッ トワーク自身のアドレスになります。つまりこの2つにはホスト (コンピュータ)を割り当てることは出来ません。

アドレスクラス

IPアドレスはクラスというもので分類されています。クラスは、その 接続できるコンピュータ数(組織の規模?)に応じて 上位1オクテッ トの数字で区別されています;
  1. class A : 1-126 ::= 上1ビットが 0
    つまり、2進数で00000000〜 01111111 です。ただ、 00000000 と 01111111 は使われないです。01111111 (127) は、ローカルループアドレ ス(自分自身)を表すのに使われます。
    です。class A は1オクテットがネットワークアドレスで、残り3オクテット (24bit) がホストに割り当てられます。

  2. class B : 128-191 (上2ビットが 10)
    つまり、2進数で10000000 〜 10111111
    です。2オクテットがネットワークアドレス、2オクテットがホストアドレスです。

  3. class C : 192-223 (上3ビットが 110)
    つまり、2進数で11000000 〜 11011111
    で、3オクテットがネットワークアドレスです。

    (クラスD、Eは略)

例えば、class B のネットワークアドレスを割り当ててもらっている組織(阪 南大はこれ。150.9.0.0/16)

というふうに x.y.z.u/dd (スラッシュのあとに数字をつける) のよ うに書いて、上から何ビットがネットワーク部分かを明示する方法がよく使わ れますので、慣れておいてください。
の場合、組織内で使えるアドレスの総数は、自分で設定できる範囲が 32-16=16 ビットのこっている、ということで
 216-2 (all 0 と all 1 は除く) => 65534
となります。

原則として組織に割り当てるネットワーク(IPアドレス空間)はクラスの切れ 目に応じたものだったのですが、最近では IP アドレスが不足しているので、 CIDR (Classless Inter-Domain Routing) が利用されたりしています。 これは、切れ目がオクテットの境ではなく、たとえば上30ビットがネットワー クアドレスで、下2ビットがホストアドレス、というものです、この場合 all 0/all 1 を除くと実質割り当てられるホスト数は2つだけになります。これによ り、アドレス空間をさらに有効活用できることになります。

阪南大学に 6万台もコンピュータを設置するということはまずないわけで、そ れは則ち多くのアドレスが放置(死蔵)されている、ということになり、CIDR はこれを改善するための技術ということができます。

…ということで、阪南大学は 2022年3月に、150.9.254.0/23 のネットワーク 以外を放出(売却)しました。以下の説明は、それ以前の構成を前提に書か れているので注意してください。

150.9.0.0/16 が阪南大学のネットワークである、というふうなIPアドレスの 管理は世界で共通の枠組みでされているわけですが(そうでないと、世界で一 意を保障できず、接続が保障できなくなる)、実際にどうなっているかという と、ICANN(Internet Corporation for Assigned Names and Numbers) から委託された IANA(Internet Assigned Number Authority) が中心となってアドレス空間(≒ネットワーク)を管理し、各種のイン ターネットレジストリと呼ばれる組織が割り振り・割り当てに関するポリシー の作成や、実際の作業を行っています。
上述のように、アジア担当下部組織であるAPNIC の管理する IP アドレスは、 2011 年 4 月に枯渇しました。
アドレスの割り振り・割り当ては階層 構造となっており、下位層にいくに従ってよりエンドユーザーに近い場所での 割り振り・割り当てを行う構造となっています。

グローバルアドレスとプライベートアドレス

上でも少しのべたように、IP アドレスは不足気味でずっと推移しています。 実はサブネットで切るのも効果はあるのですが、1つの組織で全てのコンピュー タに世界で一意のIP アドレス(これをグローバルアドレスといいま す)を割り当てるのではなく、組織内は閉じたネットワークを構成し、そこで は自由に世界中で一意ではない(つまり重複した)アドレスをふることで解決 することが考えられました。これがプライベートアドレス(RFC1918) です。

RFC1918 で規定されているプライベートIPは以下の通りです。

これらは勝手に使ってよいのですが、当然使ってよいのはその閉じたネットワー クの中だけで、重複してるので外部、すなわち The Internet では当然このア ドレスは直接は 使えません。

…いまいちな例えですが、いってみればこれはマンションの部屋番号のような もので、世界中に 201 号室は無数にあるわけですが、これだけではちゃんとし た住所になっていないわけで、現実にはマンションの住所がないと届けようが ないといった感じでしょうか?
ではどうするかというと、プライベートアドレスのマシンはグローバル アドレスが振られているルータに接続され、そのルータ経由で、その時にグロー バルアドレスに変換してから外部に接続する、ということをします。これには NAT (Network Address Translation) や、 NAPT (Network Address Port Translation) (別名 IP マスカレーディング (masquerading) )といった技術をもちいます。
厳密には NAT は、ある プライベート IP アドレスをグローバルIP に対応 付ける(マップする)ことを意味するのに対して、NAPT は多くの プライベー トアドレスを1つのグローバル IP にマップするということで別の技術ですが、 最近は(厳密にいうと間違いだけど)後者も NAT に含んだ言いかたをすること が多いようです。どのようにして複数のプライベートアドレスを1つの IP に マップするかについては、ここでは略します (TCP の知識が必要なので、TCP を勉強してからの話)
この変換を利用すると、1つのグローバルアドレスを多数のコンピュータで使 えるのでアドレスの消費を節約できるというわけです。また、結果として外部 から内部のアドレスを隠すことになっているので(不正アクセス等の)セキュ リティ対策面でも有利です。現在ちまたで売られて使われている「ブロー ドバンドルータ」なるものは、ほとんどがこの機能を使ってます。
本学は wifi環境はずっとプライベートIP での運用です。有線LAN環境では 2021年度までは学内はグローバルIPを使っていたのですが、上述のほうに IP を放出したので、2022年度からは学内もプライベートIPによる運用をし ています。

サブネットとネットマスク

例えばクラスBのネットワークだと6万個以上のコンピュータが1つのネッ トワークに継るわけですが、これは輻輳の可能性もありますし、ネット資 源として無駄が出る、等いろんな意味でよろしくないので、大抵の組織内 ネットワークでは、これを(もちろん論理的に)細かく切り刻んで使うこ とが多いです。その場合の刻んだネットワークのことをサブネット といいます。そして、具体的な個々の刻まれたサブネットのことを セグメントと言うことがあります。CIDR とにたような動きで す。

そして、サブネットがどのように刻まれているかを示すのに使われるのが ネットマスクです。これとIP アドレスの ビット毎の論理積 (bitwise-AND) をとるとサブネットのアドレスがわかります。例えば本 学の場合だと、ネットマスクは 255.255.248.0 なので、例えば 150.9.160.10 の場合、150.9.160 までがネットワークアドレスとなります。つまり;

   255   .  255   .  248   .    0
 11111111 11111111 11111000 00000000
&
 10010110 00001001 10100000 00001010 <= 150.9.160.10
=10010110 00001001 10100000 00000000 <= 150.9.160.0

同じネットワークアドレスを表すのに、150.9.160.0/21 という表記 をする場合もあります。これは、上位21ビット(=255.255.248.0) がネットワー クアドレスである、という意味です。同じ 150.9.160.0 でも、/19 もありえ るし、/24 もありえるわけです(上図参照)。

ネットワーク機器の設計や設定の実務を行うためには、IPアドレスとネットマ スク値からネットワークアドレスや収容できるホスト数を算出できなくてはい けません。とはいえ、素朴な感想として と考える人が多いでしょう。これについては、ルーティングを学んだ上で再考 します。

DHCP (Dynamic Host Configuration Protocol)

IP アドレスは個々の(ネットワーク接続している)コンピュータごとに個別 に割り当てられなければ通信できないわけですが、個別に設定するのは大変で す。面倒ですし、設定の間違いをおこす可能性もあり、その場合ネットワーク 全体に支障があります。そもそも Word/Excel/PowerPoint が使えて、あと IE で WWW アクセスができて電子メールが出来たらそれで良いという人達まで細 かい設定を知っている必要があるか?という問題もあります。

そこで、最近ではほとんどの場合、IP アドレスやそれに関連する設定(後述 するルーティングテーブルの管理等)は、動的に設定することができるように なっています。このためのプロトコルが DHCP です。

これは厳密には3層目ではない特殊な制御(管理)用プロトコルです。
つまり、あるネットワークに接続すると、事前にネットワーク管理者が設定し たルールにしたがって、自動的に IP アドレスを取得したりその他の設定をし たりする、ということです。この場合は IP アドレスがそもそも無いわけです から、その下の層である MAC アドレスによる通信により情報交換がされます。 技術の詳細はここでは略しますが、所謂ルータはこの機能を持ってるものがほ とんどです。

ARP, ICMP

これらも厳密には3層目ではない特殊な制御(管理)用プロトコルです。 例えば ping は ICMP を使ってネットワーク到達性(ひいてはその ホストが生きているかどうか)を調べるコマンドです。arp は MAC アド レスと IPアドレスの対応を登録したり確認したり するプロトコルで、 同名の管理用コマンドもあります(詳細は略)。

フラグメンテーション

IP datagram (データグラム)が Ethernet frame (フレーム)に入らない、 すなわちデータグラムの大きさがフレームの大きさより大きい場合に分割する ことです(詳細は略)。

経路制御

経路制御 (routing, ルーティング) とは、上でいうネットワークを またがって配送する場合に、どのようなルールで転送していくか、ということ です。これがないと、ネットワーク間の情報伝達は出来ないわけです。たとえ 話でいうと、大阪府外に出す場合は、まずは中央郵便局に集配して、そこから 各都道府県の中央郵便局に送って…という感じです。

実際の制御を簡単な例え話でいうと、

  1. 送りたい場所が自分と同じ府県(=ネットワークセグメント)ならそ のまま行ける。
  2. 自分と同じ府県に目的地がなければ、
    1. その経路を教えてくれるところ(大抵は中央郵便局?)へまず送る。
    2. そしてそこで次に送るべき場所(大抵は都道府県の大きな局)を教わって、それに従う。
    3. これを目的地に到着するまで繰り返す。
という感じです。もうすこしグラフィックな例として、列車の経路をあげてみ ます(図参照)。この場合、路線はネットワーク、駅がホストになる、と思っ てみてください。



ということで、本格的な解説です;

ルーティングテーブルの管理

ルーティングテーブルを静的、すなわち不変のものとして管理する場合は、上 述のようにテーブルを管理者が作っておけばいいわけです。しかし、障害対応 など接続状況が変化する場合は、その状況に応じて適宜動的に生成 する必要があります。その場合、RIP などのプロトコルを用いて生 成します。これこそが、Internet が Internet として成り立っている (網の一部に障害がおこっても全体としての通信機能はたもたれる)主要 技術となっているわけです。以下、簡単に流れを説明します; ちなみにルーティング情報の確認は traceroute (tracert.exe) 等を利用します。

ここで、あらためてネットマスク再考

一部繰り返しになりますが、ネットワーク機器の設計や設定を行うためには、 IPアドレスとネットマスク値から ネットワークアドレス や収容できる ホスト数 を算出できなくてはいけません。とはいえ、素朴な感想として と思うかもしれません。そこで、ルータを作った人たちの気持ちになって、ネッ トマスクの仕組みを考えます。

まず、ルータにIPパケットが到着したときの動作を考えてみましょう。

  1. インターフェースにIPパケットが到着すると、ルータは 宛先IPアド レス を読みます。
  2. 次に、ルーティングテーブルを検索し、次に送るべき ルーターのア ドレス などを調べます。
  3. その方向へIPパケットを転送します。もしルータ自身が属しているセグ メント宛ならば、そのままパケットを送って 処理は終了 です。
この動作をパケットが到着するたびに行うわけですから、当然ながらなるべく 簡単な方法(CPU負荷の低い処理方法) で実現できたほうがいいのは明らかです。 ここで、上記の2.の処理の詳細について考えてみましょう。たとえば、ルーティ ングテーブルに「150.9.160.0/21」の情報が記載されていたとして、宛先のIP アドレスが「150.9.160.10」のパケットが到着した場合、以下のような処理が 行われます。
  1. 前提として、ルータ(CPU)の内部では、全ての数値は2進数として処理されます。 例えば 150.9.160.0 は
    10010110 00001001 10100000 00000000
    のように内部で表現されている、ということです。
  2. まず、ネットマスクと宛先IPアドレスの 論理積(AND) を計算します。
    ここで言う"AND"とはいわゆる論理演算であり、コンピュータの持つ基本的な演 算処理です。要するに 1 AND 1 の場合だけ答えが"1"になるわけですが、別の 見方をすると、
    • ネットマスクでのビットが"1"なら、答えは 1番目の数値と同じ
    • ネットマスクでのビットが"0"なら、答えは 必ず"0"
    と言うこともできます。この感覚を是非もってください(!)
    この特性によってIPアドレスとネットマスクの AND を計算すると、ネットワーク アドレスを得ることができるのです。
       255   .  255   .  248   .    0
     11111111 11111111 11111000 00000000
    &
     10010110 00001001 10100000 00001010 <= 150.9.160.10
    =10010110 00001001 10100000 00000000 <= 150.9.160.0
    
  3. これをルーティングテーブルに掲載されているネットワークアドレスと 比較 し ます。ちなみに、2進数の比較は 排他的論理輪(XOR) を使うと簡単です。
    XOR では2つの数値が同じ場合だけ、結果が"0"になります。よって、比較した い2進数のXORを計算し、結果が0になれば「一致」、0以外の結果になれば「不 一致」と判断できます。
    一致すれば、同じセグメント内なので 直接配送できる ことが分かり ますし、不一致の場合は対応する(場合によってはデフォルト指定の) ネットワークに パケットを流します。
ANDやXORのような論理演算 は、コンピュータにとっては基本的な動 作であり、ネットマスクによって、たった1回のANDを計算するだけでIPアドレ スからネットワークアドレスを取得できるように合理的に設計されている、と いうことなのです。

講義用スタイル
印刷用スタイル (開いてから、ページを再度更新してください)