TCP/IPとは

TCP/IPとはインターネットをつかうときのルールのあつまり。みんなTCP/IPをつかうのでシンプル。新技術にも柔軟に対応可。

Railsエンジニアとして入社して1か月が経ちました。今はRailsの勉強中です。業務とは別で、毎週金曜日に新人が勉強したことを発表する会をやってます。そこで発表するためにTCP/IPについて勉強したのでまとめたいと思います。

こちらの本と、
[イラスト図解式 この一冊で全部わかるWeb技術の基本](https://www.amazon.co.jp/%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E5%9B%B3%E8%A7%A3%E5%BC%8F-%E3%81%93%E3%81%AE%E4%B8%80%E5%86%8A%E3%81%A7%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8BWeb%E6%8A%80%E8%A1%93%E3%81%AE%E5%9F%BA%E6%9C%AC-%E5%B0%8F%E6%9E%97-%E6%81%AD%E5%B9%B3/dp/4797388811?SubscriptionId=AKIAJ6G2RA4GLVSQSJDA&tag=note0e2a-22&linkCode=xm2&camp=2025&creative=165953&creativeASIN=4797388811)

このSchooの動画で勉強しました。
[TCP/IPプロトコル入門](https://schoo.jp/class/3585)

#インターネット上の標準プロトコル
プロトコルとはネットワークに接続された機器同士が通信するときの、ルールや手順のことです。お互いに同じプロトコルを使うことで、データのやりとりができます。

TCP/IPとはインターネットにおけるさまざまなサービスを実現するためのプロトコルの集まりです。インターネットへアクセスできるスマホやPC、サーバーはすべてTCP/IPに対応しています。一昔前はOSや機種ごとに独自のプロトコルがつかわれていたので同じ機器同士でないと接続できませんでした。インターネットの普及に伴い、TCP/IPがインターネットにおける標準として広く使われるようになりました。

HTTPもTCP/IPの一部です。TCP/IPは役割ごとに階層化されていて、HTTPもTCP/IPにおけるアプリケーション同士のやりとりを行う層のプロトコルの中に含まれています。HTTPにはWebサーバーがどこにあるのか、Webコンテンツをどのように転送するのかといった取り決めがありません。インターネットにおいてHTTPだけでは足りない部分をTCP/IPのほかのプロトコルが補うことで、お互いに接続できます。

#TCP/IP
役割ごとに4つの階層（レイヤー）に分かれています。

・アプリケーション層(レイヤー4)
アプリケーションごとのやりとりを規定
HTTP、SMTP、FTPなど

・トランスポート層(レイヤー3)
データの分割や品質保証を規定
TCP、UDP

・インターネット層(レイヤー2)
ネットワーク間の通信を規定
IP、ICMPなど

・ネットワークインターフェース層(レイヤー1)
コネクタ形状や周波数といったハードウェアに関する規定
イーサネット、Wi-Fiなど
アプリケーション層ではWebブラウザやメールソフトなどのアプリケーションごとのやりとりを規定しています。これらのアプリケーションの多くはクライアント/サーバーシステムで構成されています。また、アプリケーション層では、扱うデータをネットワークで転送するのに適したデータ形式に変換し、逆にネットワーク経由で受け取ったデータを人が理解できるように変換する役割も持っています。


データの転送処理などはアプリケーション層より下位の層が担当しています。
プロトコルを階層化にすることで、各階層でそれぞれのプロトコルに従って処理を行うことで、ほかの階層の処理がわからなくても一連の処理（通信）ができます。アプリケーション層であればお互いのアプリケーション層同士で処理を行っています。

アプリケーション層のやりとりに応じて実際にデータの転送処理をしているのがトランスポート層に位置するTCPやUDPです。
データの転送は分割して行われて、TCPでは分割されたデータの順序や欠落を保証していますが、UDPでは分割されたデータの順序や欠落を保証していません。


TCPはWebサイトやメールなどデータ損失が起きると困るようなアプリケーションで利用されており、UDPは信頼性が低いものの、通信の手続きが簡略化されている分、効率よく通信できるため、動画ストリーミングなどで利用されています。


TCPの通信はコネクション型です。送信側と受信側でお互いに確認を取りながら通信を行います。
UDPはコネクションレス型です。確認はとらずに送りっぱなしです。

TCP/IPとは別に、コンピュータネットワークにおいてコンピュータ同士がお互いに通信を行う際に必要とされる機能を7つに階層化したOSI参照モデルと呼ばれる概念もあります。

#階層モデル
階層モデルで物理層とアプリケーション層を分けることで他の層のことを意識しないで済みます。


普段、Webを見るときに有線LANなのか無線LANなのか意識していないですよね。
意識するならPCで有線LANで見るなら有線LAN専用のWebブラウザを使い、無線LANなら無線LAN専用のWebブラウザを使い、スマホで見るときはスマホ用のWebブラウザを使わないといけません。


プロトコルが分かれているので、そのプロトコルを使っていればどんな機器や機種でも同じWebブラウザをつかえるというところが、プロトコルを階層で分けることの大きな利点です

また、新しい通信手段が出てきても、階層モデルで分かれているので、物理層が変わっても今と同じWebブラウザが使えるところが便利です

#まとめ
TCP/IPとはインターネットをつかうときのプロトコルのあつまりです。インターネットではTCP/IPが標準になっているので、シンプルで便利です。

また、層ごとに分けられているので、他の層と独立しています。だから、新しい技術やプロトコルが出てきても、そこを変えればいいだけでほかはそのままで使えます。そこがとても便利なところです。

最後まで読んでいただきありがとうございました。
QiitaやTwitterなどにコメントをしてもらったり、SNSでシェアしてもらえるとうれしいです！

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">TCP/IPについてまとめました<br><br>TCP/IPはインターネットをつかうときのルールで、みんなが同じルールを使えばシンプルでいいね！という話です<br><br>TCP/IPとは <a href="https://t.co/BqthgNPwpG">https://t.co/BqthgNPwpG</a> <a href="https://twitter.com/hashtag/Qiita?src=hash&amp;ref_src=twsrc%5Etfw">#Qiita</a></p>&mdash; ITおっとり@V字回復エンジニア (@it31415) <a href="https://twitter.com/it31415/status/1110708103681638401?ref_src=twsrc%5Etfw">2019年3月27日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>