Ответ 1
Когда вы открываете сокет, вам нужно обратиться к порту системы назначения и открыть соответствующий порт прослушивания в вашей собственной системе, чтобы получить ответ. Вам необходимо отправить систему назначения в ваш порт для прослушивания.
Наличие нескольких систем с использованием одного и того же модема
При запуске веб-браузера и перейдите на сайт www.google.com:80, ваш браузер получает/ищет свободный несистемный сопряженный порт из системы для прослушивания. Скажем, порт сопряжения 10000. Порт слушателя предназначен для приема HTTP-потока из Google.
Затем ваш малыш, сидящий рядом с вами, кстати, также просматривает www.google.com:80 и его/ее сеанс google игровой станции или xbox - независимо от того, кстати, назначается сопряженный порт 10000.
Оба вы сидите за кабельным модемом, а за кабельным модемом - ваш беспроводной маршрутизатор. И обе ваши системы находятся за беспроводным маршрутизатором - все сидят в этой последовательности, топология сети.
Чтобы предотвратить столкновение адреса порта на маршрутизаторе/модемом
Предположим, что ваша кабельная компания DHCP назначает ваш модем ip4-адрес 72.72.72.72. Но ваш беспроводной маршрутизатор DHCP назначает 192.168.0.10 вашей системе и 192.168.0.11 для вашей системы малыша.
Когда кадр, несущий информацию о ваших портах слушателя, проходит через ваш NAT-маршрутизатор, он будет переводить один или оба порта прослушивания. Скажем, порт 15000 для вашей страницы и порта 16000 для вашей детской страницы.
Затем ваш беспроводной маршрутизатор отправляет ваши запросы на сервер google исходя из 72.72.72.72:15000 и 72.72.72.72:16000.
Затем сервер Google отвечает индивидуально на 72.72.72.72:15000 и 72.72.72.72:16000, а когда ваш беспроводной маршрутизатор встречает ответ, он достигает отображаемого им файла и переводит 72.72.72.72:15000 на 192.168.0.10: 10000 для достижения вашей системы, но переводит 72.72.72.72:16000 в 192.168.0.11:10000 для достижения вашей системы малыша.
Запуск веб-серверов/серверов/ftp/etc
Но что, если в вашей системе есть веб-сервер или ftp-сервер. Что делать, если у вас есть две системы, и у обоих есть веб-сервер, и оба веб-сервера прослушивают порт 80?
Скажем, локальные IP-адреса, зарегистрированные/назначенные вашим беспроводным маршрутизатором вашей первой системы веб-сервера, равны 192.168.0.30, а ваша вторая система веб-сервера - 192.168.0.40.
У беспроводного маршрутизатора обычно будет веб-страница конфигурации по умолчанию 192.168.0.1:80, если вы не изменили ее. На странице будет отображаться вкладка, в которой вы можете определить/зарезервировать сопоставления портов приложения.
Вы можете зарегистрироваться на своем беспроводном маршрутизаторе, чтобы зарезервировать отображение
192.168.0.30:80 => outgoing port 8080
192.168.0.40:80 => outgoing port 8088
Чтобы вы могли звонить своим друзьям, ваши веб-серверы могут быть адресованы через 72,72,72,72:8080 и 72,72,72,72:8088 соответственно, где беспроводной маршрутизатор будет препятствовать его порту 8080 и 8088 из собственного динамического использования NAT.
Конечно, 72.72.72.72 так же хорош, как только ваш провайдер DHCP решит обновить ip4-адрес вашего модема, скажем, 72.72.90.200. После чего вам придется звонить/отправлять по электронной почте своим друзьям и говорить Эй, адреса серверов изменились на 72.72.90.200:8080 и 72.72.90.200:8088 соответственно. Или вы можете подписаться на динамическую службу dns (ddns), чтобы использовать именованный домен, в котором службе ddns понадобится вам установить в вашей системе простое приложение heartbeat, чтобы помочь им отслеживать изменение адреса. Перевод DDNS - это отдельная проблема/стратегия.
модемы NAT
Новые контракты ISP предоставляют вам модем с NAT. Если это так, вам нужно отключить либо тот, который находится на вашем модемом, либо тот, который находится на вашем беспроводном маршрутизаторе. Вы не должны использовать оба - то, что точка в переводе дважды, потому что NAT просто предотвращает столкновение адресов. Когда вы отключите NAT от своего беспроводного маршрутизатора, он может работать как коммутатор хаба, а не маршрутизатор, чтобы вы могли подключить его к модему, используя один из его гнезд локальной сети, а не через свой WAN-разъем.