Понимание вставки байтов и вставки нулевых битов

HTTP

одноранговый протокол

PPP (Point-to-Point Protocol) — это двухточечный протокол, работающий на канальном уровне и обеспечивающий стандартный метод передачи мультипротокольных пакетов данных по двухточечному соединению. PPP инкапсулирует дейтаграммы IP в кадры и передает их последовательно в блоках кадров.

Рассмотрим эту ситуацию:

Отправитель передал два фрейма получателю, но мы знаем, что на самом деле были переданы биты, то есть набор 1 и 0. Как получатель узнает, является ли набор 1 и 0 единичным, двумя или тремя? о даже четырех кадрах?

использовать разделитель

Чтобы решить эту ситуацию, нам нужно использовать разделитель между кадрами, чтобы различать разные кадры, PPP использует0x7EВ качестве этого разделителя используется (01111110), то есть маршрутизатор обнаруживает, что некий байт равен 0x7E, что указывает на то, что передача предыдущего кадра окончена, и начинается передача следующего кадра. Но если это так, это, кажется, вызывает новые проблемы?

Рассмотрим эту ситуацию:

В наших данных есть 0x7E, и роутер примет его за разделитель, не вызовет ли это ошибку при передаче фрейма?

Вставка байтов и вставка нулевых битов

Чтобы решить эту проблему, проще всего придумать «экранирование» передаваемых данных — отправитель изменяет данные (например, 0x7E) в соответствии с правилами во время передачи, а получатель меняет правила, чтобы восстановить данные как есть. и передать его сетевому уровню. Для асинхронной и синхронной передачи мы используем заполнение байтами и заполнение нулями для изменения данных соответственно.Но что такое асинхронная и синхронная передачи?

Асинхронные и изохронные передачи

Асинхронная передача делит кадр на небольшие группы (например, байт как группу), передает небольшими группами, а другие данные могут передаваться между группами. Изохронные передачи отправляют весь кадр за один раз.

вставка байтов

Когда PPP использует асинхронный транспорт, мы используем0x7D(01111101) в качестве экранирующего символа правила экранирования следующие:

  • Преобразуйте каждый байт 0x7E, встречающийся в информационном поле, в 2-байтовую последовательность (0x7D, 0x5E).

  • Если в информационном поле появляется байт 0x7D (то есть та же битовая комбинация, что и escape-символ), то escape-символ 0x7D преобразуется в 2-байтовую последовательность (0x7D, 0x5D).

  • Если в информационном поле появляется управляющий символ кода ASCII (то есть символ, значение которого меньше 0x20), то перед символом следует добавить байт 0x7D, а также изменить кодировку символа. время. Например, появление 0x03 ("Конец передачи" ETX в управляющем символе) преобразует его в 2-байтовую последовательность (0x7D, 0x31).

Один или два из них легко понять, измените разделитель и escape-символ соответственно (если вы не понимаете второй пункт, рассмотрите случай, когда в данных встречаются 0x7D и 0x5E),Но зачем изменять управляющие символы в коде ASCII?

Это связано с тем, что в асинхронном канале некоторым драйверам последовательного интерфейса или модемам необходимо использовать управляющие символы в коде ASCII, поэтому эти символы необходимо экранировать.

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

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

заполнение нулевым битом

Когда PPP использует изохронный транспорт (что происходит, когда PPP используется в каналах SONET/SDH), для прозрачного транспорта используется заполнение нулевыми битами.

Вставка нулевых битов намного проще, чем вставка байтов, двоичное представление 0x7E — 01111110, поэтому просто вставка 0 для каждых 5 единиц может избежать 0x7E в данных.

использованная литература