Существуют ли приложения, где количество сетевых портов недостаточно? - PullRequest
2 голосов
/ 07 октября 2010

В TCP / IP номер порта указывается 16-битным полем, что дает в общей сложности 65536 номеров портов. Тем не менее, нижний диапазон (на самом деле не знаю, как далеко он зашел) зарезервирован для системы и не может быть использован приложением. Предполагая, что доступно 60000 номеров портов, этого должно быть более чем достаточно для большинства приложений Nework. Тем не менее, в MMORPG-играх одновременно одновременно работают десятки тысяч пользователей.

Это заставило меня задуматься: бывают ли ситуации, когда сетевое приложение может исчерпать порты? Как можно обойти это ограничение?

Ответы [ 3 ]

2 голосов
/ 07 октября 2010

Вам не нужен один порт на соединение.

Соединение однозначно идентифицируется кортежем (адрес хоста, порт хоста, удаленный адрес, удаленный порт). Вероятно, ваш IP-адрес хоста одинаков для каждого соединения, но вы все равно можете обслуживать 100 000 клиентов на одном компьютере с одним портом. (Теоретически: до этого вы столкнетесь с проблемами, не связанными с портами.)

2 голосов
/ 07 октября 2010

Канонический стартовый ресурс для этой проблемы - Dan Kegels C10K page from 1999 .

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

Верхний диапазон часто используется ОС для обратных портов и NAT при создании соединений.

Короче говоря, потому чтоиз того, как работает TCP, порты могут заканчиваться, если установлено много соединений, а затем закрыты.Ограничение может быть смягчено до некоторой степени с помощью долгоживущих соединений, по одному для каждого клиента.

В HTTP это означает использование HTTP 1.1 и keep-alive.

0 голосов
/ 19 февраля 2019

Есть 2 ^ 16 = 65536 на IP-адрес .Другими словами, для компьютера с одним IP-адресом, чтобы исчерпать порты, он должен использовать более 65536 портов, что никогда не произойдет естественным образом!

Вы должны понимать сокет (IP + порт) исквозное устройство для связи

IPv4 является 32-разрядным, скажем, каким-то образом он может публично адресовать около 2 ^ 32 компьютеров (независимо от NAT).поэтому теперь возможно 2 ^ 16 * 2 ^ 32 = 2 ^ 48 открытых сокетов (порядка 10 ^ 15), поэтому у него не будет конфликта (опять же независимо от NATing).

ОднакоIPv6 введен, чтобы позволить больше общедоступных IP-адресов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...