
TCPってなに?
どんなプロトコル?
仕組みを教えて欲しい
こういった疑問にこたえます。
この記事を読めば
- TCPとは何かわかる
- 確実にデータを届ける仕組みがわかる
エンジニアの僕がわかりやすく解説します。
TCPとは?
WebブラウザからのHTTPリクエストと、それに対するWebサーバからのHTTPレスポンスを繰り返し行うことでWebサイトを閲覧できるわけですが、これらHTTPのデータのやり取りを行うのがTCP(Transmission Control Protocol)の役割です。
TCPはWebサイトの閲覧だけではなく、メールのやりとりなどにも使われます。
データの順番や欠損をチェックしているので、データの欠損が起きると困るようなアプリケーションに利用されます。
TCPにおけるデータのやり取り
TCPではまずクライアントとサーバがお互い通信できる状態であるかの確認を行います。
可能であればコネクションという通信経路を確立した上でデータのやり取りを行います。
このコネクションの確立には次の3回のやり取りによって行われるため3ウェイハンドシェイクと呼ばれます。
- クライアントからの接続要求(SYN)
クライアントからサーバに対して、接続要求するためのSYNパケットというものが送られます。SYNパケットを受け取ったサーバはそれに対して応答します。
- クライアントに対して確認応答、サーバからの接続要求(SYN+ACK)
クライアントからSYNパケット送信後、必ず送信したSYNパケットに対してサーバから確認応答を受け取ってデータの送信が完了したと判断します。この確認応答がACKパケットです。
クライアントからのSYNパケットに対して、サーバがACKパケットを返信することで接続可能であることを知らせます。また、サーバはACKパケットと同時にサーバからクライアントに対して接続要求するためのSYNパケットを送ります。
- サーバに対して確認応答(ACK)
サーバからの接続要求に対して、クライアントはACKパケットを返信します。
このようにお互いSYNパケットを送り、ACKパケットで応答することで、どちらも通信可能な状態であるかを確認し、コネクションの確立が完了します。
コネクションの確立により、クライアントとサーバがお互いに通信可能であると確認できたらデータの送受信が行われます。
データの送受信が完了して通信を終了するときは、FINパケットを送りコネクションを切断します。

TCPの再送制御と順序制御
TCPでは信頼性の高いデータ通信を実現するために、コネクションの確立だけでなく、データの「再送制御」と「順序制御」を行なっています。
順序制御はシーケンス番号というものを使って行われます。
シーケンス番号は送信するデータごとにつけられる連続した番号です。
受信側では、受信したデータパケットのTCPヘッダに書き込まれているシーケンス番号とデータ長を調べて、次に自分が受信するべき番号を確認応答として返送します。


TCPとは?まとめ
解説の内容をまとめます。
- TCPは確実にデータを届けるためのプロトコル
- Webサイト閲覧やメールの送受信に使われる
- クライアントとサーバ間でコネクションを確立する
- 再送制御や順序制御ができる
以上、お疲れ様でした。
コメント