Есть ли способ предсказать внешнюю контрольную сумму UDP из внутренней контрольной суммы UDP - PullRequest
0 голосов
/ 14 мая 2019

В туннелированном пакете может существовать два заголовка UDP. Один внешний UDP и один внутренний UDP, например, MAC + externalIP + outerUDP + дополнительный заголовок + innerIP + innerUDP + полезная нагрузка.

Внутренний UDP имеет собственную контрольную сумму.

Существует ли оптимизированный способ вычисления контрольной суммы externalUDP путем манипулирования значением контрольной суммы innerUDP без повторного вычисления суммы по полезной нагрузке?

1 Ответ

0 голосов
/ 14 мая 2019

Расчет контрольной суммы UDP прост:

  • обрабатывает данные (полезную нагрузку, поля без контрольной суммы в заголовке UDP, некоторые поля из заголовка IP) как 16-битные целые числа
  • Суммируйте их в 16 битах
  • инвертировать каждый бит результата

Он построен таким образом, что проверка на принимающей стороне выполняется путем суммирования всех упомянутых данных и контрольной суммы и проверки, равен ли результат 0xffff. Поэтому при вычислении контрольной суммы внешнего пакета может потребоваться пропустить поля суммирования, связанные с внутренним пакетом, но вместо этого добавить 0xffff напрямую, что позволит сэкономить ресурсы.

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

...