Two planes, two problems
Signalling (join, roster, mute, chat during the call) is HTTPS 443 to the Teams service. It survives almost any network and is rarely your problem.
Media (RTP audio/video/screenshare) negotiates its own path per call using ICE (Interactive Connectivity Establishment). Understanding that negotiation — and the exact order it degrades in — is the whole game.
The candidate ladder
At call setup each endpoint gathers candidates — addresses it might be reachable on:
- Host — its own local IP/port (client range, see below)
- Server-reflexive — its public IP as seen by the relay, discovered via STUN on UDP 3478
- Relay — a port allocated on the Microsoft transport relay (
13.107.64.0/18,52.112.0.0/14), allocated via TURN on UDP 3478
Both sides exchange candidates, run connectivity checks on every pair, and pick the best working pair, in strict preference order:
| Rank | Path | Transport | What it means |
|---|---|---|---|
| 1 | Direct peer-to-peer (1:1 calls) | UDP, client range | Best case — media never leaves your WAN for internal calls |
| 2 | Via relay | UDP 3478–3481 | Normal case for conferences and most external calls |
| 3 | Via relay | TCP 443 (TURN/TCP) | UDP blocked — works, degrades |
| 4 | Via proxy | HTTPS tunnel (CONNECT) | Last resort — expect complaints |
The call connects on all four rungs. Users don't report "we're on rung 4" — they report choppy audio on Thursdays. Your job is knowing which rung a site actually uses.
Port-by-port: what breaking each one does
The four relay ports are not equals:
- UDP 3478 — STUN/TURN control. The one that matters. Candidate discovery and relay allocation happen here. Block it and UDP media is off the table entirely — every call at that site drops to TCP 443 (rung 3).
- UDP 3479 (audio), 3480 (video), 3481 (screenshare) — per-modality relay ports. Their real purpose is classification: they let firewalls and QoS treat audio better than screenshare. With only 3478 open, media multiplexes onto 3478 and calls still work on UDP — you lose per-modality visibility and QoS separation, not the call. Microsoft lists all four as required for the Optimize category; treat 3478-only as a degraded state you fix, not a config you design for.
Failure signatures, mapped back:
| Symptom | Likely rung/break |
|---|---|
| Call connects, then ~10s silence, then drops | UDP checks timing out before TCP fallback completes — asymmetric block |
| One-way audio | UDP open one way only (site A can reach relay, site B's return path filtered) |
| Everything works but quality dips at one site | That site is on TCP 443 fallback — check 3478 outbound |
| Screenshare stutters while audio is fine | 3481 blocked / QoS starving sharing; audio survived on 3479 |
| Works on mobile hotspot, fails on corp Wi-Fi | Proxy or SSL-inspection in the media path |
The client side of the port pair
The source ports matter too. Defaults (visible in your tenant — we scan
TeamsMeetingConfiguration):
- Audio: UDP 50000–50019 · Video: 50020–50039 · Sharing: 50040–50059
These exist for the same reason as 3479–3481: so your LAN can classify and DSCP-mark
each modality (audio EF/46, video AF41/34, sharing AF21/18 by convention). If
ClientMediaPortRangeEnabled is false, the client uses ephemeral ports and your QoS
policy has nothing to match on.
Three rules that prevent most tickets
- Local breakout for Optimize endpoints. Media exits the internet at the user's site — never hairpinned through a central proxy or full-tunnel VPN. Every hop is jitter you cannot remove; SSL inspection of media is pure harm (it's SRTP — encrypted already, uninspectable, and inspection boxes mangle long-lived UDP flows).
- Never proxy the relay ranges. Proxies exist for HTTP; TURN/TCP through a proxy is
rung 4. The Optimize list is three rows —
13.107.64.0/18,52.112.0.0/14,52.122.0.0/15— automate it fromendpoints.office.comrather than hand-copying. - Split-tunnel VPN for the same three ranges. Full-tunnel VPN + voice is the single most common self-inflicted quality incident.
Verifying instead of believing
- Tenant side: our scan holds
TeamsMeetingConfiguration(client port ranges, QoS) andTeamsNetworkRoamingPolicy— check what policy says before touching cables. - Network side: the Microsoft 365 network connectivity test from an affected site tests the actual relay path, UDP reachability and protocol used.
- After the fact: a rising share of TCP-transport calls in CQD for one subnet is the smoking gun for a broken UDP path at that site.