Сегментирует ли TCP-буфер, даже если предыдущий сегмент потерян? - PullRequest
0 голосов
/ 30 октября 2018

Допустим, у нас есть хост A и хост B

Я отправляю 5 сегментов от A до B, с порядковым номером, начинающимся с 100, и каждый сегмент имеет длину 20 байтов

Если не было потеряно ни одного пакета, то я должен ожидать ACK = 200 от B

но пакет потерян, B получил весь сегмент, кроме 2-го

Я должен получить 4 ACK из 120 от B, указывая на потерю 2-го сегмента

После того, как я отправлю второй сегмент, что будет ACK от B, это будет 140 или 200?

Если это 140, то это означает, что B не буферизовал 3-й, 4-й и 5-й сегменты

Если это 200, то это означает, что B нужен только 2-й сегмент

Какой из ответов является верным?

1 Ответ

0 голосов
/ 02 ноября 2018

Техника буферизации неупорядоченных пакетов не является частью протокола TCP. Так что это зависит от реализации TCP получателя.

В обоих вариантах отправитель TCP будет правильно обрабатывать ситуацию.

Техника для работы с неупорядоченными пакетами в Linux TCP хорошо описана здесь:

Johannessen, Mads. Investigate reordering in Linux TCP. MS thesis. 2015. https://www.duo.uio.no/bitstream/handle/10852/47651/1/thesis-madsjoh.pdf

Согласно этому исследованию, Linux TCP, вероятно, буферизует 3-й, 4-й и 5-й сегменты (если для этого достаточно места) и отвечает на повторную передачу с ACK = 200.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...