STUN: discovering your public address
Session Traversal Utilities for NAT (STUN), specified in RFC 8489, is a lightweight request-and-response protocol. A device sends a binding request to a STUN server, and the answer reports the public address and port the request came from, known as the device's server-reflexive address. STUN helps two devices try a direct connection, but it never carries the session itself, so a STUN server needs very little bandwidth.
TURN: relaying when direct fails
Traversal Using Relays around NAT (TURN), specified in RFC 8656 as an extension of STUN, allocates an address on a relay server. Both sides send their traffic to the relay, which forwards it. TURN works when nothing else does, but every byte of the session crosses the relay, which adds latency and costs the operator bandwidth.
ICE: choosing between them
Interactive Connectivity Establishment (ICE), RFC 8445, ties the two together. Each side gathers candidates (local addresses, server-reflexive addresses from STUN and relayed addresses from TURN), exchanges them, tests pairs and keeps the best working one, preferring direct paths. WebRTC uses ICE, STUN and TURN in exactly this way.
How Vexaro Desk does it
Vexaro Desk does not use TURN. When a network rules out a direct connection, the session goes through Vexaro's own relays instead, and the client connects only to a relay it can authenticate.
Direct sessions are end-to-end encrypted. When a network forces a relayed connection, traffic stays encrypted in transit through Vexaro-operated relays.