3.1.2. Формирование кадра
Для обслуживания сетевого уровня канальный уровень должен использовать сервисы, предоставляемые ему физическим уровнем. Физический уровень принимает необработанный поток битов и пытается передать его по назначению. Если канал зашумлен, как обычно бывает с беспроводными и большинством проводных соединений, то на физическом уровне добавляются избыточные сигналы, чтобы снизить количество ошибок до допустимого уровня. Однако поток битов, получаемый на уровне передачи данных, не застрахован от ошибок. У некоторых битов могут быть другие значения, количество принятых бит может быть меньше, равно или больше числа переданных бит. Канальный уровень должен обнаружить ошибки и, если нужно, исправить их.
Обычно канальный уровень разбивает поток битов на отдельные кадры и вычисляет для каждого кадра короткий маркер, называемый контрольной суммой. Контрольная сумма добавляется в кадр перед тем, как он пересылается дальше. (Алгоритмы подсчета контрольных сумм будут обсуждаться ниже в этой главе.) Когда кадр прибывает в пункт назначения, его контрольная сумма подсчитывается снова. Если она отличается от содержащейся в кадре, то канальный уровень понимает, что при передаче кадра произошла ошибка, и принимает меры (например, игнорирует испорченный кадр и посылает передающей машине сообщение об ошибке).
Разбиение потока битов на отдельные кадры представляет собой более сложную задачу, чем это может показаться на первый взгляд. В хорошей системе приемник с легкостью находит отметки начала новых кадров, минимально нагружая полосу пропускания. Мы рассмотрим четыре метода маркировки границ кадров.
1. Подсчет количества байтов.
2. Использование сигнальных байтов с символьным заполнением.
3. Использование сигнальных битов с битовым заполнением.
4. Использование запрещенных сигналов физического уровня.
Первый метод формирования кадров использует поле в заголовке для указания количества байтов в кадре. Когда канальный уровень на принимающем компьютере видит это поле, он узнает, сколько байтов последует, и таким образом определяет, где находится конец кадра. Этот прием проиллюстрирован на рис. 3.3, а для четырех небольших кадров размером 5, 5, 8 и 8 байтов соответственно.
Недостаток такой системы в том, что при передаче может быть искажен сам счетчик. Например, если размер второго кадра из числа 5 станет из-за ошибки в единственном бите числом 7, как показано на рис. 3.3, б, то принимающая машина потеряет синхронизацию и не сможет правильно обнаружить начало следующего кадра. Даже если контрольная сумма не совпадет (скорее всего) и принимающий компьютер поймет, что кадр принят неверно, то он все равно не сможет определить, где начало следующего кадра. Запрашивать повторную передачу кадра также бесполезно, поскольку принимающий компьютер не знает, сколько байтов нужно пропустить до начала повторной передачи. По этой причине метод подсчета байтов отдельно от других теперь практически не применяется.
Второй метод формирования кадров решает проблему восстановления синхронизации после сбоя при помощи маркировки начала и конца каждого кадра специальными байтами. Зачастую в качестве разделителя используется один и тот же байт, называемый флаговым. Он устанавливается в начале и в конце кадра. Этот байт помечен на рис. 3.4, а как FLAG. Два соседних флаговых байта говорят о том, что кончился один кадр и начался другой. Таким образом, если приемник теряет синхронизацию, ему необходимо просто найти два флаговых байта, с помощью которых он распознает конец текущего кадра и начало следующего.

Рис. 3.3.Поток байтов: а — без ошибок; б — с одной ошибкой
Однако одна проблема все же остается. В передаваемых данных, особенно если это двоичные данные, такие как фотографии или музыка, запросто может встретиться последовательность, используемая в качестве флагового байта. Возникновение такой ситуации, скорее всего, собьет синхронизацию. Одним из способов решения проблемы является добавление специального escape-символа (знака переключения кода, ESC) непосредственно перед случайно совпавшим флаговым байтом внутри кадра. Таким образом, настоящий флаг можно отличить от «подложного» по наличию или отсутствию перед ним ESC. Канальный уровень получателя вначале убирает эти escape-символы, затем передает кадр на сетевой уровень. Такой метод называется символьным заполнением( byte stuffing).
Читать дальше
Конец ознакомительного отрывка
Купить книгу