Организация канального уровня
Важнейшими задачами, решаемыми канальным уровнем модели сетевого взаимодействия (иногда этот уровень называют уровнем передачи данных), являются задачи предоставления определенных сервисов сетевому уровню. Основным сервисом является передача данных от сетевого уровня передающей вычислительной машины сетевому уровню принимающей машины. На передающей машине работает процесс, который передает биты с сетевого уровня на канальный уровень для передачи их по назначению. Работа канального уровня заключается в передаче этих битов на принимающую машину так, чтобы они могли быть переданы сетевому уровню принимающей машины. Физически данные передаются по реальным каналам передачи, как схематично показано на рис. 8.1.а. Однако посредством протоколов канального уровня виртуальный путь передачи данных связывает канальные уровни передающей и принимающей вычислительной машины (рис. 8.1.б).
|
Рис. 8.1. Пути передачи данных: а – виртуальный; б – фактический
Протоколы канального уровня описывают, каким образом логические биты или символы, передаваемые физическим уровнем, объединяются в более крупные единицы – кадры. Обобщенная структура кадра показана на рис. 8.2. В общем случае, каждый кадр содержит заголовок, поле данных и трейлер (или так называемый «концевик»). Управление кадрами – одна их главнейших функций работы канального уровня.
Кадр
Заголовок канального уровня | Поле данных сетевого уровня | Трейлер канального уровня |
Рис. 8.2. Обобщенная структура кадра протокола канального уровня
Канальный уровень может предоставлять различные сервисы и их набор может быть разным для разных систем. Обычно рассматриваются следующие возможные варианты:
1) сервис без подтверждений приема кадров и без установления соединения;
2) сервис с подтверждениями приема кадров и без установления соединения;
3) сервис с подтверждениями приема кадров и с установлением соединения.
Сервис без подтверждений приема кадров и без установления соединения заключается в том, что передающая машина посылает независимые кадры принимающей машине, а принимающая машина не посылает подтверждений о приеме кадров. Никакие соединения заранее не устанавливаются и не разрываются после передачи кадров. Если какой-либо кадр теряется из-за помех в линии связи, то на канальном уровне не предпринимается никаких попыток восстановить его. Данный класс сервисов приемлем при очень низком уровне ошибок. В этом случае вопросы, связанные с восстановлением потерянных при передаче данных, могут быть переданы для решения верхним уровням. Этот класс сервисов также применяется в линиях связи реального времени (например, при передаче речи), в которых явно предпочтительнее получить искаженные данные, чем получить их с большой задержкой. Сервис без подтверждений и без установления соединения используется на канальном уровне в большинстве локальных сетей.
Следующим шагом в сторону повышения надежности является сервис с подтверждениями приема кадров, но без установления соединения. При его использовании соединение не устанавливается, но получение каждого кадра подтверждается. Таким образом, отправитель знает, дошел ли кадр до пункта назначения в целостности. Если в течение установленного интервала времени подтверждения не поступает, кадр посылается вновь. Такой сервис применяется в случае низкокачественных дешевых линий связи с большой вероятностью ошибок, например, в беспроводных системах.
Наиболее сложным сервисом, который может предоставлять канальный уровень, является сервис, ориентированный на установление соединения с подтверждениями приема кадров. При использовании этого метода источник и приемник, прежде чем передать друг другу данные, устанавливают соединение. Каждый посылаемый кадр нумеруется, а канальный уровень гарантирует, что каждый посланный кадр действительно принят на другой стороне линии связи. Кроме того, гарантируется, что каждый кадр был принят всего один раз и что все кадры были получены в правильном порядке. В сервисе без установления соединения, напротив, возможно, что при потере подтверждения один и тот же кадр будет послан несколько раз и, следовательно, несколько раз получен. При использовании ориентированного на соединение сервиса передача данных состоит из трех фаз. В первой фазе устанавливается соединение, при этом обе стороны инициализируют переменные и счетчики, необходимые для слежения за тем, какие кадры уже приняты, а какие – еще нет. Во второй фазе передаются кадры данных. Наконец, в третьей фазе соединение разрывается и при этом освобождаются все переменные, буферы и прочие ресурсы, использовавшиеся во время соединения.
Для предоставления сервиса сетевому уровню канальный уровень должен использовать сервисы, предоставляемые ему физическим уровнем. Физический уровень принимает необработанный поток битов и пытается передать его по назначению. Этот поток не застрахован от ошибок. Количество принятых битов может быть меньше, равно или больше числа переданных бит. Кроме того, значения принятых битов могут отличаться от значений переданных. Канальный уровень должен обнаружить ошибки и, если нужно, исправить их.
Обычно канальный уровень разбивает поток битов на отдельные кадры и считает для каждого кадра так называемую контрольную сумму. Когда кадр прибывает в пункт назначения, его контрольная сумма подсчитывается снова. Если она отличается от содержащейся в кадре, то канальный уровень «понимает», что при передаче кадра произошла ошибка, и принимает соответствующие меры (например, игнорирует испорченный кадр и посылает передающей машине сообщение об ошибке). Разбиение потока битов на отдельные кадры представляет собой не очень простую задачу. Один из способов разбиения на кадры заключается во вставке временных интервалов между кадрами, подобно тому, как вставляются пробелы между словами в тексте. Однако сети редко предоставляют гарантии сохранения временных интервалов при передаче данных, поэтому возможно, что эти интервалы при передаче исчезнут или, наоборот, будут добавлены новые интервалы. Поэтому для повышения надежности передачи данных предложены более совершенные методы. Среди них наиболее популярны такие методы маркировки границ кадров (формирования кадров), как:
1) подсчет количества символов;
2) применение сигнальных байтов с символьным заполнением;
3) использование стартовых и стоповых битов с битовым заполнением;
4) использование запрещенных сигналов физического уровня.
Первый метод формирования кадров использует поле в заголовке для указания количества символов в кадре. Когда канальный уровень на принимающей машине видит это поле, он узнает, сколько символов последует, и таким образом определяет, где находится конец кадра. Недостаток такого метода заключается в том, что при передаче может быть искажен сам счетчик. Тогда принимающая машина потеряет синхронизацию и не сможет обнаружить начало следующего кадра. Даже если контрольная сумма не совпадет и принимающая машина «поймет», что кадр принят неверно, то она все равно не сможет определить, где начало следующего кадра. Запрашивать повторную передачу кадра также бесполезно, поскольку принимающая машина не «знает», сколько символов нужно пропустить до начала повторной передачи. По этой причине метод подсчета символов теперь практически не применяется.
Второй метод формирования кадров решает проблему восстановления синхронизации после сбоя при помощи маркировки начала и конца каждого кадра специальными байтами. В последнее время большинство протоколов перешло на использование в обоих случаях одного и того же байта, называемого флаговым. Таким образом, если приемник теряет синхронизацию, ему необходимо просто найти флаговый байт, с помощью которого он распознает конец текущего кадра. Два соседних флаговых байта говорят о том, что кончился один кадр и начался другой. Однако этот метод иногда приводит к серьезным проблемам при передачи бинарных данных, таких как объектные коды программ или числа с плавающей запятой. В передаваемых данных вполне может встретиться последовательность, используемая в качестве флагового байта. Возникновение такой ситуации, скорее всего, собьет синхронизацию. Одним из способов решения проблемы является добавление специального escape-символа (знака переключения кода – ESC) непосредственно перед байтом, случайно совпавшим с флаговым байтом внутри кадра. Канальный уровень получателя вначале убирает эти escape-символы, затем передает кадр на сетевой уровень. Этот метод называется символьным заполнением. Таким образом, настоящий флаг можно отличить от «случайно совпавшего» по наличию или отсутствию перед ним символа ESC. Если же и символ ESC случайно окажется среди прочих данных, то перед этим фиктивным escape-символом также вставляется настоящий. Тогда любой одиночный ESC будет частью escape-последовательности, а двойной будет указывать на то, что служебный байт случайно оказался в потоке данных. После очищения от вставных символов байтовая последовательности в точности совпадает с исходной. Главный недостаток этого метода заключается в том, что он тесно связан с 8-битными символами. Между тем не во всех кодировках один символ соответствует 8 битам. Например, кодировка UNICODE использует 16-битное кодирование.
Следующий метод позволяет использовать кадры и наборы символов, состоящие из любого количества битов. При этом каждый кадр начинается и завершается специальной последовательностью битов 01111110. Битовое заполнение аналогично символьному, при котором в кадр перед случайно встретившимся среди данных флагом вставляется escape-символ. Битовое заполнение, как и символьное, является абсолютно прозрачным для сетевого уровня обеих машин. Если флаговая последовательность битов (01111110) встречается в данных пользователя, она передается в виде 011111010, но в памяти принимающего компьютера сохраняется опять в исходном виде: 01111110. Благодаря битовому заполнению границы между двумя кадрами могут быть безошибочно распознаны с помощью флаговой последовательности. Таким образом, если приемная сторона потеряет границы кадров, ей нужно всего лишь отыскать в полученном потоке битов флаговый байт, поскольку он встречается только на границах кадров и не может присутствовать в данных пользователя.
Наконец, последний из рассматриваемых методов формирования кадров приемлем только в сетях, в которых физический носитель обладает некоторой избыточностью. Например, некоторые локальные сети кодируют один бит данных двумя физическими битами. Так в «манчестерском» коде бит 1 кодируется парой высокого и низкого уровней сигналов (отрицательный перепад), а бит 0 – наоборот, парой низкого и высокого уровней (положительный перепад). В такой схеме каждый передаваемый бит данных содержит в середине переход, благодаря чему упрощается распознавание границ битов. Комбинации уровней сигналов (низкий–низкий и высокий–высокий) не используются для передачи данных, но используются в качестве ограничителей кадров в некоторых протоколах.
Отметим, что многие современные протоколы передачи данных для повышения надежности применяют комбинированные методы формирования кадра.
Канальный уровень должен выполнять ряд специфических функций, к которым относятся обработка ошибок передачи данных и управление потоком данных, исключающее «затопление» медленных приемников быстрыми передатчиками.
Серьезной проблемой является гарантированная доставка сетевому уровню принимающей машины всех кадров с расположением их при этом в правильном порядке. Обычно для гарантирования надежной доставки поставщику посылается информация о том, что происходит на другом конце линии. Протокол требует от получателя посылать обратно специальные управляющие кадры, содержащие позитивные или негативные сообщения о полученных кадрах. Получив позитивное сообщение, отправитель узнает, что посланный им кадр успешно получен на другом конце линии. Негативное сообщение, напротив, означает, что с кадром что-то случилось и его нужно передать снова. Кроме того, посланный кадр может из-за неисправности оборудования или какой-нибудь помехи пропасть полностью. В этом случае принимающая сторона его просто не получит и, соответственно, никак не прореагирует, а отправитель при этом может бесконечно долго ожидать положительного или отрицательного ответа. Чтобы избежать зависаний сети в случае полной потери кадров, используются таймеры канального уровня. После посылки кадра включается таймер и отсчитывает интервал времени, достаточный для получения принимающей машиной этого кадра, его обработки и посылки обратно подтверждения. В нормальной ситуации кадр правильно принимается, а подтверждение посылается назад и вручается отправителю, прежде чем истечет установленный интервал времени, и только после этого таймер отключается. Однако если либо кадр, либо подтверждение теряется по пути, то установленный интервал времени истечет, и отправитель получит сообщение о возможной проблеме. Самым простым решением для отправителя будет послать кадр еще раз. Однако при этом возникает опасность получения одного и того же кадра несколько раз канальным уровнем принимающей машины и повторной передачи его сетевому уровню. Чтобы этого не случилось, необходимо последовательно пронумеровать отсылаемые кадры, так чтобы получатель мог отличить повторно переданные кадры от оригиналов. Вопрос управления таймерами и порядковыми номерами, гарантирующими, что каждый кадр доставлен сетевому уровню принимающей машины ровно один раз, является очень важной задачей, решаемой канальным уровнем.
Еще один важный аспект разработки канального уровня (а также более высоких уровней) связан с вопросом о том, что делать с отправителем, который постоянно желает передавать кадры быстрее, чем получатель способен их получать. Такая ситуация может возникнуть, если у передающей стороны оказывается более мощная (или менее загруженная) машина, чем у принимающей. При этом отправитель будет продолжает посылать кадры на высокой скорости до тех пор, пока получатель не окажется, как говорят, «затоплен» ими. Даже при идеально работающей линии связи в определенный момент времени получатель просто не сможет продолжать обработку прибывающих кадров и начнет их терять. Для предотвращения подобной ситуации чаще всего применяются два подхода. При первом, называющемся управлением потоком с обратной связью, получатель отсылает отправителю информацию, разрешающую последнему продолжить передачу или, по крайней мере, сообщающую о том, как идут дела у получателя. При втором подходе – управлении потоком с ограничением – в протокол встраивается механизм, ограничивающий скорость, с которой передатчики могут передавать данные, а обратная связь с получателем отсутствует. Известны различные схемы управления потоком с обратной связью, но большинство из них используют один и тот же принцип. Протокол содержит четко определенные правила, определяющие, когда отправитель может посылать следующий кадр. Эти правила часто запрещают пересылку кадра до тех пор, пока получатель не даст разрешения (явно либо неявно).
Дата добавления: 2015-12-17; просмотров: 2620;