ETIMEDOUT networking protocol_error ai_generated partial

TCP Zero Window Probe Failure: no response from receiver after 3 probes

ID: networking/tcp-zero-window-probe-failure

Also available as: JSON · Markdown · 中文
78%Fix Rate
85%Confidence
1Evidence
2024-03-15First Seen

Version Compatibility

VersionStatusIntroducedDeprecatedNotes
Linux kernel 5.15 active
Linux kernel 6.1 active
FreeBSD 13.2 active

Root Cause

The receiver's TCP window is zero and the sender's zero-window probes are not acknowledged, indicating the receiver is unresponsive or has crashed while holding a zero window.

generic

中文

接收方的TCP窗口为零,且发送方的零窗口探测未得到确认,表明接收方在保持零窗口时无响应或已崩溃。

Official Documentation

https://datatracker.ietf.org/doc/html/rfc9293

Workarounds

  1. 85% success Forcefully close the TCP connection from the sender using tcpkill or iptables, then re-establish: sudo tcpkill -i eth0 port 8080; sleep 2; systemctl restart myapp
    Forcefully close the TCP connection from the sender using tcpkill or iptables, then re-establish: sudo tcpkill -i eth0 port 8080; sleep 2; systemctl restart myapp
  2. 80% success Set a shorter TCP user timeout on the socket to abort the connection faster: sysctl -w net.ipv4.tcp_retries2=5
    Set a shorter TCP user timeout on the socket to abort the connection faster: sysctl -w net.ipv4.tcp_retries2=5

中文步骤

  1. Forcefully close the TCP connection from the sender using tcpkill or iptables, then re-establish: sudo tcpkill -i eth0 port 8080; sleep 2; systemctl restart myapp
  2. Set a shorter TCP user timeout on the socket to abort the connection faster: sysctl -w net.ipv4.tcp_retries2=5

Dead Ends

Common approaches that don't work:

  1. 85% fail

    Zero-window probing is separate from keepalive; keepalive settings do not affect probe retransmission timers.

  2. 75% fail

    The issue is at the application or receiver side; restarting the sender's interface does not fix the receiver's unresponsiveness.