Настройка TCP
Настройка TCP (англ. TCP tuning) — совокупность методов оптимизации параметров предотвращения сетевых перегрузок для соединений по протоколу TCP (Transmission Control Protocol) в высокоскоростных и высокозадержочных сетях. При грамотной настройке пропускная способность сети может возрасти в несколько раз, иногда до 10 раз по сравнению со стандартной конфигурацией[1]. Однако некритичное следование рекомендациям без понимания их реальных последствий может привести к ухудшению производительности.
Сетевые и системные характеристики
Произведение пропускной способности на задержку (BDP)
Произведение пропускной способности на задержку (англ. bandwidth-delay product, BDP) — важное понятие при настройке TCP, обозначающее количество байт, необходимое для заполнения всего «пути» TCP; фактически это максимальное количество одновременных бит, находящихся в передаче между отправителем и получателем.
Высокопроизводительные сети обладают большим BDP. Например, при связи двух узлов через геостационарный спутник с временем кругового прохода (RTT) 0,5 секунды и пропускной способностью 10 Гбит/с возможно наличие в пути до 0,5×10 = 5 Гбит не подтверждённых данных. Хотя в волоконно-оптических линиях задержки в разы ниже, их огромная пропускная способность также приводит к высоким значениям BDP. Операционные системы и сетевые протоколы, созданные всего несколько лет назад с учётом меньших сетевых скоростей, рассчитаны на значительно меньшие BDP, что ограничивает достижимую производительность.
Буферы
Изначально настройки TCP предусматривали размер окна приёма (TCP receive window) и буферов до 65 535 (64 КиБ − 1) байт, чего было достаточно для медленных линий или соединений с небольшой RTT. Для более производительных вариантов, описанных ниже, нужны существенно большие буферы.
Буферизация используется во всех высокопроизводительных сетевых системах для компенсации задержек. В общем случае размер буфера должен быть пропорционален объёму «данных на лету» в любой момент времени. Для очень высокопроизводительных приложений, не чувствительных к задержкам, допустимо вводить значительные концевые задержки за счёт промежуточных хранилищ, и использовать запланированные пакетные передачи данных вне реального времени в конечные точки.
Ограничения скорости TCP
Максимальная достижимая пропускная способность одного соединения TCP определяется рядом факторов. Простейшее ограничение — реальная максимальная пропускная способность самого медленного участка пути. Однако есть и другие, менее очевидные лимиты. На пропускную способность также влияют ошибки передачи и значение RTT.
Размер окна
В компьютерных сетях RWIN (окно приёма TCP, TCP Receive Window) — это объём данных, который компьютер может принять без подтверждения отправителю. Если отправитель не получит подтверждения на первую переданную пакетную порцию, он приостанавливает передачу, а по истечении определённого таймаута может даже выполнять повторную передачу. Именно так TCP обеспечивает надёжную доставку данных.
Даже при отсутствии потерь пакетов эффективность TCP может ограничиваться размерами окна. Поскольку TCP передаёт данные только на объём окна до получения подтверждений, пропускная способность часто не используется на полную мощность. Ограничение пропускной способности окном определяется по формуле:
где RWIN — размер окна приёма TCP, а RTT — время кругового прохода по маршруту.
В любой момент времени в получателе TCP размер окна соответствует объёму свободной памяти, выделяемой под этот сеанс. Иначе велик риск потери пакетов на этапе приёма.
Для высокой производительности сторона-отправитель тоже должна резервировать аналогичный объём памяти: даже после передачи данных отправителю нужно хранить их до подтверждения успешной доставки, на случай необходимости повторной передачи. Если получатель удалён, подтверждения приходят с задержкой, и небольшой буфер передачи быстро заполняется, блокируя отправку. Оптимальный размер памяти для отправителя рассчитывается так же, как и для окна приёма.
Потери пакетов
Потери пакетов в сети накладывают дополнительное ограничение на соединение[2]. При умеренных потерях, когда скорость TCP ограничивается алгоритмом предотвращения перегрузок, лимит можно вычислить по формуле (Mathis и др.):
где MSS — максимальный размер сегмента, а Ploss — вероятность потери пакета. Если потери случаются крайне редко и окно TCP всегда максимально раскрыто, эта формула не применима.
Опции TCP для высокой производительности
Для повышения эффективности TCP при работе по быстрым каналам с большим RTT (так называемые «толстые длинные сети», англ. long fat networks или LFN) были разработаны ряд расширений.
Опция TCP метки времени (англ. timestamps, RFC 1323) выполняет две функции: предотвращает неоднозначность из-за переполнения 32-битного счётчика последовательности, а также обеспечивает более точную оценку RTT при множественных потерях на один RTT. Эти усовершенствования позволяют увеличить окно TCP свыше 64 КиБ с помощью опции масштабирования окна (window scaling, RFC 1323).
Опция селективных подтверждений TCP (SACK, selective acknowledgment, RFC 2018) позволяет приёмнику сообщать отправителю точную информацию о потерянных сегментах, что повышает эффективность на каналах с большим RTT, где возможны множественные потери в одном окне.
Механизм обнаружения MTU по маршруту (path MTU discovery) устраняет необходимость фрагментации пакетов по пути, что особенно полезно при наличии потерь.
Настройка медленных соединений
Стандартная длина IP-очереди — 1000, что зачастую избыточно. Например, у Wi-Fi-базы со скоростью передачи 20 Мбит/с и средним размером пакета 750 байт возникает вопрос: какой длины оптимально выставить очередь? Для клиента голосовой связи желательно иметь возможность отправки пакета каждые 20 мс. Оценка максимального числа пакетов «на лету»:
Оценка размера буфера = 20 000 000 × 0,020 / 8 / 750 = 66.
Более подходящее значение длины очереди:
ifconfig wlan0 mtu 1492 txqueuelen 100
Примечания
- ↑ High Performance SSH/SCP — HPN-SSH (англ.). psc.edu. Дата обращения: 23 января 2020.
- ↑ The Macroscopic Behavior of the TCP Congestion Avoidance Algorithm (англ.). psc.edu. Дата обращения: 3 января 2017. Архивировано 11 мая 2012 года.
Литература
- TCP Extensions for High Performance (англ.). IETF. Дата обращения: 15 июня 2024.
- TCP Selective Acknowledgment Options (англ.). IETF. Дата обращения: 15 июня 2024.
- The NewReno Modification to TCP's Fast Recovery Algorithm (англ.). IETF. Дата обращения: 15 июня 2024.
- Enhancing TCP Over Satellite Channels using Standard Mechanisms (англ.). IETF. Дата обращения: 15 июня 2024.
- An Extension to the Selective Acknowledgment (SACK) Option for TCP (англ.). IETF. Дата обращения: 15 июня 2024.
- A Conservative Selective Acknowledgment-based Loss Recovery Algorithm for TCP (англ.). IETF. Дата обращения: 15 июня 2024.
- Forward RTO-Recovery (F-RTO): An Algorithm for Detecting Spurious Retransmission Timeouts with TCP and the Stream Control Transmission Protocol (SCTP) (англ.). IETF. Дата обращения: 15 июня 2024.
Ссылки
- Инструкция по настройке TCP (англ.), ESnet
- The Cable Guy: TCP Receive Window Auto-Tuning (англ.)
- Проект Web100 Data Bandwidth Testing (англ.)
- DrTCP — программа для Microsoft Windows (до Vista) для быстрой настройки параметров производительности TCP в реестре.
- Информация по тюнингу TCP-стека (англ.), Broadband Reports
- TCP/IP Analyzer, speedguide.net
- NTTTCP Network Performance Test Tool (англ.), Microsoft Windows Server Performance Team Blog
- Рекомендации по оптимизации TCP (англ.), ExtraHop
- Руководство по настройке TCP, Pittsburgh Supercomputing Center