Каково значение псевдозаголовка, используемого в UDP/TCP

Почему псевдозаголовок добавляется к дейтаграмме UDP для вычисления Контрольная сумма UDP? Что за этим стоит?


person Mahesh    schedule 11.12.2008    source источник


Ответы (5)


С точки зрения TCP или UDP пакет не содержит IP-адресов. (IP — это слой под ними.)

Таким образом, для правильной проверки контрольной суммы включается «псевдозаголовок». Это «псевдо», потому что на самом деле он не является частью дейтаграммы UDP. Он содержит наиболее важные части заголовка IP, то есть адрес источника и получателя, номер протокола и длину данных.

Это делается для того, чтобы контрольная сумма UDP учитывала эти поля.

person mat    schedule 11.12.2008

Ближайший ответ «прямо из первых уст» вы получите от Дэвида П. Рида по следующей ссылке.

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 решили увековечить эту связь, а не воспользоваться шансом отменить ее, мне непонятно.

person TFBW    schedule 15.05.2010
comment
Я просто подумал: может быть, причина сохранения этого наследия в IPv6 заключается в том, что IPv6 позволяет избежать NAT, и, таким образом, возродилась идея шифрования заголовка TCP. - person Hi-Angel; 24.05.2014
comment
Почему разработчики IPv6 решили увековечить эту связь, а не воспользоваться шансом отменить ее, мне непонятно. ‹-- потому что на уровне ip в v6 нет контрольной суммы. - person Xavier Nicollet; 16.12.2017

«Целью использования псевдозаголовка является проверка того, что дейтаграмма UDP достигла своего правильного пункта назначения. Ключ к пониманию псевдозаголовка заключается в понимании того, что правильный пункт назначения состоит из конкретной машины и определенного порта протокола на этой машине. . Сам заголовок UDP указывает только номер порта протокола. Таким образом, для проверки адресата UDP на машине-отправителе вычисляет контрольную сумму, которая охватывает IP-адрес получателя, а также дейтаграмму UDP. Псевдозаголовок не передается вместе с UDP. дейтаграмма, и она не включена в длину».

Э. Комер - Работа в сети с TCP/IP, 4-е издание.

person Tudor    schedule 09.02.2014
comment
@UweKeim Как новичок, я надеюсь, что концепция IP-адресов присутствует на сетевом уровне, а транспортный уровень находится над ним, так как же транспортный уровень знает IP-адрес на стороне отправителя, потому что на стороне отправителя сначала транспорт заголовок уровня сначала инкапсулируется вокруг данных, поступающих с прикладного уровня, а затем прикрепляется заголовок IP. Я имею в виду, как транспортный уровень узнает IP-адрес, когда это средство присутствует на нижнем уровне (сетевом уровне)? - person ajaysinghnegi; 25.11.2018

Когда разрабатывались эти протоколы, их серьезной проблемой было получение хостом пакета, который думал, что он принадлежит ему, хотя на самом деле это не так. Если несколько битов в заголовке IP были перевернуты во время передачи и пакет изменил курс (но контрольная сумма IP все еще была правильной), стек TCP/UDP перенаправленного получателя все еще может знать, что пакет следует отклонить.

Хотя псевдозаголовок нарушил идиому разделения слоев, он был сочтен приемлемым для повышения надежности.

person jdizzle    schedule 27.02.2009
comment
Большое спасибо за ответ после долгой публикации вопроса. Я рад, что спустя долгое время после публикации вопроса вы ответили на вопрос, а не просто прочитали и перешли к следующему вопросу. ТАК, ребята, действительно крутые. - person Mahesh; 05.03.2009
comment
Разве это уже не учтено в контрольной сумме IP-заголовка? - person 0xab3d; 24.05.2015
comment
@ 0xab3d Пусть машина X отправит пакет машине Z. Предположим, что по пути пакет поврежден. Из-за повреждения пункт назначения пакета меняется на машину Y, а контрольная сумма изменяется таким образом, что полученное значение контрольной суммы идеально соответствует поврежденным данным. Теперь этот пакет будет доставлен на машину Y, а не на машину Z. Сетевой уровень Y также безоговорочно примет пакет. Теперь, если поле контрольной суммы транспортного уровня Y использует «псевдо-заголовок» при вычислении контрольной суммы, тогда проблем нет. В противном случае Y примет не предназначенный для него пакет. - person Argon; 11.06.2020

Заголовок псевдо-IP содержит поля IP-адреса источника, IP-адреса назначения, протокола и общей длины. Теперь, включив эти поля в контрольную сумму TCP, мы проверяем контрольную сумму для этих полей как на сетевом уровне, так и на транспортном уровне, тем самым выполняя двойную проверку, чтобы убедиться, что данные доставлены на правильный хост.

person Vaibhav Kedia    schedule 29.01.2020