🔖

【初学者によるまとめ】この一冊で全部わかるWeb技術の基本 「Chapter3」>「06 TCPによるデータ通信」

2024/12/09に公開

目的:「イラスト図解式 この一冊で全部わかるWeb技術の基本」の要点を自分なりにまとめ、Qiitaへアウトプットして理解力の向上に努める。

注意点
🤔 ←この絵文字の文章は個人的な見解になります。的外れなこともあるかと思います。

(参考書籍)

  1. イラスト図解式 この一冊で全部わかるWeb技術の基本

(参考サイト)

  1. ネットワークエンジニアとして
  2. IT用語辞典
  3. 「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
  4. TCP 4-Way Termination Handshake

TCPによるデータ通信

TCP(Transmission Control Protocol)=「伝送 制御 プロトコル」

  • Webサイトの閲覧は「HTTP通信のリクエストとレスポンスのやり取り」で実現している

    • HTTPは「Webコンテンツの閲覧の手順の定義やルールを設ける(通信自体は担当していない)」に対して、
      先述の「HTTP通信のリクエストとレスポンスのやり取り処理」を担当しているのがTCP
  • TCPは様々なデータ転送時利用されている

    • HTTPとは違って"通信処理そのもの"を役割としているTCPは、"Webサイトの閲覧"だろうが"メールの送受信"だろうが"ファイルの転送"だろうがあらゆるデータ転送の際に利用されている
      • 🤔<(HTTPかSMTPかFTPかの入り口が違うだけで通信処理自体はどれも同じ)
  • TCPではまずクライアントとサーバーがお互い通信可能な状態なのかを確認する
    確認した上で確立した通信経路をコネクションと呼ぶ

    • このコネクション上でデータのやり取りを行う

:::note info
クライアントとサーバー間で'コネクション'という通信経路を確立するための通信をしている
:::

TCPにおけるデータのやりとり

コネクション確立

  • TCPはデータのやり取りをする通信経路の確立を行うために"3回のやり取り"が行われる
    • 通信手順として『通信可否確認のための通信 ⇒ HTTPリクエスト送信』という手順を踏んでいる
      • 最初からHTTPリクエストを送信しているわけでは無く、「通信のための事前確認通信」をしてくれている

*下の図1の通り、『コネクション確立に①②③と3STEP踏んでいる』ことから3ウェイハンドシェイクと呼ばれる

(図1:HTTPリクエストを行う前のコネクションの確立の流れ)
image.png

①クライアントから接続要求の送信(SYN)

  • クライアントからサーバーに対して「接続を要求するため」にSYNパケットを送る
    • SYNパケット(synchronize packet):「同期確認用パケット」

②クライアントに対して確認の応答 & サーバーからの接続要求の送信(SYN+ACK)

  • ブラウザからの接続要求に対して、サーバー側から「了承した。接続してもOK!!」という接続許可の意味で送るのがACKパケット
    • ACKパケット(ACKnowledgement packet):「了承パケット」
  • ①で受け取ったSYNパケットもブラウザ側に送り返すことで「レスポンスのためにサーバーからも接続を確立したい!!」という接続要求を送信する

③サーバーに対して確認応答(ACK)

  • ②でサーバーから送られたACKパケットに対して、今度は同じようにブラウザからも「レスポンス送ってもOK!!承諾した!!」の意味でACKパケットを送り返す
     
    ----- これでコネクション確立となる -----

:::note info
接続のためのコネクションの確立のため3回の応返答が行われている。
これを"3ウェイハンドシェイク"と呼ぶ。
:::

コネクション切断

  • データの送受信が完了した後は通信終了のために"通信切断"を行う(コネクションを切断する)
    • 大勢の人が利用するサイトを想定すると、自分が繋ぎっぱなしのせいでアクセスが悪くなるなどの弊害が発生するため切断処理も大切

*下の図2の通り、『コネクション確立に①②③④と4STEP踏んでいる』ことが特徴

(図2:HTTPレスポンス後のコネクションの切断の流れ)
20240513202808.png

①クライアントから切断要求(FIN)

  • クライアントからサーバーに対して「通信切断を要求するため」にFINパケットを送る
    • FINパケット(finish packet):「終了パケット」

②サーバーからの切断許可の応答(ACK)

  • ブラウザからの切断要求を承諾するための応答

③クライアントに対して切断要求の送信(FIN)

  • ①で受け取ったSYNパケットもブラウザ側に送り返して、サーバー側からも切断要求を送信する

④サーバーに対して切断許可の応答(ACK)

  • ③でサーバーから送られたACKパケットをサーバーも同じように承諾の意味でブラウザに送り返す

----- これでコネクション切断となる -----

:::note info
通信が完了したらコネクションの切断が行われている。
切断のために4回の応返答が行われている。
:::


[個人的疑問・所感など]
🤔<(書籍には

『コネクション確立に①②③④と4STEP踏んでいる』ことから'4ウェイハンドシェイク'と呼ばれる

という記述が無かったため、そんなものは存在しないのか?はたまた何か都合が悪いのか?)
⇒気になったため軽く調査

【結論】'4ウェイハンドシェイク'は概念として確かにあるっちゃあるが言及しているサイトが少ない
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典でも管理者ご自身で命名しているようだった
TCP 4-Way Termination Handshakeでは図も加えて切断時のプロセスとして紹介されていた
・一方で「3ウェイハンドシェイクの上位互換が4ウェイハンドシェイク」みたいなサイトも散見されて情報の真偽が分からなくなった

🤔<(あとコネクションの通信確立の方は「SYN+ACK」で一括で送っているような表現をしているのに、通信切断のほうはなんで「FIN」「ACK」の2分割しているのか謎。切断の方も一括で送れば3STEPで済むのでは?)

Discussion