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

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

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

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

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

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

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

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

Ответ 1

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

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

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

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

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

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

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

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

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