High-Level Data Link Control (HDLC) — бит-ориентированный[1] протокол канального уровня сетевой модели OSI, разработанный ISO.

Текущим стандартом для HDLC является ISO 13239.

HDLC может быть использован в соединениях с множественным доступом, но в настоящее время в основном используется в соединениях точка-точка с использованием асинхронного сбалансированного режима (ABM).

История

[править | править код]

HDLC был разработан на основе протокола SDLC[англ.] фирмы IBM. Его несильно изменённые дочерние протоколы — LAPB, LAPM[англ.], LAPF[англ.], LAPD[англ.] были встроены ITU соответственно в стеки протоколов X.25, V.42, Frame Relay, ISDN. Также HDLC был базой при разработке кадровых механизмов в протоколе PPP, широко используемом в Интернете.

Типы станций

[править | править код]

Логические состояния

[править | править код]

Каждая из станций в каждый момент времени находится в одном из 3 логических состояний:

Если вторичная станция находится в режиме нормального разъединения (NDM), то она может принимать кадры только после получения явного разрешения от первичной. Если же в асинхронном режиме разъединения (ADM), то вторичная станция может самовольно инициировать передачу.

Используется для передачи управления на удалённую комбинированную станцию и для обмена параметрами между удалёнными станциями.

Всем станциям разрешено вести передачу и принимать информацию. Станции могут находиться в режимах NRM, ARM, ABM.

Режимы состояния передачи

[править | править код]

HDLC поддерживает три режима логического соединения, различающиеся ролями взаимодействующих устройств:

Конфигурации канала

[править | править код]

Для обеспечения совместимости между станциями, которые могут менять свой статус (тип), в протоколе HDLC предусмотрены 3 конфигурации канала:

Кадры

[править | править код]

Кадры HDLC можно передавать, используя синхронные и асинхронные соединения. В самих соединениях нет механизмов определения начала и конца кадра, для этих целей используется уникальная в пределах протокола битовая последовательность (FD — Frame Delimiter) '01111110' (0x7E в шестнадцатеричном представлении), помещаемая в начало и конец каждого кадра. Уникальность флага гарантируется использованием битстаффинга в синхронных соединениях и байтстаффинга в асинхронных. Битстаффинг — вставка битов, здесь — бита 0 после 5 подряд идущих битов 1. Битстаффинг работает только во время передачи информационного поля (поля данных) кадра. Если передатчик обнаруживает, что передано подряд пять единиц, то он автоматически вставляет дополнительный ноль в последовательность передаваемых битов (даже если после этих пяти единиц и так идёт ноль). Поэтому последовательность 01111110 никогда не появится в поле данных кадра. Аналогичная схема работает в приёмнике и выполняет обратную функцию. Когда после пяти единиц обнаруживается ноль, он автоматически удаляется из поля данных кадра. В байтстаффинге используется escape-последовательность, здесь — '01111101' (0x7D в шестнадцатеричном представлении), то есть байт FD (0x7E) в середине кадра заменяется последовательностью байтов (0x7D, 0x5E), а байт (0x7D) — последовательностью байтов (0x7D, 0x5D).

Во время простоя среды передачи при синхронном соединении последовательность 0x7E ('01111110') постоянно передаётся по каналу для поддержания битовой синхронизации. Может иметь место совмещение последнего бита 0 одного флага и начального бита 0 следующего. Время простоя также называется межкадровым временны́м заполнением.

Структура кадров

[править | править код]

Структура кадра HDLC, включая флаги FD:

Флаг FD Адрес Управляющее поле Информационное поле FCS Флаг FD
8 бит кратно 8 битам 8 или 16 бит 0 или более бит, кратно 8 16 бит 8 бит

Типы кадров

[править | править код]

I-кадры (информационные кадры, кадры данных)

[править | править код]

Предназначены для передачи данных пользователя. В процессе передачи информационных блоков осуществляется их нумерация в соответствии с алгоритмом скользящего окна. После установления соединения данные и положительные квитанции начинают передаваться в информационных кадрах. Логический канал HDLC является дуплексным, так что информационные кадры, а значит, и положительные квитанции могут передаваться в обоих направлениях. Если же потока информационных кадров в обратном направлении нет или же нужно передать отрицательную квитанцию, то используются управляющие кадры. При работе HDLC для обеспечения надёжности передачи используется скользящее окно размером в 7 кадров (при размере управляющего поля 1 байт) или 127 (при размере управляющего поля 2 байта). Для поддержания алгоритма окна в информационных кадрах станции-отправителя отводится 2 поля:

Предположим для определённости, что станция A отправила станции B информационный кадр с некоторыми значениями NA(S) и NA(R). Если в ответ на этот кадр приходит кадр от станции B, в котором номер посланного этой станцией кадра NB(S) совпадает с номером ожидаемого станцией A кадра NA(R), то передача считается корректной. Если станция A принимает кадр-ответ, в котором номер отправленного кадра NB(S) не равен номеру ожидаемого NA(R), то станция A этот кадр отбрасывает и посылает отрицательную квитанцию REJ (от англ. reject — отказ) с номером NA(R). Приняв отрицательную квитанцию, станция B обязана повторить передачу кадра с номером NA(R), а также всех кадров с бо́льшими номерами, которые она уже успела отослать, пользуясь механизмом скользящего окна.

I-кадры также содержат бит опрос/ответ P/F (poll/final). В режиме NRM ведущий терминал использует бит P для опроса, ведомый — бит F в последнем I-кадре ответа. В режимах ARM и ABM биты P/F используются для форсирования ответа.

Команда/

Ответ

Описание Формат упр. поля

8…7…6…5…4…3…2…1….

C/R Данные пользователя .-N(R)-… P/F….-N(S)-..0

S-кадры (управляющие)

[править | править код]

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

Готов к приёму (RR)

Не готов к приёму (RNR)

Неприём (REJ)

Выборочный неприём (SREJ)

Имя Команда/

Ответ

Описание Info Формат упр. поля

8…7…6…5…4…3…2…1….

Готов к приёму (RR) C/R Положительная квитанция Готов к приёму I-кадра .-N(R)-… P/F…0…0…0…1
Не готов к приёму (RNR) C/R Положительная квитанция Не готов к приёму .-N(R)-… P/F…0…1…0…1
Неприём (REJ) C/R Отрицательная квитанция Повтор N кадров .-N(R)-… P/F…1…0…1…0
Выборочный неприём (SREJ) C/R Отрицательная квитанция Повтор 1 кадра .-N(R)-… P/F…1…1…0…1

U-кадры (ненумерованные)

[править | править код]

U-кадры определяются по двум младшим битам, установленным в 1. Таким образом, вместе с флагом P/F это оставляет 5 бит для типа кадра. Так как используется менее 32 значений, некоторые типы кадров имеют разный смысл в зависимости от способа отправки: как запрос или как ответ. Так, понятна связь между командой DISC (disconnect) и ответом RD (request disconnect), но причины, по которым команда SARM и ответ DM имеют одно цифровое значение, непонятны[кому?].

U-кадры предназначены для установления и разрыва логического соединения, а также информирования об ошибках.

Поле M ненумерованных кадров содержит коды, определяющие тип команд, которыми пользуются два узла на этапе установления соединения (например, SABME, UA, REST).

Имя Команда/

Ответ

Описание Info Формат упр. поля

8…7…6…5…4…3…2…1….

Установить режим нормального ответа SNRM C Установить режим ..1…0…0…P…1…1…0…1
Установить расширенный режим нормального ответа SNRME C Установить режим ..1…1…0…P…1…1…1…1
Установить режим асинхронного ответа SARM C Установить режим ..0…0…0..P/F..1…1…0…1
Установить расширенный режим асинхронного ответа SARME C Установить режим ..0…1…0…P..1…1…1…1
Установить асинхронный сбалансированный режим SABM C Установить режим ..0…0…1..P/F..1…1…1…1
Установить расширенный асинхронный сбалансированный режим SABME C Установить режим ..0…1…1…P…1…1…1…1
Установить режим инициализации SIM C Инициировать функцию контроля за линией в адресуемой станции ..0…0…0..P/F..0…1…1…1
Разрыв соединения DISC C Разорвать логическое соединение ..0…1…0..P/F..0…0…1…1
Ненумерованное подтверждение UA R Подтверждение приёма одной из команд установки режимов ..0…1…0….F..0…0…1…1
Режим разъединения DM R Индикация режима лог. разъединения
Запрос разъединения RD R Ответ на команду DISC ..0…1…0..P/F..0…0…1…1
Запрос инициализации RIM R Необходима инициализация Запрос команды SIM
Ненумерованная информация UI C/R Используется для обмена информацией управления ..0…0…0..P/F..0…0…1…1
Ненумерованный опрос UP C Используется для запроса управляющей информации ..0…0…1..P….0…0…1…1
Перезапуск счётчиков RSET C Исп. для восстановления Обнуляет N(R), N(S) ..1…0…0..P….1…1…1…1
Обмен статусом XID C/R Исп. для запроса / передачи статуса ..1…0…1..P/F..1…1…1…1
Тест TEST C/R Обмен идентичными инф. полями для теста ..1…1…1..P/F..0…0…1…1
Неприём кадра FRMR C/R Извещение о неверном кадре

Кадры UI, XID, TEST содержат полезные данные и могут быть использованы как в качестве команд, так и в качестве ответов.

См. также

[править | править код]

Примечания

[править | править код]
  1. Отличие bit-oriented от byte-oriented протоколов. Дата обращения: 13 июня 2011. Архивировано 9 октября 2018 года.

Литература

[править | править код]

Ссылки

[править | править код]