本文目录导读:

net.ipv4.tcp_orphan_retries 是 Linux 内核中用于控制孤儿 TCP 连接重试次数的参数,它的工作机制和重试逻辑如下:
基本概念
孤儿连接:当一个 TCP 连接的应用程序关闭了文件描述符(socket),但 TCP 协议栈仍在处理未完成的数据传输(如发送缓冲区还有数据未确认,或处于 FIN_WAIT1/FIN_WAIT2 状态)时,这个连接被称为"孤儿"。
重试机制
作用位置
- 主要影响 FIN_WAIT1 状态下的重传
- 当应用程序调用
close()后,内核发送 FIN 包,如果没有收到 ACK 确认,就会触发重试 - 不影响已建立的正常连接中的数据重传
重试逻辑
// 内核中的简化逻辑
if (sk->sk_state == TCP_FIN_WAIT1 || sk->sk_state == TCP_CLOSE_WAIT) {
if (orphan_count > 0 && sysctl_tcp_orphan_retries > 0) {
// 使用 orphan_retries 计算重试次数
retries = sysctl_tcp_orphan_retries;
} else {
// 使用默认的重试机制
retries = sysctl_tcp_retries2; // 默认 15
}
}
重试次数计算
# 伪代码表示实际重试次数计算
if tcp_orphan_retries == 0:
actual_retries = 8 # 内核默认值
elif tcp_orphan_retries < 0:
actual_retries = sysctl_tcp_retries2 # 使用普通重试参数
else:
actual_retries = min(tcp_orphan_retries, TCP_RETR2) # 不大于最大值
配置示例
# 查看当前值 sysctl net.ipv4.tcp_orphan_retries # 临时修改 sysctl -w net.ipv4.tcp_orphan_retries=3 # 永久修改 echo "net.ipv4.tcp_orphan_retries = 3" >> /etc/sysctl.conf
重试过程图解
时间线:
t=0: 应用层调用 close(),内核发送 FIN
t=1: FIN 未确认,第一次重试 (RTO=1s)
t=3: 二次重试 (RTO=2s)
t=7: 三次重试 (RTO=4s)
... 指数退避 ...
t=n: 达到重试限制,FIN_WAIT1 超时
↓
直接关闭连接,发送 RST
关键行为特征
指数退避
- 每次重试间隔呈指数增长
- 初始 RTO(重传超时)通常为 200ms-1s
- 公式:
RTO = initial_RTO * 2^(retry_count-1)
与普通重传的区别
| 特性 | 普通连接 | 孤儿连接 |
|---|---|---|
| 重试参数 | tcp_retries1/2 |
tcp_orphan_retries |
| 超时限制 | 有 RTO 最大值限制 | 更激进的重试策略 |
| 资源回收 | 依赖正常超时 | 快速回收资源 |
特殊值含义
- 0:使用内核默认值(通常为 8 次)
- 负数:使用
tcp_retries2的值 - 正数:直接指定重试次数
实际建议
# 高并发服务器优化示例 net.ipv4.tcp_orphan_retries = 2 # 减少孤儿连接占用时间 net.ipv4.tcp_max_orphans = 32768 # 限制最大孤儿连接数 # 低延迟场景 net.ipv4.tcp_orphan_retries = 1 # 尽快释放资源
重要说明:这个参数主要影响的是连接关闭阶段的重试,不是数据传输阶段的重试,过度调小可能导致连接异常断开,调大则可能积累大量半开连接消耗系统资源。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播