【てぃーしーぴー】

TCP とは?

最終更新:
💡 受信確認と再送で、順序のあるデータの流れを支える

アプリケーション間で、データを順序のあるバイト列としてやり取りする通信プロトコル。受信確認や再送で信頼性を提供するが、障害時には通信が失敗することもある。

📌 このページのポイント
TCP:3ウェイハンドシェイククライアントサーバー1. SYN:開始側の番号を伝える2. SYN + ACK:番号と確認3. ACK:相手のSYNを確認接続確立後、双方向にデータを転送
通常の接続開始の基本例。上から下へ時間が進む。再送・同時オープン・データを伴う開始などは省略している。ACKはアプリの処理完了を示さない。
ひよこ ひよこ
TCPなら必ずデータが届くの?
ペンギン先生 ペンギン先生
データの順序を管理し、欠けたデータを再送して、信頼性のあるバイト列の転送を提供するよ。ただし相手や経路の障害が続けば、接続を終了してアプリへエラーを返すこともある。「絶対に成功する」という意味ではないんだ。
ひよこ ひよこ
ACKが返れば、相手の処理は終わったの?
ペンギン先生 ペンギン先生
ACKは相手のTCPがどこまで受信したかを示す確認応答だよ。一つずつ「届いた?」と質問する仕組みではないし、受信したアプリの処理完了も示さない。注文の受付完了などは、アプリ側の応答で確認する必要があるんだ。
ひよこ ひよこ
UDPとはどう違うの?
ペンギン先生 ペンギン先生
TCPは順序のあるバイト列と、受信確認・再送の仕組みを提供するよ。UDPはデータグラムという単位で送り、UDP自体は到達や順序などを保証しない。用途と上位の仕組みによる違いなので、どちらが必ず速いともいえないんだ。
ひよこ ひよこ
接続するときの3ウェイハンドシェイクって?
ペンギン先生 ペンギン先生
通常の基本例では、開始側がSYNを送り、相手がSYNとACKを返し、開始側がACKを返すよ。双方のシーケンス番号を確認するためのやり取りなんだ。図はこの基本例で、再送や同時に接続を始める場合は省略しているよ。
ひよこ ひよこ
送りすぎないための仕組みもある?
ペンギン先生 ペンギン先生
あるよ。フロー制御は受信側のバッファの空きに合わせて送り方を調整する。輻輳制御はネットワークの混雑に対応するための仕組みだよ。輻輳制御には複数のアルゴリズムがあり、パケットが欠けたら必ず同じ動作をするという説明はできないんだ。
もっと詳しく知りたい人へ

一回送ったデータが、一回で受け取れるの?

TCPはバイト列を扱い、アプリが送った一回ごとのメッセージの区切りは保たないよ。複数回の送信がまとまったり、一回の送信が分かれたりするので、アプリ側で長さや区切りを決めて読み取るんだ。

TCPなら通信内容も暗号化される?

TCP自体は暗号化や相手の認証を提供しないよ。内容を守るには、TLSなど別の仕組みを組み合わせる。信頼性のある転送と、通信の機密性は区別しよう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「TCP」って出てきたら「受信確認と再送で、順序のあるデータの流れを支える通信ルール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Transmission Control Protocol」 = 伝送制御プロトコル
💬 Transmissionは「送信・伝送」、Controlは「制御」、Protocolは「取り決め・ルール」。送信を制御するルールという意味だよ

参考資料

← 用語集にもどる