線上故障:客戶端 telnet server_ip port 一直卡住,服務端抓包見到 SYN 到達但無 SYN-ACK 回應,連接數正常,無明顯錯誤日誌。關閉 net.ipv4.tcp_tw_recycle 後瞬間恢復。本文深度剖析該經典故障的內核機制、觸發條件與排查路徑。
ss -lntp 可見)tcpdump -i eth0 port 80 可見)netstat -s 顯示:packets rejects in established connections because of timestamp 計數器持續增長net/ipv4/tcp_input.c → tcp_v4_conn_request())// 簡化邏輯
if (tcp_tw_recycle && tcp_timestamps) {
struct tcp_metrics_block *tm = tcp_get_metrics_req(sk, req);
if (tm && tm->tcpm_ts) {
// PAWS 檢查:新包時間戳 < 記錄時間戳 → 視為舊包丟棄
if ((s32)(req->ts_recent - tm->tcpm_ts) < 0) {
NET_INC_STATS(sock_net(sk), LINUX_MIB_TCPRFC1323PAWSREJECT);
return; // 直接丟棄,不回 SYN-ACK,不進入 SYN_RECV
}
}
}
TS_A 被服務端記錄在 tcp_metrics_blockTS_B < TS_A(時鐘較慢)sysctl net.ipv4.tcp_tw_recycle net.ipv4.tcp_timestamps # 輸出均為 1 即觸發條件滿足
netstat -s | grep -i "timestamp\|paws" # 關鍵指標:packets rejects in established connections because of timestamp # 或:TCPRFC1323PAWSReject
方案 執行命令 生效範圍 副作用 推薦指數 關閉 tcp_tw_recycle sysctl -w net.ipv4.tcp_tw_recycle=0
持久化:/etc/sysctl.d/99-tcp.conf全局 TIME_WAIT 回收變慢(60s),內存微增 ⭐⭐⭐⭐⭐ (首選) 關閉 tcp_timestamps sysctl -w net.ipv4.tcp_timestamps=0全局 失去 PAWS 保護、RTT 測量不準、tw_reuse 失效、窗口縮放受限 ⭐⭐ (不推薦) 開啟 tcp_tw_reuse sysctl -w net.ipv4.tcp_tw_reuse=1僅客戶端出站 無副作用,緩解客戶端端口壓力 ⭐⭐⭐⭐ (配套推薦) 為什麼不建議關閉 tcp_timestamps?
tcp_tw_recycle 依賴 tcp_timestamps 生效,關閉 timestamps 會導致 recycle 失效(但也同時失去了 PAWS 保護)tcp_tw_reuse 同樣依賴 timestamps,關閉後客戶端無法快速復用端口結論:保留 timestamps,關閉 tw_recycle,開啟 tw_reuse 是最優組合。
tw_recycle 也無法觸發 PAWS(無時間戳不檢查)/etc/sysctl.d/99-tcp-fix.conf:
net.ipv4.tcp_tw_recycle = 0 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_timestamps = 1
sysctl --system 生效for i in {1..100}; do telnet server_ip port & donenetstat -s | grep -i paws 計數器不再增長| 參數 | 風險場景 | 建議 |
|---|---|---|
tcp_tw_recycle | NAT 環境導致合法連接被丟棄 | 生產環境永久關閉 |
tcp_abort_on_overflow | Accept 隊列滿直接發 RST,客戶端以為連接失敗實則服務端過載 | 關閉,配合 somaxconn/backlog 擴容 |
tcp_syncookies | SYN Flood 時啟用,但會導致某些舊設備兼容性問題 | 保持開啟(默認),監控 syncookies 計數器 |
tcp_timestamps | 關閉後失去多項 TCP 增強特性 | 永久開啟 |
這個故障是「內核參數優化不當遇上 NAT 普遍部署」的教科書級案例。它警示我們:任何修改 TCP 協議棧行為的參數,必須在包含 NAT、負載均衡、容器網絡的完整鏈路環境下全鏈路壓測驗證,單機測試毫無意義。