OSI参照モデルの有害性

10分で解説動画
https://www.youtube.com/watch?v=9TAUTikQX7s

# はじめに
ネットワークの勉強をしましょう


# OSI参照モデル
OSI参照モデルに関して、昔ちょっと悩んでいた時があったが、ちょっとした事で迷いが無くなったので
悩みポイント等を説明する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/2f76f8e2-b12b-70ec-ccbc-79cc75a602e8.png)

まず、よくOSI参照モデルの説明でTCP/IPやプロトコルとの対比図があり、実際に一般的な書籍でも
*OSIの4層のトランスポート層はTCP/IPのトランスポート層で TCPやUDPプロトコルの事である*
といった記載がされる

OSIのトランスポート層はエラー訂正や再送信、データの並び替え等を行うとあるが、UDPにはそれらの機能はない
OSIのセッション層では、エンド間の接続、接続の回復、接続の終了が規定されているが、TCPではハンドシェイクで接続と終了を行う
UDPはトランスポート層を満たしていない、TCPはセッション層の一部を実装しているのではないか？？

また、プレゼンテーション層はデータの変換（文字コード変換、暗号化、圧縮）を行うが
例えばHTTPでは文字コードの変換をアプリケーション層で行っているし、暗号化はトランスポート層で行われる事もある

また、先ほどの図は一例にすぎず、区分けが異なるものも多く存在する

などなど、色々考えるとわからなくなってくる（特にアプリケーション層とプレゼンテーション層、セッション層とトランスポート層）
ところが次の一言で悩みが全てとけた

*TCP/IPは OSI参照モデルに則って作られていない*

そのため、実務的には、TCP/IPの4層モデルを基準に考える方が良い。
ただし、OSIのモデルは今でも概念としては使われており、L2スイッチ、L3スイッチ、L4スイッチ、L7スイッチと名前だけ残っている
実際には
L2 ＝ TCP/IPのネットワークインタフェース層
L3 ＝ TCP/IPのインターネット層
L4 ＝ TCP/IPのトランスポート層
L7 ＝ TCP/IPのアプリケーション層

と思えば良い
ただし、情報処理のテストではOSI参照モデルは出てくるので、試験対策には覚える必要がある

以下は、TCP/IPモデルで説明する

## ネットワークインタフェース層
OSI参照モデルの、物理層(L1)、データリンク層(L2)に だいたい相当する
イーサネット、PPP、Wifi、ARP等が該当
物理的な規格を表す
トークンリング、フレームリレー、FDDI等も存在する

物理層(L1)の機器としては、リピーター、リピーターハブ（通称バカハブ）がある
リピーターは、電気入力を修復してそのまま同じデータを全員に伝える
データを受けたPCは自分宛てのパケット以外は捨てる

データリンク層(L2)の機器としては、スイッチ、スイッチングハブ(L2スイッチ)がある
リピーターと異なり、MACアドレスを見て、宛先だけにデータを送る

隣接するPC同士でしか通信が出来ない（ネットワークを超えられない）
MACアドレスで識別し
Ethrnet IIフレームフォーマットで送信される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/31a7d004-64bb-6474-faf4-79bd8a3daa6a.png)

## インターネット層
OSI参照モデルのネットワーク層(L3)に だいたい該当する
IP(v4,v6)、ICMP、IPSec等が該当する
ネットワークを超えパケットを送信する事ができる

インターネット層の機器としては、ルーター、L3スイッチ等が存在する

IPアドレスで互いのPC(ネットワークカード)を識別する（アプリまでは識別しない）
IPパケットフォーマットで送信される

EtherIIフレームワークのデータ部分にパックされる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/c88e8cac-a4fa-edd1-7ffe-0e5d336d0108.png)

## トランスポート層
OSI参照モデルのトランスポート層とデータリンク層の一部が だいたい該当する
TCP、UDP等が該当する
OSIとかなり概念が異なる部分となっている

ポート番号で識別され、エンドポイント（アプリケーション）まで識別する

TCPは、セッションの開始、終了やエラー訂正、再送信、パケットの順番の制御等を行うため
OSIのトランスポート層とセッション層の一部（接続の回復等は含まない）を満たしている
つまり、TCPはお互いに接続を行い、データが正しく送受信される事を保証する
その為、UDPに比べると速度が遅い

UDPは接続を行わず、エラー訂正、再送信、パケットの順番も保証されないので
OSIでいうとトランスポート層もセッション層も満たしていない
速度が必要で、データの保証がさほど必要でない用途に使う
また、マルチキャストやブロードキャストが可能である
用途としては、音声や映像のストリーミング、IP電話など

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/e0268e2b-3e1c-aab6-d519-7df5dd6bb16a.png)

TCPヘッダ（Wikipediaより）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/cd5983b3-c223-8575-781a-276362e10851.png)

UDPヘッダ（Wikipediaより）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13916/cb9dd62f-7fe8-8dbc-c99c-66c80bd145c6.png)



## アプリケーション層
OSIのプレゼンテーション層、アプリケーション層、（セッション層）にだいたい該当する
Webサーバ、メールソフト等のアプリケーション全般が該当する
また、TCP/IPのアプリケーション層では、通信プロトコル（HTTP、SMTP、FTP・・・）も含まれる


# OSI参照モデルに対する批判
上記でみるように、OSI参照モデルは現実せかいに即していない
そのため、TCP/IPと対比させて考えると私のように長年混乱をする事になる
だが、各種情報処理試験では、あえてTCP/IPと対比させて問題が出たりするので厄介だ

## 階層化の有害性
Layering Considered Harmful というのがRFC3439でも言われている
https://datatracker.ietf.org/doc/html/rfc3439

私と同じように、基本理念の異なるTCP/IPに関して、OSI参照モデルと対比させる事に怒ったエンジニアが
上記のRFCを書いた
実質インターネットの覇権をとったTCP/IP vs 自分たちを標準と言い張るOSI との対立だ！

上記のプロトコルを見てわかるとおり
EtherIIフレームの中にIPパケットのヘッダが入り、その後TCPのヘッダが入り、その中にアプリケーション層のプロトコルとデータが実装される
このように階層が増えれば増えるほど、速度も遅く、データも効率が悪くなり、複雑化してしまう

そして私も、この有害性により、長年の間TCP/IPとOSI参照モデルとの対比に関して悩んでいた

# 結論
OSI参照モデルとTCP/IPは基本理念が異なり、対比させるべきではない
OSIはテスト勉強には必要だが実務では考えない方が良い。かわりにTCP/IPの4階層を使う
ただしL2、L3、L4、L7という言葉だけ残っているのでそれぞれTCP/IPのレイヤーとして覚える
L2=ネットワークインタフェース層、L3＝インターネット層、L4=トランスポート層、L7=アプリケーション層