Задать вопрос
  • Число одновременных соединений сервера?

    Соединение характеризуется двумя сокетами. А вот сам сокет характеризуется не двумя параметрами (ip + порт), а пятью:
    ip + порт локальные
    ip + порт того, кто присоединился
    протокол

    Пусть у нас серверная программа на компьютере с ip 192.168.0.10 слушает порт 54123.
    Пусть к ней присоединяются два клиента, их ip и порт на ИХ компьютерах такие:
    192.168.100.1, порт 64001
    192.168.200.5, порт 62038

    Тогда на сервере при образовании соединения ОС создает два сокета, каждый из которых идентифицируется вот так:
    ___server local ip + port___client remote ip + port___protocol
    1) 192.168.0.10:54123____192.168.100.1:64001_____tcp
    2) 192.168.0.10:54123____192.168.200.5:62038_____tcp

    Таким образом, серверной программе с точки зрения "растраты портов" не важно, сколько народа к ней присоединяются, т.к. "своя" пара ip + порт у нее всегда одинаковая => разговор о 64k портов в данном случае не актуален.

    Об ограничении в 65k портов можно говорить в случае если бы мы хотели запустить 65k серверных программ и каждой тогда понадобился бы свой порт для прослушивания. Но столько программ очень вряд ли кто-то запускает и к тому же две программы могут "разделять" один и тот же порт через мультиплексирование. Я не знаю о нем толком ничего, просто запомнилось, что такая возможность есть.

    P.S. Ограничение в 65k портов связано с тем, что в TCP-слое пакета под порт выделено 16 бит.
    Ответ написан
    1 комментарий