дырокол udp и порт с ограниченным конусом NAT - PullRequest
5 голосов
/ 03 ноября 2011

Я хотел бы понять, как работает дыроко udp, когда два хоста, каждый за NAT-конусом с ограниченным портом, устанавливают соединение.

Как я понял, это происходит в несколько этапов и включает три хоста.

Узел A и узел B находятся за NAT с ограничением порта.

Узел C - это сервер, который может принимать пакеты от узлов A и B.

  1. A отправляет пакетна C.
  2. C получает пакет от A и определяет внешний адрес A: пара портов
  3. B отправляет пакет на C.
  4. C принимает пакет от B и определяет внешний Bадрес: пара портов
  5. C отправляет внешний адрес: порт B на A
  6. C отправляет внешний адрес: порт A на B
  7. A отправляет package_1 на внешний Bадрес
  8. B отправляет package_2 на внешний адрес A

Вопросы:

Как A за NAT с ограниченным конусом может получить пакет от B, который также находится заограниченный конус NAT?

Конус NAT с ограничением порта не позволяет принимать пакеты, в которых адрес источника: пара портов не соответствует адресу назначения: пара портов отправленных им пакетов.Почему другие пакеты, отправляемые между A и B, поступают в A и B?

Это потому, что NAT с ограниченным портом NAT рассматривает пакет_2 как ответ от B?

Таким образом, пакет_1 будет потерян, ноПакет_2 прибывает в Б. Я прав?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 04 ноября 2011

К вашему сведению, вот документ , который отвечает на ваши вопросы и предоставляет подробный обзор NAT. PDF-версия доступна здесь .

1 голос
/ 04 ноября 2011

Во-первых, ограниченный конус nat означает, что если A говорит с C, B не может использовать отверстие, пробитое между A и C, для связи с A, предполагая, что B * не позади nat.В данном случае значение nat traversal не работает.

Как A за NAT с ограниченным конусом может получить пакет от B, который также находится за NAT с ограниченным конусом?

В данном случае это другая ситуация, которая называется состоянием шпильки.Другими словами, может ли B за nat использовать переведенный адрес A из-за nat?Некоторые натсы обрабатывают этот случай правильно, другие - нет.

В вашем случае, даже если ваш нат правильно обрабатывает условия шпильки, пакеты B не будут пересылаться из-за «ограниченного конуса».Таким образом, результат тот же.

Почему другие пакеты, отправленные между A и B, поступают в A и B?

Они не будут в вашем случае.

0 голосов
/ 26 июня 2014

Я написал один: PyPunchP2P .Посмотрим, сможет ли кто-нибудь им воспользоваться.

0 голосов
/ 20 апреля 2013
A sends packet_1 to B's external address
B sends packet_2 to A's external address


How can A behind the restricted cone NAT receive a packet from B which is also behind the restricted cone NAT?

Is it because the port restricted cone NAT considers packet_2 as the response from B?

So packet_1 will be lost but packet_2 arrives to B. Am I right?

Вы абсолютно правы, пожалуйста, прочитайте о том, как Skype работает , это то, что вы ищете

...