Как PPP или Ethernet восстанавливаются после ошибок?

StackOverflow https://stackoverflow.com/questions/990661

  •  13-09-2019
  •  | 
  •  

Вопрос

Рассматривая стандарты уровня канала передачи данных, такие как PPP общий формат кадра или Ethernet - сеть, неясно, что произойдет, если контрольная сумма будет недействительной. Как протокол узнает, где начинается следующий кадр?

Просто ли он сканирует следующее появление "флага" (в случае PPP)?Если да, то что произойдет, если полезная нагрузка пакета просто так случайно содержит сам "флаг"?Я хочу сказать, что независимо от того, используются ли поля "обрамление пакета" или "длина", неясно, как восстанавливаться из недействительных пакетов, где поле "длина" может быть повреждено или байты "обрамления" могут просто случайно оказаться частью полезной нагрузки пакета.

Обновить:Я нашел то, что искал (что не совсем то, о чем я спрашивал), просмотрев "Фрейминг на основе GFP CRC".Согласно Коммуникационные сети

Приемник GFP синхронизируется с границей кадра GFP посредством процесса с тремя состояниями.Приемник изначально находится в состояние охоты где он проверяет четыре байта за раз, чтобы увидеть, равен ли CRC, вычисленный для первых двух байтов, содержимому следующих двух байтов.Если совпадение не найдено, GFP перемещается вперед на один байт, поскольку GFP принимает октетную синхронную передачу, заданную физическим уровнем.Когда получатель находит совпадение, он перемещается в состояние предварительной синхронизации.Находясь в этом промежуточном состоянии, приемник использует поле tentative PLI (индикатор длины полезной нагрузки) для определения местоположения границы следующего кадра.Если целевой номер N если достигнуто успешное обнаружение кадра, то приемник перемещается в состояние синхронизации.Состояние синхронизации - это нормальное состояние, в котором получатель проверяет каждый PLI, проверяет его с помощью cHEC (проверка ошибок основного заголовка), извлекает полезную нагрузку и переходит к следующему кадру.

Короче говоря, каждый пакет начинается с "length" и "CRC (длина)".Нет необходимости экранировать какие-либо символы, и длина пакета известна заранее.

По-видимому, существует два основных подхода к созданию пакетов:

  • схемы кодирования (заполнение битами / байтами, манчестерское кодирование, 4b5b, 8b10b и т.д.)
  • неизмененные данные + контрольная сумма (GFP)

Первое безопаснее, второе эффективнее.Оба подвержены ошибкам, если полезная нагрузка просто случайно содержит допустимый пакет, а повреждение строки приводит к тому, что исходящие байты содержат последовательность байтов "начало кадра", но это звучит крайне маловероятно.Трудно найти точные цифры для надежности GFP, но многие современные протоколы, похоже, используют его, так что можно предположить, что они знают, что делают.

Это было полезно?

Решение

Вы уже довольно близки к правильному ответу.В принципе, если он начинается с преамбулы и заканчивается чем-то, что совпадает с контрольной суммой, это фрейм и передается на более высокие уровни.

PPP и ethernet оба ищут сигнал начала следующего кадра.В случае Ethernet это преамбула, последовательность из 64 чередующихся битов.Если декодер ethernet видит это, он просто предполагает, что то, что следует за этим, является кадром.Записывая биты и затем проверяя, совпадает ли контрольная сумма, он решает, есть ли у него допустимый фрейм.

Что касается полезной нагрузки, содержащей ФЛАГ, в PPP она экранируется дополнительными байтами, чтобы предотвратить такое неправильное толкование.

Другие советы

И PPP, и Ethernet имеют механизмы для создания фреймов, то есть для разбиения потока битов на кадры таким образом, что если приемник теряет представление о том, что к чему, он может уловить это в начале следующего кадра.Они находятся в самом низу стека протоколов;все остальные детали протокола построены на идее фреймов.В частности, преамбула, LCP и FCS находятся на более высоком уровне и являются не используется для управления кадрированием.

PPP по последовательным каналам связи, таким как dialup, создается с использованием HDLC-подобное обрамление.Байтовое значение 0x7e, называемое последовательностью флагов, указывает на начало кадра.Кадр продолжается до следующего байта флага.Любое вхождение байта флага в содержимое фрейма экранируется.Экранирование выполняется путем записи 0x7d, известного как управляющий экранирующий байт, за которым следует экранируемый байт xor'd с 0x20.Последовательность флагов экранируется в 0x5e;сам элемент управления escape также должен быть экранирован в 0x5d.Другие значения также могут быть экранированы, если их присутствие может привести к сбоям в работе модема.В результате, если приемник теряет синхронизацию, он может просто считывать и отбрасывать байты, пока не увидит 0x7e, и в этот момент он снова узнает, что это начало кадра.Затем содержимое фрейма структурируется, содержит несколько нечетных маленьких полей, которые на самом деле не важны, но сохраняются из более раннего протокола IBM, вместе с пакетом PPP (называемым блоком данных протокола, PDU), а также последовательностью проверки фрейма (FCS).

Ethernet использует логически аналогичный подход, имея символы, которые распознаются как маркеры начала и окончания кадра, а не как данные, но вместо того, чтобы иметь зарезервированные байты плюс механизм экранирования, он использует схему кодирования, которая способна выражать специальные управляющие символы, отличные от байтов данных, - немного похоже на использование знаков препинания для разделения последовательности букв.Детали используемой системы меняются в зависимости от скорости.

Стандартный (10 Мбит / с) ethernet кодируется с использованием вещи, называемой Манчестерская кодировка, в котором каждый передаваемый бит представлен в виде двух последовательных уровней на линии таким образом, что в каждом бите всегда есть переход между уровнями, что помогает приемнику оставаться синхронизированным.Границы фрейма обозначаются нарушением правила кодирования, что приводит к появлению фрагмента без перехода (я читал это в книге много лет назад, но не могу найти цитату в Интернете - возможно, я ошибаюсь на этот счет).По сути, эта система расширяет двоичный код до трех символов - 0, 1 и нарушение.

Быстрый (100 Мбит/с) ethernet использует другую схему кодирования, основанную на код 5b/4b, где группы из четырех битов данных (nybbles) представлены в виде групп из пяти битов по проводу и передаются напрямую, без манчестерской схемы.Расширение до пяти бит позволяет выбрать шестнадцать необходимых используемых шаблонов для удовлетворения требования частых переходов уровня, опять же для того, чтобы помочь приемнику оставаться синхронизированным.Однако все еще остается место для выбора некоторых дополнительных символов, которые могут передаваться, но не соответствуют значению данных, по сути, расширяя набор символов до двадцати четырех символов - символов от 0 до F и символов с именами Q, I, J, K, T, R, S и H.Ethernet использует пару JK для обозначения начала кадра и TR для обозначения окончания кадра.

Gigabit ethernet похож на fast Ethernet, но с другой схемой кодирования - версии с оптоволоконным соединением используют код 8b/10b вместо кода 5b / 4b и версии с витой парой используется какое-то очень сложное расположение кода quinary, которое я на самом деле не понимаю.Оба подхода дают один и тот же результат, который заключается в возможности передавать либо байты данных, либо один из небольшого набора дополнительных специальных символов, и эти специальные символы используются для кадрирования.

Поверх этой базовой структуры фрейма затем имеется фиксированная преамбула, за которой следует разделитель фрейма и несколько управляющих полей различной бессмысленности (привет, LLC / SNAP!).Допустимость этих полей может быть использована для проверки фрейма, но они не могут быть использованы для определения фреймов сами по себе.

Насколько я знаю, PPP поддерживает только обнаружение ошибок и не поддерживает какую-либо форму исправления ошибок или восстановления.

Поддержанный Cisco здесь: http://www.cisco.com/en/US/docs/internetworking/technology/handbook/PPP.html

Это Активация линии PPP в Википедии раздел описывает основы RFC 1661.Последовательность проверки кадра используется для обнаружения ошибок передачи в кадре (описано в предыдущем разделе Инкапсуляции).

Схема из RFC 1661 на этой странице Википедии описывает, как фаза сетевого протокола может быть перезапущена с установлением канала при ошибке.


Также примечания со страницы Cisco, на которую ссылается Suvesh.

Протокол управления каналом PPP

PPP LCP предоставляет метод установления, конфигурирования, обслуживания и завершения двухточечного соединения.LCP проходит через четыре различных этапа.

Сначала происходит установление связи и согласование конфигурации.Прежде чем можно будет обмениваться дейтаграммами любого сетевого уровня (например, IP), LCP сначала должен открыть соединение и согласовать параметры конфигурации.Этот этап завершается, когда фрейм подтверждения конфигурации был как отправлен, так и получен.

За этим следует определение качества ссылки.LCP допускает необязательный этап определения качества соединения, следующий за этапом установления соединения и согласования конфигурации.На этом этапе канал связи тестируется, чтобы определить, является ли качество канала достаточным для запуска протоколов сетевого уровня.Этот этап является необязательным.LCP может задержать передачу информации протокола сетевого уровня до завершения этой фазы.

На этом этапе происходит согласование конфигурации протокола сетевого уровня.После того, как LCP завершит этап определения качества канала, протоколы сетевого уровня могут быть настроены соответствующим NCP отдельно и могут быть запущены и отключены в любое время.Если LCP закрывает канал, он информирует протоколы сетевого уровня, чтобы они могли предпринять соответствующие действия.

Наконец, происходит прерывание связи.LCP может прервать связь в любое время.Обычно это делается по запросу пользователя, но может произойти из-за физического события, такого как потеря носителя или истечение таймера периода простоя.

Существуют три класса фреймов LCP.Фреймы установления связи используются для установления и настройки связи.Фреймы завершения связи используются для завершения связи, а фреймы обслуживания связи используются для управления связью и ее отладки.

Эти фреймы используются для выполнения работы на каждой из фаз LCP.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top