Введение
Методы повышения пропускной способности при использовании протокола управления передачей (TCP)
Методы настройки TCP регулируют параметры предотвращения сетевых перегрузок для соединений протокола управления передачей (TCP) в сетях с высокой пропускной способностью и большой задержкой. Правильно настроенные сети в некоторых случаях могут работать в 10 раз быстрее. Однако слепое следование инструкциям без понимания их реальных последствий также может негативно сказаться на производительности.
Продукт пропускной способности и задержки (BDP)
Продукт задержки полосы пропускания (BDP) — это термин, используемый преимущественно в контексте TCP для обозначения объема данных в байтах, необходимого для заполнения TCP-соединения, то есть он равен максимальному количеству одновременно передаваемых бит между отправителем и получателем. Высокопроизводительные сети характеризуются очень большим значением BDP. В качестве примера можно рассмотреть два узла, взаимодействующие по геостационарной спутниковой линии связи с временем кругового обмена (или временем отклика, RTT) 0,5 секунды и пропускной способностью 10 Гбит/с. В этом случае в процессе передачи может находиться до 0,5 × 10 Гбит, то есть 5 Гбит неподтвержденных данных. Даже наземные волоконно-оптические линии связи, несмотря на значительно меньшую задержку по сравнению со спутниковыми, могут иметь очень высокий BDP из-за их большой пропускной способности. Операционные системы и протоколы, разработанные относительно недавно, когда сети были медленнее, оптимизировались для значений BDP на несколько порядков меньших, что ограничивает достижимую производительность.
Буферы
Первоначальные конфигурации TCP поддерживали буферы размера окна приема до 65 535 (64 КБ 1) байт, что было достаточно для медленных каналов связи или каналов с небольшим временем возврата (RTT). Для высокопроизводительных опций, описанных ниже, требуются большие буферы. Буферизация используется во всех высокопроизводительных сетевых системах для компенсации задержек в системе. Как правило, размер буфера необходимо масштабировать пропорционально объему данных, находящихся "в пути" в любой момент времени. Для приложений с очень высокой производительностью, нечувствительных к сетевым задержкам, можно ввести большие сквозные задержки буферизации, размещая промежуточные точки хранения данных в сквозной системе, а затем использовать автоматизированные и запланированные передачи данных в нереальном времени для доставки данных до конечных пунктов назначения.
Пределы скорости TCP
Максимально достижимая пропускная способность для одного TCP-соединения определяется различными факторами. Одним из простейших ограничений является максимальная пропускная способность самого медленного звена в пути. Однако существуют и другие, менее очевидные ограничения пропускной способности TCP. Битовые ошибки могут ограничивать соединение, как и время кругового обхода (RTT).
Размер окна
В компьютерных сетях RWIN (TCP Receive Window) – это объем данных, который компьютер может принять без подтверждения от отправителя. Если отправитель не получил подтверждение для первого отправленного пакета, он остановится и будет ждать, и если это ожидание превысит определенный лимит, он может даже повторно отправить пакет. Так TCP обеспечивает надежную передачу данных. Даже при отсутствии потерь пакетов в сети, размер окна может ограничивать пропускную способность. Поскольку TCP передает данные до достижения размера окна, прежде чем ожидать подтверждений, полная пропускная способность сети может не всегда использоваться. Ограничение, вызванное размером окна, можно рассчитать следующим образом:
где RWIN – это TCP Receive Window, а RTT – время кругового обмена данными. В любой момент времени размер окна, рекламируемый принимающей стороной TCP, соответствует объему свободной памяти приема, выделенной для этого соединения. В противном случае существует риск потери полученных пакетов из-за нехватки места. Отправляющая сторона также должна выделять такой же объем памяти, как и принимающая, для обеспечения оптимальной производительности. Это связано с тем, что даже после отправки данных в сеть, отправляющая сторона должна хранить их в памяти до получения подтверждения об успешном приеме, на случай необходимости повторной передачи. Если получатель находится на большом расстоянии, подтверждения будут поступать с задержкой. Если объем памяти отправки невелик, она может переполниться и заблокировать передачу. Простое вычисление дает тот же оптимальный размер памяти отправки, что и размер памяти приема, указанный выше.
Потеря пакетов
Когда в сети происходит потеря пакетов, на соединение накладывается дополнительное ограничение. В случае небольших или умеренных потерь пакетов, когда скорость TCP ограничена алгоритмом предотвращения перегрузки, это ограничение можно рассчитать по формуле (Mathis, et al.):
где MSS – максимальный размер сегмента, а Ploss – вероятность потери пакета. Если потеря пакетов настолько редка, что окно TCP регулярно полностью раскрывается, эта формула неприменима.
Опции TCP для высокой производительности
За прошедшие годы в TCP было внесено несколько расширений для повышения его производительности на быстрых соединениях с большой задержкой (RTT) – так называемых "длинными и толстыми сетями" (LFNs). TCP-метки времени (RFC 1323) выполняют двойную функцию: они устраняют неоднозначность, возникающую при переполнении 32-битного поля порядковых номеров, и обеспечивают более точную оценку RTT при наличии множественных потерь пакетов в течение одного RTT. Благодаря этим улучшениям становится целесообразным увеличить размер TCP-окна сверх 64 кБ, что можно сделать с помощью опции масштабирования окна (RFC 1323). Опция выборочного подтверждения (SACK, RFC 2018) позволяет приемнику TCP точно сообщать отправителю TCP о потерянных сегментах. Это повышает производительность на соединениях с большой задержкой, где возможны множественные потери пакетов в пределах одного окна. Механизм Path MTU Discovery позволяет избежать фрагментации пакетов в сети, что повышает производительность при потере пакетов.