TCP path diagnostics

This page downloads from and uploads to this server and, while that happens, watches the connection from the server's side of the wire: retransmissions, out-of-order packets, timeouts, window collapses. It is built to find lossy, flapping or asymmetric routes — not to brag about speed.

Advanced
Ready. Nothing is sent until you press Run diagnostics.

Glossary

Retransmission (bytes_retrans, total_retrans)

The server sent data, never got an acknowledgement, and had to send it again. Some retransmission is normal on the internet (under 0.1 %). Above 1 % something on the download path is dropping packets: a congested link, a bad cable/Wi‑Fi, a faulty line card, or a router deliberately policing traffic.

RTO / timeout (total_rto, total_rto_time)

The worst kind of loss recovery. So much went missing that TCP gave up waiting, paused for a whole retransmission-timeout (usually 200 ms or more), restarted from a window of one packet and slowly ramped up again. This is what a transfer that "freezes for a second" looks like. Even one RTO in a short test is worth attention.

Congestion window (cwnd) and ssthresh

How much data the server is allowed to have in flight before waiting for acknowledgements. It grows while things go well and is cut in half (or to 1) at every loss event. A saw-tooth is normal; repeated collapses to a handful of packets mean the sender keeps hitting loss, which is why throughput dies.

Out-of-order packets (rcv_ooopack) — upload path

Packets from you arrived at the server in a different order than you sent them. Small counts happen after a loss (later packets arrive before the retransmission). Persistent reordering without loss is the classic sign of per-packet load balancing or an asymmetric/multi-path route: your packets take different routes and race each other. Reordering makes TCP think packets were lost and slows down for nothing.

Reordering seen (reord_seen, reordering) — download path

The same thing in the other direction, detected by the server from your acknowledgements: data the server sent arrived at you out of order. reordering is how many packets out of place the kernel now tolerates before declaring loss (3 is the default; higher means it has adapted to a reordering path).

DSACK duplicates (dsack_dups)

You told the server "you retransmitted something I already had". Every one is a retransmission that was unnecessary: the original was only late (reordering, sudden delay), not lost. Many of these next to few real losses means the path reorders rather than drops.

RTT, min RTT and queueing (bufferbloat)

Round-trip time. The minimum is the physical path; if RTT balloons to several times the minimum while data is flowing, packets are sitting in a queue somewhere (usually the slowest link's buffer). That is delay, not loss, and it makes everything feel sluggish even when nothing is dropped.

Receive-window limited (rwnd_limited) / snd_wnd

The server had more to send but your side said its receive buffer was full. That is a limit on your device (small socket buffers, a slow reader, a VPN client, an old OS), not on the network.

ECN CE marks (delivered_ce)

A router on the path signalled congestion explicitly instead of dropping. Useful: it tells you the bottleneck supports ECN and was full.

Path MTU (pmtu) and MSS

Largest packet the path carries. 1500 is plain Ethernet; 1492 is PPPoE; ~1400 or less usually means a tunnel or VPN somewhere. Very small values, or MSS far below MTU, point at a middlebox rewriting packets.

SACK, window scaling, timestamps

TCP options negotiated at connection start. All three should be on. A path where SACK is missing recovers from loss terribly; missing window scaling caps throughput on long paths. Usually a broken firewall or NAT box strips them.