4

Я заметил, просматривая сайт ipchicken (http://www.ipchicken.com/), что когда я захожу туда со своего рабочего стола или с моего телефона или с университетского wifi, он дает мне "Удаленный порт". Существует диапазон номеров портов (кажется, что он никогда не превышает 65 000 или около того). Но что, если я напишу программу, которая прослушивает каждый порт? Маршрутизатор исчерпает порты? Будет ли это заблокировать новые люди от подключения? Что происходит, когда у маршрутизатора заканчиваются номера внутренних портов?

3 ответа3

3

Порты в протоколах TCP или UDP хранятся в 16-битном целом числе, поэтому можно использовать только 65535 портов.

Если вы используете каждый порт на вашем компьютере, то у любого приложения, которому требуется сокет (соединение), его не будет. Такие функции, как listen () или connect (), будут приводить к ошибке до тех пор, пока не будет свободного порта для использования.

Если вы используете каждый порт в маршрутизаторе (с NAT), то каждое новое соединение будет буферизовано или сброшено. Если маршрутизатор - это просто маршрутизатор, а не шлюз с NAT, проблемы с портами не будет, потому что транспортный уровень (4-й уровень в модели ISO/OSI) не анализируется.

0

«Если нет доступных портов, пакет отбрасывается». http://www.cisco.com/c/en/us/support/docs/ip/network-address-translation-nat/26704-nat-faq-00.html

0

TCP/IP работает следующим образом:

Когда вы создаете соединение между клиентом и сервером, оно подключается к порту на основе порта и IP-адреса.

Ваш IP-адрес - это IP-адрес, данный сервером, а порт - это все, что указано стороной, инициирующей соединение. Например, FTP-сервер будет подключаться к порту 21, если только сервер специально не укажет использовать другой порт.

Настроить соединение можно двумя способами.

Во-первых, сервер прослушивает на общем порте любые соединения, чтобы инициировать соединение, которое будет сделано. Затем происходит одна из следующих двух вещей:

  1. Сервер создает новый сокет, используя другой порт, и отвечает: пожалуйста, подключитесь к этому порту.
  2. Сервер спрашивает, к какому порту на вашей стороне он может подключиться, и подключается к нему.

Разница здесь в том, что с первым все соединения исходят со стороны клиента, поэтому не нужно переадресовывать порты на маршрутизаторе. Тогда как второй элемент использует входящий порт, который необходимо настроить.

Разница в технике в основном зависит от пропускной способности от открытия портов на стороне клиента.

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

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

Итак, в основном вы хотите создать правила для всех портов вашего маршрутизатора, чтобы перенаправлять данные в вашу программу, и позволить вашей программе открывать соединение и перенаправлять его на новый ip. В основном это означает, что вы сами создаете роутер. В результате ваша скорость будет снижаться, и, если не все сделано правильно, соединения могут не прерваться должным образом и т.д.

По сути, вы создаете программу, которая, скорее всего, может также применяться правилами брандмауэра / перенаправления портов на вашем маршрутизаторе.

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