【ネットワーク】３分間NetWorking 第19回〜22回 OSI参照モデル レイヤ3 ネットワーク層 IPアドレス

# はじめに
この記事は、3分間NetWorkingを読んでインプットした知識をアウトプットするために執筆しています。
学習内容のまとめ、学習してみての所感や疑問などを記載しています。
記事を読んでみて、間違っていることへの指摘や感想などありましたら、ぜひコメントをいただければ幸いです。
3分間NetWorkingのリンクは以下の通り。
https://www5e.biglobe.ne.jp/aji/3min/

# レイヤ3 ネットワーク層ってどんな層
レイヤ3はネットワーク間での相互通信のプロトコルをまとめた層になります。
レイヤ2では同じネットワーク内の通信についてのプロトコルをまとめていました。レイヤ3では異なるネットワーク同士でどのように通信するのかをまとめています。

#### :bulb:記事のトピックス
・レイヤ3概要
・論理アドレス
・ルータ
・レイヤ3でのカプセル化
・IPアドレス
・クラスフルアドレッシング

# レイヤ3概要
#### :label:インターネットについて
インターネットとは、いくつもの小さなネットワークを繋いだ、巨大な一つのネットワークのことです。
ネットワークを小さく分けるには理由があります。一つの巨大ネットワークのままでは、トラフィックの制御が難しいからです。
トラフィックとは、データの通信量のことです。巨大なネットワークになればなるほど、トラフィックの量が膨大になり、制御が難しくなります。
レイヤ3ではこの小さく分けたネットワーク同士の通信についてのプロトコルをまとめます。

#### :label:論理アドレス
MACアドレス（物理アドレス）では、そのアドレスを持っている機器の場所までは特定できないという欠点がありました。
論理アドレスでは、階層型アドレッシングという方式で、「何処の、誰」という2つの情報を特定することができます。
MACアドレスでは、作ったベンダーを表すベンダーコードと、製造番号の2つの情報を持っていますが、これでは「誰」という情報はあるが、「何処の」という情報がありません。

論理アドレスでは、より細かく分けることもできます。例えばネットワーク１」内部の「ネットワークあ」内部の「ネットワーク￥」内部の「Ｚ番」と複数のネットワーク情報を持つことができます。
階層型アドレッシングとは、「階層構造」を利用してアドレスを割り当てる仕組みです。

#### :label:経路選択
ネットワークは複数の小さなネットワークの集合体です。
例えば、Xのネットワークにある「1」というデバイスからYのネットワークにある「2」というデバイスにデータを送信する場合、XとYの間にはA,B,Dなど複数のネットワークがあり、それらを経由する必要があります。

論理アドレスでは「何処の」という情報、ここでは「Y」という情報が分かっているため、Yのネットワークに向かう経路を選択できます。
しかし、MACアドレスの場合、「何処の」という情報がないため「Y」のネットワークに「2」があるという情報がありません。「2」が何処にあるのかをまず考える作業が必要となり、この作業はとても大変です。

電話番号に置き換えて考えてみると、分かりやすいです。
例えば、「03-1234-5678」という電話番号の場合、03→東京都の・1234→1234番の局の・5678→5678の電話機に接続します。

#### :label:ルータ
ルータはスイッチと同様に、データをどのポートに送るかまでを判断しますが、スイッチはMACアドレスを元に判断していたのに対して、ルータは論理アドレスを元に判断します。
さらに、ルータは宛先への距離、使用するメディアの転送速度、トラフィック量(混み具合)、信頼性などを考慮して、よりよいルートを探し出し、最適なルートを選択することができます。これをルーティングと呼びます。

ネットワーク間の通信にはルータが必要不可欠になります。
仮にネットワークXとネットワークYがハブで繋がっていた場合、相互通信はできません。
異なるネットワークからの通信は、ルータを経由しないと通信できないルールになっているからです。
理由としては、ハブで繋いでしまうと宛先に関わらず、すべてのノードに送信してしまうため、トラフィックが膨大になるという問題が発生してしまうからです。

# TCP/IP

#### :label:IP
レイヤ3について、あるプロトコルがそのほとんどを受け持っています。それはIPです。
IPはTCP/IPの後ろの部分で、TCP・IP別々のプロトコルとなっています。
IPはパケットの転送を受け持っています。
パケットとは、データをカプセル化する時に付与するヘッダのことで、データリンク層ではフレームと呼ばれているものです。

パケットの転送では、まず論理アドレスを決定し、宛先の特定を行います。その後、最適な経路を選択し、データの転送を行います。
データの転送は、ベストエフォート型で行われます。

#### :label:IPヘッダ
レイヤ3でのカプセル化では、セグメント・データにヘッダのみを追加します。
レイヤ2ではエラーチェック用のトレーラを追加しましたが、レイヤ3ではヘッダ（IPヘッダ）のみです。
IPヘッダは20バイト(160ビット)で、オプションを最大40バイト(320ビット)つけることが可能です。
IPヘッダには送信元IPアドレスと、宛先IPアドレスがあります。

#### :label:論理アドレスの特徴
MACアドレスはIEEEがつけたベンダーコードと、ベンダーがつけた割り当てコードから成り立っていましたが、論理アドレスはネットワークの接続点ごとに、ネットワーク管理者が付けます。
ネットワークの接続点とは、NICのことですが、例えば途中でNICを変えたとしても、論理アドレスは変わりません。例えばNICが2枚あったら、論理アドレスが2つあるということになります。
MACアドレスはNICを変えることにより、番号が変わります。それはNIC自体に番号が割り当てられているからです。論理アドレスはNICではなく、NICというネットワークとの接続点に後から割り当てられるため、NIC自体を変更しても番号が変わることはありません。
論理アドレスが変わる時は、所属するネットワークが変わった時です。

論理アドレスは「何処の、誰」（所属するネットワークの番号＋ホストの番号）という形になっています。
ネットワーク番号は、接続されている全てのネットワークでユニークである必要があります。
逆に、相互に通信し合わない、独立したネットワークであれば、ネットワーク番号が被っていても問題ありません。
一方で、ホスト番号は所属するネットワーク内でユニークである必要があります。
異なるネットワークに同じホスト番号があっても、所属するネットワークが異なるのでユニークとなります。

#### :label:IPアドレス
IPv4は32ビットで表記されます。実際には人間に分かりやすいように、バイトごとに10進数として表記されます。
各バイトの間にはドットを入れ、「172.5.34.11」例えばこのように表記します。
例えば172.5がネットワーク番号、34.11がホスト番号となり、ネットワーク番号、ホスト番号の順で表記されています。
1バイトごとの区切りを、IPアドレスではオクテットと言います。

インターネットは、複数のネットワークを統合した巨大なネットワークです。
そのため、インターネットにもネットワーク管理者がいます。ICANNという管理団体が、自分たちで考えたポリシーに従って、各ネットワークの要望に従って割り振ります。
各国、各地域にはNIC（Network Information Center）があり、日本の場合JPNICが割り振っています。
ICANNはネットワークを割り振るのに、クラスという概念を使用してきました。

#### :label:クラスフルアドレッシング
クラスとはネットワークの規模の分類です。
要望があったネットワークの規模に応じて、IPアドレスを割り振ります。
クラスにはA〜Eがあり、各クラスの意味は以下の通りです。
* クラスA：ネットワーク番号8ビット、ホスト番号24ビット
* クラスB：ネットワーク番号16ビット、ホスト番号16ビット
* クラスC：ネットワーク番号24ビット、ホスト番号8ビット
* クラスD：マルチキャスト用（商用として割り当てられない、特別なクラス）
* クラスE：研究用（商用として割り当てられない、特別なクラス）

各クラスを10進数で表記すると以下の通りです。
* クラスA：0.x.x.x〜127.x.x.x
* クラスB：128.x.x.x〜191.x.x.x
* クラスC：192.x.x.x〜223.x.x.x
* クラスD：224.x.x.x〜239.x.x.x
* クラスE：240.x.x.x〜255.x.x.x

ネットワーク番号部分のビットが少ないと、ホスト番号のビットが多くなります。つまり、多くのホストを所有するネットワークになることができます。
NICは大きい規模のネットワークにはＡを、小さい規模にはＣを割り振ります。
市外局番を例に取ると、東京。大阪は2桁、さいたま市や横浜は3桁、夕張市は5桁、北海道上川郡朝日町は６桁となっており、これらは街の規模によって割り当てられています。
電話番号は必ず10桁であり、市外局番が大きいと、市内局番＋加入者番号の部分が小さくなってしまいます。

つまり、市外局番の桁数が多いほど加入者番号に割り当てられる数が減ってしまいます。そのため、東京や大阪などの大都市は、市外局番が2桁となっているのです。この市外局番が、そのままネットワーク番号のビット数として考えると分かりやすいですね。
このように、クラスに分けてIPアドレスを割り振る方式をクラスフルアドレッシングと言います。

ネットワーク番号はNICが割り振りますが、ホスト番号は各ネットワーク管理者が自分で割り振る必要があります。
仮にクラスC、192.168.10.xのネットワーク番号を貰ったとして、xの部分は自分で決める必要があります。

#### :label:予約済みアドレス
ホスト番号はネットワーク管理者が決められますが、割り振ってはいけない番号があります。
ホスト番号のビットがすべて０になるアドレスと、ホスト番号のビットがすべて１のアドレスです。
仮にクラスC、192.168.10.xのネットワーク番号を貰ったとして、xの部分に0、255は割り当てられません。

ビットがすべて0になる番号をネットワークアドレスといい、この番号はネットワーク自体を示します。
例えば、192.168.10というネットワークであれば、192.168.10というネットワーク番号を与えられたネットワークそのものです。
これはそのネットワークへの経路選択の際に使用します。
他のネットワークからの転送の際、192.168.10.1の最後のホスト番号の場所まで考えていては手間がかかるため、他のネットワークは192.168.10までしか考えません。
この192.168.10までの番号が、ネットワーク番号以外すべて0のネットワークアドレスになるのです。

ビットが全て1になる番号をブロードキャストアドレスといい、この番号はそのネットワーク全てのホストを表します。簡単に言うと所属しているネットワーク内全てのホストが受け取るアドレスです。
例えば宛先IPアドレス192.168.10.255とすれば、192.168.10番ネットワークに存在するすべてのホストがそのパケットを受け取ることになります。

ネットワーク管理者はこの2つのアドレスをホストに割り振ってはいけません。
そのため、各ネットワークで割り振ることのできるホストの数が2減ります。
これら特別な意味を持つので使ってはいけないアドレスのことを、予約済みアドレスを言います。

# まとめ
今回はOSI参照モデル レイヤ3 ネットワーク層の論理アドレス、IPアドレスについてまとめました。
次回もレイヤ3 ネットワーク層についてまとめます。
最後に、記事を読んで間違いの指摘などがあればコメントで教えていただけると幸いです。
ありがとうございました。