@balun92

Как один сетевой сокет обрабатывает много соединений?

По Java в литературе пишут, что после метода .accept() для клиента, который уже прошел троекратное tcp рукопожатие создается новый "сетевой" сокет, через который в дальнейшем происходит взаимодействие с клиентом. (source) А изначальный серверный сокет (который я вешаю на пример на 80 порт для http server'a )используется только для установки новых соединений.
У меня сомнения по этому поводу. Я же в фаерволе не открываю порты для клиентов, у меня один открыт - серверный.

Вопрос : каким образом происходит обработка большого количества клиентов через один порт?

п.с. Осознал, что для каждого клиента создается обычный сокет, который видимо однозначно характеризирует одного клиента(по связке порт+ип клиента).
Выходит, что на стороне сервера все запросы маршрутизируются через один серверный сокет, забинденый на порту? Как происходит маршрутизация?
  • Вопрос задан
  • 4675 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Выходит, что на стороне сервера все запросы маршрутизируются через один серверный сокет, забинденый на порту? Как происходит маршрутизация?

Через серверный сокет проходят только запросы на установку соединения. После того как соединение установлено, на стороне сервера создаётся новый сокет, связывающий IP сервера на которым был принят запрос, порт сервера, IP клиента, отправившего запрос и порт клиента. Этого набора информации достаточно, чтобы определить, что пришедший пакет должен появиться в этом сокете, а при записи в сокет понять, куда отсылать пакет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
begemot_sun
@begemot_sun
Программист в душе.
У каждого клиента есть исходящий порт и IP. Соответственно ОС может определить в какой сокет отправлять данные когда пришел TCP пакет.
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Сокет != порт
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы