Доброго вечера.
Почитал, и, как понял, CRC контроль не обеспечивает 100% исключения ошибок.
Здравствуйте.
Конечно, 100% не сможет обеспечить в принципе. Например, возьмем 32-разрядный вариант CRC. Он каждой последовательности данных ставит в соответствие контрольный код. Поскольку вариантов кода 2
32 (хоть и относительно большое, порядка четырех миллиардов с хвостиком, но все же конечное число), а возможных последовательностей - бесконечное число, то всегда можно
умышленно исказить данные так, что контроль CRC не сможет обнаружить подлога.
Мысленный эксперимент - берем 2
32+1 случайных файлов и вычисляем CRC. Как минимум у двух контрольные суммы совпадут при различном содержимом. Следовательно, о 100% не может быть и речи.
Главное тут, чтобы вероятность обнаружения
случайной ошибки (помехи, пора носителя и т.д.) была достаточно мала для практических применений.
каким критерием надёжности пользуются разработчики при выборе того или иного полинома?
Обычно используют статистику помех, с которыми собираются бороться. Например, если это помехи в линии связи, то вероятнее повреждение одним импульсом помехи смежных битов посылки, чем далеко отстоящих. То же самое с носителями - пылинка или царапина на ленте стриммера или диске опять же с наибольшей вероятностью повредит смежные биты (хотя пример надуманный, конечно, там обычно контрольные коды помощнее, чем CRC, с исправлением ошибок).
Соответственно и полином стараются подобрать такой, чтобы повреждение соседних битов давало большой разброс контрольного кода.