2012-03-09 9 views
10

У меня возникли проблемы с пониманием концепции и работы уродливого звучащего термина «проверка циклической избыточности». Я посещаю курс колледжа в компьютерных сетях, и я уже заблудился.Что такое циклическая проверка избыточности и как она работает в простых терминах (стиль для «манекенов»)?

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

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

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

Может ли кто-нибудь помочь мне с объяснением этой концепции в простых выражениях и, возможно, привести пример?

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

Буду признателен, если кто-нибудь может помочь мне понять!

+0

Вы пытались прочитать статью о нем в Википедии? – kirilloid

+0

Я предлагаю вам прочитать следующий pdf-файл: http://www.HackersDelight.org/crc.pdf – guga

+0

да, я читал оба, но я думал, что кто-то может объяснить это лучше и более простыми словами ... –

ответ

19

Если вы хотите, чтобы ответ очень прост вам нужно принять некоторое упрощение, если вы готовы жить с этим, здесь идет:

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

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

Теперь, если вы могли бы рассчитать некоторое значение, которое намного меньше, чем сами данные, зависит от него? Поэтому, если данные изменились по пути (из-за ошибки), вычисленное значение больше не «сопоставило» данные, и вы знали бы, что произошла ошибка. Есть ли такой расчет?

Как насчет простого разделения и принятия остатка в качестве этого значения?

Скажите, что я хочу передать информацию/номер 1000. Я делю его по выбранному числу - например, 6 ..., что дает мне 166 и остаток 4. Я беру оставшуюся часть в качестве моего значения проверки, которое намного меньше, чем информация, которую я фактически передаю, поэтому я не трачу слишком большая пропускная способность, и я передаю 1000, а затем 4. Получатель получает его, занимает число 1000, делит его на 6, а если остаток равен 4, то он предполагает, что ошибки не произошло.

Если произошла ошибка, и она получит 998 вместо 1000 из-за ошибки в ссылке - она ​​разделит ее на 6, получит остаток 2, который не соответствует 4, а альта знает, что произошла ошибка. Это основной принцип CRC.

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

Я надеюсь, что это поможет вам получить вокруг головы на то, что происходит;)

+1

Этот упрощенный ответ может быть хорошей отправной точкой для понимания концепции CRC. :) –