Если существует ограничение на количество портов, которое может иметь одна машина, и сокет может связываться только с неиспользуемым номером порта, то как серверы, получающие чрезвычайно большое количество запросов (больше, чем максимальное количество портов), обрабатывают это? Это просто сделано, делая систему распределенной, то есть много серверов на многих машинах?
29
Вы ошибаетесь - уникальность сокета определяется четырьмя факторами:
При предложении сетевых сервисов 1. и 2. обычно являются статическими (например, IP 10.0.0.1, порт 80), но если вы не ожидаете тысячи соединений от одного клиента (или одного шлюза NAT), вы не собираетесь выдвигать границы возможных комбинаций 3. и 4. до того, как закончатся локальные ресурсы.
Таким образом, хотя практически клиент не будет использовать уже используемый порт для подключения, чтобы открыть подключение к другому IP-адресу назначения, истощение номера порта будет наименьшей из ваших проблем практически для любого приложения - будь то на сервере или сторона клиента.
Проблема вполне реальная: шлюзы NAT (маршрутизаторы) обслуживают клиентов с большим количеством открытых исходящих соединений (например, торрентов) - там вы увидите истощение номера порта после опустошения пула портов, доступного для NAT. В этом случае шлюз NAT не может создать какие-либо дополнительные ассоциации, тем самым эффективно отключая клиентов от Интернета.
источник
Вопрос заключался в том, как обрабатывать большое (> 64 КБ) количество подключений. Два наиболее распространенных метода:
Добавление большего количества серверов, что увеличивает количество адресов src / dst и кортежей номеров портов. Есть несколько способов распределить нагрузку между несколькими серверами; DNS Round Robin является одним; есть другие
Разверните «NAT операторского уровня» (который, по моему мнению, недоверчиво и правильно друг называет «более грубым NAT»). По сути, это NAT NAT. Это имеет очень плохие последствия для приложений, но это то, что делают некоторые крупные провайдеры, когда им не хватает пространства IPv4 и / или номеров портов, и / или они не хотят переходить на IPv6.
источник
(more than the max port number)
.