Контроль правильності передачі даних в мережах.

При передаче данных по сети причинами возникновения ошибок могут быть:

1)искажение сигнала при передаче по линиям связи, например, вследствие помех

2)сбои в работе аппаратуры передачи данных (модемов, мультиплексоров)

3)неисправности на сетевых узлах, через которые проходят пакет сообщения при передаче по сети

4)нарушения в работе программ на передающем и принимающем узлах сети

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

В современных моделях устройств передачи данных для коррекции ошибок используются специальные методы, в частности, ARQ (automatic repeat request), обеспечивающий коррекцию ошибок путем повторной пересылки ошибочных блоков.

 

Одновременно с проверкой ошибок реализуются методы сжатия данных, позволяющие уменьшить объем передаваемых данных.

В частности, может использоваться метод сжатия, когда часто встречающиеся символы кодируются короткими последовательностями битов, а редко встречающиеся - длинными последовательностями. Другой метод сжатия - замена последовательности одинаковых битов значением бита и длиной последовательности. Наиболее эффективными протоколами сжатия данных и коррекции ошибок являются протоколы ITU V.42, V.42 bis и V.44.

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

Использование бита четности

Байт, как известно, содержит 8 битов. Добавим к ним еще один - бит четности, то есть бит, значение которого будет равно 1, если в передаваемом байте четное число единиц, или 0, если число единиц нечетное. Например, передается байт 27. В двоичном виде это 00011011. в данном байте четыре единицы, то есть четное число единиц. Значит, и бит четности должен быть равен 1. Теперь рассмотрим байт 21 (в двоичном виде 00010101). Здесь 3 единицы, то есть нечетное число, следовательно, бит четности должен быть равен 0. Посмотрим, как бит четности используется для проверки правильности передачи данных. Пусть получена следовательность битов 010110111, где левые 8 битов представляют собой полезную информацию, а самый правый бит является битом четности. В байте 5 единичных битов, следовательно, бит четности должен быть равен 0, а он равен 1, значит, передача прошла неверно. Как правило, установка и анализ бита четности выполняется аппаратурой приема/передачи данных на аппаратном уровне, то есть на физическом уровне модели OSI.

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

Расчет контрольной суммы

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

В передаваемом пакете под контрольную сумму отводится определенное место. Рассмотрим пример.

Пусть пакет содержит всего 4 байта с ненулевыми значениями: 27, 21, 34, 52 (а все остальные байты равны 0). Рассчитаем контрольную сумму: 27+21+34+52=134. Эта контрольная сумма также будет записана в пакет. Допустим, при передаче произошло искажение информации, и на приемном конце получилась следующая последовательность:

134, 27, 23, 34, 52, 0, 0….. (Здесь первое число представляет собой контрольную сумму, а остальные - полезную информацию)

Рассчитывается контрольная сумма принятых байтов и сравнивается с полученной – 27+23+34+52=136<>134, значит, произошла ошибка.

Обеспечение надежности на транспортном уровне стека протоколов

Передача данных по сети представляет собой сложный процесс. Сообщение, передаваемое от одного узла к другому, делится на пакеты, причем каждый из пакетов может доставляться получателю по своему маршруту, отличному от остальных пакетов. В связи с этим важно не только правильно передать каждый пакет, но и собрать их в нужном порядке на узле – получателе, а также уведомить узел - отправитель в случае возникновения ошибки. Все эти операции возлагаются на протоколы транспортного уровня. При этом, чем выше надежность, тем больше дополнительной (служебной) информации передается по сети, и тем, соответственно, ниже скорость соединения. В стеке TCP/IP существует два протокола транспортного уровня: TCP и UDP.

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

В сетях с короткими соединениями для быстрого обмена небольшими сообщениями используется протокол UDP. Как правило, он используется приложениями, для которых не требуется повтор передачи потерянных данных, например, службой времени, поскольку повтор передачи пакета с устаревшим временем не имеет смысла.