Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Сколько максимально одновременных подключений может держать сервер?

#сеть


В стать https://habrahabr.ru/post/50028/ говориться что были сервера способные держать
1 000 000 пользователей. А как такое возможно если портов всего 2^16?
    


Ответы

Ответ 1



Соединение характеризуется следующей конструкцией из 5 элементов: IP клиента, Порт клиента, IP сервера, Порт сервера, Протокол Например: 10.0.0.1:1234 192.168.0.1:80 TCP 10.0.0.1:1235 192.168.0.1:80 TCP 10.0.0.1:1236 192.168.0.1:80 TCP ... 10.0.0.2:1234 192.168.0.1:80 TCP 10.0.0.2:1235 192.168.0.1:80 TCP 10.0.0.2:1236 192.168.0.1:80 TCP ... Последние 3 элемента имеют фиксированное значение, а вот первые 2 изменяются и в комбинации могут давать огромные значения. С одного IP может подключиться до 64k клиентов, с другого ещё столько же и т.д. Таким образом, теоретическое максимальное число соединений может быть равно число клиентских IP адресов * число портов на клиенте (64k). С практической же точки зрения, ресурсы сервера (RAM, CPU, I/O) ограничены, и в зависимости от реализации сервера, он может обрабатывать лишь какое-то N-ное число одновременных соединений, которое меньше теоретического IP*64k. Чем эффективнее написан сервер (т.е. чем эффективнее он использует ограниченные ресурсы железа), тем больше соединений он сможет держать. Самые неэффективные реализации создают по процессу на каждое входящее соединение, более эффективные используют один процесс и создают по потоку (thread) на соединение, а ещё более эффективные умеют обходиться фиксированным числом процессов и потоков, выполняя асинхронную обработку запросов.

Ответ 2



Порты не имеют никакого отношения к одновременному колличеству подключений. Порт - это просто место, куда приходит запрос\подключение. Что именно обработает запрос на этот порт - вот это уже важно. И там говорится не про сервера, а про функциональный язык программирования Erlang, на котором можно написать проект, максимально задействующий ресурсы машины, что в свою очередь может дать до миллиона одновременных коннектов. Итак, ответ на ваш вопрос - дело вообще не в портах.

Комментариев нет:

Отправить комментарий