Я начал изучать возможность подключения к другому, используя соединение p2p, поэтому я закодировал простую программу сокетов в JAVA для устройств Android, в которой пользователь, в котором пользователи могут делиться простыми сообщениями p2p (у меня не было никаких идея о NAT тогда). Я узнал об NAT, поэтому теперь мне нужно установить TCP-соединение с другим пользователем, который использует сервер для обнаружения, но передается полезная нагрузка p2p. Я также посмотрел на XMPP (очень хорошее и подробное объяснение того, как работает протокол здесь) и UPnP, но я не знаю, как их реализовать.
Еще один интересный вопрос, который возникает в BitTorrent, потому что он может работать на любом устройстве и даже за NAT. Я не могу объяснить, как работает BitTorrent.
Я много исследовал, но я застрял.
Мои вопросы:
- Подробное описание BitTorrent (например здесь, а не как торренты работают) и как он может работать с NAT?
- Есть ли способ сделать запись NAT программным способом?
- Является ли программирование сокетов достаточным для p2p?
- Насколько сложно создать собственный протокол и как я могу его создать?
- Если два устройства D1 и D2 хотят передать p2p, и они знают друг друга IP. D1 отправляет запрос D2 и не может пройти через D2 NAT, но должна быть запись, созданная в D1 NAT. Поэтому, когда D2 пытается отправить что-то, D1 NAT должен обнаружить запись с D2 IP. Тогда почему пакет не разрешен?