@Mr-Governor
Губернирую

Как сервер отправляет данные клиенту?

Всем привет.
К примеру возьмем соединение по TCP-сокетам. Допустим клиент отправил запрос на сервер, тот его принял, и создал соединение, и когда пришла необходимость, сервер отправляет сообщение КЛИЕНТУ.

Интересует момент отправки сервером сообщения клиенту. То есть, как сервер вообще понимает куда нужно отправить ответ, если у клиента нет белого ИП адреса, и значит в глобальной сети хоста клиента не существует?
Даже если клиент выделил отдельный порт, как сервер может достучаться до хоста, которого нет в глобальной сети?
  • Вопрос задан
  • 520 просмотров
Пригласить эксперта
Ответы на вопрос 4
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
У TCP есть не только IP-адрес, но ещё и порт. Как со стороны сервера, так и со стороны клиента. Если со стороны сервера порт обычно задан статически (например 80), то со стороны клиента он выбирается динамически из не занятых. В результате, каждый клиент получает свою уникальную пару IP-порт, по которым сервер и отправляет пакеты клиентскому сокету. Тем самым мы можем иметь кучу клиентских соединений на одном компьютере, различающиеся разными клиентскими портами на каждое соединение к одному серверу.
Ответ написан
Комментировать
hint000
@hint000
у админа три руки
Подтвердите пожалуйста, если это работает так.
Совсем не так. Постараюсь попроще. Для понимания работы через NAT вам нужно сложить три факта:
1. В рамках клиентской сети провайдера нет проблем с тем, что адреса у клиентов серые. Потому что провайдер сам назначает эти серые адреса (автоматически) и понимает кто есть кто, и где находится каждый клиент.
2. Провайдер помнит, что такой-то клиент установил соединение с таким-то сервером, с такого-то порта на такой-то порт. Грубо говоря, помнит до тех пор, пока соединение не будет разорвано.
3. Ответ сервера идёт не на ваш серый адрес, а на белый адрес самого провайдера.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Сервер знает IP адрес клиента. Сетевая подсистема собирает и отправляет пакет в котором он указан(в специальной зоне), либо в сеть если клиент в локальной сети либо на основной шлюз, шлюз ретранслирует на следующий шлюз - так до тех пор пока пакет не достигнет шлюза клиента.

Можно взять Wireshark и увидеть все эти пакеты и какие в них есть поля.
Ответ написан
Комментировать
karabanov
@karabanov
Системный администратор
Это возможно благодаря NAT
NAT существовал не всегда, его придумали, как временное решение, но что-то пошло не так.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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