Примерно так:
При скачивание файла, клиент сообщает серверу данные в которых содержится Ip, хеш. Сервер обрабатывает и отправляет клиенту количество участников для обмена и их данные. После сообщения клиенту, сервер перестает участвовать в обмене, и только отправляет клиенту обновленные данные по участникам обмена, с той периодичностью, которая заложена в настройках сервера.
В классическом примере обмен клиентов за nat практически не возможен. Возможен если
1) используется протокол ipv6
2) используется udp