Назад | Перейти на главную страницу

TCP и повторная передача

Пытаюсь понять, как в TCP работает передача и ACK. На этом рисунке, когда A повторно передает последовательность 100 после того, как он получил три дублированных ACK, B ответит 121 ACK или 158 ACK?

Тема ретрансляции широко задокументирована в сети и в соответствующей литературе, поэтому в случае ретрансляции из-за истечения тайм-аута сегмента я просто процитирую документ Novell с некоторыми примерами перехвата пакетов:


TCP реализует надежность, отправляя подтверждение для полученных сегментов данных. [...] [T] отправитель вынужден повторно передать все сегменты после того, как потеря сегмента обнаружена таймаутом повторной передачи.

[...]

На рисунке 3 описана трассировка TCP, при которой последовательные байты с порядковым номером до 2028597920 принимаются правильно, и в этот момент происходит потеря сегмента. Не зная о потере, отправитель продолжает отправлять данные до 2028605220, после чего он повторно передает потерянный сегмент и весь поток данных до 2028605220 снова. Это приводит к повторной передаче пяти пакетов, которые были фактически успешно приняты.

Типовая ретрансляция и опорожнение трубы.

Используя схему выборочного подтверждения, получатель может выборочно подтверждать сегменты, которые были получены после потери. Затем отправителю нужно только повторно передать потерянные сегменты. Эти потерянные сегменты или пакеты также называются «дырами» в потоке данных.


Если вы смотрите только на характеристики быстрой повторной передачи / быстрого восстановления в соответствии с RFC 2581, то поведение при повторной передаче будет несколько другим. HOST B будет выдавать дублированные ACK в соответствии с вашей цифрой, намекая на HOST A что сегмент нуждается в ретрансляции. И, конечно же, он также будет принимать и буферизовать последующие сегменты до размера своего окна приема - так работает механизм переупорядочения сегментов. После приема недостающего сегмента механизм переупорядочивания сможет собрать поток и HOST Bстек будет подтверждать последний полученный сегмент (157).