2011-01-31 3 views
0

У меня трудное время с частными и общедоступными портами udp. Я делаю клиент-серверную VoIP-программу и задаю несколько вопросов.частные и общественные порты

1) частный порт - тот, который вы используете в bind() справа?

2) общественный порт назначается брандмауэром вправо? так как это порт, видимый вне моей локальной сети.

3) Когда я отлаживаю между двумя машинами в своей локальной сети, я указываю как отправлять/возвращать в частный порт, так и работать с данными. Если бы я общался с клиентом за пределами моей сети, я бы использовал общественный порт, верно?

4) Есть ли способ, чтобы два хоста в локальной сети могли общаться в общественных портах? так как это то, что будет в режиме выпуска, было бы неплохо убедиться, что он работает.

5) будут ли передаваемые маршрутизатором пересылаемые в общедоступный порт список приложений на частный порт? поэтому отправитель (если вне локальной сети) указывает общий порт, а не частный порт.

Надеюсь, что было ясно, просто спросите иначе!

Заранее спасибо! Йохан

ответ

2

1) частный порт, который вы используете в безвыходном() правильно?

Право.

2) общественный порт присвоен брандмауэром ? так как это порт , видимый вне моей локальной сети.

Ну, да, но это не совсем брандмауэр. Это NAT. Конечно, NAT может быть (и чаще всего) реализован в брандмауэре, но есть также брандмауэры, которые не используют NAT. Другое дело, что вы можете иметь несколько уровней NAT (например, дома и один в ISP), в этом случае, вероятно, имеет смысл обратиться к порту, назначенному самым внешним NAT как общедоступным.

3) Когда я отладки между двумя машинами на моей локальной сети, я с указанием как отправить/ПРИЕМ к закрытому порту и коммуникационные работы. Если бы я общался с клиентом за пределами моей сети, я бы использовал общественный порт, не так ли?

Это зависит от настройки сети. Поскольку вы упоминаете «клиент-сервер» в своем вопросе, я предполагаю, что клиент «подключается» (отправляет первый пакет) на сервер. Если сервер не находится за NAT, тогда его общедоступная пара IP/port будет такой же, как и локальная. Но если сервер за NAT, то вы не можете просто подключиться к нему, потому что у него еще нет назначенного публичного порта. Просто открытие порта не приводит NAT к назначению публичного порта, вам нужно фактически отправить что-то из этого порта.

Итак, если ваш сервер находится за NAT, он должен действовать как клиент, а клиент должен выступать в качестве сервера, при условии, что клиент также не находится за NAT.Если обе стороны находятся за NAT, тогда вам понадобится сторонний не-NAT-сервер для выполнения hole punching. Обратите внимание, что при использовании перфорации отверстий обычно используются как частные, так и публичные конечные точки, только если обе стороны находятся в одной локальной сети по чистой случайности.

4) Есть ли способ для двух хостов по локальной сети, чтобы общаться на государственные порты? так как это то, что будет в режиме выпуска, было бы хорошо убедиться, что оно работает.

Это зависит от настройки NAT. Он может просто игнорировать все, что происходит из локальной сети, и имеет общий адрес NAT в качестве адресата. Например, я не могу даже пинговать свой собственный общий адрес с моего домашнего ПК.

5) будет маршрутизатор пересылает пакеты посланных на порт для приложения listneing на частный порта? поэтому отправитель (если вне локальной сети ) указывает общедоступный порт , а не частный порт.

См. Мой ответ на 3). Конечно, он отправит пакеты, как только будет назначен общедоступный порт, потому что именно он его назначает в первую очередь. Но, вероятно, он будет проверять, что входящий пакет поступает с того же адреса и порта, на который был отправлен пакет, из-за которого был открыт порт, поэтому он является действительным ответом на отправленный ранее пакет, а не только случайный хакер, пытающийся сломать in

+0

Идея состоит в том, чтобы использовать отверстие, жаль, что я должен был упомянуть об этом. Клиенты отправляют пакет на сервер, а затем сервер передает информацию о портах и ​​ip другим клиентам. Сервер не находится за NAT (путем перенаправления портов). Вы упомянули, что адрес входящего пакета должен быть таким же, как адрес отправленного пакета. Я понимаю, почему, но разве это не помешало бы ударам дыры? Я имею в виду, что идея с отверстиями в отверстиях заключается в том, что клиенты открывают публичные порты на сервер, а затем сервер сообщает клиентам друг о друге, поэтому клиенты могут разговаривать с каждым из этих портов. – KaiserJohaan

+0

@ Кайзер, почему это предотвратит пробивание отверстий? Конечно, когда один клиент отправляет дейтаграмму другому, он, вероятно, будет удален. Но затем другой клиент отправит ответ (он знает, через сервер, что была попытка связи), и на этот раз он пройдет - потому что NAT с первой стороны считает, что это ответ на пакет, который был ранее отправлен (и сбрасывается с другой стороны, но NAT с первой стороны об этом не знает). Вы должны прочитать статью, которую я дал ссылку, однако, поскольку есть намного больше, чтобы пробивать дыры. –