Data link layer - Flow control — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Протокол скользящего окна.)
Строка 1: Строка 1:
 
Управление потоком передачи даных выполняется  [[Data link layer - LLC | LLC]] подуровнем.  
 
Управление потоком передачи даных выполняется  [[Data link layer - LLC | LLC]] подуровнем.  
  
Управление потоком позволяет получателю контролировать скорость передачи данных, чтобы предотвратить чрезмерную загрузку в случае более быстрого отправителя.  
+
Управление потоком позволяет получателю контролировать скорость передачи данных, чтобы предотвратить чрезмерную загрузку в случае более быстрого отправителя. Канальный уровень не отвечает за само переполнение, эта проблема решается на более высоких уровнях.  
Канальный уровень не отвечает за само переполнение, эта проблема решается на более высоких уровнях.  
 
  
LLC подуровень предоставляет сетевому уровню различные сервисы:  
+
Управление потоком можно выполнить двумя способами:  
===== Connectionless Unacknowledged Service =====
+
* Получать обратную связь от приемника.
''Сервис без подтверждений, без установки соединения.''
+
* Статически ограничить скорость передачи.  
+
Второй способ реализуют вышележащими уровнями, поэтому здесь будем рассматривать протоколы использующие обратную связь.  
В этом случае мы просто шлём независимые кадры, полагаясь, что упорядочивание данных будет выполнено протоколами более высокого уровня (TCP/IP).
 
  
===== Connectionless Acknowledged Service =====
+
==Stop-and-wait==
''Сервис с подтверждениями, без установки соединения.''
+
На каждый полученный кадр получатель отправляет подтверждение (ACK).  
 
 
Stop-and-wait: на каждый полученный кадр получатель отправляет подтверждение (ACK).  
 
 
Отправитель шлет следующий кадр только после получения подтверждения.  
 
Отправитель шлет следующий кадр только после получения подтверждения.  
 
Если не получаем ACK по тайм-ауту, автоматически отправляем кадр повторно.
 
Если не получаем ACK по тайм-ауту, автоматически отправляем кадр повторно.
Строка 22: Строка 18:
 
==Протокол скользящего окна. ==
 
==Протокол скользящего окна. ==
 
Каждый исходящий кадр содержит свой порядковый номер.  
 
Каждый исходящий кадр содержит свой порядковый номер.  
На этот номер отводится поле размером ''n'' бит.  
+
На этот номер отводится поле размером ''n'' бит. Соответственно максимальный размер окна <math>2^n</math>
 +
 
 +
В каждый момент времени отправитель и получатель работают с кадрами, которые попадают в их  окно. (посылающее и принимающее) Окна у отправителя и получателя могут быть разных размеров. [[Файл:Sliding-window-1.jpg|right|thumb]]
  
В каждый момент времени отправитель и получатель работают с кадрами, которые попадают в их  окно. [[Файл:Sliding-window-1.jpg|right|thumb]]
 
  
 
Порядковые номера в посылающем окне указывают на отправленные кадры, по которым еще не пришли подтверждения. При отправке сдвигается верхняя граница окна, при получении подтверждения - нижняя. Все кадры попадающие в окно, должны оставаться в памяти у отправителя.  
 
Порядковые номера в посылающем окне указывают на отправленные кадры, по которым еще не пришли подтверждения. При отправке сдвигается верхняя граница окна, при получении подтверждения - нижняя. Все кадры попадающие в окно, должны оставаться в памяти у отправителя.  

Версия 21:03, 9 декабря 2016

Управление потоком передачи даных выполняется LLC подуровнем.

Управление потоком позволяет получателю контролировать скорость передачи данных, чтобы предотвратить чрезмерную загрузку в случае более быстрого отправителя. Канальный уровень не отвечает за само переполнение, эта проблема решается на более высоких уровнях.

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

  • Получать обратную связь от приемника.
  • Статически ограничить скорость передачи.

Второй способ реализуют вышележащими уровнями, поэтому здесь будем рассматривать протоколы использующие обратную связь.

Stop-and-wait

На каждый полученный кадр получатель отправляет подтверждение (ACK). Отправитель шлет следующий кадр только после получения подтверждения. Если не получаем ACK по тайм-ауту, автоматически отправляем кадр повторно. При повторных отправках кадра возникает проблема с дубликатами. Если был потерян ACK, то получателю кадр придет дважды. Поэтому нам нужно добавить информацию, чтобы различать кадры. Т.к. мы не начинаем отправку следующего кадра, пока не будет получен ACK по предыдущему, нам достаточно одного бита для нумерации кадров.

Проблема этого протокола в том, что мы неэффективно используем канал. Всегда занимаемся передачей только одного кадра, во время ожидания ACK ничего не делаем.

Протокол скользящего окна.

Каждый исходящий кадр содержит свой порядковый номер. На этот номер отводится поле размером n бит. Соответственно максимальный размер окна [math]2^n[/math]

В каждый момент времени отправитель и получатель работают с кадрами, которые попадают в их окно. (посылающее и принимающее) Окна у отправителя и получателя могут быть разных размеров.
Sliding-window-1.jpg


Порядковые номера в посылающем окне указывают на отправленные кадры, по которым еще не пришли подтверждения. При отправке сдвигается верхняя граница окна, при получении подтверждения - нижняя. Все кадры попадающие в окно, должны оставаться в памяти у отправителя.


Получатель также работает с принимающим окном, которое указывает, какие кадры в данный момент может принять получатель. Когда приходит кадр с номером соответствующим нижней границе окна - она сдвигается, кадр выдается сетевому уровню. Кадры не попадающие в окно - удаляются.