Различные параметры оптимизации TCP

Для Win7

Просмотр глобальных параметров TCP

netsh int tcp show global

Обратите внимание на строку “Поставщик надстройки контроля перегрузки”. Если там не ctcp, то можно поменять её так:

netsh interface tcp set global congestionprovider=ctcp

Будет разрешено использование дополнительного алгоритма контроля перегрузки CTCP.

Для WinXP

Небольшие изменения в реестре:

1
2
3
4
5
6
# turn on window scale and timestamp option
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Tcp1323Opts=3 
# set default [[Протоколы|TCP]] receive window size 
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\TcpWindowSize=256000 
# set max [[Протоколы|TCP]] send/receive window sizes (max you can set using setsockopt call)
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\GlobalMaxTcpWindowSize=16777216

Linux

1
2
3
4
 echo 7 > /proc/sys/net/ipv4/tcp_fin_timeout
 echo 1 > /proc/sys/net/ipv4/tcp_orphan_retries
 Уменьшаем количество SYN-ACK проб (по умолчанию 5)
 echo 2 > /proc/sys/net/ipv4/tcp_synack_retries 

После наступления тишины, сколько держать соединение открытым (по умолчанию 7200 - два часа!)

1
 echo 60 >  /proc/sys/net/ipv4/tcp_keepalive_time 

Увеличиваем размер возможной SYN очереди (по умолчанию 1024)

1
 echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog 

Если ответа на проверку нет, то с интервалом в 10 секунд повторить (по умолчанию 75)

1
 echo 10 > /proc/sys/net/ipv4/tcp_keepalive_intvl 

Сколько делать проб до закрытия соединения (по умолчанию 9).

1
 echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes 

Увеличиваем максимальный размер памяти отводимой для TCP буферов:

1
2
 echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_wmem 
 echo "4096 65536 16777216" > /proc/sys/net/ipv4/tcp_rmem

Увеличиваем размер очереди пакетов на сетевом интерфейсе, особенно полезно для Gigabit Ethernet

1
ifconfig eth0 txqueuelen 1000

Слишком много TIME_WAIT

Если

1
netstat -antpu | wc -l

показывает много (у меня до 54 000+ доходило), то можно

1
2
3
4
 echo 2 > /proc/sys/net/ipv4/tcp_tw_recycle #таймаут в 2 сек
 echo 2 > /proc/sys/net/ipv4/tcp_tw_reuse #таймаут в 2 сек
 sysctl net.ipv4.tcp_tw_recycle=1 #разрешаем использовать повторно
 sysctl net.ipv4.tcp_tw_reuse=1 #разрешаем использовать повторно

у меня сразу упало до 16 000+