Номер порта источника, как правило, практически не имеет отношения к вашему программированию, если у вас нет маршрутизатора или брандмауэра, который является каким-то ограничительным в этом отношении. Он просто используется базовой инфраструктурой TCP для отслеживания различных TCP-соединений.
От this article:
TCP/IP соединение идентифицируется четыре элемента кортежа в: {исходный IP-, порт источника, IP назначения, порт назначения}. Для установления соединения TCP/IP требуется только IP-адрес и номер порта назначения, операционная система автоматически выбирает исходный IP-адрес и порт.
В приведенной выше статье описывается, как Linux выбирает номер порта источника.
Что касается ваших конкретных вопросов:
Какой алгоритм узла используется для назначения «случайный» порт для клиента ? Как это работает, определяется ли это узлом или ОС?
Определяется ОС. Этот номер порта источника выбирается исходящим хостом на уровне TCP до того, как соединение будет выполнено даже с узлом .js.
Некоторые другие справочные статьи:
Does the TCP source port have to be unique per host?
how can an application use port 80/HTTP without conflicting with browsers?
Примечание: нет никаких оснований безопасности я знаю для брандмауэра, чтобы ограничить номер порта источника или заблокировать определенный номера портов источника. Они - только номер бухгалтерии TCP, не связанный вообще с безопасностью или типом используемой службы. Обратите внимание, что это отличается от порта назначения, который обычно коррелирует непосредственно с типом используемой службы (например, 80 - это HTTP, 25 - SMTP, 143 - IMAP и т. Д. Когда вы делаете TCP-соединение с другим хостом, вы указываете адрес хоста и номер порта назначения. Вы не указываете номер порта источника.
В моем исходном случае порта имеет значение, а потому что правила брандмауэра ограничительных (не определен мною, что означает, что я не могу изменить те). Поэтому в моем случае (на основе статьи, которую вы поделили) «cat/proc/sys/net/ipv4/ip_local_port_range» (linux) этот диапазон портов должен быть разрешен брандмауэром, чтобы клиент работал правильно. Я прав? – cool
@cool - вы на 100% уверены, что порт источника ограничен брандмауэром. Очень часто ограничивается порт назначения, но не является общим для ограничения исходного порта (поскольку исходный порт не связан с безопасностью и является случайным значением, выбранным операционной системой хоста, создающей соединение). Фактически, блокировка номеров портов источника, которые регулярно назначаются исходящим TCP-соединениям, заставит многие вещи не работать, если порт источника был ограничен (включая интернет-просмотр). – jfriend00
@cool - вам, возможно, нужно настроить клиента для использования внутреннего прокси для законного прохождения брандмауэра? – jfriend00