Skip to main content

Testing Tunnel Performance with iperf2 UDP

In this guide, you'll learn how to use iperf2 in UDP-only mode to test throughput and network behavior over a TUN-over-UDP tunnel. Unlike iperf3, which always uses TCP as a control channel, iperf2 can operate in pure UDP mode, making it ideal for testing scenarios where TCP connections are unreliable or unavailable, such as high-latency links or networks with strict firewall rules.

Tunnel Setup

We assume you have a working TUN-based VPN tunnel between two Linux devices:

  • Client (local): TUN IP 10.0.0.1
  • Server (remote): TUN IP 10.0.0.2

iperf2 must be installed on both devices. You can install it via:

sudo apt install iperf

Why iperf2 UDP-Only Mode?

iperf2's key advantage over iperf3 is its ability to operate in pure UDP mode without requiring any TCP control channel. This makes it particularly valuable for:

  • High-latency links where TCP handshakes might time out
  • Firewall-restricted environments where only UDP traffic is allowed
  • Networks with packet loss where TCP struggle to make a connection

iperf3, in contrast, always establishes a TCP control connection even for UDP tests, which can fail in challenging network conditions.


1. Start the iperf2 Server in UDP Mode

On the server side (10.0.0.2), run:

iperf -s -u
  • -s: Start in server mode
  • -u: Use UDP protocol

This starts iperf2 in UDP listening mode, waiting for incoming UDP test sessions without requiring any TCP control channel.


2. Run a UDP Test

UDP tests are great for measuring jitter, packet loss, and latency. However, since UDP is connectionless, you must specify the desired bandwidth.

On the client side (10.0.0.1), run:

iperf -c 10.0.0.2 -u -b 1M
  • -u: Use UDP
  • -b 1M: Target bandwidth of 1 Mbps

Sample Output (UDP):

------------------------------------------------------------
Client connecting to 10.0.0.2, UDP port 5001
Sending 1470 byte datagrams, IPG target: 11215.21 us (kalman adjust)
UDP buffer size: 208 KByte (default)
------------------------------------------------------------
[ 1] local 10.0.0.1 port 56655 connected with 10.0.0.2 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.0000-30.0120 sec 3.75 MBytes 1.05 Mbits/sec
[ 1] Sent 2679 datagrams
[ 1] Server Report:
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 1] 0.0000-30.0390 sec 3.75 MBytes 1.05 Mbits/sec 11.927 ms 0/2678 (0%)