Как контрольная сумма для 1-го уровня полезна для обнаружения ошибок?
Контрольная сумма может быть сгенерирована просто путем добавления битов. Как дополнительный шаг в использовании 1-го дополнения полезен?
Я понимаю теорию. Я знаю, как рассчитать 1s дополнение, и я знаю, как добавление дополнений делает результат всех 1s.
Я хотел бы увидеть простой пример того, как обнаружена ошибка.
Ответы
Ответ 1
Я считаю, что пример, который вы ищете, можно найти здесь.
Причина, по которой мы делаем 1 дополнение, заключается в том, что когда 1 дополнение добавляется к сумме всех значений, а результат обрезается до длины бит машины (16 бит в примере выше), это все 1-х. ЦП имеют функцию, чтобы взять 1 дополнение чисел, и взятие 1 дополнения к all-1 - все-0.
Причина: процессоры ненавидят работу с битами, за исключением кусков, сколько их обычно используют. Таким образом, добавление двух 64-битных чисел может занять 1 цикл, но при проверке всех битов этого числа индивидуально потребуется еще много (в наивном цикле, возможно, до 8х64 циклов). ЦП также имеют возможность тривиально принимать 1 дополнение и обнаруживать, что результат последнего вычисления был равен нулю, не проверяя отдельные биты и ветвь на основе этого. Таким образом, в основном это оптимизация, которая позволяет нам быстро проверять контрольные суммы. Поскольку большинство пакетов просто отлично, это позволяет нам проверять контрольную сумму "на лету" и быстрее получать данные в пункт назначения.
Ответ 2
Пример. У вас есть три слова в пакете UDP, которые необходимо отправить.
0110011001100000
0101010101010101
1000111100001100
UDP на стороне отправителя выполняет 1s-дополнение суммы всех 16-разрядных
слова. Сумма первых двух из этих 16-битных слов
0110011001100000
+
0101010101010101
--> 1011101110110101
Добавление третьего слова к приведенной выше сумме дает, Обратите внимание, что это последнее добавление имело переполнение, которое было обернуто вокруг
--> 0100101011000010
Дополнение 1s получается путем преобразования всех 0s в 1s и преобразования всех 1s в 0s.
Таким образом, 1s-дополнение суммы 0100101011000010
составляет 1011010100111101
, что становится контрольной суммой. В приемнике добавляются все четыре 16-битных слова, включая контрольную сумму. Если в пакет не введены ошибки, то, очевидно, сумма в приемнике будет 1111111111111111
. Если один из битов равен 0, то мы знаем, что ошибки были введены в пакет.
Ответ 3
Под "добавлением бит" я предполагаю, что вы имеете в виду вычисление бит четности. Согласно этой записи в Википедии о контрольных суммах, для контрольной суммы четности "вероятность обнаружения двухбитовой ошибки равна 1/n", а при модульная сумма (такая как дополнение 1s) "вероятность того, что двухбитовая ошибка не будет обнаружена, немного меньше 1/n."
В этой колонке "Спросить доктора Math" обсуждается, как рассчитать дополнение 1s (чаще всего для TCP/IP).
Ответ 4
Одно дополнение (инверсия битов) контрольной суммы полезно, по крайней мере, двумя способами.
- Упрощает процесс проверки контрольной суммы
Если, например, конечная контрольная сумма равна 56, дополнение будет 199. Сложите их вместе, и результат будет 255. Обоснование: при дополнении окончательной контрольной суммы конечный результат всегда будет 255 при включении цифры контрольной суммы в сумму расчет. Выполнение дополнения во второй раз с 255 даст 0, что для процессоров в то время было более эффективным способом подтвердить, что контрольная сумма действительна, не сравнивая два числа.
- Позволяет обнаружить одну необнаружимую ошибку
Вычисление сообщения из n нулей дает контрольную сумму нуля. Это означает, что допустимое сообщение, состоящее из нулей, неотличимо от потери памяти или ситуации стирания, которая должна быть обнаружена как ошибка. Дополняя окончательную контрольную сумму 0 в этом случае, вместо этого получается 255, предотвращая сохранение результата с нулем.
Ответ 5
Контрольная сумма очень важна для работы в сети, как упоминается partickmdnet. В принципе, для каждой дейтаграммы, переданной в IP-протоколе, есть контрольная сумма, которая была вычислена заранее и передана. Если даже один бит поврежден и отправлен неправильно в части данных дейтаграммы, тогда контрольная сумма, вычисленная на принимающем маршрутизаторе, будет отличаться от контрольной суммы, предоставляемой дейтаграммой. Это сообщает маршрутизатору, что датаграмма повреждена (либо сама информация, либо сама контрольная сумма), и маршрутизатор будет отбрасывать дейтаграмму.