Э. Таненбаум - Компьютерные сети. (4-е издание) (DJVU) (1130092), страница 61
Текст из файла (страница 61)
В прошлом стартовые и стоповые байты отличались друг от друга, но в последнее время большинство протоколов перешло на использование в обоих случаях одного и того же байта, называемого флаговым. Это показано на рис. 3.5, а как Е(АО. Таким образом, если приемник теряет синхронизацию, ему необходимо просто найти флаговый байт, с помощью которого он распознает конец текущего кадра. Два соседних флаговых байта говорят о том, что кончился один кадр и начался другой. Ключевые аспекты организации уровня передачи данных 229 Этот метод иногда приводит к серьезным проблемам при передачи бинарных данных, таких как объектные коды программ или числа с плавающей запятой, В передаваемых данных запросто может встретиться последовательность, используемая в качестве флагового байта. Возникновение такой ситуации, скорее всего, собьет синхронизацию. Одним из способов решения проблемы является добавление специального езсаре-символа (знака переключения кода, ЕВС) непосредственно перед случайно совпавшим с флаговым байтом внутри кадра.
Уровень передачи данных получателя вначале убирает эти езсаре-символы, затем передает кадр на сетевой уровень. Такой метод называется символьным заполнением. Таким образом, настоящий флаг можно отличить от «подложного» по наличию или отсутствию перед ним ЕБС. Следующий логичный вопрос а что, если и символ ЕБС случайно окажется среди прочих данных? Решение такое же: вставить перед этим фиктивным езсаресимволом настоящий. Тогда любой одиночный ЕБС будет частью сзсаре-последовательности, а двойной будет указывать на то, что служебный байт случайно оказался в потоке данных. Некоторые примеры показаны иа рис. 3.6, б.
В любом случае, байтовая последовательности после ее очищения от вставных символов в точности совпадает с исходной. Схема символьного заполнения, показанная на рис. 3.5, — это немного упрощенная модель протокола РРР, с помощью которого большинство домашних компьютеров соединяется с интернет-провайдером. Мы изучим РРР в этой главе. Главный недостаток этого метода заключается в том, что он тесно связан с 8-битными символами. Между тем не во всех кодировках один символ соответствует 8 битам.
Например, 1)Х1СООЕ использует 16-битное кодирование. По мере развития сетевых технологий недостатки использования длины символьного кода в механизме формирования кадров становились все очевиднее. Поэтому потребовалось создание новой техники, допускаюп1ей использование символов произвольного размера. Новый метод позволяет использовать кадры и наборы символов, состоящие из любого количества битов. Вот как зто реализуется.
Каждый кадр начинается и завершается специальной последовательностью битов, 01111110 (на самом деле это все тот же флаговый байт). Если в битовом потоке передаваемых данных встретится пять идущих подряд единиц, уровень передачи данных автоматически вставит в выходной поток нулевой бит. Битовое заполнение аналогично символьному, при котором в кадр перед случайно встретившимся среди даннгях флагом вставляется езсаре-символ.
Когда принимающая сторона встречает пять единиц подряд, за которыми следует ноль, она автоматически удаляет этот ноль. Битовое заполнение, как и символьное, является абсолютно прозрачным для сетевого уровня обоих компьютеров. Если флаговая последовательность битов (01111110) встречается в данных пользователя, она передается в виде 011111010, но в памяти принимающего компьютера сохраняется опять в исходном виде: 01111110. На рис.
3.6 приведен пример битового заполнения. Благодаря битовому заполнению границы между двумя кадрами могут быть безошибочно распознаны с помощью флаговой последовательности. Таким обра- 230 Глава 3. Уровень передачи данных зом, если приемная стоРона потеряет границы кадров, ей нужно всего лишь отыскать в полученном потоке битов флаговый байт, поскольку он встречается только на границах кадров и никогда — в данных пользователя.
отто((ттттт(т(ттт(ттоото отто « (((отт((тот(((то(оп(о Вставленные биты отто(((т(т(((т(тт((тоото Рис. 3.6. Битовое заполнение: исходные данные (а); данные на линии (б); данные, сохраненные в памяти после удаления вставных битов (в) Наконец, последний метод формирования кадров приемлем только в сетях, в которых физический носитель обладает некоторой избыточностью, Например, некоторые локальные сети кодируют один бит данных двумя физическими битами. Обычно бит 1 кодируется парой высокого и низкого уровней сигналов (отрицательный перепад), а бит 0 — наоборот, парой низкого и высокого уровней (положительный перепад). В такой схеме каждый передаваемый бпт данных содержит в середине переход, благодаря чему упрощается распознавание границ битов.
Комбинации уровней сигналов (низкий — низкий и высокий — высокий) не используются для передачи данных, но используются в качестве ограничителей кадров в некоторых протоколах. В заключение разговора о кадрировании заметим, что многие протоколы передачи данных для повышения надежности применяют комбинацию счетчика символов с другим методом формирования кадра. Когда прибывает кадр, для обнаружения его конца используется счетчик. Кадр воспринимается как правильный только в том случае, если соответствующий разделитель присутствует в нужной позиции и совпадает контрольная сумма. В противном случае сканируется входной поток, в котором ищется следуютдий разделитель. Обработка ошибок Решив проблему маркировки начала и конца кадра, мы сталкиваемся с новой проблемой: как гарантировать доставку сетевому уровню принимающей машины всех кадров и при этом расположить их в правильном порядке. Предположим, что отправитель просто посылает кадры, не заботясь о том, дошли ли они до адресата.
Этого было бы достаточно для сервиса без подтверждений и без установления соединения, но не для ориентированного на соединение сервиса с подтверждениями. Ключевые аспекты организации уровня передачи данных 231 Обычно для гарантирования надежной доставки поставщику посылается информация о том, что происходит на другом конце линии. Протокол требует от получателя посылать обратно специальные управляющие кадры, содержащие позитивные или негативные сообщения о полученных кадрах. Получив позитивное сообщение, отправитель узнает, что посланный им кадр успешно получен на том конце линии. Негативное сообщение, напротив, означает, что с кадром что-то случилось и его нужно передать снова.
Кроме того, посланный кадр может из-за неисправности оборудования или какой-нибудь помехи (например, шума) пропасть полностью. В этом случае принимающая сторона его просто не получит и, соответственно, никак не прореагирует, а отправитель может вечно ожидать положительного или.отрицательного ответа и так ничего и не получить. Чтобы избежать зависаний сети в случае полной потери кадров, используются таймеры уровня передачи данных. После посылки кадра включается таймер и отсчитывает интервал времени, достаточный для получения принимающим компьютером этого кадра, его обработки и посылки обратно подтверждения. В нормальной ситуации кадр правильно принимается, а подтверждение посылается назад и вручается отправителю, прежде чем истечет установленный интервал времени, и только после этого таймер отключается.
Однако если либо кадр либо подтверждение теряется по пути, установленный интервал времени истечет, и отправитель получит сообщение о возможной проблеме. Самым простым решением для отправителя будет послать кадр еще раз. Однако при этом возникает опасность получения одного и того же кадра несколько раз уровнем передачи данных принимающего компьютера и повторной передачи его сетевому уровню. Чтобы этого не случилось, необходимо последовательно пронумеровать отсылаемые кадры, так чтобы получатель мог отличить повторно переданные кадры от оригиналов.
Вопрос управления таймерами и порядковыми номерами, гарантирующими, что каждый кадр доставлен сетевому уровню принимающего компьютера ровно один раз, не больше и не меньше, является очень важной частью задачи, решаемой уровнем передачи данных. Далее в этой главе мы подробно изучим методы управления на серии постепенно усложняющихся примеров. Управление потоком Вше один важный аспект разработки уровня передачи данных (а также более высоких уровней) связан с вопросом о том, что делать с отправителем, который постоянно желает передавать кадры быстрее, чем получатель способен их получать, Такая ситуация может возникнуть, если у передающей стороны оказывается более мощный (нли менее загруженный) компьютер, чем у принимающей. Отправитель продолжает посылать кадры на высокой скорости до тех пор, пока получатель не окажется полностью ими завален. Даже при идеально работающей линии связи в определенный момент получатель просто не сможет продолжать обработку все прибывающих кадров и начнет их терять.
Очевидно, что для предотвращения подобной ситуации следует что-то предпринять. 232 Глава 3. Уровень передачи данных В настоящее время применяются два подхода. При первом, называющемся управлением потоком с обратной связью, получатель отсылает отправителю информацию, разрсшаюшую последнему продолжить передачу или, по крайней мере, сообщающую о том, как идут дела у получателя. Прн втором подходе, управлении потоком с ограничением, в протокол встраивается механизм, ограничиваюший скорость, с которой передатчики могут передавать данные. Обратная связь с получателем отсутствует.
В этой главе мы рассмотрим только подход с обратной связью, поскольку второй подход никогда не применяется на уровне передачи данных (впрочем, мы вернемся к нему в главе 5). Известны различные схемы контроля потока с обратной связью, но большинство из них используют один и тот же принцип. Протокол содержит четко определенные правила, определяющие, когда отправитель может посылать следующий кадр.