Как установить p2p соединение между двумя клиентами, и что для этого нужно?
Начните с изучения работы NAT. Проблема -  между участник 1 и участник 2 в памяти их маршрутизаторов нет готовой Nat цепочки, так что маршрутер отбросит попытку соединения.
Задача сводится к пробитию NAT снаружи в автоматическом режиме. Изучайте понятия, связанные с UPnP, NAT, NAT traversal, STUN, TURN
Много головной боли на эту тему было у IP телефонистов, так что многие их рецепты сгодятся и Вам.
Первая попавшаяся статья
https://voipnotes.ru/nat-potocol-turn-rsip-ice/
Для ясности дополню другие ответы.
1. Оба клиента подключаются к серверу. 
2. Сервер отдаёт им список всех подключённых клиентов. 
3. Один клиент подключается к другому, чей адрес он получил от сервера. 
Это не работает, если у клиентов нет белых   адресов. Решается проблема следующими способами:
- ретрансляции и соединение клиентов через сервер (стандартное решение для большинства игр) 
- подключение к клиентам с белыми адресами
- проброс портов и настройка nat (если вдруг ваша игра умеет ломать сети)
- клиенты долбят я друг к другу через udp
- сервер соединяет концы соединений клиентов (разве какой-то nat это разрешает?)
Короч, надо обойти nat.