Что такое проверка циклическим избыточным кодом и как она работает простыми словами (стиль для чайников)?

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

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

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

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

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

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

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


person Boyko Arsov    schedule 09.03.2012    source источник
comment
Вы пробовали прочитать статью об этом в википедии?   -  person kirilloid    schedule 09.03.2012
comment
Я предлагаю вам прочитать следующий pdf-файл: HackersDelight.org/crc.pdf   -  person guga    schedule 09.03.2012
comment
да, я читал оба, но я думал, что кто-нибудь может объяснить это лучше и проще...   -  person Boyko Arsov    schedule 11.03.2012


Ответы (1)


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

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

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

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

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

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

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

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

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

person Nick Libreman    schedule 12.03.2012
comment
Этот упрощенный ответ может стать хорошей отправной точкой для понимания концепции CRC. :) - person Amir Syafrudin; 22.10.2013