При использовании 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