ネットワークってなんなのよ？ その2

- その1はこちら
    - [ネットワークってなんなのよ？ その1](https://qiita.com/shimpeitakeda55/items/dd7d0f661c8ce2a513c1)

引き続きネットワークの世界を泳いでみましょう！ :swimmer: 


## ネットワークの階層モデル

> ![スクリーンショット 2022-12-16 21.04.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/4c8c43b9-b12a-7164-f6ee-8deafbbb9123.png)
引用元: https://www.sbbit.jp/article/cont1/12099


今回はTCP/IPモデルやOSI参照モデルの中身をさらに詳しく見てみましょう。

TCP/IPモデルは1970年代にDARPAが開発したモデルです。これはOSI参照モデルよりも歴史が古くて、より実用性を重視した**4階層**構造になっています。「プロトコルをコンピュータに実装するにはどのようにプログラミングしたらよいか」を中心にモデル化されています。

OSI参照モデルは国際標準化機構(ISO: International Organization for Standardization）が1984年に策定した階層構造モデルです。通信機能を細かく分類していて、**7階層**となっています。「あぷせとねでぶ」と前の記事で書きましたね。TCP/IPモデルと違い、「通信プロトコルに必要な機能は何か」を中心にモデル化されています。

その1で述べたように、実際のネットワークではOSI参照モデルはあまり使われません。ただ、説明などではOSI参照モデルはよく図として使用されます。見慣れておくと理解がはかどるでしょう。

いったん、学習目的としては階層を5つに区切ったモデルがわかりやすいため、この記事では以下の**5階層**のモデルで順番に説明をしていきましょう。

1. 物理層
1. データリンク層
1. ネットワーク層
1. トランスポート層
1. アプリケーション層

TCP/IPモデルの「1層目:ネットワークインターフェース層」だけが、OSI参照モデルのように「物理層」と「データリンク層」の2層に分かれるモデルです。


## 1. 物理層

物理層はケーブルやWi-Fiの電波など通信における物理的なものすべてを担っている階層です。

ケーブルの材質やコネクタの形状、ピンアサイン（ピン配列）や無線の周波数帯域などの物理的な要素すべてを定義しています。

また、送信するときは、1つ上の階層であるデータリンク層から受け取ったビット列（フレーム）をこの物理層が受けとり、アナログ波に変換します。

その際にケーブルや電波に流せるようなアナログ波に変換するためのルールもこの物理層が定義しています。

まずは有線LANについて見ていきましょう。

### 有線LAN(IEEE802.3)

![computer_lan_cable (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/2d86b905-f3e0-a0bb-c065-cb6e4c7e5c0d.png)

イーサネットという言葉を聞いたことがあると思います。イーサネットとは通信機器同士を接続するために利用するケーブル（=有線LAN）の規格です。

もともとは規格を意味する用語でしたが、現在では有線LAN自体をイーサネットと呼んでいるケースがほとんどです。

ではそもそもイーサネットの起源はどこにあるのでしょうか。

それは1960年代後半から1970年代前半にかけて、ハワイ大学で構築された「ALOHAnet」です。

これはいくつもの島に分散して存在しているハワイ大学のキャンパスを無線で接続したパケット交換型ネットワークです。

このALOHAnetの**パケットが送れなかったらランダムな時間だけ待って再送する**という仕組みがイーサネットの基礎となりました。

実際にヨドバシカメラなどでLANケーブルを探すときに目につくのが、「〇〇 BASE - △△」という表記です。

これは「[伝送速度] BASE - [伝送媒体やレーザーの種類]」を表現しています。たとえば、1000BASE-Tであれば1Gbpsのツイストペアケーブルという意味になります。

ちなみにツイストペアケーブルは見た目は1本のケーブルですが、8本の銅線を2本ずつより合わせてひとつに束ねたものです。コネクタをRJ-45といい、並び順によってストレートケーブルとクロスケーブルに分類できます。

光ファイバーであれば「〇〇BASE-SX/SR」や「〇〇BASE-LX/LR」などがあります。プロトコルのSはShort WaveLengthでLはLong Wavelengthという波長の種類を表しています。

そのほか、同時にパケットを送信してぶつかると、「ジャム信号」という特殊なビットパターンを送信して、それを受け取った端末はランダムな時間だけ待って再送する、「CSMA/CD(Carrier Sense Multiple Access with Collision Detection)」という仕組みなど、具体的な通信方法もこの物理層で定められています。

無線LANについても見ていきましょう。

### 無線LAN（IEEE802.11）

![computer_wireless.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/b1bec4f7-95ed-4a8a-a4ff-c702c2622d3c.png)


無線LANは仕組みがかなり複雑なので、眠くならないように簡単にまとめておきましょう。（決してサボっている訳ではありません！）

無線LANに関しては、

- 周波数帯域
- 変調方式
- 通信方式
- 高速化技術
- その他のBluetoothなどの無線プロトコル

などが定められています。

無線LANで使用する周波数帯域は、2.4GHz帯か5GHz帯のどちらかで、チャネルに分割して使います。

2.4GHz帯はISMバンドと呼ばれ、電子レンジやBluetoothなどでも使われます。障害物に強く屋内外で使用できるのですが、日常生活で電波干渉してしまうものが多いという欠点があります。

5GHz帯は障害物に弱く屋外での使用に制限がありますが、19チャネルすべてを同時に使用できます。

変調とは0と1で構成されているデジタルデータをアナログな電波に変換することです。一次変調で電波として送れるようにして、二次変調でノイズに強くするといった変調方式を定めています。

そのほか、同時にパケットを送信した際に衝突する前になんとかしようとする「CSMA/CA」という仕組みも定められています。先ほど有線LANの項で紹介した「CSMA/CD」は、衝突した後になんとかしようとする仕組みです。

ここまでが物理層です。実際に手に取ることができるケーブルもプロトコルによって細かく規格が決められているということが理解いただけたかと思います。

次はデータリンク層を見ていきましょう。


## 2. データリンク層

### Ethernetフレーム

物理層は不器用です。

送信側の物理層はデータから信号に変換するときに、ちょっとした処理（符号化）を施しているので、受信側の物理層も多少のエラー（ビット誤り）であれば訂正できるのですが、複雑なエラーとなるともうお手上げです。

そんな不器用な物理層の弱点を補完しているのがデータリンク層です。

具体的には、「どの端末に対してデータリンクを作るか」、「ビットが欠けていないか」を判断するため、カプセル化の処理を行うのがこの層です。

データリンク層は、家庭LANをはじめとする同じネットワーク内にいる端末の接続性と、その信頼性を確保してくれます。この記事では説明のため切り離して2層にしましたが、物理層と連携して動作するため、プロトコルとしても物理層とセットで定義されています。

先ほど説明したイーサネットですが、そのイーサネットを流れるパケットのことを「Ethernetフレーム」と呼びます。

フレームフォーマットとしては「EthernetⅡ規格」と「IEEE802.3規格」の2種類があります。

ただ、1982年にDEX（デック）、Intel（インテル）、Xerox（ゼロックス）が発表した独自規格「EthernetⅡ」が30年以上変わらず使われていて、「IEEE802.3規格」マイナー規格となっています。

具体的にフレームフォーマットの中身を見ていきましょう。

> ![スクリーンショット 2022-12-16 21.23.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/12fc04cf-a589-ab26-8844-76f8f5cb6ca1.png)
引用元: https://domain-talk.net/teq/ethernet-frame/

「プリアンブル」「宛先/送信元MACアドレス」「タイプ」「イーサネットペイロード」「FCS(Frame Check Sequence)」という5つのフィールドで構成されています。

「プリアンブル」は、「これからイーサネットフレームを送りますよー」という合図です。ライブで曲が始まる直前に、ドラマーがカンカンカンカンとスティック同士を叩いてリズムをとるのに似ています。

「宛先/送信元MACアドレス」はイーサネットネットワークにおける住所のようなものです。iPhoneの設定画面などでMACアドレスを見たことがあるかもしれません。

MACアドレスは、NIC（ネットワークインターフェースカード）を製造するときにROM（Read Only Memory）に書き込まれる48ビットを16進数で表示したものです。

「タイプ」は、ネットワーク層でどんなプロトコルで使用しているかを表すIDです。IPv4だったら「0x0800」などです。

「イーサネットペイロード」は上位層のデータそのものです。ネットワーク層でIPを使用していれば「イーサネットペイロード＝IPパケット」となります。

「FCS(Frame Check Sequence)」は、イーサネットフレームが壊れていないか確認するための4バイトの(32ビット）のフィールドです。FCSがイーサネットにおけるエラー検知のすべてを担っているといってもいいでしょう。


## ARP（Address Resolution Protocol）

![yakkyoku_uketsuke.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/db24fe20-ce40-877a-ccd0-ca6e95582dac.png)


ネットワークの世界ではアドレスを示すものは「IPアドレス」と「MACアドレス」のふたつだけです。

MACアドレスは、NICそのものに焼き付けられている物理的なアドレスで、IPアドレスは、OS上で設定する論理的なアドレスです。

ARPは、物理的な「MACアドレス」と論理的な「IPアドレス」を使って、データリンク層とネットワーク層の架け橋となるプロトコルです。

インターネットへ向かって通信するときは、IPアドレスを使います。ただ、宛先IPアドレスを持っているだけではインターネットの入り口にもたどり着けません。ほとんどの場合、インターネットの入り口までバケツリレーのようにイーサネットを渡っていく必要があるからです。

では、次にパケットを送るべき宛先MACアドレスはどうやって知ればいいのでしょうか。

そこで出てくるのがこのARPというプロトコルです。ARPで宛先IPアドレスから宛先MACアドレスを求めることができます。

ARPの基本的な動作はとてもシンプルです。

病院の待合室的で、「〇〇さんはいますかー？」と大声で聞いて、〇〇さんが「私でーす！」と返す、というような仕組みです。

「〇〇さんはいますかー？」と**ARP Request**というパケットをイーサネットワーク全員を対象に送り、〇〇さんが「私でーす！」と**ARP Reply**パケットをリクエストしたPCに返します。

送るべきMACアドレスがわかったら後は送るだけですね。

ARPはこのふたつのパケットだけでMACアドレスとIPアドレスを紐づけているのです。


## 3. ネットワーク層

![internet_earth.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/c9e6234c-56e9-ccfb-88ee-51d1a65dcab7.png)


ネットワーク層はイーサネットで作ったネットワーク同士をつなげて、インターネットをはじめとする異なるネットワークにいる端末との通信を確保するための層です。

データリンク層は、同じネットワークの端末たちを接続する以上はしてくれません。

このネットワーク層がデータリンク層でできている小さなネットワークをつなぎ合わせて、大きなインターネットを作ることを可能にするのです。

ちょうど旅行をするときに、旅行会社が作ってくれた行程表を眺めながら、電車や飛行機やバスを乗り継いで、やっとこさ目的地にたどり着くのに似ています。

ネットワーク層のIP(Internet Protocol)は、パケットを目的のコンピュータまで届けるという、TCP/IPでもっとも重要な役割を持っています。

IPv4というプロトコルを聞いたことがあるでしょうか。

IPv4は、1981年に発行されたRFC791 「INTERNET PROTOCOL」で標準化されているコネクションレス型のプロトコルで、イーサネットヘッダーのタイプでは「0x0800」と定義されています。

> ![スクリーンショット 2022-12-16 22.09.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/282504/e2ee09c6-0311-d9ae-04b7-720a9d423519.png)
引用元: https://qiita.com/mogulla3/items/efb4c9328d82d24d98e6

IPv4アドレスは32ビット（4バイト）で構成されていて、8ビット（1バイト）ずつドットで区切って、1０進数で「ドット付き10進記法」で表記されます。また、ドットで区切られたグループのことを「オクテット」といいます。

このIPアドレスを使ってルーティングというバケツリレーで目的のコンピュータまでパケットを届けます。



トランスポート層とアプリケーション層については次の記事で紹介します。




## 参考文献

『ネットワークはなぜつながるのか 第2版 知っておきたいTCP/IP、LAN、光ファイバの基礎知識』
『マスタリングTCP/IP　入門編（第6版）』
『図解入門TCP/IP　仕組み・動作が見てわかる』
『パケットキャプチャの教科書』
『Linuxで動かしながら学ぶTCP/IP入門』