Có nhiều trường hợp cần phải gửi lại gói tin khi thực hiện trao đổi dữ liệu trên một kết nối TCP.

Packet Loss

Trường hợp gói tin ACK bị mất.

![[TCP-lost-ACK.webp|#xx-small]] Bên gửi sẽ tự động gửi lại gói tin sau khi hết thời gian timeout (theo nguyên lý stop and wait). Hành động tương tự cũng được thực hiện khi xảy ra mất gói ở bên nhận.

Xét trường hợp A gửi liên tiếp hai gói tin và chỉ có gói tin ACK=100 bị mất, gói tin ACK=120 thứ hai được gửi đến bên host A thành công trước khi hết thời gian chờ.

![[TCP-cumulative-ACK.webp|#xx-small]]

Lúc này, A biết được rằng B đã nhận được tất cả byte dữ liệu đến byte thứ 119, nên nó sẽ gửi tiếp gói tin có Seq=120.

Premature Timeout

Trường hợp gói tin ACK đến bên gửi sau thời gian timeout.

![[TCP-premature-timeout.webp|#xx-small]]

Khi hết time out, gói tin có Seq=92 sẽ được gửi lại. Tuy nhiên, bên nhận đã nhận được tất cả các byte dữ liệu đến byte thứ 119 (tích lũy từ hai lần nhận gói tin). Vì vậy, gói tin mà bên B mong muốn khi nhận được gói tin Seq=92ACK=120.

Fast Retransmit

Giả sử A gửi năm gói tin cùng lúc có sequence number tăng dần. Nếu có một gói tin bị mất (chẳng hạn gói tin Seq=100 của A) thì sẽ có rất nhiều gói tin báo nhận bị trùng.

![[TCP-fast-retransmit.webp|#x-small]]

Trong trường hợp có ba gói tin báo nhận bị trùng, bên gửi sẽ gửi lại gói tin bị mất ngay lập tức khi chưa hết thời gian timeout. Cách làm này được gọi là gửi lại nhanh (fast retransmit).