Э. Таненбаум - Компьютерные сети. (4-е издание) (PDF) (1130118), страница 57
Текст из файла (страница 57)
Прохождение сообщения через два маршрутизатора показано на рис. 3.3.МаршрутизаторПроцесс уровняПроцесспередачи данных маршрутизацииЛиния связи| с маршрутизаторомРис. 3.3. Протокол передачи данныхПрограммы маршрутизации часто требуют правильного выполнения работы,то есть им нужно надежное соединение с упорядоченными пакетами на всех линиях, соединяющих маршрутизаторы. Такие программы обычно не любят, еслиприходится слишком часто беспокоиться о потерянных пакетах.
Сделать ненадежные линии надежными или хотя бы довольно хорошими — задача уровня передачи данных, показанного на рисунке пунктирным прямоугольником. Заметим, что хотя на рисунке показаны несколько копий программы уровня передачиданных, на самом деле все линии связи обслуживаются одной копией программы с различными таблицами и структурами данных для каждой линии.Ключевые аспекты организации уровня передачи данных227Формирование кадраДля предоставления сервиса сетевому уровню уровень передачи данных должениспользовать сервисы, предоставляемые ему физическим уровнем. Физическийуровень принимает необработанный поток битов и пытается передать его по назначению. Этот поток не застрахован от ошибок.
Количество принятых бит может быть меньше, равно или больше числа переданных бит; кроме того, значенияпринятых битов могут отличаться от значений переданных. Уровень передачиданных должен обнаружить ошибки и, если нужно, исправить их.Обычно уровень передачи данных разбивает поток битов на отдельные кадрыи считает для каждого кадра контрольную сумму.
(Алгоритмы подсчета контрольных сумм будут обсуждаться далее в этой главе.) Когда кадр прибывает в пунктназначения, его контрольная сумма подсчитывается снова. Если она отличаетсяот содержащейся в кадре, то уровень передачи данных понимает, что при передаче кадра произошла ошибка, и принимает меры (например, игнорирует испорченный кадр и посылает передающей машине сообщение об ошибке).Разбиение потока битов на отдельные кадры представляет собой более сложную задачу, чем это может показаться на первый взгляд.
Один из способов разбиения на кадры заключается во вставке временных интервалов между кадрами,подобно тому, как вставляются пробелы между словами в тексте. Однако сетиредко предоставляют гарантии сохранения временных параметров при передачеданных, поэтому возможно, что эти интервалы при передаче исчезнут или, наоборот, будут добавлены новые интервалы.Поскольку для отметки начала и конца кадра полагаться на временные параметры слишком рискованно, были разработаны другие методы.
В данном разделе мы рассмотрим четыре метода маркировки границ кадров.1. Подсчет количества символов.2. Использование сигнальных байтов с символьным заполнением.3. Использование стартовых и стоповых битов с битовым заполнением.4. Использование запрещенных сигналов физического уровня.Первый метод формирования кадров использует поле в заголовке для указания количества символов в кадре. Когда уровень передачи данных на принимающем компьютере видит это поле, он узнает, сколько символов последует, и такимобразом определяет, где находится конец кадра.
Этот прием проиллюстрированна рис. 3.4, а для четырех кадров размером 5, 5, 8 и 8 символов соответственно.Недостаток такой системы в том, что при передаче может быть искажен самсчетчик. Например, если размер второго кадра из числа 5 станет из-за ошибки вканале числом 7, как показано на рис. 3.4, б, то принимающая машина потеряетсинхронизацию и не сможет обнаружить начало следующего кадра. Даже есликонтрольная сумма не совпадет (скорее всего) и принимающий компьютер поймет, что кадр принят неверно, то он все равно не сможет определить, где началоследующего кадра.
Запрашивать повторную передачу кадра также бесполезно,поскольку принимающий компьютер не знает, сколько символов нужно пропустить до начала повторной передачи. По этой причине метод подсчета символовтеперь практически не применяется.228Глава 3. Уровень передачи данныхКлючевые аспекты организации уровня передачи данных51 2436587908Кадр 25 символовКадр15 символов12ОЭтот метод иногда приводит к серьезным проблемам при передачи бинарныхданных, таких как объектные коды программ или числа с плавающей запятой.В передаваемых данных запросто может встретиться последовательность, используемая в качестве флагового байта. Возникновение такой ситуации, скорее всего,собьет синхронизацию.
Одним из способов решения проблемы является добавление специального escape-символа (знака переключения кода, ESC) непосредственно перед случайно совпавшим с флаговым байтом внутри кадра. Уровеньпередачи данных получателя вначале убирает эти escape-символы, затем передает кадр на сетевой уровень. Такой метод называется символьным заполнением.Таким образом, настоящий флаг можно отличить от «подложного» по наличиюили отсутствию перед ним ESC.Следующий логичный вопрос: а что, если и символ ESC случайно окажетсясреди прочих данных? Решение такое же: вставить перед этим фиктивным escapeсимволом настоящий. Тогда любой одиночный ESC будет частью escape-последовательности, а двойной будет указывать на то, что служебный байт случайнооказался в потоке данных.
Некоторые примеры показаны на рис. 3.6, б. В любомслучае, байтовая последовательности после ее очищения от вставных символовв точности совпадает с исходной.Схема символьного заполнения, показанная на рис. 3.5, — это немного упрощенная модель протокола РРР, с помощью которого большинство домашнихкомпьютеров соединяется с интернет-провайдером. Мы изучим РРР в этой главе.Главный недостаток этого метода заключается в том, что он тесно связан с8-битными символами. Между тем не во всех кодировках один символ соответствует 8 битам.
Например, UNICODE использует 16-битное кодирование. Помере развития сетевых технологий недостатки использования длины символьного кода в механизме формирования кадров становились все очевиднее. Поэтомупотребовалось создание новой техники, допускающей использование символовпроизвольного размера./ Новый метод позволяет использовать кадры и наборы символов, состоящиеиз любого количества битов.
Вот как это реализуется. Каждый кадр начинается изавершается специальной последовательностью битов, 01111110 (на самом делеэто все тот же флаговый байт). Если в битовом потоке передаваемых данныхвстретится пять идущих подряд единиц, уровень передачи данных автоматическивставит в выходной поток нулевой бит. Битовое заполнение аналогично символьному, при котором в кадр перед случайно встретившимся среди данныхфлагом вставляется escape-символ.Когда принимающая сторона встречает пять единиц подряд, за которыми следует ноль, она автоматически удаляет этот ноль. Битовое заполнение, как и символьное, является абсолютно прозрачным для сетевого уровня обоих компьютеров. Если флаговая последовательность битов (01111110) встречается в данныхпользователя, она передается в виде 011111010, но в памяти принимающего компьютера сохраняется опять в исходном виде: 01111110.
На рис. 3.6 приведен пример битового заполнения.Благодаря битовому заполнению границы между двумя кадрами могут бытьбезошибочно распознаны с помощью флаговой последовательности. Таким обра-Один символ• Счетчик символов •46587КадрЗ8 символов890\1 23Кадр 48 символовОшибкаК12К а347 8 9 870 1 2 3 4 5 6 9ДР1(Неправильный)790123Теперь этот символвоспринимаетсякак счетчикРис.
3.4. Поток символов: без ошибок (а); с одной ошибкой (б)Второй метод формирования кадров решает проблему восстановления синхронизации после сбоя при помощи маркировки начала и конца каждого кадраспециальными байтами. В прошлом стартовые и стоповые байты отличались другот друга, но в последнее время большинство протоколов перешло на использование в обоих случаях одного и того же байта, называемого флаговым. Это показано на рис. 3.5, а как FLAG. Таким образом, если приемник теряет синхронизацию,ему необходимо просто найти флаговый байт, с помощью которого он распознает конец текущего кадра.
Два соседних флаговых байта говорят о том, что кончился один кадр и начался другой.Поле данныхFLAG ЗаголовокИсходные символыКонцевикFLAGПосле заполненияАFLAGВESCFLAGАESCВESCESCАESCFLAGВАESCESCESCFLAGВАESCESCВАESCESCESCESCВ—229Рис. 3.5. Кадр, ограниченный флаговыми байтами (а); четыре примера байтовыхпоследовательностей до и после символьного заполнения (б)А230Глава 3. Уровень передачи данныхзом, если приемная сторона потеряет границы кадров, ей нужно всего лишь отыскать в полученном потоке битов флаговый байт, поскольку он встречается только на границах кадров и никогда — в данных пользователя.011011111111111111110010а011011111011111011111010010Вставленные битыб011011111111111111110010Рис.
3.6. Битовое заполнение: исходные данные (а); данные на линии (б);данные, сохраненные в памяти после удаления вставных битов (в)Наконец, последний метод формирования кадров приемлем только в сетях,в которых физический носитель обладает некоторой избыточностью. Например,некоторые локальные сети кодируют один бит данных двумя физическими битами. Обычно бит 1 кодируется парой высокого и низкого уровней сигналов (отрицательный перепад), а бит 0 — наоборот, парой низкого и высокого уровней(положительный перепад).