1

(Не уверен, что это должно быть на сайте unix stackexchange ...)

Когда я делаю сокет, я использую IPv4 и номер порта. Так что, если я знаю оба из них, но есть настроенный маршрутизатор (в домашней сети; просто изучаю сокеты и экспериментирую), как я получу доступ к клиенту в этой локальной сети? Скажем, я нахожусь у друга на его компьютере, и я хочу подключиться к сокету на компьютере в моем доме, который находится в моей локальной сети, если я использую свой общедоступный IP-адрес в качестве хоста сокета, как он узнает, чтобы перейти к мой компьютер? Нужно ли настроить переадресацию портов или что-то на маршрутизаторе? (используя C и Python, если это имеет значение)

5 ответов5

1

Да, маршрутизатор должен знать, чтобы пересылать входящие пакеты на ваш компьютер. Обычно это делается одним из следующих способов:

  • Демилитаризованная зона: маршрутизатор перенаправляет весь входящий трафик на указанный хост
  • Переадресация статического порта, когда определенные внешние порты всегда направляются на определенные хосты по правилам, установленным на маршрутизаторе
  • Динамическая переадресация портов, при которой шаблоны входящего или исходящего трафика инициируют маршрутизацию определенных внешних портов на конкретные хосты (например, если машина подключается к определенному узлу Интернета на данном порту, перенаправляет определенный диапазон входящих портов на эту машину)
  • Универсальный Plug & Play или NAT-PMP, где компьютер в вашей сети автоматически настраивает переадресацию для служб, которые он размещает (обычно используется, например, клиентами BitTorrent)
1

Решение "Простого режима" - настроить ipv6 для всех задействованных компьютеров. Если маршрутизаторы / интернет-провайдеры не поддерживают / не поддерживают его, вы можете использовать SixX (или аналогичные устройства) для туннелирования подключения ipv6 к вашим компьютерам.

Затем, используя IPv6-адреса, все должно работать.

0

С вашей стороны, маршрутизатор использует NAT, поэтому он знает, какие внешние порты соответствуют каким внутренним клиентам.

С другой стороны, требуется какая-то переадресация портов.

0

Я говорю здесь о маршрутизаторах NAT, которые являются большинством домашних маршрутизаторов.

Если вы подключаетесь к порту на другом компьютере, он должен нормально проходить через маршрутизатор, если только маршрутизатор не заблокировал этот порт.

Если вы ожидаете, что к вашему компьютеру подключится другой компьютер, вы должны принять специальные меры в маршрутизаторе для переадресации определенного порта на ваш компьютер.

Выбор языка не имеет большого значения.

0

Основная цель маршрутизаторов - выполнять маршрутизацию межсетевого уровня (уровень 2/3) (в основном, Internet Protocol v4 и / или v6 и ICMP). Сокеты имеют отношение к транспортному уровню (уровень 3/4), и поэтому, хотя маршрутизатор может взаимодействовать с портами (например, переадресация портов), это в основном не волнует (порты межсетевого экрана на маршрутизаторе могут быть еще одним примером где это было бы, но это часто делается с совершенно другой коробкой, называемой брандмауэр).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .