6/2Q11 мвВЕСТНИК
К ВОПРОСУ ПЕРЕДАЧИ ДАННЫХ В СИСТЕМАХ АВТОМАТИЗАЦИИ И УПРАВЛЕНИЯ ЗДАНИЯМИ
DATA TRANSFER IN A BUILDING AUTOMATION AND MANAGEMENT SYSTEMS
A.A. Волков, K.C. Кузин, Зинков А.Н., М.И. Разин A.A. Volkov, K.S. Kuzin, A.I. Zinkov, M.I. Razin
ФГБОУ ВПО «МГСУ»
Среди семи уровней, определенных моделью взаимодействия открытых систем именно канальный уровень отвечает за правильность передачи кадра данных, аспекты формирования которого и будут отражены в данной статье.
Open systems interconnection model defines seven levels of hierarchy and exactly data link layer is responsible for the correct framing using methods that will be discussed in this article.
Исследование поддержано Грантом Президента Российской Федерации
МД-2968.2011.8
Сегодня использование современных коммуникационных стандартов и технологий еще не гарантирует того, что процесс коммуникации будет успешным. Организация взаимодействия между устройствами в сети является достаточно сложной, она включает много аспектов, при которых участники процесса коммуникации должны согласовать способ кодирования электрических сигналов, правила определения длины сообщений, применяемые методы контроля достоверности сообщения и т.п. В совокупности, решение таких задач представляет серьезную и трудоемкую проблему.
Для упрощения структуры большинство сетей организуются в наборы уровней
или слоев, каждый последующий из которых возводится над предыдущим. Количество уровней, их названия, содержание и назначение разнятся от сети к сети. Однако во всех сетях целью каждого уровня является предоставление неких сервисов для вышестоящих уровней
Для решения таких задач была разработана модель, которая сыграла значительную роль в развитии сетей. Эта модель называется моделью взаимодействия открытых систем (Open Systems interconnection, OSI). В данной модели были собраны все возможные функции коммуникации и определены семь уровней - прикладной (Application layer); уровень представления (Presentation layer); сеансовый (Session layer); транспортный (Transport layer); сетевой (Network layer); уровень передачи данных (канальный уровень - Data link layer) и физический уровень (Physical layer) - (Рис 1).
При этом физическую часть коммуникации описывал только самый нижний уровень - физический, все остальные содержали такие функции как защита передачи данных, определение маршрута, защита доступа и т.д.
Для дальнейшего понимания сути данной статьи следует дать определения следующим понятиям: сервис, протокол и интерфейс.
Каждый уровень предоставляет некоторые сервисы для расположенного выше уровня. Сервис определяет, что именно делает уровень, но не то, как он это делает и каким образом сущности, расположенные выше, получают доступ к данному уровню.
Протоколом в системах открытого взаимодействия называют формализованный набор правил, определяющий то, как будут взаимодействовать сетевые устройства, находящиеся в разных узлах. Интерфейс уровня определяет способ доступа к уровню для расположенных выше процессов. Он описывает параметры и ожидаемый резуль-
1. Прикладной уровень (Application Layer)
ИнтЕрфейс
Б_ Уровень представлений (Presentation Layer)
S Сеансовыйуровень (Session Layer)
Транспортный урпвень (Transport Laver)
3. Сетевой уровень (Network Layer)
Кака.тьиый уровень (Data'Link Layer)
1_Ф^31*ческий уровень (Phiysicai Layer)
Протокол
7. Прикладной уровень (Application Layer)
J
-j—*
1
1
Б.Уровень представлвнич (Présentation Layer)
-f—Г
5. се в hcöb ы й уров е hb
(Session Layer)
4. Транспортный уровень (Transport Layer)
3. СетЕаой уровень [Network Layer)
2. Канальный уровень (Data Link Layer)
J_ Фие^ческ^й уровень (Physical layer)
Уровень
Рис. 1. Уровни обеспечения модели 0Б1.
Так как целью данной статьи является не отражение принципов работы каждого из уровней, а представление частного случая формирования кадра данных на канальном уровне (уровне передачи данных), то для начала следует отметить, что для предоставления сервиса сетевому уровню уровень передачи данных должен использовать сервисы, предоставляемые ему физическим уровнем. Необработанный поток битов поступает на Физический уровень, и он в свою очередь пытается передать его по назначению. При этом такой поток не застрахован от ошибок. Количество принятых бит может быть меньше, равно или больше числа переданных бит; кроме того, значения принятых битов могут отличаться от значений переданных. В случае если ошибки обнаружены, уровень передачи данных должен исправить их, если это необходимо. Обычно канальный уровень разбивает поток битов на отдельные кадры и считает для
каждого кадра контрольную сумму. Контрольная сумма подсчитывается снова после того как кадр прибывает в пункт назначения, и если она отличается от содержащейся в кадре, то уровень передачи данных понимает, что при передаче кадра произошла ошибка, и принимает меры (например, игнорирует испорченный кадр и посылает передающей машине сообщение об ошибке).
На первый взгляд разбиение потока битов на отдельные кадры представляет собой простую задачу, однако, здесь не все так просто. Существует множество способов разбиения на кадры, один из которых заключается в том, что между кадрами осуществляется вставка временных интервалов, подобно тому, как вставляются пробелы между словами в тексте. Однако сети редко предоставляют гарантии сохранения временных параметров при передаче данных, поэтому возможно, что эти интервалы исчезнут при передаче или, наоборот, будут добавлены новые.
Поэтому, так как такой метод не обеспечивал должной надежности, были разработаны другие методы, которые мы и рассмотрим ниже.
1. Подсчет количества символов.
2. Использование сигнальных байтов с символьным заполнением.
3. Использование стартовых и стоповых битов с битовым заполнением.
4. Использование запрещенных сигналов физического уровня.
Первый метод формирования кадров использует поле в заголовке для указания количества символов в кадре. Когда уровень передачи данных на принимающем компьютере видит это поле, он узнает, сколько символов последует, и таким образом определяет, где находится конец кадра. Этот прием проиллюстрирован на рис. 2 для четырех кадров размером 5, 5, 8 и 8 символов соответственно.
Легчи к сим волов
Один символ
(A! 512 í 4 5 6 7 0 9 8 O i ; 3 4 5 6 3 7 0 ? O12 3
Кадр1 5 символов
-VT7-
Кадр 2 5символов
КидрЗ Б симвй/гов
Кадр4 Б СИМВОЛОВ
Рис. 2. Формирование кадра.
Существенным недостатком такого алгоритма является то, что счетчик может быть искажен при передаче, и тогда если, например размер второго кадра из числа 5 станет из-за ошибки в канале числом 7, как показано на рис. 3, то принимающая машина будет не в состоянии определить начало следующего кадра.
С1ШГЁК5
ЕШ 5 1 | 2 I 3 4 7 | 6 7 В I 3 I a Q 1 | 2 | ? | Л | 5 | t | S 7|аэо|123|
V. ->
Кадр!
Нлдр2 (неправильный)
"ЕПЕрьзтстот.'вал воспринимается как летчик
Рис. 3. Ошибочный кадр данных.
Даже в случае, если контрольная сумма будет неправильной, и принимающая сторона поймет, что принятый кадр неверен, она все равнее не сможет определить начало следующего кадра. Посыл обратного запроса на повторную передачу также не даст результата, поскольку принимающая сторона не будет знать, как много символов должно быть пропущено до начала повторной передачи. По этой причине метод подсчета символов сегодня практически не применяется.
Метод использования сигнальных байтов с символьным заполнением позволяет решить проблему восстановления синхронизации после сбоя при помощи маркировки начала и конца каждого кадра специальными байтами. В прошлом стартовые и стоповые байты отличались друг от друга, но в последние годы большинство протоколов перешло на использование в обоих случаях одного и того же байта, называемого флаговым (FLAG) (см. Рис 4).
FLAG Заголовок Поле данных Концевик FLAG
Рис. 4. Пример кадра, ограниченного флаговыми байтами
В таком случае, если приемник теряет синхронизацию, ему необходимо просто найти флаговый байт, с помощью которого он и распознает конец текущего кадра. Если встречаются два последовательных флаговых байта, то это говорит о том, что один кадр кончился и начался другой.
И сходные символы
FLAG
EEC
ESC
FLAG
ESC
ESC
После заполнения
А
ESC
FLAG
ESC
ESC
ESC
ESC
ESC
FLAG
ESC
ESC
ESC
ESC
Рис. 5. Четыре примера байтовых последовательностей до и после символьного
заполнения
Серьезные проблемы при использовании данного метода возникают, когда передаются бинарные данные, такие как объектные коды программ или числа с плавающей запятой. В передаваемых данных может встретиться последовательность, используемая в качестве флагового байта (FLAG). Возникновение такой ситуации, скорее всего, собьет синхронизацию. Одним из способов решения данной проблемы заключается в добавлении специального escape-байта (ESC) непосредственно перед случайно совпавшим с флаговым байтом внутри кадра данных. Уровень передачи данных при окончании приема кадра данных убирает эти escape-символы, а затем передает кадр на
6/2011
ВЕСТНИК
сетевой уровень. Такой метод называется символьным заполнением. Таким образом, настоящий флаг можно отличить от «подложного» по наличию или отсутствию перед ним escape-байта (ESC).
Логичным также будет вопрос: а что, если escape-байт (ESC) случайно окажется среди других данных? Решение будет таким же: вставить перед этим фиктивным escape-байтом (ESC) настоящий. В таком случае любой одиночный escape-байт (ESC) будет частью escape-последовательности, а двойной escape-байт будет указывать на то, что служебный байт случайно оказался в потоке данных. Пример такой байтовой последовательности изображен на рис. 5. В любом случае, байтовая последовательность после ее очищения от вставных символов в точности совпадает с исходной.
Главным недостатком такого метода является то, что он тесно связан с 8-битными символами. Между тем не во всех кодировках один символ соответствует 8 битам. Например, UNICODE использует 16-битное кодирование. По мере развития сетевых технологий недостатки использования длины символьного кода в механизме формирования кадров становились все очевиднее. На этом фоне был создан новый метод, который позволял использовать кадры и наборы символов, состоящие из любого количества битов. Данный метод реализуется следующим образом: каждый кадр начинается и завершается специальной последовательностью битов - 01111110. При этом указанная последовательность битов представляет собой все тот же флаговый байт. Если в битовом потоке передаваемых данных встретится пять идущих подряд единиц, уровень передачи данных автоматически вставит в выходной поток нулевой бит. Битовое заполнение аналогично символьному, при котором в кадр перед случайно встретившимся среди данных флагом вставляется escape-символ.
Когда принимающая сторона встречает пять единиц подряд, за которыми следует ноль, она автоматически удаляет этот ноль. Битовое заполнение, как и символьное, является абсолютно прозрачным для сетевого уровня обоих компьютеров. Если флаговая последовательность битов (01111110) встречается в данных пользователя, она передается в виде 011111010, но в памяти принимающего компьютера сохраняется опять в исходном виде: 01111110. Пример такого битового заполнения изображен на рисун-
Рис. 6. Пример битового заполнения кадра данных: (А) - исходные данные; (Б) - данные после битового заполнения; (В) - данные после удаления вставленных битов.
Благодаря битовому заполнению границы между двумя кадрами могут быть безошибочно распознаны с помощью флаговой последовательности. При этом если принимающая сторона вдруг потеряет границы кадров, ей нужно всего лишь отыскать в
(А) 011011111111111111110010
(Б) 011011111011111011111010010
Вста вленныебиты
(В) 011011111111111111110010
ВЕСТНИК 6/2011
полученном потоке битов флаговый байт, т.к. он встречается только на границах кадров и никогда — в данных пользователя.
Последний из представленных выше методов метод формирования кадров приемлем только в сетях, в которых физический носитель обладает некоторой избыточностью. Примером могут послужить некоторые локальные сети, которые кодируют один бит данных двумя физическими битами. Обычно бит 1 кодируется парой высокого и низкого уровней сигналов (отрицательный перепад), а бит 0 — наоборот, парой низкого и высокого уровней (положительный перепад). В такой схеме каждый передаваемый бит данных содержит в середине переход, благодаря чему упрощается распознавание границ битов. Комбинации уровней сигналов (низкий—низкий и высокий— высокий) не используются для передачи данных, но используются в качестве ограничителей кадров в некоторых протоколах.
В заключение хочется отметить, что среди протоколов передачи данных многие из них применяют сочетание счетчика символов с другими методами формирования кадра, это делается для того, что надежность приема и передачи потоков данных была выше. При этом для обнаружения конца кадра используется счетчик, который включается в момент поступления кадра. Сам кадр в таком случае воспринимается как правильный только тогда, когда соответствующий разделитель присутствует в нужной позиции и совпадает контрольная сумма. В противном случае сканируется входной поток, в котором ищется следующий разделитель.
Литература:
1. A. Tanenbaum, Computer networks 4th-ed. Prentice-Hall 2003.
2. R.W. Markley, Data communications and interoperability. Prentice-Hall 1990.
3. H. M. Newman, Direct Digital Control of Building Systems: Theory and Practice. New York: Wiley, 1994
4. C. P. Underwood, HVAC Control Systems: Modeling, Analysis and Design. London, U.K.: Routledge, 1999.
5. Intelligent building and building automation. Shengwei Wang. 2010
Literature:
1. A. Tanenbaum, Computer networks 4th-ed. Prentice-Hall 2003.
2. H. M. Newman, Direct Digital Control of Building Systems: Theory and Practice. New York: Wiley, 1994
3. C. P. Underwood, HVAC Control Systems: Modeling, Analysis and Design. London, U.K.: Routledge, 1999.
4. Intelligent building and building automation. Shengwei Wang. 2010
Ключевые слова: Коммуникационные протоколы, интерфейс, сервис, уровни иерархии, канальный уровень, кадрирование данных, флаговый байт.
Keywords: Communication protocols, interface, service, levels of hierarchy, data link layer, data framing, flag byte.
129337, Россия, г. Москва, Ярославское шоссе, д.26; тел. +7 (499) 183-49-06; e-mail: [email protected]
Рецензент: зав. кафедрой «Испытание сооружений», профессор, к.т.н. -Ю.С.Кунин.