Методы настройки TCP регулируют параметры предотвращения перегрузки сети соединений протокола управления передачей (TCP) в сетях с высокой пропускной способностью и высокой задержкой . Хорошо настроенные сети могут работать в некоторых случаях до 10 раз быстрее. [1] Однако слепое следование инструкциям без понимания их реальных последствий также может навредить производительности.
Произведение полосы пропускания на задержку (BDP) — термин, который в основном используется в сочетании с TCP для обозначения количества байтов, необходимых для заполнения «пути» TCP, т. е. он равен максимальному количеству одновременных битов, передаваемых между передатчиком и приемником.
Высокопроизводительные сети имеют очень большие BDP. Приведем практический пример: два узла, взаимодействующие по геостационарной спутниковой связи с задержкой приема-передачи (или временем приема-передачи, RTT) 0,5 секунды и пропускной способностью 10 Гбит/с, могут иметь до 0,5×10 Гбит , т. е. 5 Гбит неподтвержденных данных в полете. Несмотря на гораздо меньшие задержки, чем у спутниковых каналов, даже наземные волоконно-оптические каналы могут иметь очень высокие BDP, поскольку их пропускная способность очень велика. Операционные системы и протоколы, разработанные всего несколько лет назад, когда сети были медленнее, были настроены на BDP на порядки меньшие, что подразумевало ограниченную достижимую производительность.
Первоначальные конфигурации TCP поддерживали буферы размера окна приема TCP до 65 535 (64 КиБ - 1) байт, что было достаточно для медленных соединений или соединений с малым RTT. Большие буферы требуются для высокопроизводительных опций, описанных ниже.
Буферизация используется во всех высокопроизводительных сетевых системах для обработки задержек в системе. В общем, размер буфера должен быть масштабирован пропорционально объему данных «в полете» в любой момент времени. Для очень высокопроизводительных приложений, которые не чувствительны к задержкам в сети, можно вставить большие задержки буферизации сквозного соединения, поместив промежуточные точки хранения данных в сквозную систему, а затем использовать автоматизированные и запланированные передачи данных не в реальном времени, чтобы доставить данные в их конечные точки.
Максимально достижимая пропускная способность для одного TCP-соединения определяется различными факторами. Одним из тривиальных ограничений является максимальная пропускная способность самого медленного соединения на пути. Но есть и другие, менее очевидные ограничения для TCP-пропускной способности. Ошибки битов могут создавать ограничения для соединения, а также RTT.
В компьютерных сетях RWIN (TCP Receive Window) — это объем данных, которые компьютер может принять без подтверждения отправителя. Если отправитель не получил подтверждения для первого отправленного им пакета , он остановится и будет ждать, и если это ожидание превысит определенный предел, он может даже повторить передачу . Вот как TCP обеспечивает надежную передачу данных .
Даже если в сети нет потерь пакетов, оконная обработка может ограничить пропускную способность. Поскольку TCP передает данные до размера окна, прежде чем дождаться подтверждений, полная пропускная способность сети не всегда может быть использована. Ограничение, вызванное размером окна, можно рассчитать следующим образом:
где RWIN — это окно приема TCP, а RTT — это время приема и передачи по пути.
В любой момент времени окно, объявленное принимающей стороной TCP, соответствует объему свободной памяти приема, выделенной для этого соединения. В противном случае возникнет риск потери полученных пакетов из-за нехватки места.
Отправляющая сторона также должна выделить тот же объем памяти, что и принимающая сторона для хорошей производительности. Это связано с тем, что даже после отправки данных по сети отправляющая сторона должна хранить их в памяти до тех пор, пока они не будут подтверждены как успешно полученные, на случай, если их придется передавать повторно. Если получатель находится далеко, подтверждения будут приходить долго. Если отправляемая память мала, она может насытиться и заблокировать передачу. Простое вычисление дает тот же оптимальный размер отправляемой памяти, что и для размера принимающей памяти, приведенного выше.
При потере пакетов в сети на соединение накладывается дополнительный лимит. [2] В случае небольшой или средней потери пакетов, когда скорость TCP ограничена алгоритмом предотвращения перегрузки , лимит можно рассчитать по формуле (Mathis и др.):
где MSS — максимальный размер сегмента, а P loss — вероятность потери пакета. Если потеря пакета настолько редка, что окно TCP регулярно полностью расширяется, эта формула неприменима.
За прошедшие годы протокол TCP получил ряд расширений, повышающих его производительность на быстрых каналах с высоким RTT («длинные толстые сети» или LFN).
Временные метки TCP (RFC 1323) играют двойную роль: они избегают неоднозначностей из-за переноса 32-битного поля порядкового номера и позволяют более точно оценить RTT при наличии множественных потерь на RTT. С этими улучшениями становится разумным увеличить окно TCP за пределы 64 кБ, что можно сделать с помощью опции масштабирования окна (RFC 1323).
Опция выборочного подтверждения TCP (SACK, RFC 2018) позволяет получателю TCP точно информировать отправителя TCP о том, какие сегменты были потеряны. Это повышает производительность на каналах с высоким RTT, когда возможны множественные потери на окно.
Path MTU Discovery устраняет необходимость в фрагментации внутри сети , повышая производительность при потере пакетов.
Длина очереди IP по умолчанию составляет 1000, что, как правило, слишком много. Представьте себе базовую станцию Wi-Fi со скоростью 20 Мбит/с и средним размером пакета 750 байт. Насколько большой должна быть очередь IP? Клиент Voice over IP должен иметь возможность передавать пакет каждые 20 мс. Тогда предполагаемое максимальное количество пакетов в пути будет:
Расчетный размер буфера = 20000000 * 0,020 / 8 / 750 = 66
Лучшая длина очереди будет:
ifconfig wlan0 mtu 1492 txqueuelen 100