@KiRGx

Как происходит подключение клиента к серверу за маршрутизатором?

Имеется клиент, для простоты пусть будет клиент игры Minecraft.
Имеется сервер Minecraft, запущенный на порту 25565, на ПК, подключенном к роутеру.
Клиент пытается при помощи пары ip+port подключиться к серверу. Допустим, это первое подключение.
Каким образом роутер определяет какому компьютеру внутри сети переслать полученные от клиента пакеты, если неизвестен изначально MAC-адрес?
Мое предположение такое, что в первом пакете содержится только ip и port, в качестве MAC-адреса указан широковещательный адрес, роутер при поступлении пакета передает его всем ПК, которые слушают порты, и если ПК с активным портом 25565 существует, то тот отсылает пакет-ответ со своим MAC-адресом, и затем уже клиент добавляет его в дальнейшем в свои пакеты при отправке.
  • Вопрос задан
  • 2806 просмотров
Решения вопроса 1
dimap101
@dimap101
ИП, разработка АИС, микроконтроллеры
Если вы подключаетесь через роутер, то про mac-адреса вам пока вообще знать не надо.
Все что связано с MAC-адресами работает только в пределах локальной сети Ethernet (LAN) - уровень протоколов Layer 2. Таким образом о MAC-адресе сервера будет знать только роутер, клиент не знает MAC-адрес сервера, сервер не знает MAC-адрес клиента. У роутера есть таблица MAC-адресов и соответствующих им IP-адресов, а если он еще не знает MAC-адрес сервера, то есть протокол ARP (address resolution protocol).

Взаимодействие между клиентом и сервером начинается с протоколов уровня Layer 3 и выше.

Ввиду того, что на роутерах в большинстве своем работает NAT (трансляция адресов), то чтобы достучатся до сервера нужно на роутере руками прописать проброс порта (в данном случае 25565) на конкретный IP-адрес сервера. Т.е. IP-пакет пришедший на внешний IP-адрес роутера без перенаправлен на IP-адрес сервера во внутренней сети, для этого сервис NAT роутера на лету подменяет адреса (в направлении к серверу - адрес получателя, в направлении от сервера - адрес источника) в пакетах. Ну если вы не сильно заботитесь о безопасности, то можно настроить автоматическую прописку проброса портов по UPNP.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
dimonchik2013
@dimonchik2013
non progredi est regredi
все проще

никому

но если роутеру прописать проброс порта ( а там ИП и порт на куда пробрасывать), он пробросит
Ответ написан
Комментировать
Если роутер осуществляет трансляцию пакетов, т. е. работает в режиме NAT, то как и писалось выше, у него должна быть таблица преобразования с указанием узла и порта назначения. Пакет прилетает на WAN интерфейс, на порт 25565, роутер смотрит есть ли порт назначения в таблице преобразования, если есть, то меняет адрес назначения (и если нужно - порт), на адрес из локальной сети, потом проверяются правила firewall, затем таблица маршрутизации, выяснение на каком интерфейсе адрес назначения, а потом уже arp запрос (если его нет в кэше), для выяснения mac адреса сервера.

Если роутер не осуществляет трансляцию и у сервера белый ip, то сразу правила firewall, таблица маршрутизации, замена src mac. на мак роутера и потом arp запрос с интерфейса на котором доступен сервер.

З. Ы. Все описано немного утрированно.
Ответ написан
Комментировать
Jump
@Jump
Системный администратор со стажем.
Каким образом роутер определяет какому компьютеру внутри сети переслать полученные от клиента пакеты, если неизвестен изначально MAC-адрес?
Роутеру вообще не нужно ничего знать про MAC-адрес, это совсем другой уровень.
С поступившим пакетом он поступает в соответствии с настройками - если в настройках написано, что пакет пришедший на порт роутера xxx нужно переслать на порт yyyy компьютера с ip адресом qqq.qqq.qqq.qqq - он перешлет.
Если не прописано - уничтожит.
Вот и все.
И никаких мак адресов.
Ответ написан
karabanov
@karabanov
Системный администратор
Как-то так: https://youtu.be/-xxO5jdLvcE
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы