Flow Control (Управление потоком)

⌘K

Flow Control (Управление потоком)

Flow control — это набор приёмов, которые не дают отправителю «залить» приёмник данными быстрее, чем тот способен их обработать. Идея проста: если где-то на пути буферы заполняются, нужно притормозить источник — локально на канале связи или сквозь весь путь.

Где встречается

  • Транспортный уровень: в TCP получатель регулирует скорость через скользящее окно (rwnd), а стек ограничивает отправителя ещё и своим cwnd (это уже про перегрузку сети).
  • Канальный уровень (Ethernet): кадры 802.3x PAUSE (пауза для всего порта) и PFC 802.1Qbb (пауза по приоритету/классу).
  • Специальные технологии: credit-based в Fibre Channel/InfiniBand; в Wi-Fi — свои MAC-механики и управление скоростью/повторами.

Два подхода

  • Сквозной (end-to-end): TCP-приёмник уменьшает окно — отправитель шлёт меньше. Плюсы: работает через любые маршруты. Минусы: реакция не мгновенная, «микровсплески» могут успеть забить промежуточные буферы.
  • Пошаговый (hop-by-hop): коммутатор/порт даёт сигнал «стоп/меньше» соседу (PAUSE/PFC, кредиты). Плюсы: мгновенно спасает буферы. Минусы: риск побочных эффектов на других потоках.

Ключевые механизмы в практике

  • TCP окно (rwnd) + Window Scaling: приёмник сообщает, сколько байт готов принять; расширение окна нужно на высоких скоростях/дальних RTT.
  • ECN (явное уведомление о перегрузке): вместо потерь помечаются пакеты; отправитель снижает скорость. Хороший компаньон к TCP-контролю перегрузки.
  • 802.3x PAUSE: «заморозить всё» на порту. Просто, но может вызвать pause-storm и задержать посторонние классы трафика.
  • PFC (Priority Flow Control): пауза только для выбранных приоритетов/CoS/DSCP — применяют там, где нужен «почти без потерь» класс (например, RoCEv2/RDMA), чтобы не ломалась латентность. Требует аккуратной настройки, чтобы избежать deadlock.

Когда это нужно

  • Линки с асимметрией скоростей (10G → 1G), где легко переполнить медленный буфер.
  • Микроберсты на коммутаторах в ЦОДе.
  • Трафик, чувствительный к потерям и задержкам (RDMA, iSCSI, биржевые шины, телеметрия в реальном времени).

Подводные камни

  • PAUSE мешает «невиновным» потокам: один шумный класс может остановить весь порт.
  • PFC при неверных буферах/очередях ведёт к head-of-line blocking и «взаимным паузам».
  • Чисто «сквозной» контроль (только TCP) не спасает от локальных всплесков на промежуточных устройствах.
  • Отсутствие AQM (FQ-CoDel/RED/CAKE) приводит к bufferbloat — большой джиттер даже без потерь.

Практические рекомендации (кратко)

  • Начинайте со сквозного: актуальные TCP-алгоритмы, ECN, разумные очереди + AQM.
  • PFC включайте точечно и только для действительно «lossless» классов; проверяйте буферы и карты очередей.
  • Избегайте общего PAUSE на магистралях; лучше QoS + шейпинг на границах.
  • Проверяйте MTU/MSS, чтобы не плодить фрагментацию и «чёрные дыры» PMTU.
  • Мониторьте очереди/дропы/ECN-метки; используйте sFlow/NetFlow, счетчики ASIC и тесты под нагрузкой (iperf3).

Долгосрочные клиенты — наша гордость

Для тех, кто с нами надолго: 12 месяцев = 13 с промокодом

Месяц в подарок
COPIED
NEWCOM COPIED