1

Что произойдет в следующем сценарии (предположим, что соединение уже установлено):

  1. (стек A) отправляет 10-байтовые данные

  2. (стек B) отправляет ACK для 10-байтовых данных

  3. (стек B) отправляет 200-байтовые данные

  4. (стек B) отправляет 100-байтовые данные

  5. (стек B) отправляет 50-байтовые данные

  6. (стек A) отправляет ACK для 350-байтовых данных, а также отправляет 70-байтовые данные
    Этот сегмент теряется и не достигает машины B.

  7. (стек B) повторно передает 200-байтовые данные (этап 3)

  8. (стек A) отправляет ACK для 200-байтовых данных и следующий ожидаемый номер seq как один для 70-байтовых данных

Вопрос: Должны ли данные 70 байтов также передаваться с ACK на шаге 8? Обратите внимание, что таймер повторной передачи для шага 6 еще не истек.

1 ответ1

2

Нет, 70 байтов не должны включаться в непосредственный ACK для прибытия неупорядоченного сегмента.

Зачем? Шаг 7 - прибытие сегмента, вышедшего из строя. TCP должен генерировать немедленный ACK, дающий следующий ожидаемый байт (который будет равен 361 + все, что было отправлено до шага 1) при получении сегмента, вышедшего из строя. Но TCP не ретранслирует сегмент, содержащий 70 байтов данных, с помощью ACK. Этот сегмент все еще находится в очереди повторной передачи, ожидая истечения таймера, или, если включена быстрая повторная передача, поступают три дублированных ACK, но ни один из них еще не произошел. Поступление не по порядку является признаком перегрузки, поэтому имеет смысл, что TCP должен отправлять наименьшее возможное ACK.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .