Вы находитесь на странице: 1из 29

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ

Кафедра «Связь»

А.В. Паршин О.В. Хакимова Н.В. Корепанова

ПРОЦЕДУРА ЗАЩИТЫ ОТ ОШИБОК ПО FCS

Екатеринбург

2006

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ЖЕЛЕЗНОДОРОЖНОГО ТРАНСПОРТА

УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ

Кафедра «Связь»

А.В. Паршин О.В. Хакимова Н.В. Корепанова

ПРОЦЕДУРА ЗАЩИТЫ ОТ ОШИБОК ПО FCS

Методическое пособие

Екатеринбург

2006

1

В данном методическом пособии рассмотрены вопросы защиты

информации во фреймах при пакетном способе передачи данных с помощью

контрольной последовательности. Подробно описано осуществление циклического избыточного контроля в процедуре HDLC и типовая реализация вычисления FCS.

В методическом пособии приведены упражнения с подробными

решениями, а также текстовые вопросы для самоконтроля. Методическое пособие предназначено для углубленного изучения указанной проблемы и предназначено для студентов всех форм обучения по специальностям 190402 «Автоматика, телемеханика и связь на ж.д. транспорте», 230201 «Информационные системы и технологии», а также для студентов других специальностей, изучающих в той или иной мере проблемы передачи информации.

Авторы: А.В. Паршин, доцент кафедры «Связь», канд. техн. наук, О.В. Хакимова, инженер кафедры «Связь», Н.В. Корепанова, инженер кафедры «Связь».

Рецензент: В.Н. Малышев, доцент кафедры «Прикладная информатика в экономике».

©Уральский государственный университет путей сообщения (УрГУПС), 2006

2

Оглавление

Введение

4

1. Процедура защиты от ошибок по FCS. общие сведения

5

2. Правила вычисления CRC в протоколе HDLC

8

3. Типовая реализация вычисления FCS

14

4. Упражнения

17

4.1. Способ образования FCS по протоколу HDLC

17

4.2. Типовая реализация FCS

22

4.3. Тестовые вопросы для самоконтроля

27

3

ВВЕДЕНИЕ

При передаче данных по каналам связи всегда возникают ошибки. Причины ошибок самые разные, но результат оказывается один данные искажаются и не могут быть использованы на приемной стороне для дальнейшей обработки. Для борьбы с возникающими ошибками известно много различных способов. Все их можно подразделить на две группы: не использующие обратную связь и использующие ее. В первом случае на передающей стороне передаваемые данные кодируются одним из известных кодов с исправлением ошибок. На приемной стороне, соответственно, производится декодирование принимаемой информации и исправление обнаруженных ошибок. Исправляющая возможность применяемого кода зависит от числа избыточных битов, генерируемых кодером. Если вносимая избыточность невелика, то есть опасность того, что принимаемые данные будут содержать необнаруженные ошибки, которые могут привести к ошибкам в работе прикладного процесса. Если же использовать код с высокой исправляющей способностью (большой избыточностью), то это приводит к необоснованно низкой реальной скорости передачи данных. В системах с обратной связью применяются процедуры обнаружения ошибок и переспроса, также называемые решающей обратной связью или обнаружением ошибок с автоматическим запросом повторения (АЗП, ARQ – Automatic Repeat Request). В этом случае код применяется только в режиме обнаружения ошибок, что позволяет достичь очень низкой вероятности необнаруженной ошибки при незначительном уровне вводимой избыточности. В методическом пособии рассмотрен первый способ, использующий так называемую контрольную сумму CS (Check Sequence).

4

1. ПРОЦЕДУРА ЗАЩИТЫ ОТ ОШИБОК ПО FCS. ОБЩИЕ СВЕДЕНИЯ

Для организации работы сети передачи (обмена) информации, в зависимости от ее масштаба, используются различные протоколы, то есть правила, по которым узлы сети и пользователи обмениваются информацией. Классическим протоколом для глобальных сетей, (сетей мирового масштаба) работающих в режиме пакетной коммутации, является протокол Х.25 (для пользователей) и Х.75 (для узлов). Этот протокол описывает взаимодействие узлов и пользователей на первых трех (транспортных) уровнях (Levels), согласно семиуровневой модели OSI. При этом к данным, полученным на пользовательском (Application) уровне, (обеспечивающем взаимодействие ЭВМ и человека) на каждом уровне прибавляются особые (служебные) данные заголовки, которые обеспечивают согласованное выполнение относящихся к данному уровню процессов в любых терминальных (или узловых) устройствах независимо от их физического расположения в сети. На транспортных уровнях все пользовательские данные и заголовки группируются в строго регламентированные совокупности последовательно расположенных разрядов (бит) двоичных кодовых комбинаций, которые называются: на третьем сетевом уровне (Network Level) – пакетами (Packet); на втором канальном уровне (Link Level) – кадрами или фреймами (Frame). Формат фрейма, работающего согласно протоколу или процедуре HDLC (High Level Link Control), обеспечивающей взаимодействие устройств сети на втором уровне, при использовании глобальных протоколов Х.25, приведен на рис. 1.1 В качестве флага используется уникальная восьмибитовая комбинация 01111110, которая свидетельствует о начале и конце кадра и служит для синхронизации связевого оборудования. В адресном поле указываются адреса сторон по концам звена или сегмента (Link) передачи информации (в виде соответствующей двоичной кодовой комбинации). Поле типа фрейма (control field) занимает восемь бит (один октет) и в зависимости от конфигурации указывает на тип фрейма, несет еще дополнительную служебную информацию. Одной из основных задач второго уровня является защита данных, передаваемых по каналу связи, от искажения битов. Эта задача реализуется с помощью FCS – Frame Check Sequence (контрольная последовательность кадра). FCS – это 16-битовая двоичная последовательность, конкретный вид которой зависит от содержимого адресного поля, поля типа фрейма и поля данных.

5

DTE – цифровое терминальное ( оконечное ) оборудование (Digital Terminal

DTE – цифровое терминальное (оконечное) оборудование (Digital Terminal Equipment); NN – сетевой узел, реализующий режим пакетной коммутации (Packet Switching Node – NN);

F – флаг (разделитель между файлами); A – поле адреса;

C – поле типа фрейма (информационный или служебный);

FCS – контрольная последовательность.

Рис. 1.1. Структура фрейма и его взаимодействие с соседними уровнями

Механизм действия FCS кратко можно описать так. Передающая станция осуществляет вычисления над потоком данных пользователя и результат этого вычисления включается в кадр в качестве поля FCS. При приеме фрейма по этому же принципу обрабатывается содержимое указанных трех полей и сравнивается с FCS принятого кадра. Если FCS совпадают, то ошибок в передаче нет. В противном случае ошибка. Причем вид ошибки, в принципе, определяется в расхождении принятых FCS. Существует несколько распространенных алгоритмов вычисления контрольной суммы, отличающихся вычислительной сложностью и способностью обнаруживать ошибки в данных. Контроль по паритету представляет собой наиболее простой метод контроля данных, основанный на несложном алгоритме, поэтому с его помощью можно обнаружить только одиночные ошибки в проверяемых данных. Метод заключается в суммировании по модулю 2 всех бит

6

контролируемой информации. Например, при передаче последовательности 100101011 результатом контрольного суммирования будет значение 1, которое заносится в FCS и пересылается вместе с контролируемой информацией. В случае искажения при пересылке любого одного бита исходных данных (или контрольного разряда) результат суммирования будет отличаться от принятого контрольного разряда, что говорит об ошибке. Однако двойная ошибка, например 110101010, будет неверно принята за корректные данные. Поэтому контроль по паритету применяется к небольшим порциям данных, как правило, к каждому байту, что дает коэффициент избыточности для этого метода 1/8. Метод редко применяется в вычислительных сетях из-за его большой избыточности и невысоких диагностических способностей. Вертикальный и горизонтальный контроль по паритету представляет собой модификацию описанного выше метода. Его отличие состоит в том, что исходные данные рассматриваются в виде матрицы, строки которой составляют байты данных. Контрольный разряд подсчитывается отдельно для каждой строки и для каждого столбца матрицы. Этот метод обнаруживает большую часть двойных ошибок, однако обладает еще большей избыточностью. На практике сейчас также почти не применяется. Циклический избыточный контроль (Cyclic Redundancy Check, CRC) является в настоящее время наиболее популярным методом контроля в вычислительных сетях (и не только в сетях, например, он широко применяется при записи данных на диски и дискеты). Метод основан на рассмотрении исходных данных в виде одного многоразрядного двоичного числа. Например, кадр стандарта Ethernet, состоящий из 1024 байт, будет рассматриваться как одно число, состоящее из 8192 бит. В качестве контрольной информации рассматривается остаток от деления этого числа на известный делитель R. Обычно в качестве делителя выбирается семнадцати- или тридцати трехразрядное число, чтобы остаток от деления имел длину 16 разрядов (2 байта) или 32 разряда (4 байта). При получении кадра данных снова вычисляется остаток от деления на тот же делитель R, но при этом к данным кадра добавляется и содержащаяся в нем контрольная сумма. Если остаток от деления на R равен нулю (существует несколько модифицированная процедура вычисления остатка, приводящая к получению в случае отсутствия ошибок известного ненулевого остатка, что является более надежным показателем корректности), то делается вывод об отсутствии ошибок в полученном кадре, в противном случае кадр считается искаженным. CRC обладает более высокой вычислительной сложностью, поэтому его диагностические возможности гораздо выше, чем у методов контроля по паритету. Метод CRC обнаруживает все одиночные ошибки, двойные ошибки и ошибки в нечетном числе бит. Метод обладает также невысокой степенью избыточности. Например, для кадра Ethernet размером в 1024 байт контрольная информация длиной в 4 байта составляет только 0,4 %.

7

2. ПРАВИЛА ВЫЧИСЛЕНИЯ CRC В ПРОТОКОЛЕ HDLC

Для вычисления CRC в протоколе HDLC используется производящий

полином ( )

g

x

16

= x

+ x

12

5

+ x +

1

.

Вычисление и использование кода CRC производятся в соответствии со следующими правилами:

к содержимому кадра добавляется набор нулей, количество которых равно длине поля, т.е. поле FCS пока содержит одни нули;

образованное таким образом число делится на производящий полином, который содержит на один разряд больше (в нашем случае производящий полином содержит 17 разрядов), чем FCS, и который в качестве старшего и младшего разрядов имеет единицы;

остаток от деления помещается в поле FCS, и заполненный фрейм передается в канал;

приемник выполняет деление содержимого кадра и поля FCS на

полином g(x) ;

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

F

(

x

)

2

n

g

(

x

)

=

Q

(

x

)

+

R

(

x

)

(2.1)

Здесь: n число двоичных разрядов поля FCS кадра (в нашем случае n =16);

F (x) – полином вида

a

k

x

k +

a

k 1

k 1

x

+ + a

1 - контролируемая часть

кадра;

k число двоичных разрядов кадра, охватываемых контролем FCS;

a

g(x) полином n + 1-го порядка (производящий полином); Q(x) целое от деления полиномов; R(x) остаток от деления полиномов.

i

двоичные значения битов (i = 1,

, k );

Итак,

сформируем

FCS,

контролирующую

некоторую

последовательность

F = 101100010011101011010011,

(2.2)

состоящую из трех байт (октетов: адресное поле, поле типа фрейма и информационное поле, которое для простоты вычисления содержит 1 байт),

используя порождающий полином

g

(

x

)

= x

16

12

+ x + x +

5

1

.

Умножение F (x) на 2 эквивалентно увеличению степени полинома F (x) на n и, следовательно, сдвигу его значащей части «влево» на n (в нашем

8

n

случае n = 16 ) разрядов и припиской «справа» n штук нулей. Заметим, что самый старший бит кодовой последовательности самый «левый», самый младший бит самый «правый». Знак суммы «+» в правой части (2.2) означает, что результат деления состоит из двух частей: целой Q(x) и остатка R(x) , и их не нужно складывать (если надо складывать двоичные числа, то используется знак « »). Используя процедуру (2.2), получим

F

(

x

)

2

n

=

1011000100111010110100110000000000000000

1424314243142431424314243

5

октет

4

октет

3

октет

2

октет

1

октет

=

M

.

Поскольку M содержит 40 разрядов (пять октетов), то соответствующий полином будет тридцать девятого разряда (не забываем, что счет мы начинаем с

нулевого разряда

0

x

=

1

).

M (x) = x

39

+ x

37

36

32

+ x + x + x

1

29

28

+ x + x

27

25

23

+ x + x + x

1

22

20

17

+ x + x + x

16

.

Разделим M (x) на производящий полином ( )

g

x

16

= x

+ x + x + 1

12

5

x 39 + x 37 + x 36 + x 32 + x 29 + x 28 + x 27 + x 25 + x 23 + x 22 + x 20 + x 17 + x 16 x 16 + x 12 + x 5 + 1

x 39 + x 35 + x 28 + x 23

x 37 + x 36 + x 35 + x 32 + x 29 + x 27 + x 25 + x 22 + x 20 + x 17 + x 16

x 37 + x 33 + x 26 + x 21

x 23 + x 21 + x 20 + x 19 + x 17 + x 15

x 10 + x 8 + x 6 + x 5 + x 3 + x 2 + x+1

x 36 + x 35 + x 33 + x 32 + x 29 + x 27 + x 26 + x 25 + x 22 + x 21 + x 20 + x 17 + x 16

x 36 + x 32 + x 25 + x 20

x 35 + x 33 + x 29 + x 27 + x 26 + x 22 + x 21 + x 17 + x 16

x 35 + x 31 + x 24 + x 19

x 33 + x 31 + x 29 + x 27 + x 26 + x 24 + x 22 + x 21 + x 19 + x 17 + x 16

x 33 + x 29 + x 22 + x 17

x 31 + x 27 + x 26 + x 24 + x 21 + x 19 + x 16

x 31 + x 27 + x 20 + x 15

x 26 + x 24 + x 21 + x 20 + x 19 + x 16 + x 15

x 26 + x 22 + x 15 + x 10

9

x 24 + x 222 + x 21 + x 20 + x 19 + x 16 + x 10

x 24 + x 20 + x 13 + x 8

x 22 + x 21 + x 19 + x 16 + x 13 + x 10 + x 8

x 22 + x 18 + x 11 + x 6

x 21 + x 19 + x 18 + x 16 + x 13 + x 11 + x 10 + x 8 + x 6

x 21 + x 17 + x 10 + x 5

x 19 + x 18 + x 17 + x 16 + x 13 + x 11 + x 8 + x 6 + x 5

x 19 + x 15 + x 8 + x 3

x 18 + x 17 + x 16 + x 15 + x 13 + x 11 + x 6 + x 5 + x 3

x 18 + x 14 + x 7 + x 2

x 17 + x 16 + x 15 + x 14 + x 13 + x 11 + x 7 + x 6 + x 5 + x 3 + x 2

x 17 + x 13 + x 6 + x

x 16 + x 15 + x 14 + x 11 + x 7 + x 5 + x 3 + x 2 + x

x 16 + x 12 + x 5 +1

x 15 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+1= R(x)

Переносы младшего разряда в старший запрещены, поэтому при

суммировании «по модулю два»: x

16

x равно не 2 x , а нулю.

16

16

В итоге получили частное от деления

Q

(

x

)

= x

23

21

+ x + x

20

19

+ x + x

17

15

+ x + x

10

8

6

2

+ x + x + x + x + x + x + .

5

3

1

Остаток от деления

R

(

x

)

= x

15

+ x

14

12

11

2

+ x + x + x + x + x + x +

7

3

1

.

Остаток от деления R(x) есть FCS. Эта последовательность на канальном

уровне передатчика добавляется в конец кадра. В результате фрейм с нулевой FCS – M (x) превращается в канальный фрейм V (x) .

10

Фрейм с нулевой FCS

Фрейм с нулевой FCS Канальный фрейм с FCS = R ( x )

Канальный фрейм с FCS = R(x)

Фрейм с нулевой FCS Канальный фрейм с FCS = R ( x )

Двоичный канал можно представить как сумматор «по модулю два» содержимого канального фрейма V с потоком ошибок E , характеризующим свойства канала

U = V E или u(x) = v(x) e(x) .

Если на какой-либо позиции вектора ошибок E находится «ноль», то этот разряд пройдет через канал без ошибок, если «единица» – то будет ошибка. Предположим, что при передаче V ошибок не произошло (нулевой вектор ошибок), то есть на приемном конце будет та же последовательность, что и на передаче, т.е.

u

+

(

x

)

x

16

=

+

v

(

x

x

)

15

=

+

x

x

39

14

+

+

x

37

x

12

+

+

x

36

x

11

+

+

x

7

x

32

+

+

x

x

3

29

+

+

2

x

x

28

+

x

+

x

27

+ 1.

+

x

25

+

x

23

+

x

22

+

x

20

+

x

17

+

На приемной стороне принятый поток битов, включая FCS, снова делится

+ x + x + , и в нашем случае

(канал без ошибок) в результате деления должен получиться «ноль», т.е. остаток равен нулю. Проверим это:

x

на тот же производящий полином ( )

= x

16

12

5

g

1

x 39 + x 37 + x 36 + x 32 + x 29 + x 28 + x 27 + x 25 + x 23 + x 22 + x 20 + x 17 + x 16 x 16 + x 12 + x 5 + 1

x 15 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+ 1

x 39 + x 35 + x 28 + x 23

x 23 + x 21 + x 20 + x 19 + x 17 + x 15

x 10 + x 8 + x 6 + x 5 + x 3 + x 2 + x+1

x 37 + x 36 + x 35 + x 32 + x 29 + x 27 + x 25 + x 22 + x 20 + x 17 + x 16 +x 15 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+ 1

x 37 + x 33 + x 26 + x 21

x 36 + x 35 + x 33 + x 32 + x 29 + x 27 + x 26 + x 25 + x 22 + x 21 + x 20 + x 17 +x 16 +x 15 +x 14 +x 12 +x 11 +x 7 +x 3 +x 2 +x+1

x 36 + x 32 + x 25 + x 20

x 35 + x 33 + x 29 + x 27 + x 26 + x 22 + x 21 + x 17 + x 16 +x 15 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+ 1

x 35 + x 31 + x 24 + x 19

x 33 + x 31 + x 29 + x 27 + x 26 + x 24 + x 22 + x 21 + x 19 + x 17 + x 16 +x 15 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+ 1

x 33 + x 29 + x 22 + x 17

x 31 + x 27 + x 26 + x 24 + x 21 + x 19 + x 16 +x 15 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+ 1

12

x 31 + x 27 + x 20 + x 15

x 26 + x 24 + x 21 + x 20 + x 19 + x 16 + x 14 + x 12 + x 11 + x 7 + x 3 + x 2 + x+ 1

x 26 + x 22 + x 15 + x 10

x 24 + x 22 + x 21 + x 20 + x 19 + x 16 +x 15 + x 14 + x 12 + x 11 + x 10 + x 7 + x 3 + x 2 + x+ 1

x 24 + x 20 + x 13 + x 8

x 22 + x 21 + x 19 + x 16 + x 15 + x 14 + x 13 + x 12 + x 11 +x 10 +x 8 + x 7 + x 3 + x 2 + x+ 1

x 22 + x 18 + x 11 + x 6

x 21 + x 19 + x 18 + x 16 + x 15 + x 14 + x 13 + x 12 + x 10 + x 8 + x 7 +x 6 + x 3 + x 2 + x+ 1

x 21 + x 17 + x 10 + x 5

x 19 + x 18 + x 17 + x 16 + x 15 + x 14 + x 13 + x 12 + x 8 + x 7 + x 6 +x 5 + x 3 + x 2 + x + 1

x 19 + x 15 + x 8 + x 3

x 18 + x 17 + x 16 + x 14 + x 13 + x 12 + x 7 + x 6 + x 5 + x 2 + x + 1

x 18 + x 14 + x 7 + x 2

x 17 + x 16 + x 13 + x 12 + x 6 + x 5 + x 1 + x+ 1

x 17 + x 13 + x 6 + x

x 16 + x 12 + x 5 + 1

x 16 + x 12 + x 5 +1

0

R(x) = 0

Q

(

x

)

= x

23

21

+ x + x

20

19

+ x + x

17

15

10

8

6

2

+ x + x + x + x + x + x + x + x +

5

3

1

В результате получим частное от деления Q(x) и остаток равный нулю, что соответствует отсутствию искажений в полученном кадре по отношению к переданному. Вообще метод CRC, использованный в протоколе HDLC, позволяет обнаруживать все возможные единичные ошибки, а также 99,9984% всевозможных более длинных кортежей ошибок, но длиной не более 16 разрядов.

13

3. ТИПОВАЯ РЕАЛИЗАЦИЯ ВЫЧИСЛЕНИЯ FCS

При типовой реализации вычисления FCS использование кода CRC производится в соответствии со следующей последовательностью действий: в передатчике содержимое регистра FCS устанавливается в единичное состояние, а затем изменяется путем деления полей адреса, управления и информационного поля на образующий полином. Итак, запишем алгоритм вычисления FCS в математическом виде. К содержимому кадра, описываемого полиномом F (x) , добавляется набор единиц, количество которых равно длине поля CRC.

L

(

x

)

=

15

0

n=

x

n

=

1111111111111111

.

(3.1)

Отметим еще раз, что в (3.1) знак «сумма» означает не суммирование двоичных последовательностей, а образование полинома L(x) из всех степеней x от «0» до «15». Образованное таким образом число делится на производящий полином g(x) , и остаток от такого деления R(x) помещается в контрольное поле кадра, образуя тем самым канальный фрейм V (x)

(

k

+

16)

F

(

x

)

+

L

(

x

)

g

(

x

)

=

Q

(

x

)

+

R

(

x

) .

(3.2)

Здесь показана операция сдвига полинома k -ой степени F (x) влево на 16 позиций и добавления на освободившиеся позиции 16 единиц. Остаток R(x) заполняет поле контрольной последовательности кадра вместо L(x) . Канальный фрейм имеет вид

V (x) = (k + 16)F (x) + R(x) .

(3.3)

В приемнике, при типовой реализации FCS, первоначальное содержимое ячеек регистра устанавливается равным «1». Полученная последовательность, состоящая из защищенных разрядов полей кадра и FCS u(x) = (k + 16)F (x) + R(x) , умножается на x .

16

u(x) x

16

= (k + 16 + 16)F (x) +