Как IP-адрес назначается процессу в TCP?

Как IP-адрес назначается процессу в TCP?

Когда TCP-соединение устанавливается между двумя сокетами, предположим, что в компьютере есть несколько сетевых карт, поэтому к какому IP-адресу будет привязан сокет [или - какой IP-адрес будет передан в функцию bind() ] до установления связи. Это решает ОС?

В общем, у меня есть несколько сомнений:

  1. Вызывается ли функция socket(), bind(), connect() ОС? Если да, то какой IP-адрес передается в функцию bind() в случае, если в машине несколько сетевых карт? Я знаю, что могу ошибаться в некоторых местах, пожалуйста, поправьте меня

решение1

Вызываются ли функции socket(), bind(), connect() операционной системой?

Их не зовуткОС – оничастьОС, так их называет программа.

Если да, то какой IP-адрес передается в функцию bind() в случае, если в машине несколько сетевых карт?

Большинство программ не указывают адрес.

  • Когда программы вызывают bind() для выбора локального порта для приема входящих подключений, они могут использовать специальные значения [::](они же IN6ADDR_ANY_INIT) и 0.0.0.0(они же INADDR_ANY), указывающие, что они будут принимать подключения квсеадреса (текущие и будущие) на всех локальных сетевых картах.

  • При создании исходящих соединений программы обычно не вызывают bind()совсем, позволяя ОС определять как локальный адрес, так и локальный порт.

    Каждая ОС имеет немного различную логику выбора исходного адреса. (Например, начиная с Windows 7/Srv2008, ОС будет выбирать наименьший по номеру адрес из исходящего интерфейса. В Linux отдельные записи таблицы маршрутизации могут иметь «предпочтительный» исходный адрес для использования, если программа не выберет его.)

Когда программыделатьуказать локальный адрес, часто он выбирается пользователем, а не программой. (Например, большинство служб имеют настройку «адрес прослушивания» в своей конфигурации.)

Связанный контент