Что такое циклическая проверка избыточности и как она работает в простых терминах (стиль для чайников)? - PullRequest
12 голосов
/ 09 марта 2012

У меня проблемы с пониманием концепции и работы уродливого звучащего термина " проверка циклическим избыточным кодом ".Я посещаю курс колледжа по компьютерным сетям и уже заблудился.

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

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

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

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

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

Я был быочень благодарен, что любой может помочь мне понять!

1 Ответ

27 голосов
/ 13 марта 2012

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

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

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

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

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

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

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

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

Надеюсь, это поможет вам разобраться в происходящем;)

...