PDU session is established and ping works, but iperf3 fails immediately and warm-up no longer helps

Definitions:

  • “Cold state” = the first TCP transfer attempt immediately after PDU session establishment, before any prior user-plane traffic
  • “Warm-up” = sending one or more preliminary transfers after session establishment and then retrying the main transfer

Previously, warm-up sometimes improved the throughput, but recently even the warm-up no longer helps.

Hello,

I am testing free5GC with N3IWF/N3IWUE (untrusted non-3GPP access).

My main issue is not session establishment itself, but post-establishment user-plane TCP traffic.

Current behavior:

  • PDU session is established successfully
  • The UE-side network namespace gets the GRE/PDU-related interfaces
  • ICMP to the DN host works
  • However, TCP bulk transfer to the DN host fails almost immediately

Example test:

  • iperf3 -c <DN_HOST> -p <PORT>
  • ping <DN_HOST> -c 3

Typical symptoms:

  • Very low throughput only in the first second
  • Retransmissions occur immediately
  • Congestion window quickly collapses to around 1 MSS / 1.33 KB
  • After the first second, throughput becomes 0 bps and does not recover
  • In some runs, iperf3 also ends with errors such as:
    • control socket has closed unexpectedly
    • unable to send control message: Bad file descriptor

Important point:

  • Earlier, sending some warm-up traffic sometimes improved the transfer
  • But recently, even warm-up no longer helps
  • Now the TCP transfer often fails before any useful throughput is established

What I already checked:

  • PDU session is established
  • The UE namespace has GRE/PDU-related interfaces
  • ICMP to the DN host works
  • MTU tuning did not solve the issue
  • Offload-related changes did not solve the issue
  • Packet capture shows very early retransmissions on the GRE/user-plane side
  • ss -tin shows very early TCP collapse (cwnd quickly drops to about 1 MSS)

Example result:

iperf3:

  • 0.00-1.00 sec: about 105 KB transferred, about 857 Kbits/sec, retransmissions already occur, cwnd about 1.33 KB
  • 1.00-10.00 sec: 0.00 Bytes / 0.00 bits/sec for all remaining intervals
  • Sender side total: about 105 KB in 10 sec
  • Receiver side total: 0.00 Bytes

ping:

  • 3 packets transmitted, 3 received, 0% packet loss
  • RTT was non-zero and variable

Question:
Has anyone seen a case where user-plane ICMP works after PDU session establishment, but TCP bulk transfer over N3IWF/N3IWUE collapses immediately, and even warm-up traffic no longer helps?
Are there any known issues related to GRE/IPsec/user-plane path behavior, early packet loss/reordering, or TCP collapse in this setup?

Observed iperf3 output:
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 105 KBytes 857 Kbits/sec 2 1.33 KBytes
[ 5] 1.00-2.00 sec 0.00 Bytes 0.00 bits/sec 1 1.33 KBytes
[ 5] 2.00-3.00 sec 0.00 Bytes 0.00 bits/sec 0 1.33 KBytes
[ 5] 3.00-4.00 sec 0.00 Bytes 0.00 bits/sec 1 1.33 KBytes
[ 5] 4.00-5.00 sec 0.00 Bytes 0.00 bits/sec 0 1.33 KBytes
[ 5] 5.00-6.00 sec 0.00 Bytes 0.00 bits/sec 0 1.33 KBytes
[ 5] 6.00-7.00 sec 0.00 Bytes 0.00 bits/sec 1 1.33 KBytes
[ 5] 7.00-8.00 sec 0.00 Bytes 0.00 bits/sec 0 1.33 KBytes
[ 5] 8.00-9.00 sec 0.00 Bytes 0.00 bits/sec 0 1.33 KBytes
[ 5] 9.00-10.00 sec 0.00 Bytes 0.00 bits/sec 0 1.33 KBytes


[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 105 KBytes 85.8 Kbits/sec 5 sender
[ 5] 0.00-10.00 sec 0.00 Bytes 0.00 bits/sec receiver

Observed ping output:
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 2.780/38.421/109.584/50.319 ms

Hi,
I reproduced this and did packet captures on both sides. Downlink (from free5gc to n3iwue) is healthy, uplink (from n3iwue to free5gc) collapses even with small MSS (900), so not just PMTU; likely UPF/N6 forwarding or offload/segmentation handling on uplink path would be the problem.

Findings:

  • enp0s3 (DN/Internet-facing) shows TCP handshake and partial data, then heavy retransmissions/timeouts.

  • enp0s8 (ESP) looks normal, so IPsec tunnel/control plane is up.

  • xfrmi-default capture is empty (no user-plane packets), which may be the key issue.

Conclusion:
This is mainly a UPF user-plane forwarding problem (PDR/FAR/TEID/session programming), not an iperf3 warm-up issue.

What to check:

  1. Verify PFCP session setup between SMF and UPF.

  2. Confirm PDR/FAR are installed for the UE flow.

  3. Validate GTP-U TEID mapping and UE route/subnet config.

  4. Recreate PDU session and retest.

Also, MSS mismatch exists (UE advertises smaller MSS), but that looks secondary compared to the missing traffic on xfrmi-default.

Best regards,
carlhus