<!DOCTYPE html>
<html lang="ja">
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/default.css">
<!--<script type="text/javascript" async
  src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?config=TeX-MML-AM_CHTML">
-->
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>

</script>
<title>第 3 回 IP</title>
</head>
<body>
<h1>第 3 回 IP</h1>
<p>
このドキュメントは
<a href="http://edu.net.c.dendai.ac.jp/">http://edu.net.c.dendai.ac.jp/</a>
上で公開されています。
</p>
<h2>アイスブレイク</h2>
<h3>本日の属性</h3>
<table class="meishi">
  <tbody>
<tr>
    <td class="red">二進数の計算ができる</td>
    <td></td>
    <td class="yellow">ノートをとるときに図を大切にする</td>
</tr>
<tr>
<td>学籍番号</td>
  <td class="shimei">氏名</td>
  <td>(番号欄)</td>
</tr>
<tr>
  <td class="green">外国で働いてみたいと思う</td>
  <td></td>
  <td class="blue">部長、委員長、班長などをやったことがある</td>
</tr>
</tbody></table>
<h3>手順</h3>
<ol>
  <li>全色が揃うように3から4人で班を作る(4人推奨)</li>
  <li>班ごとに着席する。椅子を動かして机を囲むようにする。（使わない机を動かしても良い）
  </li>
  <li>順番を決める</li>
  <li>作成した4枚の用紙に決まった番号を記入する
  </li>
  <li>班員に用紙を名刺代わりに配る</li>
  <li>1番から色を付けた属性を含めた自己紹介を1分程度で行う</li>
</ol>
<h2>レポート課題</h2>
<h3>テーマ：ルーティングテーブルの作成</h3>
<p>
  本日のワークを元に、<a href="routing.pptx">提出用用紙</a>に以下を記
  入して提出すること。
</p>
<ol>
  <li>学籍番号、氏名</li>
  <li>ルータから出ている 3本の足の IP アドレスと、サブネットマスク
    長</li>
  <li>ルーティングテーブル</li>
</ol>
<h3>締切、提出方法</h3>
<p>
  来週火曜日の夕方までに &lt;sakamoto@c.dendai.ac.jp&gt;宛にメールすること。
</p>
<h2>ワーク</h2>
<h3>ワーク</h3>
<p>
  以下の問題を自力で解く
</p>
<p>
  「133.学籍番号の下3桁.0.0」を自分のネットワークアドレスとする。
  例えば学籍
  番号が 17ad200 ならば、 133.200.0.0 を自分のネットワークアドレスとする。
</p>
<p>
  <a href="http://www.whois.com/whois/">whoisデータサービス</a>を調べ、
  上記のアドレスがどこの組織のものか調べる。
  例えば、 133.200.0.0 ならビッグローブ株式会社に割り当てられている。
</p>
<h3>ワーク</h3>
<div class="rfigure">
  <img src="network1.svg" width="50%" alt="Network1">
  <br>
  ネットワークモデル
</div>
<p>
  ネットワークの設計を行います。自分のネットワーク内にサブネット2本と対外
  線接続をするルータを考える（図中の青い装置）。
</p>
<ol>
  <li><p>
      はじめに右図を写します。
  但し、Router Address1〜3, Network Address1〜3 は、以下の手順で具体的
    なアドレスを記入しますので、空欄にしておいてください。
    </p>
    <p>
      雲はネットワークを表します。丸に矢印はネットワーク同士を接続する
      <dfn>ルータ</dfn>です。
      四角に矢印は<dfn>ハブ</dfn>を表し、同一ネットワーク同士の接続点
      を意味します。
    </p>
  </li>
<li>インターネットを 0.0.0.0/0、インターネットへのゲートウェイアドレス
  を 10.0.0.254/24 とします（全員共通）。
図の通り写されているか確認します。
</li>
  <li>
  対外線の接続アドレスは 「10.0.0.学籍番号の下三桁/24」とします。
  例えば、学籍番号が 17ad200ならば、「10.0.0.200/24」となります。
これを Router Address1 に記入します。
  </li>
  <li>
    自分のネットワーク「133.学籍番号の下三桁/16」を Network Address1
    に記入します。</li>
  <li>
    <p>    自分のネットワークを分割します。</p>
    <p>
    サブネットのビット幅を最小でも1bit以上定め（おすすめは 8bit）、異
    なるサブネット番号のネットワークアドレスを2つ用意します。
    例えば、自分のネットワークアドレスが 133.200.0.0 であれば、これは
    クラスB なので、もともとのネットワークのビット幅 16 bit です。
    これに対して、サブネットのビット幅を 8bit とすると、サブネット長は
    16+8 で 24bit となります。
    求めるネットワークアドレスは (133.200.0.0/24, 133.200.1.0/24) や
    (133.200.0.0/17, 133.200.128.0/17) など
    となります。
    </p>
    <p>
      求めたネットワークアドレスを Network Address2, Network Address3
      に記入する。
    </p>
  </li>
  <li>
    <p>
      各サブネットに関して、ルータのアドレスとしてひとつずつホストアド
      レスを決め、 Router Address2, Router Address3 に記入する。
    </p>
  </li>
</ol>
<h3>ワーク</h3>
<p>
  グループ同士で、ルータの対外線のネットワーク 10.0.0.0/24 を共有した
  として、相互にルータに直接接続していないネットワークと転送先のルータ
  のアドレスの対をルーティングテーブルとして記入する。
</p>
<p>
  最終的に各自で作成した用紙を集め、提出用のパワーポイントのファイルを
  ダウンロードし、学籍番号、氏名、アドレス、ルーティングテーブルをファ
  イルに追記して完成させる。
</p>

<h2>講義</h2>
<h2>ネットワーク間接続と IP アドレス</h2>
<p>
ここではパケット通信を複数のネットワークを越えて実現させるため、
ネットワーク全体で合意してなければならないプロトコルについて説明します。
</p>
<p>
コンピュータネットワークは多くのコンピュータで共有しています。
従って、相互のコンピュータを区別するため、コンピュータにはアドレスとい
う識別子が必要です。
インターネットではさらに複数のネットワークを集約したりします。
そのため、分割されたそれぞれのネットワークにもアドレスが必要になります。
つまり、複数のネットワークを接続したインターネットでの通信にはネットワー
クアドレスとコンピュータ(ホスト)のアドレスが必要になります。
</p>
<p>
IP(インターネットプロトコル) version 4 ではネットワークアドレスとホス
トアドレスの対を 32bit = 4 バイトで表現します。各バイトを 0 から 255 
までの 10 進数で表現し、ピリオドで区切って表します。つまり、インターネッ
トのアドレスは 0.0.0.0 から 255.255.255.255 までになります。
</p>
<p>
このインターネットのアドレスのうち、一部がネットワークアドレスで、一部
がホストアドレスになります。
この区切りには複数あり、<dfn>クラス</dfn>と呼ばれています。
</p>
<p>
なお、ホストアドレスのうち、 0 はネットワーク全体を表します。
ホストアドレスが 0 の IP アドレスのことを<dfn>ネットワークアドレス</dfn>
と呼ぶことがあります。
一方、最大の値はネットワークに属しているホスト全体を表します。
つまり最大値宛のメッセージはホスト全部が受信する必要があります。
このアドレスのことを<dfn>ブロードキャストアドレス</dfn>と呼ぶことがあ
ります。
</p>
<dl>
<dt>クラス A</dt>
<dd>
<div class="rfigure">
<table border="1">
<tr>
<td>0nnnnnnn</td><td>hhhhhhhh</td><td>hhhhhhhh</td><td>hhhhhhhh</td>
</tr>
<caption>クラス A</caption>
</table>
</div>
インターネットアドレスを二進数で表した時、最上位のビットが 0 のものを
クラス A のアドレスといいます。つまり 0.0.0.0 から 127.255.255.255 ま
でがクラス A になります。
クラス A では最上位のバイトがネットワークアドレスで、 2 バイト目から 4
バイト目までがホストアドレスになります。
ネットワークは 128 個、各ネットワークではそれぞれ 256×256×256 -2 個
のホストを接続することができます。
但し、ネットワークアドレス 127 は特別で、 <dfn>127.0.0.1</dfn> が自分
自身を表すことになっています。
</dd>
<dt>クラス B</dt>
<dd>
<div class="rfigure">
<table border="1">
<tr>
<td>10nnnnnn</td><td>nnnnnnnn</td><td>hhhhhhhh</td><td>hhhhhhhh</td>
</tr>
<caption>クラス B</caption>
</table>
</div>
インターネットアドレスを二進数で表した時、最上位とその次のビットが 10
のものをクラス B のアドレスといいます。
つまり 128.0.0.0 から 191.255.255.255 ま
でがクラス B になります。
クラス B では上位 2 バイトがネットワークアドレスで、 3 バイト目と 4
バイト目までがホストアドレスになります。
ネットワークは 64 × 256 個、各ネットワークではそれぞれ 256×256 -2 個
のホストを接続することができます。
</dd>
<dt>クラス C</dt>
<dd>
<div class="rfigure">
<table border="1">
<tr>
<td>110nnnnn</td><td>nnnnnnnn</td><td>nnnnnnnn</td><td>hhhhhhhh</td>
</tr>
<caption>クラス C</caption>
</table>
</div>
インターネットアドレスを二進数で表した時、上位3ビットが 110
のものをクラス C のアドレスといいます。
つまり 192.0.0.0 から 223.255.255.255 ま
でがクラス C になります。
クラス C では上位 3 バイトがネットワークアドレスで、 4 バイト目がホス
トアドレスになります。
ネットワークは 32 × 256 × 256 個、各ネットワークではそれぞれ 256 -2 個
のホストを接続することができます。
</dd>
<dt>クラス D</dt>
<dd>
<div class="rfigure">
<table border="1">
<tr>
<td>1110cccc</td><td>cccccccc</td><td>cccccccc</td><td>cccccccc</td>
</tr>
<caption>クラス D</caption>
</table>
</div>
インターネットアドレスを二進数で表した時、上位4ビットが 1110
のものをクラス D のアドレスといいます。
つまり 224.0.0.0 から 239.255.255.255 ま
でがクラス D になります。
クラス D は一対一通信には使いませんので、ネットワークアドレスやホスト
アドレスを表すものではありません。
これは、広域通信(マルチキャスト)を行う時のチャネル番号を表しています。
チャネル数は 16 × 256 × 256 × 256 個あります。
</dd>
<dt>クラス E</dt>
<dd>
<div class="rfigure">
<table border="1">
<tr>
<td>1111xxxx</td><td>xxxxxxxx</td><td>xxxxxxxx</td><td>xxxxxxxx</td>
</tr>
<caption>クラス E</caption>
</table>
</div>
残りの部分。つまり、インターネットアドレスを二進数で表した時、上位4ビッ
トが 1111 のものをクラス E のアドレスといいます。
つまり 240.0.0.0 から 255.255.255.255 までがクラス E になります。
クラス E は未使用領域として予約されています。
但し、 <dfn>255.255.255.255</dfn> は自分と同じネットワークに属するホス
ト全体のアドレスとして使います。
なお、2007 年、クラス E をプライベートなユニキャストアドレスとして使お
うという提案がされました。
</dd>
</dl>
<h3>まとめ</h3>
<dl>
<dt>0.0.0.0</dt>
<dd>インターネット全体</dd>
<dt>255.255.255.255</dt>
<dd>同一ネットワーク上のホスト全体</dd>
<dt>133.20.0.0</dt>
<dd>東京電機大学工学部のネットワークアドレス。クラス B</dd>
<dt>133.20.255.255</dt>
<dd>東京電機大学工学部のホスト全体</dd>
<dt>192.0.2.0/24,
198.51.100.0/24,
203.0.113.0/24</dt>
<dd>出版用アドレス TEST-NET-1,2,3 example.com のアドレス例示などに用いる</dd>
</dl>
<h2>IP アドレス(ネットワークアドレス)の管理</h2>
<h3>グローバルアドレス</h3>
<p>
インターネットに接続しているホストの IP アドレスは全世界で必ず単一のも
のであることを保証しなければなりません。
そのため、世界規模になったインターネットのアドレス管理は国際機関で行う
必要があります。
ICANN(Internet Corporation For Assigned Names and Numbers <a
href="http://www.icann.org/">http://www.icann.org/</a>) は、世界的なア
ドレス管理を行うための中央組織です。
各地域から理事を選出して、非営利団体として運営しています。
なお、国際機関が発足する前はアメリカ政府が IANA(Internet Assigned Number
Authority <a href="http://www.iana.org/">http://www.iana.org/</a>) と
いう組織を運営していました。
移管が済んだ現在、 IANA という名前は ICANN の資源管理、調整機能の名称
として残っています。
</p>
<p>
ICANN は世界を 5 つの地域に分け、アメリカは
ARIN(American Registry for Internet Numbers) が、
ヨーロッパとその周辺地域は RIPE-NCC ( 
R&eacute;seaux IP Europ&eacute;ens Network Coordination Centre 
<a href="http://www.ripe.net/">http://www.ripe.net/</a>)が、
アジアと太平洋地域は APNIC(Asia Pacific Network Information Centre
<a href="http://www.apnic.org/">http://www.apnic.org/</a>)が
、
中南米地域は LACNIC (<a
href="http://lacnic.net/en/">http://lacnic.net/</a>)が、
アフリカ地域は AfriNIC(<a
href="http://www.afrinic.net/">http://www.afrinic.net/</a>が管轄しています。
そして、 APNIC の下位組織として日本を管轄するのが JPNIC(Japan Network
Information Center 
<a href="http://www.nic.ad.jp/">http://www.nic.ad.jp/</a>)
という組織です。
日本の組織は JPNIC に IP アドレスを割り当ててもらいます。
</p>
<p>
これらの国際機関は IP アドレスの管理の他、ドメインネームサービスの管理
も行っています。
これは、通常、インターネットのアドレスとして使われる dendai.ac.jp のよ
うな名前と 133.20.0.0 というような IP アドレスを結びつけるサービスです。
</p>
<h3>プライベートアドレス</h3>
<p>
インターネットの実験や内部 LAN で閉じたサービスなど、グローバルネット
ワークに接続しないネットワークでは、 ICANN などのネットワーク組織から
交付されたネットワークアドレスではなく、特定のアドレスを使うことが許さ
れています。
これを<dfn>プライベートアドレス</dfn>といいます。
プライベートアドレスは次の三種類があります。
</p>
<table border="1">
<thead>
<tr>
<th>クラス</th><th>アドレス</th><th></th><th>個数</th>
</tr>
</thead>
<tbody>
<tr>
<td>クラスA</td><td>10.0.0.0/255.0.0.0</td><td>10.0.0.0/255.0.0.0</td><td>1個</td>
</tr>
<tr>
<td>クラス
B</td><td>172.16.0.0/255.240.0.0</td><td>172.16.0.0/255.255.0.0 〜 172.31.0.0/255.255.0.0</td><td>16個</td>
</tr>
<tr>
<td>クラス
C</td><td>192.168.0.0/255.255.0.0</td><td>192.168.0.0/255.255.255.0 〜 192.168.255.0/255.255.255.0</td><td>256個</td>
</tr>
</tbody>
</table>
<p>
家庭用のブロードバンドルータなどはルーティングが必要ないので
192.168.x.0/255.255.255.0 が使われることが多いです。
一方プロバイダ内などでグローバルアドレスを節約するために使われるのは
10.0.0.0/255.0.0.0 です。
</p>
<h2>サブネット</h2>
<p>
IP アドレスのネットワークアドレスは通常一組織には一つしか割り当てられ
ません。ですから、何の工夫もしないと一つの組織には一つしかネットワーク
を持つことができません。
しかし、現在使用されている Ethernet などの LAN では一つのネットワーク
に接続しているコンピュータは高々 50〜100 台程度に抑えるとパフォーマン
スが良くなると言われてます。
したがって、組織内に一つしかネットワークが存在できなければ、コンピュー
タ授業もろくにできません。
</p>
<p>
<div class="rfigure">
<table border="1">
<tr>
<td>133</td><td>20</td><td>160</td><td>1</td>
</tr>
<tr>
<td>10nnnnnn</td><td>nnnnnnnn</td><td>ssssssss</td><td>hhhhhhhh</td>
</tr>
<tr>
<td>11111111</td><td>11111111</td><td>11111111</td><td>00000000</td>
</tr>
<caption>サブネット</caption>
</table>
</div>

そこで IP アドレスのホストアドレスの部分を一部内部ネットワークのアドレ
スとして、組織内部で IP アドレスの解釈を変えて運用することが行われてい
ます。
この内部ネットワークのことを <dfn>サブネット</dfn>と言います。
つまり、 IP アドレスの解釈を従来の「ネットワークアドレス」と「ホストア
ドレス」の二つに分けていたのを、新たに組織内部だけ「ネットワークアドレ
ス」と「サブネットアドレス」と「ホストアドレス」の三つに分けることにし
ます。
組織において、ネットワークアドレスは既に決まってますから、問題になるの
はサブネットアドレスとホストアドレスの分けかたです。
これについては組織で自由に決めます。
つまり、 IP アドレスのどこがサブネットアドレスか、ホストアドレスかを指
定する必要があります。
そのため、 IP アドレスをビット毎に分割します。
ネットワークアドレスとサブネットアドレスを表す位置のビットを 1, ホスト
アドレスを表す位置のビットを 0 とした 32 bit の列を <dfn>サブネットマ
スク</dfn>と言います。
例えば東京電機大学の工学部は 133.20.0.0 というネットワークアドレスを持っ
ています。
そして、例えば、各学科では 3 バイト目がサブネットのアドレスになり、
4 バイト目がホストのアドレスになっています。
この時、サブネットマスクは 11111111.11111111.11111111.00000000 =
255.255.255.0 となります。
例えば情報通信工学科のサブネット番号は 160 です。そこの 1 番のホストの
IP アドレスは 133.20.160.1 となります。
なお、情報通信工学科のネットワークアドレスは 133.20.160.0 となりますが、
これではどこがサブネットのアドレスなのか分かりません。
そこで、サブネットの場所を明記するため、 133.20.160.0/255.255.255.0 や
と表記します。
なお、厳密にはサブネットを表すビット列は連続している必要はありませんが、
通常連続させます。この場合、連続しているビット数 24 で 255.255.255.0
を表現できます。そのため、133.20.160.0/24 と表記することもあります。
</p>
<h2>ICMP</h2>
<p>
ICMP(Internet Control Message Protcol) はインターネットを管理するため
の IP パケットを利用したメッセージです。
主なメッセージのタイプには次のようなものがあります。
</p>
<table border="1">
<thead>
<th>メッセージタイプ</th>
<th>説明</th>
</thead>
<tbody>
<tr>
<td>宛先到達不能</td><td>パケットが配送されない</td>
</tr>
<tr>
<td>時間超過</td><td>TTL が  0 になった</td>
</tr>
<tr>
<td>パラメータ障害</td><td>間違ったヘッダーフィールド</td>
</tr>
<tr>
<td>送信元抑制</td><td>送信元に対して、トラフィック量を減らすように通
知する</td>
</tr>
<tr>
<td>方向変換 redirect</td><td>中継ルータを教える</td>
</tr>
<tr>
<td>エコー要求</td><td>ルータがいきているかどうかを尋ねる</td>
</tr>
<tr>
<td>エコー応答</td><td>生きていることを返答</td>
</tr>
<tr>
<td>タイムスタンプ要求</td><td>エコー要求でタイムスタンプも要求する
</td>
</tr>
<tr>
<td>タイムスタンプ応答</td><td>エコー応答にタイムスタンプを付加する
</td>
</tr>
</tbody>
</table>
<p>
ping コマンドはこの ICMP のエコー要求メッセージを送るコマンドです。
これにより相手が生きているかどうか、また往復にどれくらい時間がかかるか
などがわかります。
traceroute (Windows では tracert) は相手先の未使用のポートに対して、
TTL の小さいパケットを送ることで、途中の中継点で時間超過 ICMP メッセー
ジを発生させます。その結果、中継点の IP アドレスを知ることができます。
</p>
<h2>ルーティング</h2>
<p>
インターネットの中でネットワークを接続する装置を<dfn>ルータ</dfn>と呼
びます(昔は IMP)。
また、異なるプロトコルで接続する装置は<dfn>ゲートウェイ</dfn>と呼びます。
ゲートウェイはルータを含みますので、広い意味での中継装置をゲートウェイ
と呼ぶこともあります。
</p>
<p>
あるコンピュータが別のコンピュータにメッセージを送る場合、次の二つの送
信方法が必要になります。
</p>
<ol>
<li>もし相手が同一ネットワーク内にいるなら、直接送信する</li>
<li>もし相手が別のネットワークにいるなら、そのネットワークへパケットを
転送できるルータにメッセージを託す</li>
</ol>
<p>
このように単純にホストであっても、相手によりメッセージの送る相手を変え
る必要があります。
メッセージの送り先を計算することを<dfn>ルーティング</dfn>と言います。
インターネットのルーティングを行うのに一般的なのは<dfn>ルーティングテー
ブル</dfn>という表を使って送り方を調べる方法です。
UNIX、MacOSX、Windows、 IOS(CISCO のルータの OS)などでルーティングテー
ブルを表示するには<cmd>netstat -rn</cmd> というコマンドを使います。
例えば、情報通信工学科サブネットに接続されているホストで <cmd>netstat
-rn</cmd>を行うと次のような出力が得られます。
</p>
<pre>
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インターフェース
133.20.160.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
0.0.0.0         133.20.160.254  0.0.0.0         UG        0 0          0 eth0
</pre>
<p>
「インターフェース」の eth0 はイーサーネットのポートを表しています。
例えば、相手が 133.20.160.1 である場合は、一行目が適用されます。
これは相手先のアドレスを二進列とした時、そのアドレスとネットマスクを
AND 演算すると、受信先サイトのアドレスと一致するからです。
</p>
<div>
<!--
<math>
<mrow>
<mtable>
<mtr>
<mth></mth>
<mtd><mn>133</mn></mtd><mtd><mn>20</mn></mtd><mtd><mn>160</mn></mtd><mtd><mn>1</mn></mtd>
</mtr>
<mtr>
<mth></mth>
<mtd><mn>10000101</mn></mtd><mtd><mn>00010100</mn></mtd><mtd><mn>10100000</mn></mtd><mtd><mn>00000001</mn></mtd>
</mtr>
<mtr>
<mth><mi>&Wedge;)</mi></mth>
<mtd><mn>11111111</mn></mtd><mtd><mn>11111111</mn></mtd><mtd><mn>11111111</mn></mtd><mtd><mn>00000000</mn></mtd>
</mtr>
<mtr>
<mtd columnspan="5"><mi>-------------------------------------</mi></mtd>
</mtr>
<mtr>
<mth></mth>
<mtd><mn>10000101</mn></mtd><mtd><mn>00010100</mn></mtd><mtd><mn>10100000</mn></mtd><mtd><mn>00000000</mn></mtd>
</mtr>
<mtr>
<mth></mth>
<mtd><mn>133</mn></mtd><mtd><mn>20</mn></mtd><mtd><mn>160</mn></mtd><mtd><mn>0</mn></mtd>
</mtr>
</mtable>
</mrow>
</math>
-->
<math>
<mrow>
<mtable>
<mtr>
  <mtd></mtd>
<mtd><mn>133</mn></mtd><mtd><mn>20</mn></mtd><mtd><mn>160</mn></mtd><mtd><mn>1</mn></mtd>
</mtr>
<mtr>
  <mtd></mtd>
<mtd><mn>10000101</mn></mtd><mtd><mn>00010100</mn></mtd><mtd><mn>10100000</mn></mtd><mtd><mn>00000001</mn></mtd>
</mtr>
<mtr>
<mtd><mi>&Wedge;)</mi></mtd>
<mtd><mn>11111111</mn></mtd><mtd><mn>11111111</mn></mtd><mtd><mn>11111111</mn></mtd><mtd><mn>00000000</mn></mtd>
</mtr>
<mtr>
<mtd columnspan="5"><mi>-------------------------------------</mi></mtd>
</mtr>
<mtr>
  <mtd></mtd>
<mtd><mn>10000101</mn></mtd><mtd><mn>00010100</mn></mtd><mtd><mn>10100000</mn></mtd><mtd><mn>00000000</mn></mtd>
</mtr>
<mtr>
  <mtd></mtd>
<mtd><mn>133</mn></mtd><mtd><mn>20</mn></mtd><mtd><mn>160</mn></mtd><mtd><mn>0</mn></mtd>
</mtr>
</mtable>
</mrow>
</math>
</div>
<p>
一方、相手が 192.0.34.163 の場合、このような計算をしても一行目には一致
せず、二行目に一致します。
そして、フラグ G はゲートウェイを示していますので、ゲートウェイのアド
レスにメッセージを渡します。
</p>
<p>
受信先サイト、ネットマスクとも 0.0.0.0 であれば、どのようなアドレスで
あれ、ネットマスクと AND 演算をすれば受信先サイトに一致します。
この 0.0.0.0/0.0.0.0 というアドレスはインターネットを表し、通常 <dfn>
デフォルト</dfn> と呼ばれたりします。
そして、このアドレスに対するゲートウェイを<dfn>デフォルトゲートウェイ
</dfn>と呼びます。
</p>

<h2>ホップバイホップルーティング</h2>
<p>
IP パケットは発信元と受信先のアドレスは持ってますが、経路の情報は持っ
ていません。
従って、経路上の各ルータはパケットの中継経路を決定しなければなりません。
この各中継点で経路を決定するルーティング方式を<dfn>ホップバイホップルー
ティング</dfn>と言います。
これに対して送信元が経路を決定するルーティング方式を<dfn>ソースルーティ
ング</dfn>と言います。
IP パケットのルーティングには通常ホップバイホップルーティングが用いら
れます。
</p>
<p>
ホップバイホップルーティングではルーティングテーブルを参照して転送先を
決めます。
ルーティングテーブルはネットワークアドレス、サブネットマスク、転送先ア
ドレス、使用インターフェイスなどが書かれています。
以下は Windows 10 のルーティングテーブルの例です。
</p>
<pre>
Microsoft Windows [Version 10.0.17134.285]
(c) 2018 Microsoft Corporation. All rights reserved.

C:\Users\sakamoto>route print
===========================================================================
インターフェイス一覧
  9...4c 72 b9 f6 5c c5 ......Realtek PCIe GBE Family Controller
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 ルート テーブル
===========================================================================
アクティブ ルート:
ネットワーク宛先        ネットマスク          ゲートウェイ       インターフェイス  メトリック
          0.0.0.0          0.0.0.0     172.16.1.254     172.16.1.149     25
        127.0.0.0        255.0.0.0            リンク上         127.0.0.1    331
        127.0.0.1  255.255.255.255            リンク上         127.0.0.1    331
  127.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
       172.16.1.0    255.255.255.0            リンク上      172.16.1.149    281
     172.16.1.149  255.255.255.255            リンク上      172.16.1.149    281
     172.16.1.255  255.255.255.255            リンク上      172.16.1.149    281
        224.0.0.0        240.0.0.0            リンク上         127.0.0.1    331
        224.0.0.0        240.0.0.0            リンク上      172.16.1.149    281
  255.255.255.255  255.255.255.255            リンク上         127.0.0.1    331
  255.255.255.255  255.255.255.255            リンク上      172.16.1.149    281
===========================================================================
固定ルート:
  なし

IPv6 ルート テーブル
===========================================================================
アクティブ ルート:
 If メトリック ネットワーク宛先      ゲートウェイ
  1    331 ::1/128                  リンク上
  9    281 fe80::/64                リンク上
  9    281 fe80::e977:7d00:1ec8:f379/128
                                    リンク上
  1    331 ff00::/8                 リンク上
  9    281 ff00::/8                 リンク上
===========================================================================
固定ルート:
  なし

C:\Users\sakamoto>
</pre>
<p>
さて、このルーティングテーブルを作成するにはどうすれば良いでしょうか?
</p>
<h2>ネットワークインターフェイスの設定</h2>
<p>
通常、ネットワークインターフェイスを設定すると、その情報は自動的にルー
ティングテーブルに記憶されます。
従って、同一ネットワーク上の通信に関しては自動的にルーティングテーブル
が設定されます。
</p>
<p>
現在のパソコンネットワークでは DHCP サーバというサーバが動いていて、パ
ソコンを接続すると IP アドレスやルーティング情報などが送られてきて自動
的にネットワークの設定が終了する仕組みになっています。
つまり、 DHCP クライアントの設定がされているパソコンはネットワークにつ
なぐだけで、ネットワークの設定が終了するようになっています。
</p>
<p>
一方、手動でネットワークを設定するには
次のようにやります。
</p>
<h3>Windows 10 の場合</h3>
<p>
  Windows 10 はバージョンによりシステム設定のメニューが異なりますので、
  以下は一例です。
</p>
<ol>
  <li>Windowsボタンを右クリックします。</li>
  <li>「ネットワークの接続」を選びます。</li>
  <li>「Wifi」 または「イーサネット」を選びます。</li>
  <li>右側の画面から「アダプターのオプションを変更する」を選びま
    す。</li>
  <li> Wifi やイーサネットなどのアイコンを右クリックし、プロパティを開き
  ます。</li>
<li>インターネットプロトコルバージョン4(TCP/IPv4)のプロパティを開きます。</li>
<li>「次の IP アドレスを使う」をチェックします。</li>
<li>IP アドレス、サブネットマスク、デフォルトゲートウェイ、DNS サーバー
のアドレスなどを設定します。</li>
</ol>
<h3>UNIX 系の場合</h3>
<ol>
<li><cmd>ifconfig インターフェイス名 IPアドレス netmask サブネットマスク
broadcast ブロードキャストアドレス</cmd> で設定する。</li>
</ol>
<p>
このようにすると、ルーティングテーブルには次の内容の行が追加されます。
</p>
<dl>
<dt>ネットワークアドレス</dt>
<dd>IP アドレスとサブネットマスクの AND をとったもの</dd>
<dt>Netmask</dt>
<dd>サブネットマスクそのまま</dd>
<dt>Gateway</dt>
<dd>UNIX 系は 0.0.0.0。Windows では IP アドレス</dd>
<dt>Interface</dt>
<dd>指定したインターフェイスまたは IP アドレス</dd>
</dl>
<h2>スタティックルーティングとダイナミックルーティング</h2>
<p>
スタティックルーティングとはネットワークの状況の変化を考慮せずにルーティ
ングテーブルを決定するものです。
例えばルータやコンピュータが起動した時に設定を行うのはスタティックルー
ティングです。
経路が一つしかない場合などはスタティックで十分です。
また、単純なルーティングプロトコルでは計算できないような経路はスタティッ
クで設定します。
例えば、二点間に二本経路があり、ネットワークを分割して負荷を分散したい
とか、セキュリティの問題などで、特定の回線を使用したくないなど、接続情
報以外の理由で経路を決定したい時などです。
</p>
<p>
スタティックルートを設定するには route コマンドを使用します。
UNIX 系では
<cmd>route add -net ネットワークアドレス netmask サブネットマスク gw
ゲートウェイアドレス</cmd>
とします。 Windows でもオプションの書き方が若干違いますが、同様の書式
で設定します。
ネットワークアドレスすべてを表すにはネットワークアドレス 0.0.0.0 サブ
ネットマスク 0.0.0.0 を指定します。 UNIX 系では default というキーワー
ドを使える場合があります。
</p>
<p>
一方、接続情報などに応じて経路を決定することを<dfn>ダイナミックルーティ
ング</dfn>と言います。
ダイナミックルーティングは通常全てのルータが同じアルゴリズムで計算しま
すので、一箇所が故障しても全体のシステムの構成に大きな変更が発生しませ
ん。そのため、耐故障性に優れています。
</p>
<p>
先週 IP アドレスの説明でサブネットの説明をしました。
組織内はサブネットの管理をしなければなりません。
一方、組織外はクラスに基づいた大規模なルーティングテーブルを管理しなけ
ればなりません。
そこで、組織内用ルーティングプロトコル(IGP INTERIOR GATEWAY PROTOCOLS)
と組織外用ルーティングプロトコル(EGP EXTERIOR GATEWAY PROTOCOLS)は
別々に開発されています。
本講義では必要とされるネットワーク技術者の人数
の差から、主に IGP に関して取り上げることにします。
</p>
<p>
代表的な IGP には RIP と OSPF があります。また、EGP には BGP が使われ
ています。
RIP は距離ベクトル型、 OSPF はリンク状態型と呼ばれ、それぞれ異なる方式
でルーティングテーブルを決定しています。
</p>
<h2>IP version 6</h2>
<p>
IP version 6 は既存の IP version 4 のアドレス空間の狭さやセキュリティ
問題に対応するため 1995 年に仕様が制定され、 2000 年からは JPNIC でも
アドレスの割当が始まりました。
現在、ほとんどの OS で対応されています。
但し、普及していると言う状況ではありません。
</p>
<p>
IPv6 の主な特徴は次のとおりです。
</p>
<ol>
<li>アドレスが 128 ビットになった。</li>
<li>ヘッダのフィールドが 7 つだけに減り、高速なルーティングが可能になっ
た。</li>
<li>オプション対応が充実した</li>
<li>セキュリティが強化された</li>
</ol>
<h3>アドレスの運用（RFC3513,RFC3879)</h3>
<p>
IPv4 ではアドレスは 192.168.0.1 など、 0 から 255 までの十進数の 4 つ
組をピリオドで区切って表記してました。
一方 IPv6 では FEDC:BA98:7654:3210:FEDC:BA98:7654:3210 のように 4 桁の
16 進数(16bit)の 8 つ組をコロン : で区切って表記します。
なお 0 で始まる値に関しては、0123 → 123, 0012 → 12, 0001 → 1, 0000
→ 0  と、数字がすべて無くらならい範囲で 0 を省略可能です。
また 0 の組が連続する時、その 0 の組すべてを省略するため一回だけ :: と
いう表記が使えます。
例えば、次のようなアドレスを考えます。
</p>
<table>
<thead></thead>
<tfoot></tfoot>
<tbody>
<tr>
<td>1080:0:0:0:8:800:200C:417A</td>
<td>ユニキャストアドレス例</td>
</tr>
<tr>
<td>FE01:0:0:0:0:0:0:101</td>
<td>マルチキャストアドレス例</td>
</tr>
<tr>
<td>0:0:0:0:0:0:0:1</td>
<td>ループバックアドレス</td>
</tr>
<tr>
<td>0:0:0:0:0:0:0:0</td>
<td>未設定アドレス</td>
</tr>
</tbody>
</table>
<p>
これは :: を使うと次のように表せます。
</p>
<table>
<thead></thead>
<tfoot></tfoot>
<tbody>
<tr>
<td>1080::8:800:200C:417A</td>
<td>ユニキャストアドレス例</td>
</tr>
<tr>
<td>FE01::101</td>
<td>マルチキャストアドレス例</td>
</tr>
<tr>
<td>::1</td>
<td>ループバックアドレス</td>
</tr>
<tr>
<td>::</td>
<td>未設定アドレス</td>
</tr>
</tbody>
</table>
<p>
また下位 32 bit が IPv4 のアドレスを指すという混在環境において、下位
32 bit だけ従来の十進数 4 つ組をピリオドで区切った表記もあります。
例えば 0:0:0:0:0:0:13.1.68.3 や ::13.1.68.3、あるいは
0:0:0:0:0:FFFF:129.144.52.38 や ::FFFF:129.144.52.38  のように書きます。
</p>
<p>
IPv6 もアドレスを二分割して考えます。有効な上位bit の長さを表すため、
IPv4 と同様に / の後に十進数で長さを書きます。
以下は例です。
</p>
<ol>
<li>12AB:0000:0000:CD30:0000:0000:0000:0000/60 </li>
<li>12AB::CD30:0:0:0:0/60</li>
<li>12AB:0:0:CD30::/60</li>
</ol>
<p>
IPv4 ではアドレスの上位 4 bit で最初に 0 が来る位置によりクラスを 5 個
に分けていました。
一方、IPv6 では上位 10 bit でアドレスの性質を表します。
これは以下のようになっています(RFC5735)。
</p>
<table border="1">
<thead>
<tr>
<th>アドレスタイプ</th>
<th>IPv6</th>
<th>IPv4</th>
</tr>
</thead>
<tfoot></tfoot>
<tbody>
<tr>
<th>
未設定
</th>
<td>
::/128
</td>
<td>
なし
</td>
</tr>
<tr>
<th>
ループバック
</th>
<td>
::1/128
</td>
<td>
127.0.0.1/32
</td>
</tr>
<tr>
<th>
マルチキャスト
<br/>
(ブロードキャストを含む)
</th>
<td>
FF00::/8
</td>
<td>
224.0.0.0/4
<br />
ホストアドレス部すべてが 1
</td>
</tr>
<tr>
<th>
リンクローカルユニキャスト
</th>
<td>
FE80::/10
</td>
<td>
169.254.0.0/16(RFC3927)
</td>
</tr>
<tr>
<th>
サイトローカルユニキャスト
</th>
<td>
廃止(RFC3879)
</td>
<td>
10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16
</td>
</tr>
<tr>
<th>
グローバルユニキャスト
</th>
<td>
その他のアドレス。
</td>
<td>
プライベートを除く
0.0.0.0/1, 128.0.0.0/2, 192.0.0.0/3
</td>
</tr>
<tr>
<th>
ユニークローカルユニキャスト
</th>
<td>
FC00::/7 (RFC4193)
</td>
<td>
なし
</td>
</tr>
</tbody>
</table>
<p>
なお、IPv4 でローカルなブロードキャスト 255.255.255.255/32 に対応する
IPv6 アドレス(ローカルなホスト全てへのマルチキャスト)は  FF02::1/128 です。
</p>
<h4>ユニキャスト</h4>
<p>
ユニキャストのアドレスは通常上位 64 bit がネットワークアドレスで、下位
64 bit がインターフェイスアドレスになっています。
</p>
<p>
下位64bit は通常インターフェイス固有の MAC アドレスなどから自動的に設
定されます。
改訂EUI-64 フォーマットと呼ばれるアドレスの計算方法は次のようになりま
す。
Ethernet アダプタに固有に割り振られている MAC アドレスは 48 bit で通常
は二桁の 16 進数(8 bit) の 6 こ組をハイフンで結んだものになっています
(XX-XX-XX-XX-XX-XX )。
</p>
<ol>
<li>これに対して上位の 3 こと下位の 3 この間に FF FE を入れます
(XXXX:XXFF:FEXX:XXXX)。</li>
<li>上位 7 bit 目を on にして、8 bit 目を off にします。
つまり 0200:0:0:0 と OR を取り、 FEFF:FFFF:FFFF:FFFF と AND をとります。
</li>
<li>例えば、 00-0B-97-28-C6-D5 という MAC アドレスだったら、
020B:97FF:FE28:C6D5 というアドレスに変換されます。
</li>
</ol>
<p>
上位の 64 bit に関しては、通常組織に上位 48 bit が割り当てられ、16bit
がサブネットになります。
現在 2000::/3 の割り当て、つまり 2000:0:0::/48 から
3FFF:FFFF:FFFF::/48 が割り当て対象になっています。
但し、特殊なアドレスとして次のものがあります。
</p>
<ol>
<li>2001:0DB8::/16 は出版用のアドレスで、このアドレスは書籍などで例を
出すのに使います。
運用に使ってはいけません。
</li>
<li>2002:: は 6to4 という運用(後述)で使います。</li>
</ol>
<p>
例えば  00-0B-97-28-C6-D5 という MAC アドレスを持つマシンがサブネット
番号 1 に接続されている場合、グローバルなユニキャストアドレスの例とし
ては
2001:0DB8::1:020B:97FF:FE28:C6D5 
などになります。
</p>
<h3>IPv6 における、アドレス自動設定へのプライバシー拡張(RFC3041)</h3>
<p>
前節のように IPv6 では DHCP を用いなくても各機器はネットワークインタ
フェースの持つ MAC アドレスからホストアドレスを自動生成することができ
ます。
しかし、このようにして生成された IPv6 アドレスとと個人情報と紐つけする
などすると個人情報が漏洩する恐れがあります。
そのため、唯一性を保ちながら、プライバシが漏洩しないようなアドレスの生
成法が RFC3041 により定められています。
これは、端的に言えば暗号理論的なハッシュ関数を利用して、唯一性の保証さ
れているアドレスを種として、ホストアドレスをハッシュ値により求めるもの
です。
</p>
<p>
暗号理論的なハッシュ関数とは、任意の入力から固定長の出力を得る関数のう
ち、次のような特性を持つものです。
</p>
<ol>
<li>比較的高速に計算できる</li>
<li>逆に得られた出力から入力の一部ですら容易に判定することはできな
  い</li>
<li>
入力が 1bit でも変化すると、出力は大きく変化する
</li>
<li>異なる入力から同じ出力を得ることはあるが(コリジョン)、ある入力に対
  してコリジョンを発生させるもう一つの入力を求めることは困難
</li>
</ol>
<p>
このような仕組みにより、MAC アドレスとは無関係で、唯一のアドレスを自動
的に生成できます。
</p>
<h4>ローカルアドレス</h4>
<p>
ローカルリンクネットで使えるアドレスは FE80::/64 インターフェイスID です。
例えば  00-0B-97-28-C6-D5 という MAC アドレスを持つマシンのリンクロー
カルアドレスは FE80::020B:97FF:FE28:C6D5 となります。
</p>
<p>
なお、ローカルアドレスはネットワークアドレスが共通のため、インターフェ
イス番号をアドレスの後ろに %n という形で付加する必要があります。
Windows では <cmd>netsh interface ipv6 show interface</cmd> でインター
フェイス番号の一覧を得ることができます。
</p>
<p>
RFC 3513 にはサイトローカルアドレスも定義されていますが、技術的な問題
点が指摘されたため RFC3879 で廃止されています。
</p>
<h4>エニーキャストアドレス</h4>
<p>
近隣のホストやルータなど、どのホストでもいいから一台と通信したい場合
(IPアドレスが欲しい場合など)、エニーキャストアドレスを使います。
これはインターフェイス ID が 0 になっているものです。
</p>
<h4>マルチキャストアドレス</h4>
<p>
複数のホストとやりとりするためのアドレスがマルチキャストアドレスで、上
位 8 bit が 1 、次の 4 bit がフラグ、次の 4 bit が範囲を示しています。
範囲は 1 がインターフェイス、 2 がリンクローカル、 4 が管理者ローカル、
5 がサイトローカル、8 が組織ローカル、 E が全域となっています。
例えば、 NTP のグループ ID は 16 進数で 101 となっていますので、マルチ
キャストアドレスは以下のようになります。
</p>
<dl>
<dt>FF01::101</dt>
<dd>同じノード(ホスト)上の全 NTP サーバ</dd>
<dt>FF02::101</dt>
<dd>同じリンク上の全 NTP サーバ</dd>
<dt>FF05::101</dt>
<dd>同じサイト内の全 NTP サーバ</dd>
<dt>FF0E::101</dt>
<dd>インターネット全体の NTP サーバ</dd>
</dl>
<p>
すべてのノードのグループ ID は 1, すべてのルータのグループ ID は 2 で
す。
</p>
<hr />
<address>
坂本直志 <a href="mailto:sakamoto@c.dendai.ac.jp">&lt;sakamoto@c.dendai.ac.jp&gt;</a>
<br />
東京電機大学工学部情報通信工学科
</address>
</body>
</html>
