Расчет контрольной суммы UDP прост:
- обрабатывает данные (полезную нагрузку, поля без контрольной суммы в заголовке UDP, некоторые поля из заголовка IP) как 16-битные целые числа
- Суммируйте их в 16 битах
- инвертировать каждый бит результата
Он построен таким образом, что проверка на принимающей стороне выполняется путем суммирования всех упомянутых данных и контрольной суммы и проверки, равен ли результат 0xffff
. Поэтому при вычислении контрольной суммы внешнего пакета может потребоваться пропустить поля суммирования, связанные с внутренним пакетом, но вместо этого добавить 0xffff
напрямую, что позволит сэкономить ресурсы.
Это применимо только в том случае, если смещение внутреннего пакета делится на 16 бит, поэтому при вычислении контрольной суммы для внешнего пакета и для внутреннего пакета используются одни и те же целые числа внутри внутреннего пакета.