developer-kikikaikai
dOpIa1PQNPi5jLrn.qrunch.io

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

2018/12/06に投稿
この投稿は別サイトからのクロス投稿です(クロス元:https://qiita.com/developer-kiki...

はじめに

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

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

OSI参照モデルとは

こんな図でネットワーク通信をレイヤー分けして表現したやつです。

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

詳しく知りたい詳細はOSI参照モデルまとめ等いい記事が沢山あるのでそちらを参照ください。

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

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

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

確認その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参照モデルまとめ
【Webエンジニアの求人なのに】Day3.OSI参照モデル

Wikipedia各種:
OSI参照モデル (元々OSIという規格向けの図だったみたいです)
インターネット・プロトコル・スイート
Real-time Transport Control Protocol
Apple Filing Protocol

関連記事

コメントはありません。
developer-kikikaikai
dOpIa1PQNPi5jLrn.qrunch.io
CのLinux組み込み開発者です。githubにツールやOSSを上げています。組み込みの中でも上位層よりなので、たまにJavaScriptやJava, Rubyなんかも触ります。 pythonも色々使ってみてます。
フォロー
フォロワー
ブログを開設

クランチで技術ブログを
始めてみませんか?

この先は、クランチへのアカウント登録、及びログインが必要なページになります。

Markdownの書き方
見出し # 見出し(h1)
## 見出し(h2) , ### 見出し(h3) ...
リスト - 箇条書き
   - タブでインデント
番号付きリスト 1. テキスト
2. テキスト
改行 行末に半角スペース2つ
リンクの挿入 [タイトル](https://xxx.com)
引用 > テキスト
コード挿入 ```cpp:title
code
```
画像の挿入 ![代替テキスト](URL "タイトル")
太字 **テキスト**
斜体 *テキスト*
打消し線 ~~テキスト~~
水平線 ***
技術ブログを開設
ログイン