Назад | Перейти на главную страницу

UDP Руководство по пробивке отверстий

Я пытаюсь поэкспериментировать с пробивкой отверстий UDP, чтобы попытаться подключить 2 компьютера. 2 компьютера, которые я пытаюсь подключить, находятся на 2 разных Wi-Fi, созданных одним и тем же маршрутизатором. Назовем эти компьютеры С1 и С2. Итак, я хочу создать связь между C1 и C2. У меня есть 2 общедоступных IP-адреса сервера, на которых я запускаю сервер прослушивания UDP. Это серверы S1 и S2.

Эксперимент 1:

  1. Отправьте пакет UDP с C1 на S1 и распечатайте IP-адрес и порт входящего пакета. Я получаю IP_C1 и PORT_C1.
  2. Отправьте сообщение обратно на C1 с S1, используя IP_C1 и PORT_C1. Это работает нормально, как и ожидалось, и остается подключенным. Таким образом, я уже пробил дыру для S1, чтобы он мог напрямую связываться с C1.

Эксперимент 2:

  1. Отправьте пакет UDP от C1 к S1 и получите IP_C1 и PORT_C1.
  2. Отправьте UDP-пакет от C2 к S1 и получите IP_C2 и PORT_C2.
  3. Используйте S1, чтобы отправить сообщение обратно в C1, используя IP_C1 и PORT_C1. Это работает как раньше.
  4. Используйте S1, чтобы отправить сообщение обратно на C2, используя IP_C2 и PORT_C2. Это тоже отлично работает.

Итак, теперь и C1, и C2 доступны с S1. ПРИМЕЧАНИЕ. Я вижу, что IP_C1 и IP_C2 одинаковы, поэтому давайте назовем их IP_C. Однако порты разные.

Продолжая это, я попытался отправить сообщение с C1 на C2, используя IP_C и PORT_C2 в качестве пункта назначения. C2 не получил сообщение должным образом. Затем я отправляю сообщение от C2 к C1, используя IP_C и PORT_C1. Вот где я начинаю застревать: я ожидал, что теперь сообщение C2 достигнет C1, поскольку C1 уже пробил дыру в NAT, идущем на C2. Но C1 не получает сообщение. Продолжая, если я сейчас отправлю другое сообщение от C1 и C2. C2 не понимает. Но даже сейчас, если я отправлю сообщение с S1 на C1 или C2, оно работает.

Эксперимент 3:

Чтобы проверить, сохраняются ли IP и порт, когда клиент отправляет другой пакет UDP, я сделал следующее:

  1. Отправьте пакет UDP от C1 к S1 и получите IP_C1 и PORT_C1.
  2. Отправьте пакет UDP с C2 на S1 и получите IP_C2 и PORT_C2.
  3. Отправьте пакет UDP от C1 к S2 и получите IP_C1_S2 и PORT_C1_S2.
  4. Отправьте UDP-пакет от C2 к S2 и получите IP_C2_S2 и PORT_C2_S2.

Как и S1, S2 также легко подключается, и я вижу IP_C1 = IP_C1_S2 = IP_C2 = IP_C2_S2 = IP_C и PORT_C1 = PORT_C1_S1 и PORT_C2 = PORT_C2_S2.

Так что порты поддерживаются.

Даже при таком сценарии я не могу установить связь между C1 и C2. Поэтому я не уверен, почему не работает связь между C1 и C2. Как это сделать?

Спасибо