Как транспортный уровень извлекает исходный IP-адрес из пакета дейтаграммы?

Как транспортный уровень извлекает исходный IP-адрес из пакета дейтаграммы? Насколько я понимаю, IP-адрес находится в заголовке сетевого уровня, а заголовок транспортного уровня содержит только исходный порт и порт назначения. Пожалуйста, дайте мне знать, если я что-то упустил


person user1082802    schedule 06.12.2011    source источник
comment
Я предполагаю, что вам интересно, как такие вызовы, как recvfrom, заполняют исходный адрес? Я предлагаю прочитать исходный код для Linux, BSD или любой другой операционной системы с открытым сетевым стеком, так как это сильно зависит от ОС.   -  person Some programmer dude    schedule 06.12.2011


Ответы (1)


Простой ответ заключается в том, что транспортный уровень не извлекает IP-адрес из пакета дейтаграммы.

Когда дейтаграмма отправляется от источника к получателю, вот простые шаги по тому, как работает IP при перемещении дейтаграммы:

  • Приложение верхнего уровня отправляет пакет на сетевой уровень.
  • Расчет данных вместе с контрольной суммой.
  • Заголовок IP и дейтаграмма созданы.
  • Маршрутизируется через шлюзы.
  • Уровень IP каждого шлюза выполняет контрольную сумму. Если контрольная сумма не совпадает, дейтаграмма будет отброшена, а на отправляющую машину будет отправлено сообщение об ошибке. Попутно, если TTL уменьшится до 0, произойдет тот же результат. И путь маршрутизации адреса назначения будет определяться на каждой остановке, когда дейтаграмма проходит по сети.
  • Дейтаграмма попадает на сетевой уровень назначения.
  • Выполнен расчет контрольной суммы.
  • IP-заголовок удален.
  • Сообщение передается приложению верхнего уровня.

ИЗМЕНИТЬ

Приложение привязывает сокет к своей конечной точке передачи данных, которая представляет собой комбинацию IP-адреса и служебного порта. Эта привязка затем используется для определения того, к какому приложению на прикладном уровне необходимо перейти.

Например, приложение A предоставляет службу UDP на определенном порту X. Затем, когда приложение A запустится, оно попытается выполнить привязку к порту X. Если оно не может выполнить привязку к нему, поскольку порт используется, операционная система вызовет ошибка, которую затем должно обработать приложение. Также в архитектуре OSI каждый уровень полагается на нижележащий уровень для фактической передачи данных, добавляя или предоставляя определенные функции для своих собственных целей.

По данным РФЦ

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

Дополнительные сведения об особенностях см. в RFC Протокол пользовательских дейтаграмм.

person One-One    schedule 06.12.2011
comment
Это не ответило на вопрос. Он спрашивает, как верхние уровни, такие как транспортный уровень (или даже прикладной уровень), определяют IP-адрес, поскольку они, очевидно, не имеют доступа к заголовку IP. - person Jonathan M; 06.12.2011
comment
Его вопрос заключается в том, что, поскольку верхние уровни, очевидно, знают IP-адрес, ясно, что они откуда-то его получают. Как они это получают? - person Jonathan M; 06.12.2011
comment
@JonathanM Я добавил еще несколько пояснений и ссылку на RFC. - person One-One; 06.12.2011