Skip to content

NAT Traversal Relay Service

michal-kapala edited this page Jun 29, 2022 · 2 revisions

Overview

For P2P games (not particularly GRO/GRP), Quazal implements UDP hole punching to establish a PRUDP connection between clients.

The process was described by Olivier Langlois (former Quazal developer and tech support) in his blog article.

The main idea is that a client which wants to join a game or lobby first requests the host's PRUDL URL from RDV, then sends a RequestProbeInitiation packet with its own PRUDP URL to RDV server and starts sending PRUDP NAT probes (NAT pings). After receiving RequestProbeInitiation, RDV sends a RMC request to the target host client using NAT Traversal Relay Service with the joining client's endpoint. The request triggers host to start sending NAT probes to the joining client. Both clients send probes to each other at the same time so that a NAT hole is created on both routers and the packets can pass through. The external endpoints stay the same as per RFC-4787 REQ-1.

Methods

The relay methods are duplicates of NAT Traversal Service. The ones present in GRO's ubi_osdk.dll are:

  1. RequestProbeInitiation
  2. InitiateProbe (not implemented)
  3. RequestProbeInitiationExt
Clone this wiki locally