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

Какой исходный IP-адрес в tcp-сокете, если bind вызывается на многосетевом клиентском хосте? Клиент имеет два интерфейса eth0(IP0) и eth1(IP1), а клиентский сокет tcp привязан к IP0. После socket, bind, connect в клиенте он отправляет пакет на сервер. IP-адрес назначения servIP. Но servIP и IP0 не находятся в одной подсети (возможно, servIP и IP1). Какой исходный IP-адрес в пакете, отправленном на сервер? А что вернет getsockname?


person hel    schedule 11.01.2016    source источник
comment
Пожалуйста, отметьте вопрос как ответ, если он ответил на ваш вопрос.   -  person jpou    schedule 12.01.2016


Ответы (1)


Здесь есть две отдельные проблемы:

1) На какой IP привязываться?

При вызове bind() у вас есть возможность указать и адрес для привязки, или вы можете оставить это решение для стека TCP/IP на вашем компьютере. Вы можете передать конкретный адрес в параметре «addr» или оставить его как INADDR_ANY. Дополнительную информацию о том, как это сделать, можно найти на странице руководства ip(7) . Если вы вызываете bind(), предоставляя действительный IP-адрес, и вызов bind() завершается успешно, то дейтаграммы, отправленные с использованием привязанного сокета, будут иметь исходный адрес, установленный на значение, предоставленное при вызове bind().

2) Как маршрутизируется пакет?

Способ маршрутизации вашего пакета зависит только от адреса назначения, а не от адреса источника. Может случиться так, что ваш исходный адрес будет адресом от eth0, а он будет выходить через eht1. Это связано с тем, что система маршрутизации в вашей ОС использует маршрутизацию на основе пункта назначения, а не маршрутизацию на основе источника. Вы всегда можете увидеть, какой адаптер будет использоваться, введя команду «route» в консоли вашей ОС и сравнив вывод с адресом назначения.

person jpou    schedule 11.01.2016
comment
Спасибо! Я хочу знать взаимосвязь между IP-адресом привязки (вызываемым клиентом) и реальным IP-адресом источника в заголовке ip-датаграммы. Равно или нет? - person hel; 11.01.2016