OSI参照モデルやTCP/IPをたとえ話で理解しようとするのはやめましょう。

# 初めに
よく以下のようなイラストで説明されるが、ぶっちゃけ概念的な話なのか何なのか意味不明だと思います。

<img width="500" alt="よく分からん" src="https://envader.plus/_next/image?url=https%3A%2F%2Fstorage.googleapis.com%2Fenvader-article-images%2Ftcp-ip%2F001.png&w=1080&q=75&dpl=dpl_DtGdN2E2NwMLgC8TG7wESfS13dKK">

あとはこんな感じで小包がどうのという例えとか…
<img width="500" alt="よく分からん" src="https://blog.dreamhanks.com/wp-content/uploads/2020/12/%E7%84%A1%E9%A1%8C-2.png">

**いや、正直意味不明ではないですか？？**
ってことで、今回は実際に直接コンピュータ同士がやり取りしているパケット（通信内容）を見て、どのように階層が分かれているかを見ていこうと思います。
なんでどこにもこういった記事がないんだろう…

# 大前提
まず、コンピュータは0と1しか送信できません。
今PCかスマホでこのページを閲覧しているかと思いますが、あらゆる情報は光や波で0と1で送信されています。
一度、どのようにコンピュータが0と1だけで情報をやり取りしているかおさらいします。

例えば山の麓と頂上に人を置き、ライトで山頂の天気を知らせたいとします。
事前に以下のルールを決めて置きます。今回の場合は山頂は晴れだと分かります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/658a2fe3-79a3-417e-8c02-9c97d38a0395.png)


しかしこれでは今の天気しか分かりません。不便です。
明日の午後の天気が知りたい場合はどうすればいいか。あなたならどうしますか？

そうです。ルールを追加すればより多くの情報をやりとりできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/cfd0dd34-23e1-463e-bf0e-90f5f0220158.png)

光らせるタイミングを『今日・明日・明後日・午前・午後・天気』とします。
明日の午後が知りたいので、麓の人が光らせるのは『01001』になります。
頂上の人は明日の午後は晴れると判断すれば『010011』と返答します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/643c0cfe-3d29-4674-a77b-58aed20e9b97.png)

ここまで見て理解できれば、以下2点も理解できると思います。

**・各ライトの点滅がどういう意味を指すかの共通ルールが必須**
**・このルールは、ある程度は整備しておかないと分かりにくい**

ルールとしてはこの図でいうと上の方が断然分かりやすいですよね。
これをコンピュータで行っているものが、OSI参照モデルやTCP/IPモデルと言われているものです。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/445294cb-5873-4b95-8ac7-b035ce99e29f.png)

これがコンピュータ上でのルール。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/701e0c4c-0f65-4fd6-a391-ba26d942d072.png)

# では実際に見てみましょう
先ほどはライトの点滅で0と1を表現しましたが、PCの光ファイバーも同じ仕組みです。
PCも光ファイバーであればカチカチライトを点滅させて通信しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/86d0da8c-10f4-4152-b71d-e037c2d13256.png)

よく見るこのモデルでは、最初にネットワークインターフェースという情報が来ています。
<img width="500" alt="よく分からん" src="https://envader.plus/_next/image?url=https%3A%2F%2Fstorage.googleapis.com%2Fenvader-article-images%2Ftcp-ip%2F001.png&w=1080&q=75&dpl=dpl_DtGdN2E2NwMLgC8TG7wESfS13dKK">

適当にパケットを取ってみました。
（あまり公開するべきではないとは思いますが）私のPCのMACアドレスは
18-c0-から始まるものです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/85d34ff2-cc6d-4bf2-8193-10102f021b4b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/5eba643b-c035-4e7e-b3c8-e1500f098a12.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/2e0706aa-0bba-4a61-b66e-59394cb2ee61.png)

パケットに注目すると、最初の出だしは私のMACアドレスがそのまま来ています。
この『最初は送信元のPCのMACアドレス。次に宛先のMACアドレス。次に色々オプション。この辺までをネットワークインターフェース層とします』ってのが層の正体です。
（余談ですが、16進数をさらにデコード（変換）したのが一番右の文字列です。MACアドレスは16進数で表現されるものなので、これを変換すると意味不明な文字列になります。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/80a64ec9-8db1-44b9-ba15-651ce8db25de.png)


適当に他のパケットを見ても、必ず最初はMACアドレスから記載されていることが分かると思います。ちゃんとネットワークインターフェース層からパケットを形成するルールが守られています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/45f2772e-e8cd-48f2-a147-404e0663c066.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/f39fb030-2b7e-48e7-af15-90899a867fff.png)

なお、この図はかなり雑なので詳細なルールや役割はご自身で確かめてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2919278/2e0706aa-0bba-4a61-b66e-59394cb2ee61.png)

# OSI参照モデルとTCP/IPモデルって何が違うの？
OSI参照モデルは理想です。これを基にしたかは分かりませんが、現在パケットのやりとりはもう少し簡略化されたTCP/IPモデルである4層で実装されています。

# おわり
意外と層はそのままパケットに表現されているのが見て分かったと思います。