Ответ 1
ICE собирает список потенциальных целевых IP/портов, к которым нужно подключиться. Каждый одноранговый узел собирает их, а затем каждый запускает проверку подключения каждого из кандидатов по порядку до тех пор, пока проверка не пройдет или проверка не завершится.
Когда Алиса пытается подключиться к Бобу, она каким-то образом получает список возможных способов, определенных Бобом - она может связаться с Бобом. ICE называет этих кандидатов. Боб может сказать, например: "Мой локальный сокет 192.168.1.1:1024/udp, моя внешняя привязка NAT (найденная через STUN) - это 196.25.1.1:4454/udp, и вы можете вызвать медиарелейное (промежуточное поле) в 1.2.3.4: 6675/УДП". Боб ставит это в SDP-пакете (описание этих разных кандидатов) и отправляет его Алисе. (В SIP, исходный вариант использования для ICE, SDP, переносимый в обмен SIP INVITE/200/ACK, настройка сеанса SIP.)
ICE подключается, и вы можете настроить точный характер/количество кандидатов. Вы можете попробовать прямую ссылку, а затем спросить STUN сервер для привязки (это пробивает дыру в вашем NAT и сообщает внешнему IP/порт этого отверстия, который вы ввели в описание сеанса), и отбрасывая запрос TURN для передачи ваших данных.
Единственным недостатком для ICE является то, что ваши сверстники обмениваются описаниями SDP, которые вам могут или не нравятся. Другим является то, что поддержка TCP все еще находится в черновик формы, который может или не может быть проблемой для вас. [UPDATE: ICE официально официально RFC 6544.]
Игры часто используют UDP, потому что старые данные бесполезны. (Вот почему RTP обычно работает поверх UDP.) В некоторых приложениях P2P часто используются средние или средние ячейки.
IRC использует сеть из средних ячеек: серверы IRC образуют сети, а клиенты подключаются к ближайшему серверу. Сообщения от одного клиента к другому могут проходить через сеть серверов.
В противном случае вы можете взглянуть на архитектуру BitTorrent и посмотреть, как они справляются с проблемой NAT. Как отмечает CodeShadow в комментариях ниже, BitTorrent полагается на доступные одноранговые сети в сети: в некотором смысле некоторые сверстники образуют сеть из средних ящиков. Если эти медиа-боксы могут выступать в качестве реле, у вас будет IRC-подобная архитектура, но динамическая настройка.