😀

Three-Way Handshakeについて

2025/01/26に公開

TCPのThree-Way Handshakeについて

TCPのコネクション確立動作である3way Handshakeについて解説します。
Three-way HandshakeとはTCPコネクションをクライアントとサーバー間で確立する際に行われる動作のことです。

TCP(Transmission Control Protocol)とは

TCPは、データの伝送、送信、通信を制御するトランスポート層のプロトコルです。信頼性を重視しており、データ送信の前にコネクションを確立し、送信データが確実に相手に届くよう制御します。

TCPの代表的な利用例: Webブラウジング(HTTP/HTTPS), メール(SMTP、POP3、IMAP),ファイル転送(FTP、SFTP), リモート接続(SSH、Telnet)


Three-way Handshake

クライアントからサーバーへコネクションを確立する手順を以下に示します。

Three-way Handshakeの図

① SYN送信

クライアントは、TCPヘッダのコントロールフラグのSYNビットを1に設定し、コネクション確立要求をサーバーへ送信します。

  • SYN: synchronize の略で、同期を意味します。

② SYN+ACK送信

サーバーは、TCPヘッダのSYNビットを1に設定してクライアントにコネクション確立要求を送信します。同時に、ACKビットを1に設定して①のSYNに対する確認応答を送信します。

  • ACK: acknowledgment の略で、確認応答を意味します。

③ ACK送信

クライアントは、TCPヘッダのACKビットを1に設定し、②のSYNに対する確認応答を送信します。

①〜③: コネクションの確立

以上の3回のやり取りによって、クライアントとサーバー間でコネクションが確立されます。この手順を「3way Handshake」と呼びます。


コネクション切断

クライアントからサーバーへコネクションを切断する手順を以下に示します。

④ FIN送信

クライアントは、TCPヘッダのFINビットを1に設定し、サーバーへコネクション切断要求を送信します。

  • FIN: 今後送信するデータがないことを示し、コネクションを切断したい意思を表します。

⑤ ACK送信

サーバーは、TCPヘッダのACKビットを1に設定し、④のFINに対する確認応答を送信します。

⑥ FIN送信

サーバーは、TCPヘッダのFINビットを1に設定し、クライアントへコネクション切断要求を送信します。

⑦ ACK送信

クライアントは、TCPヘッダのACKビットを1に設定し、⑥のFINに対する確認応答を送信します。


⑤〜⑦: コネクションの切断

このようなやり取りを行うことで、クライアントとサーバー間のコネクションが切断されます。なお、サーバーはFINとACKを同時に送信することも可能で、この場合は⑤と⑥が1回の通信にまとめられます。OSの実装により、FINとACKを同時に送るか分けて送るかが異なる場合があります。

まとめ

今日の発表では、TCPのThree-way Handshakeによるコネクション確立と、その切断の手順について説明しました。
この仕組みによって、インターネット通信が確実で信頼性のあるものになっていることが分かったと思います。

Discussion