LoginSignup
7
1

More than 1 year has passed since last update.

HTTPとTCPの違い

Last updated at Posted at 2022-06-27

はじめに

HTTPとTCPの違いについて、TCP/IPにおいてのレイヤーが違うことしかわからない状態で、HTTPサーバーを立てようとしたらわからないことだらけで詰んだ。根本的なHTTPとTCPの違いについて調査した内容をまとめる。

HTTPとTCP

結論から言うと、HTTPとTCPの違いは、TCP/IP階層モデルの層の違いである。

TCP/IP階層モデルで比較

インターネットを実現しているTCP/IP階層モデルにおいて、HTTPは第4層のアプリケーション層であり、TCPは第3層のトランスポート層にである。
TCP/IPでは、リクエストを送信する際に、上位層(ここではアプリケーション層)から下位層(ここではトランスポート層に向けてデータが流れていく。
また、1つ層が下がるごとに各層で通信に必要となるヘッダーが上位層から送られてきたデータに付加される。

つまり、HTTPリクエストを送信する手順は以下の通りだ。

  • HTTPで単に送りたいデータを作成する
  • 下位層であるTCPにデータを渡し、TCPヘッダーが付加される、今度はこれがデータとなる
  • さらに下位層であるネットワーク層にデータを渡し、IPヘッダーが付加される、またこれがデータとなる
  • さらに下位層であるデータリンク層にデータを渡し、イーサネットヘッダが付加される、これが最終的なデータとなる
  • ネットワークを通してデータを送信する

image.png

参考: How Does the Internet Work?

実装で比較

TCP/IP階層モデルで比較の説明からわかるように、HTTPはTCPがベースとして存在している。
また、HTTP通信を実装しようと思ったら、HTTPライブラリを使うこともできる。
つまりより理解を深めようと思えば、HTTPライブラリを使用せずに、HTTPのライブラリ内部で行なってくれているTCPベースから実装することも可能であるということだ。TCPベースから実装する場合、もしHTTPライブラリが、HTTPの古いバージョンであるHTTP0.9に対応していなくても自分で実装することが可能である。

コマンドで比較

curlコマンドでhttpリクエストを送信することができる
また、netcatコマンドでTCPのパケットを送信することができる。
curlコマンドはHTTPのRFC通りに実装されている。
HTTP0.9に対応していないため、HTTP0.9でリクエストを送信するにはTCPレベルのnetcatコマンドで送信する必要がある。
以下はHTTPのバージョンによるリクエストを比較した記事である。

また、curlコマンドとnetcatコマンドの通信内容を比較したのが以下の記事である。

おわりに

HTTPとTCPの違いについてまとめた。別物だということがわかった。

7
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
1