OSI参照モデルはこんな風に覚えると分かりやすいのでは？　…と思ったけどやっぱり分かりにくかった話

## はじめに

[【Webエンジニアの求人なのに】Day3.OSI参照モデル](https://qiita.com/_ayk_study/items/cceec70145d9560624b5)という記事で少しやり取りをしていて、こういう見方をすると分かりやすいかな？と思ったので記事にしました。
と記事を書きつつ元記事のコメントも見て「上位レイヤーむずいな！」となったのでタイトルは変更。ここまで来たので無知を晒していくスタンスで記事も公開。

この記事では、OSI参照モデルの雰囲気がなんとなくつかめるようになることを目的としています。

## OSI参照モデルとは

こんな図でネットワーク通信をレイヤー分けして表現したやつです。
![](https://camo.qiitausercontent.com/d6a1429cdccec949aac629ba4e7a21e68c69cde5/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3133303330322f30623837326261622d333738642d366463642d376163372d3261333631663764313532662e676966)

個人的には、データリンク層、ネットワーク層…と呼ぶよりも、L2/L3といった**レイヤー**という呼び方に馴染みがあります。
本記事では、この各階層が実際何なのかをなんとなく掴めることを目的にしています。

詳しく知りたい詳細は[OSI参照モデルまとめ](https://qiita.com/tatsuya4150/items/474b60beed0c04d5d999)等いい記事が沢山あるのでそちらを参照ください。

## こんな覚え方はどうでしょう？

その考え方はこちら。**パソコン/スマホからインターネットに出られない！その際の確認順番で覚える**のはいかがでしょうか？
物事は自分の実体験に紐づくと覚えやすいと思いますが、そう考えると正常系を追うよりも**繋がらない！って状況の方が馴染みがある**と思うんですよね。

以下具体的な確認順番を元に解説。**確認の番号=レイヤー数**と思ってください。

### 確認その1：ケーブルは刺さってる？ -物理層

PCがインターネットに出られない！となってまず確認することといえばこれですよね。
**ケーブルちゃんと刺さってる？というような物理的要素がレイヤー1の物理層です。**

無線だったら**そのPCはWi-Fi有効になってるの？**とかですかね。

### 確認その2: 無線ONになってるけど、設定間違っていない？ -データリンク層

データリンク層は有線だとイメージが付きにくいので、無線の話にさせてください。
Wi-Fiが有効になっているのに何故か繋がらない。
こんな時は**接続先アクセスポイントとessid・パスワードが合っているか？**って確認しますよね。
**ものはあるけどデータ通信が出来ない、そんな要素に関係するのがレイヤー2のデータリンク層です。**

後は例えばUSBイーサで接続しているけど相手がUSBを認識していないとか、PPPoEの設定が合ってなくて基地局と通信できないみたいな感じ。

### 確認その3: IPアドレスは平気？ -ネットワーク層

さあ、ケーブルを刺しました/Wi-Fiは繋がりました！でもまだ通信できません。
次に確認することは？仕事でこんな状況になった経験のある方は1度は言われたことがあると思います。**ipconfig/ifconfigって打ってみて？**
後は**デフォルトゲートウェイは設定されてる？**とか。

というわけで、**IPアドレスに関する設定に関わる要素がレイヤー3、ネットワーク層になります。**

※注意：DHCP、DNS等のIPアドレスを得るためのプロトコルはレイヤー3ではなくレイヤー7です。

### 確認その4: ファイヤーウォールでブロックされていない？ -トランスポート層

…強引です(-_-;)

IPアドレスがちゃんとしているのにまだ通信できない。
ここまで来るとそろそろWebページが開かない方からも原因を追いたくなりますが、まだPCの設定で確認出来るところはあります。
**ファイヤーウォールで防いでない？無効化してみたら？**

**アプリケーションがネットワーク上で通信する際は、TCPもしくはUDPプロトコルを利用します。**
ファイヤーウォールはこのTCP・UDPで通信をするための入り口や出口を防いだりするため、ファイヤーウォールの有効・無効が影響することがあります。

というわけで、**TCPもしくはUDPプロトコルに関係するのがレイヤー4のトランスポート層です。**

### 確認その7: 送信データは、ちゃんとHTTPの仕様通りだよね？ -アプリケーション層

いきなり飛びました。アプリケーション層はユーザーアプリケーションではなく**アプリケーションがどんなプロトコルで通信するの？のプロトコル部分**が該当します。
RFCで規定されるような通信プロトコルとかですかね。…今日まで完全に勘違いしてました。
というわけでHTTPはアプリケーション層。5, 6はすっ飛ばしてます。

ちなみにその3でも触れましたが、DHCPもアプリケーション層です。
DHCPはL3レイヤーを構築せずに使える、アプリケーション層のプロトコルってことになるのかな。うーん分かりにくいぞ！笑

### 番外1: セッション層ってなんなの？

セッション層はアプリケーション間の開始、終了、管理の機構が出来るものが該当するそうです。これだけが出来るもの
通信はじめるよ～、通信中だよ～、通信終わるよ～って部分だけなので、HTTP/1.1ではTCPセッションでやっちゃってますね。

見かけたセッション層プロトコルの例で一番しっくり来たのはRTCPですかね。
動画等のストリーミング配信で利用されるRTPのセッション管理を行う為のプロトコルだそうです。

### 番外2: プレゼンテーション層ってなんなの？

アプリケーション層のデータを圧縮・暗号化目的で変換をかけるプロトコル。受信側のプレゼンテーション層で解凍・復号化を行うので、アプリケーション層では何も意識せずにデータを扱える。
Apple Filing Protocol等が該当するそうです。SSL/TLSはどうだろうと思ったけど、セッション層の仕事もそれ以外のこともしてるから違うんだろうな。
~~馴染みなくて全くピンとこない~~

## 最後に

OSI参照モデル、こうやって記事に起こすことで理解していないことを理解しました。
レイヤー5、6は正直すぐ分からなくなると思う。~~もうどちらもアプリケーション層でいいのでは？~~
後はDHCPがレイヤー7と認識出来たのが収穫ですね。新人の皆さまは私のように間違った知識を持たないようお気を付けください。

## 参考

[OSI参照モデルまとめ](https://qiita.com/tatsuya4150/items/474b60beed0c04d5d999)
[【Webエンジニアの求人なのに】Day3.OSI参照モデル](https://qiita.com/_ayk_study/items/cceec70145d9560624b5#comment-69116350a0baa2a70e31)

Wikipedia各種:
[OSI参照モデル](https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB) (元々OSIという規格向けの図だったみたいです)
[インターネット・プロトコル・スイート](https://ja.wikipedia.org/wiki/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%83%BB%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB%E3%83%BB%E3%82%B9%E3%82%A4%E3%83%BC%E3%83%88)
[Real-time Transport Control Protocol](https://ja.wikipedia.org/wiki/Real-time_Transport_Control_Protocol)
[Apple Filing Protocol](https://ja.wikipedia.org/wiki/Apple_Filing_Protocol)