[🔰初心者向け]Webエンジニアなら押さえておくべきネットワーク知識① ~ OSI参照モデル ~

## はじめに
こんにちは！ITスクールRareTECHにてCS（Customer Support）を担当している池村です。今回の記事はネットワークの基本の基本、OSI参照モデルについてです。どんなエンジニアになろうと、ネットワークの知識は必須と考えています。RareTECHでも、まずはネットワークから学んでいきます。

今回は、最低限知っておくべきネットワークの知識を***ざっくり***解説していきます。この記事はその①となります。

:::note info
この辺りの技術は深ぼると沼なので、最初はさらっと表面をなぞるように覚えていくといいと思います。深ぼるのはあとで良い。
:::

![2edc9147-b192-4922-b1e9-43d4234ea450_720.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/8ca40962-ae8b-2da8-515e-ffccbf6f4c6d.png)



## プロトコル
まずはプロトコルについてです。
パソコンとサーバー、MacとWindows、iPhoneとAndroid、それぞれ違った機器で正確にデータを送るためには、**決まった方法で送る必要があります**。

よく使われる例としてメールの送受信があります。
メールを送るためにはメール用の通信ルールがあり、規則によって定められています。その**ルールに沿ってデータを送ることで**、相手にも正確にデータが届くようになっています。

:::note info
プロトコルはコンピューター同士で通信をする際のルールの集合体です。
:::


通信の種類自体はたくさんあるのですが、メールであればPOP3やSMTPと呼ばれるプロトコル、ブラウザでの通信ならHTTPやHTTPS、自身のPCから別サーバーなどに安全にアクセスするSSHなどです。

:::note warn
もちろんプロトコルは今でも更新され続けています。HTTPではセキュリティの脆弱性があったため、HTTPSが誕生したように。
:::

このプロトコルが設定されていなかった時の通信は、機器同士バラバラの通信規格を使っていたとされています。互換性がなかったため、統一した方がいいよね！という考えですね。


## OSI参照モデル
次にOSI参照モデルについてです。
これは現代の通信を7つの階層に分けて、どう言った形でデータが送受信されるかを表すことができる***型***です。通信を語る上でこのモデルの理解は必須と考えており、同じようなモデルであるTCP/IPモデルの理解よりも若干優先度高いと思っています。

:::note info
初学者はそれぞれの層の名前、それぞれの階層にはどんなプロトコルがあるのかを覚えておくと良いと思います。
:::

:::note warn
注意点として、現在のすべてのインターネット通信がこのOSI参照モデルに則って行われているわけではないです。
:::

![step11（Qiita）.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/a8120bb9-4566-d0b5-3229-312ee675054f.jpeg)


### 第7層：アプリケーション層
この層はユーザーが触るアプリやシステムと通信ネットワークを結びつけてくれる役割があります。**アプリ自体はこの層の中にいるわけではありません**。

アプリからリクエスト（たとえばブラウザでのリクエスト）が送られると、アプリケーション層がその適切なプロトコル、今回で言うとHTTPSに合わせて、データを送るための適切な情報を追加しつつネットワークで利用可能なデータに変更してくれます。

もちろん、最終的に相手から返ってきたレスポンスも、アプリ上で使えるように返してくれます。

:::note info
主なプロトコル
- HTTP
- HTTPS
- SMTP
等です。他にもたくさんあります。
:::

![step11_1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/01138a4f-10a2-f88f-25ba-f908a8ed34fe.jpeg)


### 第6層：プレゼンテーション層
#### 圧縮と解凍
この層の役割はいくつかあるのですが、まずはデータの圧縮と解凍ですね。データを圧縮して、次の5層に渡したり、5層から送られてきたデータの解凍も担当しています。データを圧縮する理由は、データの送受信の速度を上げる必要があるからです。

#### データ形式の変換
もう一つ覚えておくべきはデータ形式の変換です。例えば以下です。
- 文字コードが違う（自分のコードはUTF-8、相手はShift-JIS）
- 画像の形式が違う（pngなのかjpegなのか）

など。これらの形式を送受信どちらにも合わせられるように変換します。

#### 暗号化と復号化
言葉にしてしまえば簡単ですが、送る側で暗号化され、受け取る側で復号化されます。
第三者にデータが盗み見られたり、改ざんされたりするリスクを防いでくれているんですね。

:::note info
暗号化や復号化の裏では共通鍵や公開鍵が使われていたりするんですが、むずすぎるので初学者は覚えなくて大丈夫です。
主なプロトコル
- X.509
- JPEG/PNG/GIF
- ASCII/EBCDIC
- SSH
等です。他にもたくさんあります。
:::

![step11_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/f66c57d3-26e4-f121-2b14-2203defa1357.jpeg)


### 第5層：セッション層
この層は通信相手とのセッションを確率・維持・終了する役割を担っています。セッションというのは、通信が開始されてから、完全に終了するまでの時間のことです。
例えばオンラインでの会議等を行っている時、会議をしている間セッションは維持されていて、終わると終了されるような形です。

:::note warn
セッションには色々種類があるのですが、ここでいうセッションは通信セッションです。認証で出てくるセッションとは似て非なるものです。
この層のプロトコルも色々ありますが、あまり意識しなくて大丈夫です。
:::

![step11_3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/2486e4b6-60f9-1272-1a6f-f02c2096b029.jpeg)


### 第4層：トランスポート層
この層は通信の信頼性を管理する層です。
#### TCP
TCPと呼ばれるプロトコルが使われる場合、その通信は信頼性が高く、速度はもう一つのUDPに比べて速くはありません。3ウェイハンドシェイクと呼ばれる接続方法で通信が行われます。この方法について詳しく記述はしませんが、データの送受信が確実に行われる方法です。メールやブラウジングなどで使われています。

3ウェイハンドシェイクの通信の形👇（逐一確認）

![3__________________________________720.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/3eb33bf2-2ffe-8072-5ec1-c1f5726a56af.jpeg)


#### UDP
TCPと違ってUDPが使われる場合、データが確実に届く保証はないですが、その分速度が速い特徴があります。ゲームや動画など、リアルタイム重視の通信に使われるものです。

#### データの分割もする
この層では、セグメントとばれる単位に分割しています。

:::note info
主なプロトコル
- TCP
- UDP
:::

![step11_4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/692e659e-d298-a1e6-df65-b59f9fa991b1.jpeg)


### 第3層：ネットワーク層
ネットワーク層では、送信者と受信者、異なるネットワーク間でのデータ転送を管理しています。よく聞く***IPアドレス***はこの層のお話です。大きな役割はやはり、データがしっかり受信側に届くように最適な経路を選ぶことですね。


:::note info
主なプロトコル
- IP（アドレス）
- ICMP
- RIPとか
:::

あとはやはりデータが分割されます。ここでの分割単位はパケットです。ここで使われるのがルーターやファイアウォールなどの仕組みです。

![step11_5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/c5a659a1-5d26-8e7e-9c74-0025c9b89884.jpeg)


### 第2層：データリンク層
この層の役割は、同じネットワーク内の機器に正しくデータのやり取りをできるようにすることです。この層の代表的なものがMACアドレスなのですが、こちらはよく個人番号（マイナンバー）などと同じように表現されますね。要は近くの機器を識別するための番号です。

ここではさらにデータが分割され、フレームという単位になります。
ヘッダ、トレーラーと呼ばれる部分に送信元アドレス、宛先アドレス、エラーチェック情報などが追加されて、次の層へ運ばれます。

![step11_6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/fe33fd95-6c4d-c9ed-ca06-dde3e424f996.jpeg)

:::note info
すごいなあと思うところとして、送信側と受信側の処理能力に差がある場合、送信速度を調整してしてくれることですかね。データの受信を安定させてくれてます。
:::

### 第1層：物理層
この層はついにデジタルデータが0と1になります。ハードウェアと呼ばれる世界です。
物理的な電気信号や光信号に変わって送られるようになるんですね。ここで使われているケーブルも規格が決まっています。よく使われているのはEthernetですかね。物理的だけでなく、無線通信などでは電波系も使用されています。

![step11_7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798971/57f97472-f9cf-8bf5-7ec9-7d2d1d48192f.jpeg)

:::note info
私はハードウェアに興味が持てないので、どうしてもこの層には苦手意識があります。ざっくりハードの世界であること、0と1の世界ということだけ押さえておきましょう。
:::

## この知識を持っておくと何が良いのか？
Webエンジニアなら基本的なブラウザの仕様、HTTP（HTTPS）だけ知っておけば良いんじゃない？と思う方が多いと思います。自分もそうでした。

ですが、この辺りの知識があると、恩恵があります。
- トラブルシューティングの際にどの層での問題かが予測できるので解決が若干早い
- クラウドサービスを使う時に役立つ（特にVPC周り）

などなど。
**覚えておいて損はない知識**になっています。
各層によって扱うプロトコルが違うわけですが、今後よく出てくるポート番号なども関係してくるので、順番に覚えておくととても効率的です。



## おわりに
今回はOSI参照モデルを***ざっくり***理解するための記事を作成しました。
IT学習を始めたばかりの初学者は、最初から全てを理解しようと思わないように気をつけてくださいね。私自身、完全理解しているなんて口が裂けても言えないですが、今後少しずつ深ぼっていきたいと思っています。

## 余談
ハードグミ噛みながら仕事するととても集中できて良い🤤