якщо tcp-клієнт надсилає пакет із порядковим номером від 10000 до 20000 на сервер tcp. tcp відповість ACK з seq_ack 20001.
якщо я перехоплюю пакет TCP від клієнта і розділяю пакет на 2 сегменти tcp, один із seq від 10000 до 15000, а другий з seq від 15001 до 20000. А потім ці 2 сегменти TCP надсилаються на сервер TCP. Припустимо, що другий відрізок втрачено на шляху. Сервер TCP відповість ACK з seq_ack 15001.
Тепер, оскільки клієнт TCP надсилає інтегральний пакет з послідовністю 10000 до 20000, але він отримує ACK з 15001, з точки зору клієнта, це дивно. Як він відреагує? Теоретично, клієнт повинен повторно передати байти від seq 15001 до 20000, а саме клієнт передасть нові пакети від seq 15001. Але як щодо практики, що стосується впровадження стека TCP, це така ж, як і в теорії?
Я думаю, що в буфері відправлення TCP, коли відправляється сегмент tcp, сегмент залишається там, поки не буде ACK. Коли ACK надходить, ці байти для сегмента очищаються від буфера. У буфері відправлення є вказівник, коли ACK приходить, вказівник вказує на місце, де відповідає ack_seq. Очищені байти, розташовані нижче ack_seq. Таким чином, весь сегмент не потрібно повторно передавати?