P2P Network Tester

Test WebRTC peer-to-peer latency, jitter, and packet loss between two browsers. No backend, no account.

ZERO UPLOAD · ALL LOCAL
  1. Wait for the automatic STUN probe to complete; it shows your public IP and NAT type.
  2. Choose a role: click "Start Session" on one browser to become the Initiator, "Join Session" on the other.
  3. Initiator: copy the offer SDP and send it to your partner (paste into their browser).
  4. Joiner: paste the offer, click "Generate Answer", then copy the answer SDP and send it back.
  5. Initiator: paste the answer and click "Connect". The live dashboard starts automatically once connected.
  6. Use the Simulated Loss and Artificial Latency sliders to test degraded conditions. Click "Stop Test" when done.

What this page covers

  • getUserMedia() requests camera/microphone access, returning a MediaStream
  • RTCPeerConnection manages ICE negotiation, the DTLS handshake, and SRTP key exchange
  • RTCDataChannel bidirectional message transport over SCTP/DTLS, independent of any media track
  • Browser support baseline RTCPeerConnection: Chrome 23+, Firefox 22+, Safari 11+, Edge 79+

What this page covers

  • RFC 1918 private ranges 192.168.x.x, 10.x.x.x, and 172.16.x.x, all translated to one public IP
  • Port forwarding a permanent NAT table entry routing a specific external port to one internal device
  • DMZ mode routes all inbound traffic on all ports to a single device, most routers allow only one at a time
  • IPv6 as the long-term fix gives every device a globally routable address, removing NAT traversal entirely

What to look for

  • 5 ms
  • 5 to 10 ms
  • above 20 ms

What to look for

  • 1%
  • 3%
  • 5%
  • 10%

What to look for

  • 1 to 5 seconds

What to look for

  • UDP 3478
  • 5349 (or 443 as a firewall-friendly fallback)
  • stun.l.google.com:19302
  • 49152-65535, over 16,000 simultaneous sessions

STUN only discovers addresses; it cannot relay traffic. Every general-purpose WebRTC deployment needs a TURN fallback as well.

What to look for

  • about 200,000 km/s
  • 1 to 5 ms lightly loaded, 20 to 50 ms congested

What this page covers

  • Offer/answer sequence createOffer() > setLocalDescription() > (signaling) > setRemoteDescription() > createAnswer()
  • "v=0" version line every SDP blob's first line, followed by session-level and per-media descriptions
  • a=candidate: lines carry each peer's ICE candidates within the SDP text
  • a=fingerprint: the DTLS certificate fingerprint that the handshake verifies against the remote peer's certificate

PROBING...

Public IP NAT Type Candidate Types STUN Reachable Gathering Time

YOUR OFFER — COPY AND SEND TO PARTNER

PASTE PARTNER'S ANSWER HERE

PASTE PARTNER'S OFFER HERE

YOUR ANSWER — COPY AND SEND BACK

Current RTT Average RTT Min RTT Max RTT Jitter Packets Sent Packets Received Packet Loss ICE Candidate Type

Accent line = RTT over time. Red markers = simulated packet drops.

Data Channel State Packets Echoed

Why test peer-to-peer?

Most latency tools measure the path from your browser to a server (usually a low-latency datacenter with a direct backbone connection). Peer-to-peer tests are different: traffic travels through your router, your ISP, the remote ISP, and the other person's router. Dropped packets on that path are caused by congestion at your ISP, overloaded home networks, and NAT hairpin delays that no synthetic test can replicate.

What server-based pings miss

This tool is useful for diagnosing lag in video calls, gaming sessions, and remote desktop connections where traffic flows directly between participants. A server-based ping can look clean while the actual P2P path adds enough packet loss or variable delay to make a call, game, or remote session feel unstable.1 Because the probe traffic follows the same route your real applications take, you see the congestion and jitter that actually affect your sessions rather than the favourable path to a nearby datacenter.

A bandwidth test answers a different question than this tool does. A speed test measures how much data a well-connected server can push to you in a burst: its download and upload numbers describe throughput, and its ping is a bonus measurement to the test server itself. Between two specific peers, this tool measures the stability of the path instead: delay, variation in that delay, and loss along the route your actual sessions take. Neither number predicts the other, which is why a gigabit connection can still host a stuttering call. When your speed test looks great but your calls feel bad, the peer-to-peer path is the thing left to measure, and that is exactly what this probe exercises.

WebRTC and STUN

WebRTC is the browser API behind video calls, screen sharing, and arbitrary data exchange between peers.2 Under the hood, it uses ICE (Interactive Connectivity Establishment) to discover how two peers can reach each other, with STUN used for connectivity checks and mapped-address discovery.3 STUN servers are contacted briefly to discover your public IP and check whether your NAT allows incoming connections; no probe data passes through them.

How the STUN probe classifies your NAT

The STUN probe on page load reports likely NAT behavior rather than a permanent router label. Endpoint-independent mapping is friendlier to direct peer connections, while address-dependent or address-and-port-dependent mapping can make direct P2P fail and push the session toward a relay path.4 Briefly contacting a STUN server lets the tool observe how your router rewrites outbound packets. From that single exchange the tool can infer which mapping style your NAT is using without any persistent connection.

Seeing address-dependent or address-and-port-dependent behavior up front tells you whether a direct test with a remote partner is realistic. When that mapping style is present the session may fall back to a relay, so the probe saves you from attempting a connection that would fail partway through negotiation. This classification is specific to the moment of the test, since some routers switch behavior as their mapping table fills up.

Reading your metrics

RTT (round-trip time) is the total time for a probe packet to reach the other peer and return. Average and min/max values give a picture of baseline latency versus spikes. Jitter measures stability: low jitter means consistent delivery, and high jitter means audio and video will require buffering to compensate.5

What each metric tells you

Packet loss counts both simulated drops from the loss slider and real timed-out probes, which are packets that never return an echo within the timeout window. ICE Candidate Type shows whether the connection is direct on your LAN (host), traversing NAT (srflx), or relayed through a TURN server (relay).3 Seeing a relay candidate is a useful signal that NAT traversal failed and that traffic is taking a longer path through an intermediary, which usually adds latency.

The min and max RTT values help you separate brief congestion spikes from a consistently high baseline. A stable average with occasional outliers points to a transient overload somewhere on the path, whereas a consistently high minimum suggests the route itself is the bottleneck. Jitter combines with loss here: a connection with low average RTT but rising jitter is starting to show the kind of irregular delivery that breaks real-time audio and video playback.

Where you run the two sides changes what the numbers mean. Two browser windows on the same machine exercise only the local loopback path, so the RTT sits near the floor and the test can never show a real network problem; it is useful for learning the controls, not for diagnosis. Two machines on the same Wi-Fi add the wireless hop, where contention and retransmissions live; two machines on different internet connections traverse the full NAT-plus-ISP path this tool exists to test. Give the session time, too. Jitter and loss verdicts need an observation window long enough to catch periodic congestion, so let it run for several minutes rather than trusting the first ten seconds of a quiet line.

Loss and latency simulation

The simulation controls let you introduce artificial conditions to test how your application behaves under degraded network quality. Sliding the loss rate simulates a congested link, and setting artificial latency approximates a longer or more contended path. Both effects appear immediately on the sparkline so you can watch your metrics react in real time as you move the sliders.

How packet drops are simulated

Simulated drops are applied at the send layer, so the packet is never actually transmitted and the other peer never sees it. The visual effect on the chart is identical to real loss: a red marker appears at that probe position, and the loss counter increments as though the packet had vanished somewhere on the path. This lets you model the experience of running over unreliable links without leaving your desk.

Applying a fixed latency offset is useful for modelling what happens when traffic crosses a long distance or passes through a slow intermediary. A small offset of 50 to 100 milliseconds hardly registers in conversation, but combined with high loss it quickly makes a session feel sluggish and unreliable, which is a realistic picture of many mobile and satellite links.

Jitter thresholds for real-time applications

Different real-time applications tolerate jitter very differently. Opus is designed for interactive audio such as VoIP, videoconferencing, and in-game chat, with frame sizes that can range from 2.5 ms to 60 ms depending on mode and layer.6 That flexibility helps applications adapt to network conditions, but variable delay can still become audible when it exceeds what the receiving side can absorb. Games and remote desktop sessions can also feel uneven when packets arrive irregularly, even if average latency looks acceptable. Measuring jitter between your actual peers rather than to a datacenter reveals whether your network introduces variable delay that affects those applications.

The tool calculates jitter using the RFC 3550 exponential weighted moving average formula, the same method used by RTP endpoints in voice over IP systems.1 This smooths momentary spikes without hiding sustained instability. If your average RTT is stable but your jitter is high, the cause is usually Wi-Fi retransmissions, CPU contention on a shared device, or bufferbloat on a home router processing multiple concurrent streams. Running the test while replicating your real usage conditions, including other active devices on the same network, gives a more accurate diagnosis than testing on an otherwise idle connection.

For raw latency, voice guidance gives the most defensible anchor. ITU-T Recommendation G.114, the one-way transmission time standard for voice, treats roughly 150 ms of one-way mouth-to-ear delay as the point where most users start noticing the lag in a conversation.7 This tool reports round-trip time, so the honest translation doubles that budget: an RTT hovering near 300 ms means each direction is consuming about the whole allowance before you add processing the probe cannot see. Anything comfortably below that leaves headroom. Run your own session above and compare the reported average against that voice budget, and you have a concrete answer to whether your path is good for conversation, not just a number.

When direct P2P fails: symmetric NAT

Older NAT discussions often used cone and symmetric labels, but modern UDP NAT guidance describes mapping and filtering behavior separately. Address-dependent or address-and-port-dependent mapping can make hole punching fail, which is why some direct WebRTC sessions need a TURN relay server to forward packets between peers.4 Corporate networks, carrier-grade NAT (CGNAT) used by mobile carriers, and some home routers running in double-NAT configurations commonly use restrictive NAT behavior. The STUN probe on the tool's first screen identifies this condition so you know whether a direct test is possible before attempting it.

When hole punching cannot succeed, the only reliable fallback is routing traffic through a TURN server, which forwards each packet between the two peers at the cost of extra latency and bandwidth. Without TURN relay support built into this tool, a session between two restrictive NATs will simply fail to connect, which mirrors the behaviour you would see in many production WebRTC applications. Recognizing this limitation before you start troubleshooting saves time and points you toward the right fix.

What your NAT type means for connecting

"NAT type" is the question most people arrive with, and the mapping styles above are the honest answer to it. RFC 4787, the IETF's behavioral requirements for UDP NATs, names the three mapping styles this probe reports, and its requirement that NATs use endpoint-independent mapping exists precisely because restrictive mapping forces applications onto relays.8 In plain terms: endpoint-independent mapping is the friendly case, where your router reuses the same external port for every destination, so hole punching usually succeeds; address-dependent and address-and-port-dependent mapping give you a different external port per destination, which is what breaks direct connections.

Game platforms grade the same behavior with friendlier labels. Consoles and matchmaking systems often sort players into open, moderate, or strict NAT grades, bundling mapping and filtering behavior into a single verdict; the RFC deliberately measures those separately because they answer different questions.8 What this probe reports is the underlying mapping behavior, which is the quantity that actually decides whether a direct peer connection can succeed. No grade is a verdict on your connection quality overall: a restrictive result explains why direct sessions struggle to connect, and the fix sits in the router's NAT behavior or a relay, not in more bandwidth.

Stable vs. Unstable Jitter Reference

  • Stable
  • Unstable
  • 2.5-60ms

Run your own session above and compare its RTT and jitter combination against this stable-vs-unstable contrast.

Sources
  1. 1.

    H. Schulzrinne, S. Casner, R. Frederick, and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications," RFC 3550, IETF, July 2003. https://www.rfc-editor.org/rfc/rfc3550.txt

  2. 2.

    Mozilla Developer Network, "WebRTC API," developer.mozilla.org, accessed June 2026. https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API

  3. 3.

    A. Keranen, C. Holmberg, and J. Rosenberg, "Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal," RFC 8445, IETF, July 2018. https://datatracker.ietf.org/doc/html/rfc8445

  4. 4.

    T. Reddy, A. Johnston, P. Matthews, and J. Rosenberg, "Traversal Using Relays around NAT (TURN): Relay Extensions to Session Traversal Utilities for NAT (STUN)," RFC 8656, IETF, February 2020. https://datatracker.ietf.org/doc/html/rfc8656

  5. 5.

    Mozilla Developer Network, "RTCRtpReceiver: jitterBufferTarget property," developer.mozilla.org, August 2025. https://developer.mozilla.org/en-US/docs/Web/API/RTCRtpReceiver/jitterBufferTarget

  6. 6.

    J. M. Valin, K. Vos, and T. Terriberry, "Definition of the Opus Audio Codec," RFC 6716, IETF, September 2012. https://www.rfc-editor.org/rfc/rfc6716.txt

  7. 7.

    ITU-T, "G.114: One-way transmission time," Recommendation G.114, itu.int, May 2003. https://www.itu.int/rec/T-REC-G.114/

  8. 8.

    F. Audet and C. Jennings, "Network Address Translation (NAT) Behavioral Requirements for Unicast UDP," RFC 4787, IETF, January 2007. https://www.rfc-editor.org/rfc/rfc4787

FAQ