Э. Таненбаум, Д. Уэзеролл - Компьютерные сети (1114668), страница 64
Текст из файла (страница 64)
Кроме того, гарантируется, что каждый кадр был принят всего один раз и что все кадры были получены в правильном порядке. Таким образом,ориентированный на соединение сервис предоставляет процессам сетевого уровняэквивалент надежного потока битов. Он подходит для длинных ненадежных связей,таких как спутниковый канал или междугородное телефонное соединение.
В службебез установления соединения возможно, что при потере подтверждения один и тот жекадр будет послан несколько раз и, следовательно, несколько раз получен. Это лишняянагрузка на канал и неразумное расходование полосы пропускания.При использовании ориентированного на соединение сервиса передача данныхсостоит из трех различных фаз. В первой фазе устанавливается соединение, при этомобе стороны инициализируют переменные и счетчики, необходимые для слежения затем, какие кадры уже приняты, а какие — еще нет.
Во второй фазе передаются кадрыданных. Наконец, в третьей фазе соединение разрывается, и при этом освобождаютсявсе переменные, буферы и прочие ресурсы, использовавшиеся во время соединения.3.1.2. Формирование кадраДля обслуживания сетевого уровня канальный уровень должен использовать сервисы, предоставляемые ему физическим уровнем. Физический уровень принимаетнеобработанный поток битов и пытается передать его по назначению. Если каналзашумлен, как обычно бывает с беспроводными и большинством проводных соединений, то на физическом уровне добавляются избыточные сигналы, чтобы снизить220 Глава 3.
Канальный уровеньколичество ошибок до допустимого уровня. Однако поток битов, получаемый науровне передачи данных, не застрахован от ошибок. У некоторых битов могут бытьдругие значения, количество принятых бит может быть меньше, равно или большечисла переданных бит. Канальный уровень должен обнаружить ошибки и, если нужно,исправить их.Обычно канальный уровень разбивает поток битов на отдельные кадры и вычисляет для каждого кадра короткий маркер, называемый контрольной суммой.
Контрольная сумма добавляется в кадр перед тем, как он пересылается дальше. (Алгоритмыподсчета контрольных сумм будут обсуждаться ниже в этой главе.) Когда кадр прибывает в пункт назначения, его контрольная сумма подсчитывается снова. Если онаотличается от содержащейся в кадре, то канальный уровень понимает, что при передаче кадра произошла ошибка, и принимает меры (например, игнорирует испорченныйкадр и посылает передающей машине сообщение об ошибке).Разбиение потока битов на отдельные кадры представляет собой более сложнуюзадачу, чем это может показаться на первый взгляд.
В хорошей системе приемник слегкостью находит отметки начала новых кадров, минимально нагружая полосу пропускания. Мы рассмотрим четыре метода маркировки границ кадров.1. Подсчет количества байтов.2. Использование сигнальных байтов с символьным заполнением.3. Использование сигнальных битов с битовым заполнением.4. Использование запрещенных сигналов физического уровня.Первый метод формирования кадров использует поле в заголовке для указанияколичества байтов в кадре. Когда канальный уровень на принимающем компьютеревидит это поле, он узнает, сколько байтов последует, и таким образом определяет, гденаходится конец кадра. Этот прием проиллюстрирован на рис. 3.3, а для четырех небольших кадров размером 5, 5, 8 и 8 байтов соответственно.Недостаток такой системы в том, что при передаче может быть искажен сам счетчик.
Например, если размер второго кадра из числа 5 станет из-за ошибки в единственном бите числом 7, как показано на рис. 3.3, б, то принимающая машина потеряетсинхронизацию и не сможет правильно обнаружить начало следующего кадра. Дажеесли контрольная сумма не совпадет (скорее всего) и принимающий компьютер поймет, что кадр принят неверно, то он все равно не сможет определить, где начало следующего кадра. Запрашивать повторную передачу кадра также бесполезно, посколькупринимающий компьютер не знает, сколько байтов нужно пропустить до начала повторной передачи. По этой причине метод подсчета байтов отдельно от других теперьпрактически не применяется.Второй метод формирования кадров решает проблему восстановления синхронизации после сбоя при помощи маркировки начала и конца каждого кадра специальнымибайтами.
Зачастую в качестве разделителя используется один и тот же байт, называемый флаговым. Он устанавливается в начале и в конце кадра. Этот байт помечен нарис. 3.4, а как FLAG. Два соседних флаговых байта говорят о том, что кончился одинкадр и начался другой. Таким образом, если приемник теряет синхронизацию, ему необходимо просто найти два флаговых байта, с помощью которых он распознает конецтекущего кадра и начало следующего.3.1. Ключевые аспекты организации канального уровня 221Рис.
3.3. Поток байтов: а — без ошибок; б — с одной ошибкойОднако одна проблема все же остается. В передаваемых данных, особенно еслиэто двоичные данные, такие как фотографии или музыка, запросто может встретиться последовательность, используемая в качестве флагового байта. Возникновениетакой ситуации, скорее всего, собьет синхронизацию.
Одним из способов решенияпроблемы является добавление специального escape-символа (знака переключениякода, ESC) непосредственно перед случайно совпавшим флаговым байтом внутрикадра. Таким образом, настоящий флаг можно отличить от «подложного» по наличиюили отсутствию перед ним ESC. Канальный уровень получателя вначале убирает этиescape-символы, затем передает кадр на сетевой уровень.
Такой метод называетсясимвольным заполнением (byte stuffing).Следующий логичный вопрос: а что если и символ ESC случайно окажется средипрочих данных? Решение такое же: вставить перед этим фиктивным escape-символомнастоящий. На стороне получателя первый символ ESC будет удален, а следующийбайт данных останется, даже если это еще один байт ESC или флаговый байт. Некоторые примеры показаны на рис. 3.4, б. В любом случае, байтовая последовательностьпосле ее очищения от вставных символов в точности совпадает с исходной. Найтиграницу кадра можно все так же по двум последовательным флаговым байтам до удаления дополнительных символов ESC.Схема символьного заполнения, показанная на рис. 3.4, — это немного упрощеннаямодель протокола PPP (Point-to-Point Protocol, протокол «точка–точка»), с помощью которого пакеты передаются по коммуникационным каналам. Мы изучим PPPв конце этой главы.Третий метод разделения потока битов на кадры позволяет обойти недостаткисимвольного заполнения, которое обязывает использовать исключительно 8-битныебайты.
Делить данные на кадры можно на уровне бит, причем кадры могут содержатьпроизвольное число бит и состоять из блоков любого размера. Данный метод был разработан для некогда популярного протокола HDLC (High-level Data Link Control —высокоуровневый протокол управления каналом передачи данных). Каждый кадрначинается и завершается специальной последовательностью бит, 01111110 (или 0x7E222 Глава 3. Канальный уровеньв шестнадцатеричной системе).
Это все тот же флаговый байт. Если в битовом потокепередаваемых данных встретится пять идущих подряд единиц, уровень передачи данных автоматически вставит в выходной поток нулевой бит. Битовое заполнение (bitstuffing) аналогично символьному, при котором в кадр перед случайно встретившимсясреди данных флагом вставляется escape-символ.
Он также гарантирует минимальнуюплотность передачи, помогающую сохранять синхронизацию на физическом уровне.По этой причине битовое заполнение применяется в протоколе USB (Universal SerialBus — универсальная последовательная шина).Рис. 3.4. Кадр, ограниченный флаговыми байтами (а); четыре примера байтовыхпоследовательностей до и после символьного заполнения (б)Когда принимающая сторона встречает пять единиц подряд, за которыми следуетноль, она автоматически удаляет этот ноль. Битовое заполнение, как и символьное,является абсолютно прозрачным для сетевого уровня обоих компьютеров.
Если флаговая последовательность битов (01111110) встречается в данных пользователя, онапередается в виде 011111010, но в памяти принимающего компьютера сохраняетсяопять в исходном виде: 01111110. На рис. 3.5 приведен пример битового заполнения.Благодаря битовому заполнению границы между двумя кадрами могут быть безошибочно распознаны с помощью флаговой последовательности. Таким образом, еслиприемная сторона потеряет границы кадров, ей нужно всего лишь отыскать в полученном потоке битов флаговый байт, поскольку он встречается только на границахкадров и никогда — в данных пользователя.Побочный эффект как битового, так и байтового заполнения заключается в том, чтодлина кадра зависит от содержимого, то есть от входящих в него данных. Например,если в данных флаговых байт нет, то 100 байт данных можно передать в кадре размером приблизительно 100 байт.
Если же данные состоят исключительно из флаговыхбайт, то перед каждым таким байтом вставляется специальный символ, и длина кадра3.1. Ключевые аспекты организации канального уровня 223увеличивается примерно до 200 байт. С битовым заполнением увеличение составляетоколо 12,5 %, так как к каждому байту добавляется 1 бит.Рис. 3.5. Битовое заполнение: а — исходные данные; б — данные на линии; в — данные,сохраненные в памяти после удаления вставных битовПоследний метод формирования кадров напрямую связан с особенностями физического уровня. В главе 2 мы узнали, что при кодировании битов в виде сигналовдля облегчения работы получающей стороны добавляются избыточные данные.