Максимальное количество одновременных подключений на один порт (сокет) Сервера - PullRequest
24 голосов
/ 28 февраля 2010

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

Ответы [ 3 ]

30 голосов
/ 28 февраля 2010

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

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

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

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

Вы можете расширить это, предоставив машине дополнительные IP-адреса. Каждый IP-адрес представляет собой другое адресное пространство из 64 тыс. Адресов.

5 голосов
/ 01 марта 2010

Больше, чем ты заботишься. Вернее.

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

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

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

Если вы запускаете службу для многих десятков из тысяч клиентских процессов, вероятно, довольно важно, чтобы она продолжала работать, поэтому вам понадобится несколько серверов для резервирования ВСЕГДА. Поэтому у вас не будет проблем с развертыванием еще нескольких серверов.

0 голосов
/ 07 мая 2011

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

...