Linux initcwnd и initrwnd через /etc/sysctl.conf

Люди, как мы знаем, ядра 3.x имеют более высокие значения соединения TCP по умолчанию, такие как initcwnd и initrwnd. Для друзей 2.x, есть ли способ установить их в /etc/sysctl.conf вместо пути ip?

Вместо следующего:

sudo ip route change default via 192.168.1.1 dev eth0  proto static initcwnd 10

Есть ли способ установить то же самое в /etc/sysctl.conf?

Спасибо

4 ответа

Не совсем отвечаю на вопрос, но в декабре 2017 года в systemd-networkd была добавлена ​​поддержка изменения этих значений, так что теперь вы можете добавить это в/etc/systemd/network/*.networkчтобы сделать его постоянным:

      [Route]
Gateway=_dhcp4
InitialCongestionWindow=10          # initcwnd
InitialAdvertisedReceiveWindow=10   # initrwnd

The Gateway=_dhcp4необходима, если вы хотите, чтобы этот раздел применялся к шлюзу, предоставляемому через DHCP. В противном случае добавьтеInitial*линии к существующему[Route]раздел, где вы вручную указываете адрес шлюза.

В случае с CentOS 7 в ifup вызывается скрипт /sbin/ifup-pre-local . Поэтому я просто сделал скрипт /sbin/ifup-pre-local:

#!/bin/bash

defrt=`ip route | grep "^default" | head -1`
ip route change $defrt initcwnd 10

И initcwnd устанавливается во всех перезагрузках и перезагрузке сети.

Под "via sysctl.conf" вы на самом деле имеете в виду, что вы хотите, чтобы настройки применялись при каждой загрузке?

Если это так, вы можете написать /sbin/ifup-local запускать любые команды в качестве последней части интерфейса запуска. ifup скрипт вызывает это с именем интерфейса в качестве параметра.

Так что ваши /sbin/ifup-local может содержать:

#!/bin/bash
if [[ "$1" == "eth0" ]]
then
  ip route change default via 192.168.1.1 dev eth0 proto static initcwnd 10
fi

По крайней мере, это работает на RHEL/CentOS. Я не пробовал Deb/Ubu/ другие.

В RHEL/CentOS/Oracle/Scientific Linux и других дистрибутивах на базе EL:

Легко, просто не указывайте GATEWAY= в файле /etc/sysconfig/network-scripts/ifcfg-eth0. Затем создайте там же второй файл с именем Route-eth0 и напишите там свой шлюз:

        default via 192.168.0.1 initcwnd 10 initrwnd 10

Этот метод:

  • Сохраняет конфигурацию сети в одном месте, где она должна находиться, чтобы ее можно было легко найти в будущем, а также при перемещении/обновлении серверов.
  • Избегает создания необычных скриптов /sbin/, которые будут забыты через 10 лет.
  • Не зависит от systemd
Другие вопросы по тегам