Data link layer - Flow control
Управление потоком передачи даных выполняется LLC подуровнем.
Управление потоком позволяет получателю контролировать скорость передачи данных, чтобы предотвратить чрезмерную загрузку в случае более быстрого отправителя. Канальный уровень не отвечает за само переполнение, эта проблема решается на более высоких уровнях.
Управление потоком можно выполнить двумя способами:
- Получать обратную связь от приемника.
- Статически ограничить скорость передачи.
Второй способ реализуют вышележащими уровнями, поэтому здесь будем рассматривать протоколы использующие обратную связь.
Содержание
Stop-and-wait
На каждый полученный кадр получатель отправляет подтверждение (ACK). Отправитель шлет следующий кадр только после получения подтверждения. Если не получаем ACK по тайм-ауту, автоматически отправляем кадр повторно. При повторных отправках кадра возникает проблема с возможными дубликатами: если был потерян ACK, то получателю кадр придет дважды. Поэтому нам нужно добавить информацию, чтобы различать кадры. Т.к. мы не начинаем отправку следующего кадра, пока не будет получен ACK по предыдущему, нам достаточно чтобы 2 последовательных кадра имели разный номер. Для этого нужен всего один бит.
Проблема этого протокола в том, что мы неэффективно используем канал. Всегда занимаемся передачей только одного кадра, во время ожидания ACK ничего не делаем.
Протокол скользящего окна.
Каждый исходящий кадр содержит свой порядковый номер. На этот номер отводится поле размером n бит. Соответственно максимальный размер окна
В каждый момент времени отправитель и получатель работают с кадрами, которые попадают в их окно (посылающее и принимающее). Окна у отправителя и получателя могут быть разных размеров.
Порядковые номера в посылающем окне указывают на отправленные кадры, по которым еще не пришли подтверждения. При отправке кадра сдвигается верхняя граница окна, и окно расширяется.
При получении подтверждения сдвигается нижняя граница и окно сужается. Все кадры попадающие в окно, должны оставаться в буфере у отправителя.
Получатель также работает с принимающим окном, которое указывает, какие кадры в данный момент может принять получатель. Когда приходит кадр с номером соответствующим нижней границе окна - она сдвигается, высылается ACK, кадр выдается сетевому уровню. Кадры не попадающие в окно - удаляются.
Протокол однобитового окна
В случае если на номер отводится 1 бит, протокол скользящего окна соответствует протоколу Stop And Wait.
Протокол с возвратом на N
Конвейерная обработка. При ширине окна w, мы можем послать сразу w кадров. Возможна ошибка при передаче одного из этих w кадров:
- Возврат на N - игнорируем все кадры с номером выше поврежденного
- Выборочный повтор - буферизуем нормальные кадры.
- (a) Высылаем максимальный ACK, ждем что по истечении таймера отправитель не получив ACK вышлет потерянный пакет заново.
- (b) Высылаем NAK - запрос на повторную отправку конкретного пакета
Ссылки
flash демо - наглядный эмулятор sliding window.