Перфорация дыры требует сервера рандеву UDP, Или это мог быть TCP один?

Я пытаюсь получить свою повязку для волос вокруг этой проблемы...

Я хотел бы соединить двух пользователей...

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

Вообще возможно разрешать это, не создавая другой сервер (UDP на этот раз)?

4
задан 7 September 2012 в 14:31
1 ответ

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

Это на самом деле что-то, что работает с UDP только потому, что это апатрид, и не будет работать с TCP. Ваша описанная установка с TCP-соединением с третьим "контрольным" сервером на самом деле является идеальной установкой для этого. Здесь мы будем называть стороны "User A", "User B" и "Control". Вот как это работает:

  • Пользователь A и пользователь B устанавливают TCP соединение с Control. Как только соединение установлено, оба пользователя посылают в Контроль порт, по которому с ними можно связаться. Мы будем называть "порт X" пользователя A и "порт Y" пользователя B.
  • Контроль разделяет информацию о порте пользователя 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 пакеты туда и обратно, и участие Контроля больше не требуется.
6
ответ дан 3 December 2019 в 03:08

Теги

Похожие вопросы