P2P-форум с нуля | от NAT hole punching до автономной и полностью децентрализованной сети
NAT (от англ. Network Address Translation — «преобразование сетевых адресов») — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов
В нашем примере Google имел статичный белый адрес с заранее проброшенным портом. Но как заставить таким образом соединиться два устройства за NATами?
▫️Ты отправляешь пакет на 1.2.3.4, создавая тем самым сессию, открытую на внешнем порту X
▫️1.2.3.4 видит твой внешний порт X, когда принимает пакет (друг не видел, ведь пакет не дошёл)
▫️Владелец 1.2.3.4 неким образом сообщает тебе твой внешний порт данной сессии X
▫️Ты отправляешь пакет на адрес друга, используя тот же локальный порт на ПК, что и для пакета к 1.2.3.4. Это заставляет пакет идти через уже имеющуюся сессию NAT
▫️Твоя сессия NAT теперь будет принимать пакеты не от 1.2.3.4, а от твоего друга
▫️Пакет разбивается о железный файрвол роутера друга снаружи
▫️Кажется, что всё как в прошлой попытке, однако сейчас мы знаем X за счёт помощи от 1.2.3.4
▫️Друг делает эти же шаги, но уже обращаясь к нашему адресу в порт X, который будет открыт вместе с сессией NAT ещё несколько секунд и настроен на приём пакетов от друга
▫️Пакет друга доходит до нашего локального компьютера
▫️Мы видим внешний порт друга Y (аналогично X) в заголовке полученного пакета и теперь можем общаться в обе стороны сквозь трансляторы
STUN-сервер - это сервер, который отвечает на все входящие пакеты адресом и портом X, из которого они были отправлены. Это позволяет определить свой внешний IP-адрес и внешний порт X своей сессии NAT
Наша оверлейная сеть будет представлять из себя неограниченное количество нод, соединённых друг с другом посредством udp-туннелей, созданных между их NAT
Мы получили теоретически рабочую оверлейную сеть, где устройства могут общаться друг с другом без каких-либо препятствий, как если бы они находились в одной LAN (за исключением свободы выбора порта)
💬 Подробнее в статье
#P2P #NAT | 🌐 Сетевик Джонни
Post #411
1.83K

- 👍 7
- ❤ 1
- 🙉 1