embedded
network_error
ai_generated
true
lwIP: TCP retransmission timeout on connection 192.168.1.100:80, max retries exceeded
ID: embedded/lwip-tcp-retransmission-timeout
80%Fix Rate
84%Confidence
1Evidence
2023-07-22First Seen
Version Compatibility
| Version | Status | Introduced | Deprecated | Notes |
|---|---|---|---|---|
| lwIP V2.1.3 | active | — | — | — |
| FreeRTOS V10.4.3 | active | — | — | — |
Root Cause
TCP connection lost due to network congestion, remote host unresponsive, or insufficient memory for retransmission buffers.
generic中文
TCP 连接因网络拥塞、远程主机无响应或重传缓冲区内存不足而丢失。
Official Documentation
https://savannah.nongnu.org/projects/lwip/Workarounds
-
85% success Increase lwIP memory pool for TCP segments: in lwipopts.h set `#define MEMP_NUM_TCP_SEG 64` and `#define TCP_SND_BUF 4096`.
Increase lwIP memory pool for TCP segments: in lwipopts.h set `#define MEMP_NUM_TCP_SEG 64` and `#define TCP_SND_BUF 4096`.
-
80% success Implement application-level keep-alive with shorter interval (e.g., 5 seconds) to detect dead connections early.
Implement application-level keep-alive with shorter interval (e.g., 5 seconds) to detect dead connections early.
-
90% success Use lwIP callback `tcp_err()` to handle connection reset and trigger reconnection logic.
Use lwIP callback `tcp_err()` to handle connection reset and trigger reconnection logic.
中文步骤
增加 lwIP 的 TCP 段内存池:在 lwipopts.h 中设置 `#define MEMP_NUM_TCP_SEG 64` 和 `#define TCP_SND_BUF 4096`。
实现应用层保活机制,使用更短间隔(例如 5 秒)以尽早检测死连接。
使用 lwIP 回调 `tcp_err()` 处理连接重置并触发重连逻辑。
Dead Ends
Common approaches that don't work:
-
70% fail
Increasing TCP timeout values delays failure but does not fix connectivity issue.
-
60% fail
Disabling Nagle algorithm reduces latency but not retransmission due to packet loss.