プロトコルとOSI参照モデル

# はじめに
今回はコンピュータ・サイエンス基礎のネットワーク分野の復習としてoutputしたものです。
> プロトコルって名前は聞くけどよくわからん
> OSI参照モデルって結局なにしてるの？

という人にむけてわかりやすく解説していきたいと思います。

# プロトコル(protocol)って？
一言でいうと
### コンピュータ同士がやりとりするための約束事のこと　
を言います。

例えば、

#### HTTP(HyperText Transfer Protocol)
htmlで書かれたファイルをやり取りするための約束事が決められている

[![](https://mermaid.ink/img/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgTm90ZSBvdmVyIOOCr-ODqeOCpOOCouODs-ODiDogUWlpdGHjga7oqJjkuovjgYzjgb_jgZ_jgYTvvIEg4oaSIHdlYuODluODqeOCpuOCtuOBp-OCouOCr-OCu-OCuVxuICAgIOOCr-ODqeOCpOOCouODs-ODiC0-PitXRULjgrXjg7zjg5Djg7w6IOKRoEh0dHAgUmVxdWVzdCAoaHRtbOODleOCoeOCpOODq-OBu-OBl-OBhOOBi-OCieOBoeOCh-OBhuOBoOOBhO-8gShodHRwOi8vcWlpdGEuY29tKSlcbiAgICBOb3RlIG92ZXIgV0VC44K144O844OQ44O8IDogLnFpaXRhLmNvbeOBrmh0bWzjg5XjgqHjgqTjg6vjgYzjgbvjgZfjgYTjgpPjgaDjgarihpLoqbLlvZPjg5XjgqHjgqTjg6vjgpLmjqLjgZfjgavooYzjgY9cbiAgICBXRULjgrXjg7zjg5Djg7wtLT4-44Kv44Op44Kk44Ki44Oz44OIOiDikaFIdHRwIFJlc3BvbnNlICjjga_jgYTjgIHjganjgYbjgZ7vvIEgKVxuICAgICAgICAgICAgIiwibWVybWFpZCI6e30sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgTm90ZSBvdmVyIOOCr-ODqeOCpOOCouODs-ODiDogUWlpdGHjga7oqJjkuovjgYzjgb_jgZ_jgYTvvIEg4oaSIHdlYuODluODqeOCpuOCtuOBp-OCouOCr-OCu-OCuVxuICAgIOOCr-ODqeOCpOOCouODs-ODiC0-PitXRULjgrXjg7zjg5Djg7w6IOKRoEh0dHAgUmVxdWVzdCAoaHRtbOODleOCoeOCpOODq-OBu-OBl-OBhOOBi-OCieOBoeOCh-OBhuOBoOOBhO-8gShodHRwOi8vcWlpdGEuY29tKSlcbiAgICBOb3RlIG92ZXIgV0VC44K144O844OQ44O8IDogLnFpaXRhLmNvbeOBrmh0bWzjg5XjgqHjgqTjg6vjgYzjgbvjgZfjgYTjgpPjgaDjgarihpLoqbLlvZPjg5XjgqHjgqTjg6vjgpLmjqLjgZfjgavooYzjgY9cbiAgICBXRULjgrXjg7zjg5Djg7wtLT4-44Kv44Op44Kk44Ki44Oz44OIOiDikaFIdHRwIFJlc3BvbnNlICjjga_jgYTjgIHjganjgYbjgZ7vvIEgKVxuICAgICAgICAgICAgIiwibWVybWFpZCI6e30sInVwZGF0ZUVkaXRvciI6ZmFsc2V9)

#### TCP(Transmission Control Protocol)
安全性重視で通信を行うための約束事
[![](https://mermaid.ink/img/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOODh-ODvOOCv-OCkumAgeOCjeOBhuOAglxuICAgIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kS0-PivjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJI6IOKRoOODh-ODvOOCv-OCkumAgeOCi-OBnuODvO-8gVxuICAgIE5vdGUgb3ZlciDjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJIgOiDjgarjgpPjgYvjg4fjg7zjgr_mnaXjgZ_jgZ7jgIJcbiAgICBOb3RlIG92ZXIg44Kz44Oz44OU44Ol44O844K_44O877ySIDog44OH44O844K_5p2l44Gf44GT44Go44KS55-l44KJ44Gb44KI44GG44CCXG4gICAg44Kz44Oz44OU44Ol44O844K_44O877ySLT4-44Kz44Oz44OU44Ol44O844K_44O877yROiDikaHjgYbjgZHjgajjgaPjgZ_jgZ7jg7xcbiAgICBOb3RlIG92ZXIg44Kz44Oz44OU44Ol44O844K_44O877yRIDog54Sh5LqL44Go44Gp44GE44Gf44G_44Gf44GE44GE44Gg44Gq44CCXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOOCguOBl-ODh-ODvOOCv-OBjOWxiuOBhOOBpuOBquOBi-OBo-OBn-OCieODu-ODu-ODu1xuICAgIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kS0-PivjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJI6IOODh-ODvOOCv-WxiuOBhOOBpuOBquOBhOOBv-OBn-OBhOOBoOOBi-OCieOAgeOCguOBhuS4gOWbnuODh-ODvOOCv-OCkumAgeOCi-OBnuODvO-8gSIsIm1lcm1haWQiOnt9LCJ1cGRhdGVFZGl0b3IiOmZhbHNlfQ)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOODh-ODvOOCv-OCkumAgeOCjeOBhuOAglxuICAgIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kS0-PivjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJI6IOKRoOODh-ODvOOCv-OCkumAgeOCi-OBnuODvO-8gVxuICAgIE5vdGUgb3ZlciDjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJIgOiDjgarjgpPjgYvjg4fjg7zjgr_mnaXjgZ_jgZ7jgIJcbiAgICBOb3RlIG92ZXIg44Kz44Oz44OU44Ol44O844K_44O877ySIDog44OH44O844K_5p2l44Gf44GT44Go44KS55-l44KJ44Gb44KI44GG44CCXG4gICAg44Kz44Oz44OU44Ol44O844K_44O877ySLT4-44Kz44Oz44OU44Ol44O844K_44O877yROiDikaHjgYbjgZHjgajjgaPjgZ_jgZ7jg7xcbiAgICBOb3RlIG92ZXIg44Kz44Oz44OU44Ol44O844K_44O877yRIDog54Sh5LqL44Go44Gp44GE44Gf44G_44Gf44GE44GE44Gg44Gq44CCXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOOCguOBl-ODh-ODvOOCv-OBjOWxiuOBhOOBpuOBquOBi-OBo-OBn-OCieODu-ODu-ODu1xuICAgIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kS0-PivjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJI6IOODh-ODvOOCv-WxiuOBhOOBpuOBquOBhOOBv-OBn-OBhOOBoOOBi-OCieOAgeOCguOBhuS4gOWbnuODh-ODvOOCv-OCkumAgeOCi-OBnuODvO-8gSIsIm1lcm1haWQiOnt9LCJ1cGRhdGVFZGl0b3IiOmZhbHNlfQ)
#### UDP(User Datagram Protocol)
速度重視で通信するための約束事 　
[![](https://mermaid.ink/img/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOODh-ODvOOCv-OCkumAgeOCjeOBhuOAglxuICAgIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kS0-PivjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJI6IOODh-ODvOOCv-OCkumAgeOCi-OBnuODvO-8gVxuICAgIE5vdGUgb3ZlciDjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJIgOiDjgarjgpPjgYvjg4fjg7zjgr_mnaXjgZ_jgZ7jgIJcbiAgICBOb3RlIG92ZXIg44Kz44Oz44OU44Ol44O844K_44O877yRIDog5qyh44Gv44GT44Gu44OH44O844K_44KS6YCB44KN44GG44CCXG4gICAg44Kz44Oz44OU44Ol44O844K_44O877yRLT4-K-OCs-ODs-ODlOODpeODvOOCv-ODvO-8kjog44OH44O844K_44KS6YCB44KL44Ge44O877yBXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kiA6IOOBquOCk-OBi-ODh-ODvOOCv-adpeOBn-OBnuOAglxuXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOOCguOBl-ODh-ODvOOCv-OBjOWxiuOBhOOBpuOBquOBj-OBpuOCguODu-ODu-ODu1xuICAgIE5vdGUgb3ZlciDjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJEgOuOAgOebuOaJi-OBq-ODh-ODvOOCv-OBjOWxiuOBhOOBn-OBi-OBqeOBhuOBi-OBr-eiuuiqjeOBl-OBquOBhOOAgiIsIm1lcm1haWQiOnt9LCJ1cGRhdGVFZGl0b3IiOmZhbHNlfQ)](https://mermaid-js.github.io/mermaid-live-editor/#/edit/eyJjb2RlIjoic2VxdWVuY2VEaWFncmFtXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOODh-ODvOOCv-OCkumAgeOCjeOBhuOAglxuICAgIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kS0-PivjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJI6IOODh-ODvOOCv-OCkumAgeOCi-OBnuODvO-8gVxuICAgIE5vdGUgb3ZlciDjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJIgOiDjgarjgpPjgYvjg4fjg7zjgr_mnaXjgZ_jgZ7jgIJcbiAgICBOb3RlIG92ZXIg44Kz44Oz44OU44Ol44O844K_44O877yRIDog5qyh44Gv44GT44Gu44OH44O844K_44KS6YCB44KN44GG44CCXG4gICAg44Kz44Oz44OU44Ol44O844K_44O877yRLT4-K-OCs-ODs-ODlOODpeODvOOCv-ODvO-8kjog44OH44O844K_44KS6YCB44KL44Ge44O877yBXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kiA6IOOBquOCk-OBi-ODh-ODvOOCv-adpeOBn-OBnuOAglxuXG4gICAgTm90ZSBvdmVyIOOCs-ODs-ODlOODpeODvOOCv-ODvO-8kSA6IOOCguOBl-ODh-ODvOOCv-OBjOWxiuOBhOOBpuOBquOBj-OBpuOCguODu-ODu-ODu1xuICAgIE5vdGUgb3ZlciDjgrPjg7Pjg5Tjg6Xjg7zjgr_jg7zvvJEgOuOAgOebuOaJi-OBq-ODh-ODvOOCv-OBjOWxiuOBhOOBn-OBi-OBqeOBhuOBi-OBr-eiuuiqjeOBl-OBquOBhOOAgiIsIm1lcm1haWQiOnt9LCJ1cGRhdGVFZGl0b3IiOmZhbHNlfQ)
などを見たこと思いますが、これらはプロトコルの代表例です。

## 何でプロトコル(約束ごと)が必要なの？
一言でいうと
### コンピュータ同士の通信を成立させるため

二人の人間の会話を例にして見るとわかりやすいのですが、、
片方が日本語で話しているのに、片方が英語で話していると何が何だか分からないというか
コミュニケーションがなりたたないですよね？

コンピュータも同じで、コンピュータ同士で約束事を決めておかないとうまく通信できないんです。

# OSI参照モデルって？
コンピュータ同士の通信方法のルールを７つの階層に分けて、表したもの
実運用で使いやすくしたモデルをTCP/IPモデル
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308470/95df9780-5396-172d-4e3a-80971ef0f39c.png)

# データの流れ
TCP・IPモデルのデータの流れは以下の通りです。

![Untitled Diagram (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308470/875e252b-75f5-3d30-34f6-3215128195eb.png)
上図のように、

1. データを送るために必要な情報(ヘッダ)データにを付与し
2. そのデータを目的地まで運び
3. 到着したら、付与された情報を紐解きつつ、データを指定アプリケーションまで届ける

という形となります。
# まとめ
- プロトコル
    - コンピュータ同士の通信の約束事

- OSI参照モデル
    - コンピュータ同士の通信方法のルールを７つの階層に分けて、表したもの
    
# さいごに
今回はプロトコルとOSI参照モデルについて書きてみました。
わからないことやまちがっていることがあれば気軽にコメントおねがいします。