# TCP syncookies - технология, позволяющая не забивать
# TCP стек, пока TCP сессия полностью не установится.
# Защита на случай TCP Syn атак
# Согласно рекомендациям разработчиков ядра, этот режим лучше отключить.
# http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
net.ipv4.tcp_syncookies = 0

# Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер буфера сокетов TCP/UDP.
# Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется
# даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192).
# Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра
# /proc/sys/net/core/rmem_default, используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию)
# составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, несколько
# меньший, нежели определяет принятое по умолчанию значение tcp_app_win.
# Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума,
# заданного в файле /proc/sys/net/core/rmem_max. При “статическом” выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения.
# На приём TCP пакетов
net.ipv4.tcp_rmem=4096 8388608 16777216
# На передачу TCP пакетов
net.ipv4.tcp_wmem=4096 4194394 16777216
# Для TCP протокола в целом
net.ipv4.tcp_mem=8388608 12582912 16777216
# Для UDP протокола в целом
net.ipv4.udp_mem=8388608 12582912 16777216
net.ipv4.udp_rmem_min=16384
net.ipv4.udp_wmem_min=16384
# Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать.
net.core.netdev_max_backlog=500000
# Максимальное число запоминаемых запросов на соединение (TCP Syn), для которых не было получено подтверждения от подключающегося клиента.
net.ipv4.tcp_max_syn_backlog=5480000
# Увеличим возможное количество сокетов в состоянии TIME_WAIT.
net.ipv4.tcp_max_tw_buckets=5480000
# Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.
net.ipv4.tcp_tw_reuse=1
# Разрешаем быструю утилизацию сокетов находящихся в состоянии TIME_WAIT
net.ipv4.tcp_tw_recycle=1
# Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной.
# Партнер может не закрыть это соединение никогда.
net.ipv4.tcp_fin_timeout=3
# Разрешить выборочные подтверждения протокола TCP. Опция необходима для эффективного использования всей доступной
# пропускной способности некоторых сетей
net.ipv4.tcp_sack=1
# Число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP.
net.ipv4.tcp_synack_retries=1
# Определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle).
net.ipv4.tcp_max_orphans=65536
# Определяется число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне.
net.ipv4.tcp_orphan_retries=0
# Проверка наличия подключения по средствам keepalive сообщений. Активируется только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE.
# Через какой промежуток времени после установки подключения начать слать keepalive сообщения (в сек)
net.ipv4.tcp_keepalive_time=600
# Интервал, с которым слать keepalive пакеты (в сек)
net.ipv4.tcp_keepalive_intvl=20
# После скольки неудачных пробах считать соединение разорванным
net.ipv4.tcp_keepalive_probes=2
# Запрещаем технологию slow start (малый размер окна) в TCP подключениях,
# в которых долгое время не было трафика.
net.ipv4.tcp_slow_start_after_idle=0
# Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений.
net.ipv4.ip_local_port_range=2000 65000
# Разрешает временные метки протокола TCP. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок.
net.ipv4.tcp_timestamps=1
# Параметр отвечающий за алгоритмы сегментации TCP пакетов при передаче данных.
# Cubic - алгоритм для высоконагруженных систем, но более структурированный, нежели BIC.
# Включён по умолчанию в linux ядре начиная с версии 2.6.19
# BBR - Алгоритм от Гугла, получайте максимальную скорость, если у вас широкий канал
net.ipv4.tcp_congestion_control=bbr
# Параметр определяет дисциплину обработки очередей 
# FQ делят пропускную способность между всеми соединениями, даёт лучшую пропускную способность в связке с BBR
sysctl net.core.default_qdisc=fq
# Не сохранять результаты измерений TCP соединения в кеше при его закрытии
net.ipv4.tcp_no_metrics_save=1
# Разрешаем динамическое изменение размера окна TCP стека (окно увеличивается, если не было потерь
# пакетов при передаче в рамках TCP подключения)
net.ipv4.tcp_window_scaling=1
# Защита от TIME_WAIT атак.
net.ipv4.tcp_rfc1337=1
# Не отвечаем на ICMP ECHO запросы, переданные на широковещательный адрес.
net.ipv4.icmp_echo_ignore_broadcasts=1
# Не отвечаем на ошибочно сформированные сообщения.
net.ipv4.icmp_ignore_bogus_error_responses=1
# Максимальное число открытых сокетов, ждущих соединения.
# Максимум в CentOS 7
net.core.somaxconn=65535
