Контрольная сумма Интернета
Интернета Контрольная сумма , [1] [2] , также называемая контрольной суммой заголовка IPv4 , Контрольная сумма используется в версии 4 ( Интернет-протокола IPv4) для обнаружения повреждений в заголовках пакетов IPv4. Он передается в заголовке IP-пакета и представляет собой 16-битный результат суммирования слов заголовка. [3]
Протокол IPv6 не использует контрольные суммы заголовков. Его разработчики посчитали, что контрольной суммы всего пакета на канальном уровне, предусмотренной в таких протоколах, как PPP и Ethernet , в сочетании с использованием контрольных сумм в протоколах верхнего уровня, таких как TCP и UDP , достаточно. [4] Таким образом, маршрутизаторы IPv6 освобождаются от необходимости пересчитывать контрольную сумму при каждом изменении пакета, например, путем уменьшения предела переходов счетчика на каждом переходе.
Контрольная сумма Интернета обязательна для обнаружения ошибок в UDP-пакетах IPv6 (включая полезные данные).
Контрольная сумма Интернета используется для обнаружения ошибок в пакетах ICMP (включая полезные данные).
Вычисление
[ редактировать ]Расчет контрольной суммы определяется следующим образом: [5]
Поле контрольной суммы представляет собой 16-битное дополнение суммы всех 16-битных слов в заголовке. Для расчета контрольной суммы значение поля контрольной суммы равно нулю.
Если повреждений нет, результат суммирования всего IP-заголовка, включая контрольную сумму, должен быть равен нулю. На каждом прыжке проверяется контрольная сумма. Пакеты с несовпадением контрольной суммы отбрасываются. Маршрутизатор должен скорректировать контрольную сумму, если он меняет заголовок IP (например, при уменьшении TTL). [6]
Процедура подробно описана в RFC 1071 «Вычисление контрольной суммы Интернета». [1] Оптимизации представлены в RFC 1624 «Вычисление контрольной суммы Интернета посредством инкрементного обновления». [2] чтобы охватить случай с маршрутизаторами, которым необходимо пересчитывать контрольную сумму заголовка во время пересылки пакета, когда изменилось только одно поле.
Примеры
[ редактировать ]Вычисление контрольной суммы заголовка IPv4
[ редактировать ]Возьмите следующий усеченный фрагмент пакета IPv4. Заголовок выделен жирным шрифтом, а контрольная сумма подчеркнута.
4500 0073 0000 4000 4011 b861 c0a8 0001
c0a8 00c7 0035 e97c 005f 279f 1e4b 8180
Для сложения дополнения до единиц каждый раз, когда происходит перенос, мы должны добавить 1 к сумме. [7] Проверка переноса и исправление могут выполняться при каждом добавлении или в качестве постобработки после всех добавлений. Если в результате коррекции создается еще один перенос, к сумме добавляется еще 1.
Чтобы вычислить контрольную сумму, мы можем сначала вычислить сумму каждого 16-битного значения в заголовке, пропуская только само поле контрольной суммы. Обратите внимание, что эти значения представлены в шестнадцатеричном формате.
Первоначальное дополнение: 4500 + 0073 + 0000 + 4000 + 4011 + c0a8 + 0001 + c0a8 + 00c7 = 2479c
Затем производится сложение переноса путем добавления пятой шестнадцатеричной цифры к первым 4 цифрам: 2 + 479c = 479e
Всегда требуется только одно добавление переноса даже для заголовка IPv4 максимальной длины, поскольку добавление переноса само по себе никогда не будет генерировать другой перенос.
Тогда контрольная сумма является дополнением единиц ( побитовое НЕ ) этого результата: NOT 479e = b861
Это значение контрольной суммы показано подчеркнутым в исходном заголовке IP-пакета выше.
Проверка контрольной суммы заголовка IPv4
[ редактировать ]При проверке контрольной суммы используется та же процедура, что и выше, за исключением того, что исходная контрольная сумма заголовка не опускается.
4500 + 0073 + 0000 + 4000 + 4011 + b861 + c0a8 + 0001 + c0a8 + 00c7 = 2fffd
Добавьте биты переноса:
fffd + 2 = ffff
Взятие дополнения до единиц (переворачивание каждого бита) дает 0000, что означает, что ошибка не обнаружена.
Контрольная сумма IP-заголовка не проверяет правильный порядок 16-битных значений в заголовке.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Р. Брейден ; Д. Борман; К. Партридж (сентябрь 1988 г.). Вычисление контрольной суммы Интернета . Сетевая рабочая группа. дои : 10.17487/RFC1071 . РФК 1071 . Информационный. Обновлено РФК 1141 .
- ^ Jump up to: а б А. Риджсингани, изд. (май 1994 г.). Вычисление контрольной суммы Интернета посредством инкрементального обновления . Сетевая рабочая группа. дои : 10.17487/RFC1624 . РФК 1624 . Информационный. Обновления РФК 1141 .
- ^ Общий формат IP-дейтаграммы
- ^ Ильич ван Бейнум (сентябрь 2006 г.). «Внутреннее устройство IPv6» . Циско.
- ^ Дж. Постель , изд. (сентябрь 1981 г.). ИНТЕРНЕТ-ПРОТОКОЛ — СПЕЦИФИКАЦИЯ ПРОТОКОЛА ИНТЕРНЕТ-ПРОГРАММЫ DARPA . IETF . дои : 10.17487/RFC0791 . СТД 5. RFC 791 . IEN 128, 123, 111, 80, 54, 44, 41, 28, 26. Интернет-стандарт 5. Устарело . RFC 760. Updated by RFC 1349 , 2474 и 6864 .
- ^ Ф. Бейкер , изд. (июнь 1995 г.). Требования к маршрутизаторам IP версии 4 . Сетевая рабочая группа. дои : 10.17487/RFC1812 . РФК 1812 . Предлагаемый стандарт. Устаревшие RFC 1716 and 1009. Updated by RFC 2644 и 6633 .
- ^ «Вычисление суммы дополнения к 16-битной единице» . Архивировано из оригинала 17 ноября 2020 г.