TCPでは、両端のホスト間でデータが届いたかどうかを確認し合いながらセグメントを送信する。 データが届いたことの連絡を、確認応答(ACK:ACKnowledgement)という。

送信するデータは、シーケンス番号という連続した番号がつけられてから送られる。 送信するデータが$x$バイトずつに分けられているなら、シーケンス番号は1セグメントごとに$x$ずつ加算されることになる。 シーケンス番号を使うことで、到着する破片の順番がめちゃくちゃだったとしても、元の正しい順序に直せるようになる。

セグメントが送られてきたら、次に受信すべきシーケンス番号を確認応答番号として記載したヘッダ(確認応答)を送り返す。

セグメントを送信してから一定時間経っても確認応答が来なければ、セグメントが途中で失われたと判断して、同じデータを格納したセグメントをもう一度送り返す処理(再送処理)を行う。

セグメントが失われたと判断する時間は、正常通信時にセグメントを送信してから確認応答が返ってくるまでの時間とそのジッターを計測した値から決定する。

多くのTCP実装では、タイムアウトによる再送時間は最短で1秒となっているため、タイムアウトが発生した場合は、セグメントの到着が1秒以上遅れることになる。