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

Изменение размера окна TCP на сервере Ubuntu

Есть ли способ начать с размером окна TCP больше, чем по умолчанию, на сервере ubuntu?

Я вижу, что в /proc/sys/net/ipv4/ например:

/proc/sys/net/ipv4/tcp_window_scaling (which is 1)

/proc/sys/net/ipv4/tcp_adv_win_scale (2)

/proc/sys/net/ipv4/tcp_slow_start_after_idle (1)

/proc/sys/net/ipv4/tcp_window_scaling (1)

Поскольку TCP является полнодуплексным, существует два начальных окна перегрузки (IW), одно для отправки и одно для приема. Их можно установить с помощью команды route, однако в версии 2.6.32 я обнаружил, что она не работает после просмотра захваченных пакетов. На моем рабочем столе (3.0.0) IW по умолчанию выше (10 пакетов), поэтому я не тестировал это в более поздней версии, так как это то, что я хотел увеличить.

Теоретически их можно установить с помощью ip route с чем-то вроде:

sudo ip route add <DEST IP> via <GATEWAY IP> proto static initcwnd 10

Для отправки И.В. Для получения изменения IW initcwnd к initrwnd.

Если это работает, я считаю, что вам следует указать новый размер окна, отраженный в SYN или SYN / ACK-пакете (в зависимости от окна отправки / получения) установления связи TCP.. Поскольку окно перегрузки является внутренним и отличается от окна в заголовке TCP, единственный способ узнать, что оно работает, - это протестировать соединение с более высокой задержкой и посмотреть, будет ли отправлено больше начальных пакетов. Я только недавно сам смотрел на это, поэтому в качестве оговорки я на 100% уверен во всем этом.

После этого размер окна должен масштабироваться в соответствии с параметрами Linux по умолчанию, не вызывая проблем с привязкой к окну. Вы, вероятно, не захотите связываться с этим, если у вас нет захвата, показывающего, что вы часто сталкиваетесь с ситуациями, когда вы привязаны к окну (получатель отправит большое количество пакетов с Win 0 если это так.)

Там есть net.ipv4.tcp_wmem и net.ipv4.tcp_rmem. Вы можете прочитать значения этих переменных с помощью sysctl -n а также установите их с помощью sysctl.

Довольно хорошее вступление Вот.