Почему псевдозаголовок добавляется к дейтаграмме UDP для вычисления Контрольная сумма UDP? Что за этим стоит?
Каково значение псевдозаголовка, используемого в UDP/TCP
Ответы (5)
С точки зрения TCP или UDP пакет не содержит IP-адресов. (IP — это слой под ними.)
Таким образом, для правильной проверки контрольной суммы включается «псевдозаголовок». Это «псевдо», потому что на самом деле он не является частью дейтаграммы UDP. Он содержит наиболее важные части заголовка IP, то есть адрес источника и получателя, номер протокола и длину данных.
Это делается для того, чтобы контрольная сумма UDP учитывала эти поля.
Ближайший ответ «прямо из первых уст» вы получите от Дэвида П. Рида по следующей ссылке.
http://www.postel.org/pipermail/end2end-interest/2005-February/004616.html
Краткая версия ответа: «псевдозаголовок существует по историческим причинам».
Первоначально TCP/IP был единым монолитным протоколом (называемым просто TCP). Когда они решили разделить его на TCP и IP (и другие), они не разделили их так четко: IP-адреса по-прежнему считались частью TCP, но они были просто «унаследованы» от уровня IP. а не повторяться в заголовке TCP. Причина, по которой контрольная сумма TCP работает с частями заголовка IP (включая IP-адреса), заключается в том, что они намеревались использовать криптографию для шифрования и аутентификации полезной нагрузки TCP, и они хотели, чтобы IP-адреса и другие параметры TCP в псевдозаголовке были защищен кодом аутентификации. Это сделало бы невозможным вмешательство человека посередине в IP-адреса источника и получателя: промежуточные маршрутизаторы не заметят подделки, но конечная точка TCP заметит, когда попытается проверить подпись.
По разным причинам ни один из этих грандиозных криптографических планов не был реализован, но контрольная сумма TCP, которая заняла его место, по-прежнему работает с псевдозаголовком, как если бы это была полезная вещь. Да, он дает вам небольшую дополнительную защиту от случайных ошибок, но он существует не для этого. Честно говоря, нам было бы лучше без него: связь между TCP и IP означает, что вам придется переопределять TCP при смене IP. Таким образом, определение IPv6 включает новое определение для псевдозаголовков TCP и UDP (см. RFC 2460, s8.1). Почему разработчики IPv6 решили увековечить эту связь, а не воспользоваться шансом отменить ее, мне непонятно.
«Целью использования псевдозаголовка является проверка того, что дейтаграмма UDP достигла своего правильного пункта назначения. Ключ к пониманию псевдозаголовка заключается в понимании того, что правильный пункт назначения состоит из конкретной машины и определенного порта протокола на этой машине. . Сам заголовок UDP указывает только номер порта протокола. Таким образом, для проверки адресата UDP на машине-отправителе вычисляет контрольную сумму, которая охватывает IP-адрес получателя, а также дейтаграмму UDP. Псевдозаголовок не передается вместе с UDP. дейтаграмма, и она не включена в длину».
Э. Комер - Работа в сети с TCP/IP, 4-е издание.
Когда разрабатывались эти протоколы, их серьезной проблемой было получение хостом пакета, который думал, что он принадлежит ему, хотя на самом деле это не так. Если несколько битов в заголовке IP были перевернуты во время передачи и пакет изменил курс (но контрольная сумма IP все еще была правильной), стек TCP/UDP перенаправленного получателя все еще может знать, что пакет следует отклонить.
Хотя псевдозаголовок нарушил идиому разделения слоев, он был сочтен приемлемым для повышения надежности.
Заголовок псевдо-IP содержит поля IP-адреса источника, IP-адреса назначения, протокола и общей длины. Теперь, включив эти поля в контрольную сумму TCP, мы проверяем контрольную сумму для этих полей как на сетевом уровне, так и на транспортном уровне, тем самым выполняя двойную проверку, чтобы убедиться, что данные доставлены на правильный хост.