Есть три способа управления потоком:
- Если вы перегружены, вы бросаете данные на пол.
- Если вы не можете предоставить услугу для запроса из более высокого уровня, как правило, потому что ваша локальная очередь заполнена, вы возвращаете ошибку в этот более высокий уровень.
- Вы заблаговременно уведомляете верхние слои о том, что они должны замедлиться.
На уровне Ethernet метод 3 поддерживается через кадры паузы. Часто верхние уровни не поддерживают метод 3, но вместо этого поддерживают метод 2. Если под слоем есть слой под ним, который поддерживает метод 3, но слой над ним поддерживает только метод 2, он может временно остановить передачу данных на нижние уровни, вызывая метод 2, чтобы применить к более высоким слоям.
Или, более конкретно, когда вы получаете кадр паузы, вы останавливаете механизм отправки и устанавливаете таймер для перезапуска механизма отправки в соответствующее время. Пока механизм отправки остановлен, ваши локальные очереди будут заполняться данными из более высоких уровней. Если они заполняются, вы возвращаете «занятые» ошибки на более высокие уровни, и они обрабатывают это, однако, уместно.