jika klien tcp mengirim paket, dengan nomor urut 10.000 hingga 20.000, ke server tcp. tcp akan merespons dengan ACK dengan seq_ack 20001.
jika saya mencegat paket TCP dari klien, dan membagi paket menjadi 2 segmen tcp, satu dengan seq dari 10.000 hingga 15.000, dan yang lainnya dengan seq dari 15001 hingga 20000. Dan kemudian 2 segmen TCP ini dikirim ke server TCP. Asumsikan bahwa segmen kedua hilang di jalur. Server TCP akan merespons ACK dengan seq_ack 15001.
Sekarang karena klien TCP mengirim paket integral dengan seq 10000 hingga 20000, tetapi mendapat ACK dengan 15001, dari sudut pandang klien, ini aneh. Bagaimana ini akan bereaksi? Secara teori, klien harus mengirim ulang byte dari seq 15001 ke 20000, yaitu, klien akan mengirimkan paket baru dari seq 15001. Tetapi bagaimana dengan praktiknya, dalam implementasi TCP stack, apakah sama seperti dalam teori?
Saya pikir dalam buffer pengiriman TCP, ketika segmen tcp dikirim, segmen itu tetap di sana sampai ACK. Ketika ACK datang, byte ini untuk segmen dihapus dari buffer. Ada pointer di buffer kirim, ketika ACK datang, pointer menunjuk ke lokasi di mana ack_seq sesuai. Bytes yang berada di bawah ack_seq dihapus. Dengan cara ini, seluruh segmen tidak perlu dikirim ulang?