metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2011-05-04 08:12 am

Ад программизма и трэш админства

Винда на интернет-шлюзе:

Венда в этом разе - ужасный вариант, но по причине того, что помимо шлюза на этом мегаведре еще стоят чудесные клиент-банки, которые ТУПО НЕ РАБОТАЮТ ЧЕРЕЗ НАТ, и об этом ТП говорит прямым текстом, то тут можно только обнять все это хозяйство и плакать

софтина не работает если на одном из интерфейсов стоит не инетовский адрес, я не знаю, что они там натворили, но работает только так

Если мы мне такое попалось - я бы сломал голову, но дрянь эту бы разобрал по косточкам и по возможности придумал костыль для запуска через НАТ, вплоть до VPN в интернеты.
Потому что подход "абы работало", реализуемый через извращения меня бесит. В данном случае извращением являются винда на шлюзе и всякие кульные прожки типа керио или юзергейта. И костыли с извращениями нужно локализовывать, а не ставить их в центре всего.

[identity profile] metaclass.livejournal.com 2011-05-04 08:03 am (UTC)(link)
Это порты на стороне клиента, с которых идет подключение. Они вместе с исходящим адресом действительно уникально адресуют коннект.

[identity profile] trueblacker.livejournal.com 2011-05-04 08:10 am (UTC)(link)
гм. Может и так.
значит этот вывод netstat'а не относится к обсуждаемому вопросу.
Вопрос на засыпку. Как работает TCP-соединение сервера с кучей клиентов, если у всех у них входящий серверный порт совпалает?
Программа пишет чо-то в сокет, а как этот сокет определяет, какому из клиентов отправить этот пакет?

[identity profile] jamhed.livejournal.com 2011-05-04 08:16 am (UTC)(link)
вывод netstat - относится. tcp-сокет идентифицируется 4 параметрами (src_ip, src_port, dst_ip, dst_port) со стороны ядра, и одним числом -- номером сокета для программиста. вот она, матчасть-то.

[identity profile] trueblacker.livejournal.com 2011-05-04 08:29 am (UTC)(link)
ну вот теперь расскажите мне, где в вашем дампе нетстата src_port

[identity profile] metaclass.livejournal.com 2011-05-04 08:31 am (UTC)(link)
484*

[identity profile] jamhed.livejournal.com 2011-05-04 08:34 am (UTC)(link)
дятел такой дятел:
Local Address Foreign Address
127.0.0.1:5432 127.0.0.1:48454

с точки зрения клиента:
src_host: 127.0.0.1, src_port: 48454, dst_host: 127.0.0.1, dst_port: 5432

с точки зрения сервера:
src_host: 127.0.0.1, src_port: 5432, dst_host: 127.0.0.1, dst_port: 48454

[identity profile] metaclass.livejournal.com 2011-05-04 08:17 am (UTC)(link)
Программа(сервер) пишет в РАЗНЫЕ сокеты. Каждому клиентскому соединению после accept выделяется свой сокет.

[identity profile] trueblacker.livejournal.com 2011-05-04 08:21 am (UTC)(link)
ещё полшага ребе.
Что будет, если у этого сокета, который вернулся через accept, запросить номер порта?
Он будет тот же, что передавался в bind ?

[identity profile] metaclass.livejournal.com 2011-05-04 08:30 am (UTC)(link)
Вернется адрес клиентского порта - с которого соединение исходит и который физически открыт на клиенте, чо.

[identity profile] trueblacker.livejournal.com 2011-05-04 08:37 am (UTC)(link)
да я не про клиентский порт, а про серверный, неужели не понятно?!

[identity profile] metaclass.livejournal.com 2011-05-04 08:42 am (UTC)(link)
Серверный ровно один. 5432 в данном случае. 484* - клиентские.

[identity profile] trueblacker.livejournal.com 2011-05-04 08:46 am (UTC)(link)
как может быть один порт, обслуживающий все клиентские соединения???
вы там укурились штоле

[identity profile] metaclass.livejournal.com 2011-05-04 08:50 am (UTC)(link)
Да элементарно. Я ж говорю - приходит пакет, в нем адрес и порт откуда пришло и адрес и порт куда должно придти - первое разное(разные клиенты), второе одинаковое(сервер). По паре "откуда пришло" содержимое пакета запиливается в нужный акцептированный сокет, ну или там новое соединение создается.

[identity profile] jamhed.livejournal.com 2011-05-04 08:53 am (UTC)(link)
> ну или там новое соединение создается.

правильнее сказать что происходит accept на слушающем сокете, и если somaxconn не превышен.