Открыть сервис

Управление потоком

Управление потоком (англ. flow control) — это совокупность механизмов и алгоритмов, предназначенных для регулирования скорости передачи данных между отправителем и получателем в компьютерных сетях и системах связи. Основная цель управления потоком — предотвращение переполнения буфера приёмного устройства, когда отправитель передаёт данные быстрее, чем получатель способен их обработать. Управление потоком отличается от управления перегрузкой (congestion control), которое решает проблему перегрузки промежуточных узлов сети (маршрутизаторов), а не конечного получателя.

История

Проблема согласования скоростей передачи возникла с появлением первых телекоммуникационных систем. В телеграфии и ранних компьютерных сетях использовались простейшие методы ручного управления потоком, например, сигналы «готов к приёму» (XON/XOFF) в асинхронных последовательных интерфейсах.

С развитием сетей с коммутацией пакетов, в частности, протокола TCP/IP, потребовались более сложные алгоритмы. В 1980-х годах в протоколе TCP был внедрён механизм скользящего окна, который позволял динамически регулировать объём данных, передаваемых без подтверждения. В 1990-х годах, с ростом популярности Ethernet, возникла необходимость в управлении потоком на канальном уровне, что привело к появлению стандарта IEEE 802.3x (PAUSE-кадры).

Классификация

Управление потоком классифицируется по нескольким признакам.

По уровню модели OSI

  • Управление потоком на канальном уровне (L2): Реализуется на уровне сетевых интерфейсов и коммутаторов. Примеры: PAUSE-кадры в Ethernet, управление потоком в Fibre Channel.
  • Управление потоком на транспортном уровне (L4): Реализуется в протоколах, обеспечивающих надёжную доставку, таких как TCP. Механизмы скользящего окна и алгоритмы управления перегрузкой (например, TCP Reno, TCP Cubic) являются частью этого уровня.
  • Управление потоком на прикладном уровне (L7): Реализуется в протоколах прикладного уровня, например, в протоколах передачи файлов (FTP) или в системах управления базами данных, где приложение само контролирует скорость приёма данных.

По типу обратной связи

  • С обратной связью (feedback-based): Получатель отправляет отправителю явные сигналы о своей готовности принимать данные. Примеры: подтверждения (ACK) в TCP, PAUSE-кадры.
  • С предварительным согласованием (rate-based): Отправитель и получатель заранее договариваются о скорости передачи. Примеры: протоколы с резервированием полосы пропускания (RSVP), некоторые реализации ATM.

По методу реализации

  • Аппаратное управление потоком: Реализуется на уровне физического интерфейса. Например, сигналы RTS/CTS (Request to Send / Clear to Send) в последовательных интерфейсах RS-232.
  • Программное управление потоком: Реализуется на уровне протоколов. Например, символы XON/XOFF (ASCII 17 и 19) в телетайпах и эмуляторах терминалов.

Механизмы управления потоком

Управление потоком в TCP

В протоколе TCP (Transmission Control Protocol) управление потоком реализуется через механизм скользящего окна. Каждый сегмент TCP содержит поле Window Size (размер окна), которое указывает, сколько байт данных отправитель может передать, не дожидаясь подтверждения. Получатель динамически изменяет это значение в зависимости от заполненности своего буфера. Если буфер переполнен, получатель устанавливает размер окна равным нулю, что заставляет отправителя прекратить передачу до получения нового ненулевого окна.

Кроме того, в TCP используется алгоритм медленного старта (slow start) и предотвращения перегрузки (congestion avoidance), которые, хотя и направлены на управление перегрузкой сети, также влияют на скорость передачи и, следовательно, на поток данных.

Управление потоком на канальном уровне (Ethernet)

В сетях Ethernet, особенно в полнодуплексном режиме, используется стандарт IEEE 802.3x, который определяет PAUSE-кадры. Когда коммутатор или сетевая карта обнаруживает, что её буфер приёма переполняется, она отправляет специальный PAUSE-кадр на порт отправителя. Этот кадр содержит время (в единицах квантов времени), на которое отправитель должен приостановить передачу. После истечения этого времени или получения кадра с нулевым временем паузы передача возобновляется.

Аппаратное управление потоком (RS-232)

В последовательных интерфейсах, таких как RS-232, используется аппаратное управление потоком с помощью сигналов RTS (Request to Send) и CTS (Clear to Send). Устройство, готовое к приёму данных, устанавливает сигнал CTS. Устройство, желающее передать данные, сначала устанавливает сигнал RTS и ждёт, пока не получит CTS. Если получатель не может принимать данные, он сбрасывает сигнал CTS, и отправитель приостанавливает передачу.

Применение

Управление потоком используется в самых разных областях:

  • Компьютерные сети: В протоколах TCP, UDP (ограниченно), в сетях Ethernet, Fibre Channel, InfiniBand.
  • Телекоммуникации: В системах передачи данных, в протоколах ATM, Frame Relay.
  • Промышленные сети: В протоколах Modbus, Profibus, CANopen.
  • Внутренние шины компьютеров: В шинах PCI Express, USB, SATA.
  • Видеонаблюдение и потоковое видео: Для предотвращения потери кадров при перегрузке сети.

Примеры

  • TCP: При передаче большого файла через медленное соединение, получатель может уменьшить размер окна, чтобы не переполнить свой буфер. Отправитель, получив это уменьшение, снижает скорость передачи.
  • Ethernet: При подключении нескольких серверов к одному коммутатору, если один сервер начинает передавать данные с высокой скоростью, коммутатор может отправить PAUSE-кадр этому серверу, чтобы предотвратить потерю пакетов.
  • RS-232: При подключении модема к компьютеру, если модем не успевает обрабатывать данные, он сбрасывает сигнал CTS, и компьютер приостанавливает передачу.

Критика и ограничения

Механизмы управления потоком не лишены недостатков. Например, использование PAUSE-кадров в Ethernet может привести к эффекту «голодания» (starvation), когда один отправитель, получив команду на паузу, блокирует передачу для других устройств. Кроме того, управление потоком может быть неэффективным в сетях с высокой задержкой, так как сигналы обратной связи приходят с опозданием.

В TCP алгоритмы управления потоком и перегрузкой могут быть излишне агрессивными или, наоборот, слишком консервативными, что приводит к неоптимальному использованию пропускной способности сети. В современных высокоскоростных сетях (например, 100 Гбит/с) традиционные механизмы TCP могут быть неэффективны, что привело к разработке новых алгоритмов, таких как BBR (Bottleneck Bandwidth and Round-trip propagation time).

Источники

  1. Стивенс У. Р. «TCP/IP. Иллюстрированное руководство. Том 1. Протоколы». — М.: Вильямс, 2003.
  2. Таненбаум Э., Уэзеролл Д. «Компьютерные сети». — 5-е изд. — СПб.: Питер, 2012.
  3. IEEE Standard for Local and Metropolitan Area Networks: Media Access Control (MAC) Bridges (IEEE Std 802.1D-2004).
  4. RFC 793 — Transmission Control Protocol.
  5. RFC 5681 — TCP Congestion Control.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →