Подтвердить что ты не робот

Максимальное количество одновременных подключений на одном порту (сокете) сервера

Каким может быть максимальное количество одновременных клиентов (с использованием другого номера порта), которые могли бы связываться с сервером на одном и том же порту (один сокет)? Каковы факторы, которые могут повлиять на этот счет? Я ищу эту информацию w.r.t telnet в среде Linux.

4b9b3361

Ответ 1

Это частично зависит от вашей операционной системы.

Однако для конкретного порта нет ограничений. Однако существует ограничение на количество одновременных подключений, обычно ограниченное количеством файловых дескрипторов, поддерживаемых ядром (например, 2048).

Следует помнить, что TCP-соединение уникально, а соединение - это пара конечных точек (локальный и удаленный IP-адрес и порт), поэтому не имеет значения, подключено ли 1000 подключений к одному и тому же порту на сервере, потому что соединения все еще уникальны, потому что другой конец отличается.

Другим лимитом, о котором следует знать, является то, что машина может делать только исходящие соединения на 64 КБ или ограничение ядра на соединениях, в зависимости от того, что меньше. Это потому, что порт представляет собой 16-разрядное число без знака (0-65535), и каждое исходящее соединение использует один из этих портов.

Вы можете расширить это, предоставив машине дополнительные IP-адреса. Каждый IP-адрес - это еще одно адресное пространство с адресами в 64 КБ.

Ответ 2

Больше, чем вам нужно. Вернее.

  • Больше, чем ваш код может обрабатывать (по другим причинам)
  • Больше, чем ваши клиенты действительно сделают
  • Больше, чем вы можете обрабатывать в одном окне по причинам производительности
  • Больше, чем вам нужно в одном ящике, потому что ваши балансировочные балансы распределят их по нескольким причинам доступности в любом случае

Я могу гарантировать, что это больше, чем все. Существуют ограничения масштабируемости с большим количеством сокетов, с которыми можно работать (Google для проблемы c10k). На практике возможно иметь более 10 000 сокетов, полезных для одного процесса в Linux. Если на сервере есть несколько процессов, вы можете увеличить их снова.

Нет необходимости использовать один порт, так как ваши выделенные балансировочные балансиры смогут объединять несколько портов, если это необходимо.

Если вы используете службу для многих 10-ти тысяч клиентских процессов, вероятно, довольно важно, чтобы она продолжала работать, поэтому вам понадобятся несколько серверов для резервирования ANYWAY. Поэтому у вас не будет проблем с развертыванием еще нескольких серверов.

Ответ 3

Я провел тестирование в Windows, выполнив несколько соединений loopback на один сокет. Windows отказалась выделить что-либо после отметки 16372.