При использовании iperf в режиме TCP с одним потоком результаты часто существенно ниже реальной пропускной способности канала. Это связано с фундаментальными ограничениями протокола TCP, а не с проблемами сети.
1981-09 - RFC 793 - Transmission Control Protocol 1982-07 - RFC 813 - Window and Acknowledgement Strategy in TCP 1984-01 - RFC 896 - Congestion Control in IP/TCP Internetworks 1989-10 - RFC 1122 - Requirements for Internet Hosts - Communication Layers 1992-05 - RFC 1323 - TCP Extensions for High Performance 1996-10 - RFC 2018 - TCP Selective Acknowledgment Options 1998-09 - RFC 2414 - Increasing TCP’s Initial Window 1999-04 - RFC 2581 - TCP Congestion Control 2001-09 - RFC 3168 - The Addition of Explicit Congestion Notification (ECN) to IP 2002-10 - RFC 3390 - Increasing TCP’s Initial Window 2009-06 - RFC 5562 - Adding Explicit Congestion Notification (ECN) Capability to TCP’s SYN/ACK Packets 2009-09 - RFC 5681 - TCP Congestion Control 2012-08 - RFC 6675 - A Conservative Loss Recovery Algorithm Based on Selective Acknowledgment (SACK) for TCP 2013-04 - RFC 6928 - Increasing TCP’s Initial Window 2014-09 - RFC 7323 - TCP Extensions for High Performance 2022-08 - RFC 9293 - Transmission Control Protocol (TCP)
BDP — это простой способ понять, сколько данных может одновременно находиться “в пути” между отправителем и получателем в сети. Рассчитывается как произведение пропускной способности канала на задержку передачи:
Например, для канала 10 Gbps с задержкой 30 мс:
TCP Window определяет максимальный объем данных, который можно передать до получения подтверждения. Теоретическая пропускная способность TCP ограничена формулой:
Проверьте состояние:
sysctl net.ipv4.tcp_window_scaling
Включите если отключено:
sysctl -w net.ipv4.tcp_window_scaling=1
echo "net.ipv4.tcp_window_scaling=1" >> /etc/sysctl.conf
Установите максимальные размеры буферов (рекомендация: BDP × 2):
# Максимальные размеры буферов
sysctl -w net.core.rmem_max=134217728 # 128 МБ
sysctl -w net.core.wmem_max=134217728 # 128 МБ
# TCP-специфичные буферы (min, default, max)
sysctl -w net.ipv4.tcp_rmem="4096 87380 134217728"
sysctl -w net.ipv4.tcp_wmem="4096 65536 134217728"
sysctl -w net.ipv4.tcp_moderate_rcvbuf=1
Для высокоскоростных каналов рассмотрите BBR вместо CUBIC:
# Проверка доступных алгоритмов
cat /proc/sys/net/ipv4/tcp_available_congestion_control
# Установка BBR (если доступен)
sysctl -w net.ipv4.tcp_congestion_control=bbr
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
sysctl -p
# TCP Window Scaling
net.ipv4.tcp_window_scaling=1
# Буферы для высокоскоростных соединений
net.core.rmem_max=134217728
net.core.wmem_max=134217728
net.ipv4.tcp_rmem=4096 87380 134217728
net.ipv4.tcp_wmem=4096 65536 134217728
# Автонастройка буферов
net.ipv4.tcp_moderate_rcvbuf=1
# BBR для WAN-соединений (если доступен)
net.ipv4.tcp_congestion_control=bbr
Для повышения скорости передачи файлов по TCP в Windows можно выполнить оптимизацию сетевого стека и настроить параметры сетевого адаптера. Ниже приведены основные шаги и рекомендации.
netsh int tcp set global autotuninglevel=normal
netsh int tcp set global rss=enabled
netsh int tcp set global netdma=enabled
netsh int tcp set global chimney=enabled
netsh interface tcp set heuristics disabled
В редакторе реестра Windows перейти в:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Interfaces
и для каждого активного интерфейса создать или изменить DWORD параметры:
TcpAckFrequency
= 1TCPNoDelay
= 1TcpWindowSize
= 65535В разделе Parameters
добавить:
GlobalMaxTcpWindowSize
= 65535DefaultTTL
= 64TcpMaxDataRetransmissions
= 5TcpMaxConnectRetransmissions
= 3После изменений требуется перезагрузка системы.
Для автоматической настройки TCP/IP параметров можно использовать бесплатную утилиту TCP Optimizer. Она позволяет подобрать оптимальные параметры под конкретную сеть и создать резервные копии текущих настроек.