Размер окна перегрузки TCP: странное поведение - PullRequest
1 голос
/ 13 декабря 2010

Я играю с различными TCP-алгоритмами, используя Netkit.

Есть две машины, c1 и c2 , соединенные маршрутизатором с принудительной задержкой 200 мс.Программа на c1 отправляет 100-байтовые пакеты на c2 каждые 1 мс (TCP_NODELAY включен).Reno используется в качестве контроля перегрузки на обеих машинах.

Согласно tcpdump, только первые 2 пакета отправляются немедленно (200 байтов), затем c1 прекращает отправку и ожидает подтверждения.Окно получателя составляет около 2MSS (MSS = 1460), поэтому я предполагаю, что именно CWND не позволяет c1 отправлять дальнейшие пакеты.

Согласно спецификации Reno, начальный CWND равен 1MSS.Я что-то там пропускаю? .. Даже отправка 1-байтовых пакетов дает одно и то же изображение, 2 пакета отправляются, а затем отправитель ожидает ACK.Может быть, начальный размер CWND определяется начальным размером сегмента, а не MSS?

ip route show cache показывает что-то вроде

cache mtu 1500 rtt 361ms rttvar 360ms cwnd 5 advmss 1460 hoplimit 64

Интересно, означает ли это, чтоCWND = 5MSS?

Ответы [ 3 ]

1 голос
/ 13 декабря 2010

Из RFC 2581

IW, начальное значение cwnd, ДОЛЖНО быть меньше или равно 2 * байтов SMSS и НЕ ДОЛЖНО быть более 2-х сегментов.

Отметим, что нестандартный, экспериментальное расширение TCP позволяет TCP МОЖЕТ использовать больший начальный окно (IW), как определено в уравнении 1 [AFP98]:

  IW = min (4*SMSS, max (2*SMSS, 4380 bytes))           (1)

С этим расширением отправитель TCP МОЖЕТ использовать начальные 3 или 4 сегмента
окно, при условии объединенного размера сегменты не превышают 4380 байт. Мы НЕ допускаем это изменение как часть стандарта определяется этот документ. Тем не менее, мы включаем обсуждение (1) в оставшейся части этого документа в качестве руководства для те, кто экспериментирует с изменить, а не соответствовать представить стандарты для TCP контроль заторов.

МАКСИМАЛЬНЫЙ РАЗМЕР СЕГМЕНТА ОТПРАВЛЕНИЯ (SMSS): SMSS - это размер самый большой сегмент, который может передать отправитель. Это значение может быть на основе максимальной единицы передачи сети, дорожка Алгоритм обнаружения MTU [MD90], RMSS (см. Следующий пункт) или другие факторы. Размер не включает заголовки TCP / IP и опции.

Возможно, вы захотите проверить, как ваша реализация рассчитывает SMSS.

0 голосов
/ 09 августа 2017

Начальное окно равно 2. Причина, по которой оно не равно 1, связана с задержкой подтверждений. Получатель обычно ждет двух пакетов данных перед отправкой подтверждения. Если начальное окно равно 1, подтверждение будет отправлено после времени по умолчанию, часто намного большего, чем необходимо. Это добавляет ненужную задержку и портит синхронизацию.

0 голосов
/ 14 февраля 2011

Насколько я знаю, Linux измеряет cwnd в «сегментах» в этом случае - поэтому, как только вы отправите два сегмента в полет, ваш cwnd будет закрыт для новых данных.

...