P2P принцип сверления отверстий

http://www.cppblog.com/peakflys/archive/2013/01/25/197562.html
https://www.usenix.org/legacy/event/usenix05/tech/general/full_papers/ford/ford_html/

Адреса, выделяемые IPv4, ограничены и не могут удовлетворить текущие потребности, а IPv6 не имеет прямой обратной совместимости, поэтому существует NAT, протокол трансляции сетевых адресов.
IP-адреса общедоступных сетей, как правило, являются фиксированными IP-адресами, но те, которые обычно используются в наших семьях, не фиксированы и не должны быть фиксированными, поскольку мы не находимся в сети (подключены к внешней сети) все время, поэтому фиксированные IP-адреса есть только у обычных операторов. Наш IP-адрес — это всего лишь частный адрес в подсети, а NAT отвечает за преобразование адреса при подключении к внешней сети. (Роутер также содержит функцию NAT)
NAT решает проблему нехватки IP-адресов, но в P2P он создает новые проблемы. (Внутренняя сеть не может быть активно подключена программами во внешней сети.)
При P2P-передаче, если A передает данные B, ему необходимо знать IP-адрес и номер порта B. В реализации NAT возможны четыре ситуации: Конусный NAT
:

  1. Полный конус: сопоставляет все запросы с одного и того же внутреннего IP-адреса и порта на один и тот же внешний IP-адрес и порт. Любой внешний хост может отправлять IP-пакеты на внутренний хост посредством этого сопоставления.
  2. Ограниченный конус: отображает все запросы с одного и того же внутреннего IP-адреса и порта на один и тот же внешний IP-адрес и порт, но только когда внутренний хост сначала отправляет IP-пакет внешнему хосту с IP-адресом X, внешний хост может отправить IP-адрес. пакет на внутренний хост.Отправка IP-пакетов.
  3. Конус ограничения портов: Аналогичен 2, но с дополнительными ограничениями портов.Только когда внутренний хост сначала отправляет IP-пакет внешнему хосту с IP-адресом add1 и номером порта port1, внешний хост может отправить IP-пакет с исходным портом. номер порта 1. на внутренний хост.

симметричный NAT:

  1. Переназначьте номер порта, то есть, когда внутренний хост A взаимодействует с внешним B, используется номер внешнего порта port1, а когда внутренний хост A взаимодействует с другими внешними устройствами, такими как C, номер внешнего порта будет изменен.

При P2P-передаче, если A и B оба находятся во внутренней сети и не используют Full Cone, A не может отправить информацию B. В этом случае необходим посредник C, который заранее связался с A и B. A хочет отправить информацию B, A должен запросить C, а затем C просит B отправить UDP-пакет на IP-адрес внешней сети A, чтобы A мог отправить информацию B. Процесс выдачи контракта заключается в проделывании дыр.

Однако если обе стороны примут реализацию симметричного NAT и номера замещающих портов не будут последовательно увеличиваться напрямую, то ни C, ни A не будут знать новый номер порта внешней сети, назначенный B, даже если C потребует от B изменить новый номер порта. Номер порта сообщается C, а затем C сообщает A. Когда A отправляет информацию B, A использует новый номер порта (поскольку порт B новый, хотя IP-адрес не изменился), затем A достигает B При использовании NAT пакет будет отброшен, поскольку A использует новый номер порта, поэтому он по-прежнему не может отправлять информацию, и это бесконечный цикл. Так как же симметричный NAT делает дыры? (Продолжение следует)

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

https://www.zhihu.com/question/20436734

Есть еще много техник пробивания отверстий, это только тот, который использовался изначально.

рекомендация

отblog.csdn.net/ZhaoBuDaoFangXia/article/details/73729687