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

Может ли получатель при TCP-соединении контролировать размер окна TCP, используемого отправителем?

Размер окна TCP - это объем данных, которые отправитель отправит, прежде чем ожидать подтверждения TCP. Есть ли у получателя способ контролировать это (например, как часть рукопожатия TCP), или это может контролировать только отправитель?

Да, получатель может динамически управлять размером окна TCP на всем протяжении TCP-связи, а не только при рукопожатии, как указано в RFC 793:

Управление потоком:

TCP предоставляет получателю возможность управлять объемом данных, отправляемых отправителем. Это достигается возврат «окна» с каждым ACK с указанием диапазона допустимых порядковых номеров за пределами последнего успешно полученного сегмента. В окне указано допустимое количество октетов, которое отправитель может передать. до получения дальнейшего разрешения.

Поскольку вы добавили , масштабирование окна TCP - это просто множитель, используемый для преодоления начального ограничения в 64 КБ для максимального размера окна. Это согласовывается с использованием параметров TCP в первоначальном подтверждении TCP, как описано в RFC 7323:

Опция Window Scale согласовывает основные параметры сеанса TCP. Следовательно, он отправляется только во время первоначального рукопожатия. Кроме того, опция Window Scale будет отправлена ​​в <SYN,ACK> сегмент только в том случае, если соответствующая опция была получена в первоначальном <SYN> сегмент.

....

Этот вариант МОЖЕТ быть отправлен в <SYN> сегмент (т.е. сегмент
с битом SYN и отключенным битом ACK). Если опция Window Scale
был получен в первоначальном <SYN> сегмент, то этот параметр МОЖЕТ быть
отправлено в <SYN,ACK> сегмент. Параметр Window Scale в сегменте
без бита SYN НЕОБХОДИМО игнорировать.

Таким образом, этот коэффициент масштабирования не может быть изменен позже. Это описано далее там:

Расширение масштаба окна расширяет определение окна TCP.
до 30 бит, а затем использует неявный масштабный коэффициент для переноса этого
30-битное значение в 16-битном поле окна заголовка TCP (SEG.WND в [RFC0793]). Показатель масштабного коэффициента переносится в TCP.
вариант, масштаб окна. Эта опция отправляется только в сегменте (сегмент с установленным битом SYN), поэтому масштаб окна фиксируется в каждом направлении при открытии соединения.


Вот пример крайнего и ненормального "злоупотребления" оконным управлением со стороны приемника, изобретенного для задержки сканирования, используемого для распространения червей: Linux iptables ' TARPIT дополнительная цель, основанная на LaBrea's битумная яма (Джим МакКлерг, 2001 г. PDF):

TARPIT
Захватывает и удерживает входящие TCP-соединения, не используя локальные ресурсы для каждого соединения.
[...] играйте как слушающий сервер, но кроме отправки ACK или RST, никакие данные не отправляются. [...]
--tarpit
В этом режиме соединение со злоумышленником завершается, но ограничивает размер окна до 0, заставляя злоумышленника ждать долгое время. Пока он поддерживает состояние соединения и пытается продолжать его каждые 60–240 секунд, мы его не поддерживаем, поэтому он очень легкий. Попытки закрыть соединение игнорируются, из-за чего удаленная сторона прерывает соединение через 12-24 минуты. Этот режим установлен по умолчанию.