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

Требуется ли для пробивки отверстий UDP-сервер рандеву или это может быть TCP?

Я пытаюсь понять эту проблему ...

Я хочу подключить двух пользователей ...

Эти пользователи уже подключены к TCP-серверу, который знает как общедоступный IP-адрес, так и TCP-порт подключения. Я надеялся использовать существующее соединение с сервером, чтобы создать p2p-соединение между моими пользователями, поскольку излишне просить их подключиться к другому серверу UDP, чтобы узнать, через какой публичный порт они подключены.

Можно ли вообще решить эту проблему без создания другого сервера (на этот раз UDP)?

Я знаю, что этому вопросу почти два года, но на него нет ответов, поэтому я подумал, что подскажу, как с этим справиться.

На самом деле это то, что работает с UDP только потому, что он не имеет состояния, и не будет работать с TCP. Описанная вами установка с TCP-соединением с третьим «контрольным» сервером на самом деле является идеальной установкой для этого. Мы будем называть стороны здесь «Пользователь A», «Пользователь B» и «Контроль». Вот как это работает:

  • Пользователь A и пользователь B устанавливают TCP-соединение с Control. После установки оба пользователя отправляют Control порт, через который с ними можно связаться. Мы будем называть пользователя A «Порт X» и пользователя B «Порт Y».
  • Control делится информацией о порте пользователя A с пользователем B, и наоборот.
  • Пользователь A отправляет пакет UDP из порта X пользователю B через порт Y. Брандмауэр пользователя B, конечно, отклонит этот пакет.
  • Пользователь B отправляет UDP-пакет из порта Y пользователю A на порт X. Брандмауэр пользователя A перенаправляет этот порт внутренне пользователю A, потому что брандмауэр пользователя A только что увидел, что пакет покинул пользователя A через порт X и пользователю B на порту Y (и поскольку это UDP, он не знает, что он был отклонен), поэтому он предположил, что пакет, приходящий от пользователя B на порту Y к пользователю A на порту X, является пакетом ответа, поэтому он пропускает его.
  • Пользователь A отправляет другой пакет UDP с порта X пользователю B на порт Y, и он также разрешен через брандмауэр пользователя B по той же причине.
  • Пользователи A и B теперь могут отправлять пакеты UDP туда и обратно, и участие Control больше не требуется.