IP Sysctl

/proc/sys/net/ipv4/* 变量

ip_forward - 布尔值
  • 0 - 禁用(默认)

  • 非 0 - 启用

在接口之间转发数据包。

此变量是特殊变量,其更改会将所有配置参数重置为默认状态(主机为 RFC1122,路由器为 RFC1812)

ip_default_ttl - 整数

传出(但不转发)IP 数据包的 TTL 字段(生存时间)的默认值。应介于 1 到 255(含)之间。默认值:64(RFC1700 推荐值)

ip_no_pmtu_disc - 整数

禁用路径 MTU 发现。如果在模式 1 中启用,并且接收到需要分片的 ICMP,则到此目的地的 PMTU 将设置为此目的地旧 MTU 和 min_pmtu(见下文)中的最小值。如果您想避免本地生成的分片,则需要手动将 min_pmtu 提高到系统上最小的接口 MTU。

在模式 2 中,传入的路径 MTU 发现消息将被丢弃。传出帧的处理方式与模式 1 相同,隐式地在每个创建的套接字上设置 IP_PMTUDISC_DONT。

模式 3 是一种强化的 PMTU 发现模式。内核将仅在底层协议可以除了纯套接字查找之外验证它们的情况下才接受需要分片的错误。目前,PMTU 事件将被接受的协议是 TCP 和 SCTP,因为它们验证例如序列号或关联。此模式不应全局启用,而仅旨在保护例如命名空间中的名称服务器,其中 TCP 路径 MTU 必须仍然有效,但应丢弃其他协议的路径 MTU 信息。如果全局启用此模式,可能会破坏其他协议。

可能的值:0-3

默认值:FALSE

min_pmtu - 整数

默认值 552 - 最小路径 MTU。除非手动更改,否则每个缓存的 PMTU 将永远不会低于此设置。

ip_forward_use_pmtu - 布尔值

默认情况下,我们在转发时不会信任协议路径 MTU,因为它们很容易被伪造,并可能导致路由器不必要的碎片。您只有在用户空间软件尝试自行发现路径 MTU 并依赖内核遵守此信息时才需要启用此功能。通常情况下并非如此。

默认值:0 (禁用)

可能的值

  • 0 - 禁用

  • 1 - 启用

fwmark_reflect - 布尔值

控制内核生成的与套接字不关联的 IPv4 回复数据包的 fwmark(例如,TCP RST 或 ICMP echo 回复)。如果未设置,这些数据包的 fwmark 为零。如果设置,它们将具有它们正在回复的数据包的 fwmark。

默认值:0

fib_multipath_use_neigh - 布尔值

确定多路径路由的下一跳时,使用现有邻居条目的状态。如果禁用,则不使用邻居信息,数据包可能会被导向到失败的下一跳。仅适用于启用 CONFIG_IP_ROUTE_MULTIPATH 构建的内核。

默认值:0 (禁用)

可能的值

  • 0 - 禁用

  • 1 - 启用

fib_multipath_hash_policy - 整数

控制多路径路由使用哪种哈希策略。仅适用于启用 CONFIG_IP_ROUTE_MULTIPATH 构建的内核。

默认值:0 (三层)

可能的值

  • 0 - 三层

  • 1 - 四层

  • 2 - 三层或(如果存在)内部三层

  • 3 - 自定义多路径哈希。用于多路径哈希计算的字段由 fib_multipath_hash_fields sysctl 确定

fib_multipath_hash_fields - 无符号整数

当 fib_multipath_hash_policy 设置为 3(自定义多路径哈希)时,用于多路径哈希计算的字段由此 sysctl 确定。

此值是一个位掩码,用于启用多路径哈希计算的各种字段。

可能的字段有

0x0001

源 IP 地址

0x0002

目的 IP 地址

0x0004

IP 协议

0x0008

未使用(流标签)

0x0010

源端口

0x0020

目的端口

0x0040

内部源 IP 地址

0x0080

内部目的 IP 地址

0x0100

内部 IP 协议

0x0200

内部流标签

0x0400

内部源端口

0x0800

内部目的端口

默认值:0x0007(源 IP、目的 IP 和 IP 协议)

fib_multipath_hash_seed - 无符号整数

计算多路径路由哈希时使用的种子值。适用于 IPv4 和 IPv6 数据路径。仅适用于启用 CONFIG_IP_ROUTE_MULTIPATH 构建的内核。

当设置为 0 时,多路径路由使用的种子值默认为内部随机生成的值。

未指定实际的哈希算法——不保证给定种子产生的下一跳分布在不同内核版本中保持稳定。

默认值:0(随机)

fib_sync_mem - 无符号整数

在强制执行 synchronize_rcu 之前,fib 条目可积压的脏内存量。

默认值:512KB 最小值:64KB 最大值:64MB

ip_forward_update_priority - 整数

转发后是否根据 IPv4 头中的“TOS”字段更新 SKB 优先级。新的 SKB 优先级根据 rt_tos2priority 表(例如参见 man tc-prio)从 TOS 字段值映射。

默认值:1(更新优先级。)

可能的值

  • 0 - 不更新优先级。

  • 1 - 更新优先级。

route/max_size - 整数

内核中允许的最大路由数量。在使用大量接口和/或路由时增加此值。

从 Linux 内核 3.6 开始,此项对于 IPv4 已弃用,因为不再使用路由缓存。

从 Linux 内核 6.3 开始,此项对于 IPv6 已弃用,因为垃圾收集管理缓存的路由条目。

neigh/default/gc_thresh1 - 整数

要保留的最小条目数。如果条目数量少于此值,垃圾收集器将不会清除条目。

默认值:128

neigh/default/gc_thresh2 - 整数

当垃圾收集器在清除条目方面变得更积极时的阈值。当超过此数量时,超过 5 秒的条目将被清除。

默认值:512

neigh/default/gc_thresh3 - 整数

允许的最大非永久邻居条目数。在使用大量接口以及与大量直接连接的对等体通信时增加此值。

默认值:1024

neigh/default/unres_qlen_bytes - 整数

其他网络层为每个未解析地址排队的数据包可能使用的最大字节数。(Linux 3.3 中新增)

设置负值没有意义,将返回错误。

默认值:SK_WMEM_MAX(与 net.core.wmem_default 相同)。

确切值取决于架构和内核选项,但应足以允许对 256 个中等大小的数据包进行排队。

neigh/default/unres_qlen - 整数

其他网络层为每个未解析地址排队的数据包的最大数量。

(在 Linux 3.3 中已弃用):请改用 unres_qlen_bytes。

在 Linux 3.3 之前,默认值为 3,这可能会导致意外的数据包丢失。当前默认值是根据 unres_qlen_bytes 的默认值和数据包的实际大小计算的。

默认值:101

neigh/default/interval_probe_time_ms - 整数

带有 NTF_MANAGED 标志的邻居条目的探测间隔,最小值为 1。

默认值:5000

mtu_expires - 整数

缓存的 PMTU 信息保留的时间,单位为秒。

min_adv_mss - 整数

通告的 MSS 取决于第一跳路由 MTU,但永远不会低于此设置。

fib_notify_on_flag_change - 整数

每当 RTM_F_OFFLOAD/RTM_F_TRAP/RTM_F_OFFLOAD_FAILED 标志更改时,是否发出 RTM_NEWROUTE 通知。

将路由安装到内核后,用户空间会收到确认,这意味着路由已安装在内核中,但不一定安装在硬件中。硬件中已安装的路由也可能改变其动作,从而改变其标志。例如,一个捕获数据包的主机路由在安装 IPinIP/VXLAN 隧道后可以被“提升”以执行解封装。这些通知将向用户空间指示路由的状态。

默认值:0(不发出通知。)

可能的值

  • 0 - 不发出通知。

  • 1 - 发出通知。

  • 2 - 仅针对 RTM_F_OFFLOAD_FAILED 标志更改发出通知。

IP 分片

ipfrag_high_thresh - 长整数

用于重组 IP 分片的最大内存。

ipfrag_low_thresh - 长整数

(自 Linux 4.17 起已废弃)内核开始移除不完整分片队列以释放资源之前,用于重组 IP 分片的最大内存。内核仍然接受新分片以进行碎片整理。

ipfrag_time - 整数

将 IP 分片保留在内存中的时间(秒)。

ipfrag_max_dist - 整数

ipfrag_max_dist 是一个非负整数值,定义了共享相同 IP 源地址的分片之间允许的最大“乱序”。请注意,数据包重排序并不少见,但如果从某个源 IP 地址接收到大量分片,而某个分片队列仍然不完整,则可能表明属于该队列的一个或多个分片已丢失。当 ipfrag_max_dist 为正值时,在分片添加到重组队列之前会进行额外检查——如果在使用该源地址的任何 IP 分片队列添加之间,从特定 IP 地址到达了 ipfrag_max_dist(或更多)个分片,则假定队列中一个或多个分片丢失。现有分片队列将被丢弃,并启动一个新的队列。ipfrag_max_dist 值为零将禁用此检查。

对 ipfrag_max_dist 使用非常小的值(例如 1 或 2)可能会在正常数据包重排序发生时导致不必要地丢弃分片队列,这可能导致应用程序性能下降。使用非常大的值(例如 50000)会增加错误重组来自不同 IP 数据报的 IP 分片的可能性,这可能导致数据损坏。默认值:64

bc_forwarding - 整数

bc_forwarding 启用 rfc1812#section-5.3.5.2 和 rfc2644 中描述的功能。它允许路由器转发定向广播。要启用此功能,应将“all”条目和输入接口条目设置为 1。默认值:0

INET 对等体存储

inet_peer_threshold - 整数

存储的近似大小。从这个阈值开始,条目将被积极地丢弃。此阈值还决定了条目的生存时间以及垃圾收集通过之间的时间间隔。更多条目,更短的生存时间,更短的 GC 间隔。

inet_peer_minttl - 整数

条目的最小生存时间。应足以覆盖重组侧的分片生存时间。如果池大小小于 inet_peer_threshold,则保证此最小生存时间。以秒为单位测量。

inet_peer_maxttl - 整数

条目的最大生存时间。如果池中没有内存压力(即当池中条目数量非常少时),未使用的条目将在此时间段后过期。以秒为单位测量。

TCP 变量

somaxconn - 整数

套接字 listen() 积压的限制,在用户空间中称为 SOMAXCONN。默认值 4096。(在 Linux 5.4 之前为 128)另请参阅 tcp_max_syn_backlog,了解 TCP 套接字的额外调整。

tcp_abort_on_overflow - 布尔值

如果监听服务接受新连接的速度太慢,则重置它们。默认状态为 FALSE。这意味着如果由于突发导致溢出,连接将恢复。仅当您确实确定无法调整监听守护进程以更快地接受连接时才启用此选项。启用此选项可能会损害您的服务器客户端。

tcp_adv_win_scale - 整数

自 Linux 6.6 起已废弃。将缓冲开销计算为 bytes/2^tcp_adv_win_scale(如果 tcp_adv_win_scale > 0)或 bytes-bytes/2^(-tcp_adv_win_scale)(如果 <= 0)。

可能的值为 [-31, 31](含)。

默认值:1

tcp_allowed_congestion_control - 字符串

显示/设置非特权进程可用的拥塞控制选项。该列表是 tcp_available_congestion_control 中列出的选项的子集。

默认值为“reno”和默认设置 (tcp_congestion_control)。

tcp_app_win - 整数

为应用程序缓冲区保留窗口的 max(window/2^tcp_app_win, mss)。值为 0 是特殊情况,表示不保留任何内容。

可能的值为 [0, 31](含)。

默认值:31

tcp_autocorking - 布尔值

启用 TCP 自动软木塞:当应用程序连续执行小型 write()/sendmsg() 系统调用时,我们尝试尽可能地合并这些小型写入,以降低发送数据包的总量。当流的至少一个先前数据包在 Qdisc 队列或设备传输队列中等待时,就会执行此操作。应用程序仍然可以使用 TCP_CORK 来获得最佳行为,如果它们知道如何/何时解除其套接字的软木塞。

默认值:1

tcp_available_congestion_control - 字符串

显示已注册的可用拥塞控制选项。更多拥塞控制算法可能作为模块可用,但未加载。

tcp_base_mss - 整数

分层路径 MTU 发现(MTU 探测)中 search_low 的初始值。如果启用 MTU 探测,这是连接使用的初始 MSS。

tcp_mtu_probe_floor - 整数

如果启用 MTU 探测,此值将限制连接的 search_low 使用的最小 MSS。

默认值:48

tcp_min_snd_mss - 整数

TCP SYN 和 SYNACK 消息通常会通告 ADVMSS 选项,如 RFC 1122 和 RFC 6691 中所述。

如果此 ADVMSS 选项小于 tcp_min_snd_mss,它将被静默地限制为 tcp_min_snd_mss。

默认值:48(每个段至少 8 字节的有效负载)

tcp_congestion_control - 字符串

设置新连接使用的拥塞控制算法。算法“reno”始终可用,但根据内核配置可能还会提供其他选择。默认值作为内核配置的一部分设置。对于被动连接,监听器拥塞控制选择是继承的。

[参见 setsockopt(listenfd, SOL_TCP, TCP_CONGESTION, “name” ...) ]

tcp_dsack - 布尔值

允许 TCP 发送“重复”SACK。

tcp_early_retrans - 整数

尾部丢失探测 (TLP) 将因尾部丢失而发生的 RTO 转换为快速恢复(draft-ietf-tcpm-rack)。请注意,TLP 需要 RACK 才能正常运行(参见下面的 tcp_recovery)

可能的值

  • 0 禁用 TLP

  • 3 或 4 启用 TLP

默认值:3

tcp_ecn - 整数

控制 TCP 使用显式拥塞通知 (ECN)。仅当 TCP 连接的两端都表明支持 ECN 时才使用 ECN。此功能通过允许支持路由器在丢弃数据包之前发出拥塞信号来避免因拥塞造成的丢失。

可能的值为

0

禁用 ECN。既不发起也不接受 ECN。

1

在传入连接请求时启用 ECN,并在传出连接尝试时也请求 ECN。

2

在传入连接请求时启用 ECN,但不请求传出连接的 ECN。

默认值:2

tcp_ecn_fallback - 布尔值

如果内核检测到 ECN 连接行为异常,则启用回退到非 ECN。目前,此旋钮实现了 RFC3168 第 6.1.1.1 节中的回退功能,但我们保留在未来在此旋钮下实现附加检测机制的可能性。如果 tcp_ecn 或每路由(或拥塞控制)ECN 设置被禁用,则此值不使用。

默认值:1(已启用回退)

tcp_fack - 布尔值

这是一个遗留选项,它不再有任何作用。

tcp_fin_timeout - 整数

孤立(不再被任何应用程序引用)连接在本地端终止之前,将保持在 FIN_WAIT_2 状态的时间长度。对于非孤立连接来说,FIN_WAIT_2 状态是完全有效的“仅接收”状态,但孤立连接在该状态下可能会永远等待远程关闭其连接端。

参见 tcp_max_orphans

默认值:60 秒

tcp_frto - 整数

启用 RFC5682 中定义的向前 RTO 恢复 (F-RTO)。F-RTO 是一种用于 TCP 重传超时的高级恢复算法。它在 RTT 波动(例如无线)的网络中特别有益。F-RTO 仅是发送方修改。它不需要对等方的任何支持。

默认情况下,它以非零值启用。0 禁用 F-RTO。

tcp_fwmark_accept - 布尔值

如果设置,传入到没有套接字标记的监听套接字的连接将把接受套接字的标记设置为传入 SYN 数据包的 fwmark。这将导致该连接上的所有数据包(从第一个 SYNACK 开始)都以该 fwmark 发送。监听套接字的标记保持不变。已通过 setsockopt(SOL_SOCKET, SO_MARK, ...) 设置 fwmark 的监听套接字不受影响。

默认值:0

tcp_invalid_ratelimit - 整数

限制针对现有连接但因以下任何原因而无效的传入 TCP 数据包发送重复确认的最大速率

  1. 超出窗口的序列号,

  2. 超出窗口的确认号,或

  3. PAWS(防序列号回绕)检查失败

这有助于缓解简单的“ACK 循环”DoS 攻击,其中有缺陷或恶意的中间件或中间人可以重写 TCP 头字段,导致每个端点都认为对方正在发送无效的 TCP 段,从而导致每一方都发送针对无效段的无限重复确认流。

使用 0 将禁用对无效段的重复确认的速率限制;否则,此值指定发送此类重复确认之间的最小间隔时间(毫秒)。

默认值:500(毫秒)。

tcp_keepalive_time - 整数

当启用 keepalive 时,TCP 发送 keepalive 消息的频率。默认值:2 小时。

tcp_keepalive_probes - 整数

TCP 发送 keepalive 探测的次数,直到它决定连接已断开。默认值:9。

tcp_keepalive_intvl - 整数

探测发送的频率。乘以 tcp_keepalive_probes 后,即为探测开始后终止无响应连接的时间。默认值:75 秒,即连接将在约 11 分钟的重试后中止。

tcp_l3mdev_accept - 布尔值

使子套接字能够继承 L3 主设备索引。启用此选项允许“全局”监听套接字跨 L3 主域(例如 VRF)工作,并且从监听套接字派生出的连接套接字绑定到数据包源自的 L3 域。仅当内核使用 CONFIG_NET_L3_MASTER_DEV 编译时有效。

默认值:0 (禁用)

tcp_low_latency - 布尔值

这是一个遗留选项,它不再有任何作用。

tcp_max_orphans - 整数

系统持有的未附加到任何用户文件句柄的 TCP 套接字的最大数量。如果超过此数量,孤立连接将立即重置并打印警告。此限制仅用于防止简单的 DoS 攻击,您_绝不能_依赖此限制或人为降低限制,而是在网络条件要求超过默认值时增加它(可能是在增加已安装内存后),并调整网络服务以更积极地保持和终止此类状态。让我再次提醒:每个孤立连接会占用多达约 64KB 的不可交换内存。

tcp_max_syn_backlog - 整数

已记住但尚未收到来自连接客户端确认的连接请求 (SYN_RECV) 的最大数量。

这是每个监听器的限制。

对于低内存机器,最小值为 128,它将与机器内存成比例增加。

如果服务器过载,请尝试增加此数字。

请记住还要检查 /proc/sys/net/core/somaxconn。一个 SYN_RECV 请求套接字大约消耗 304 字节内存。

tcp_max_tw_buckets - 整数

系统同时持有的 timewait 套接字的最大数量。如果超过此数量,timewait 套接字将立即销毁并打印警告。此限制仅用于防止简单的 DoS 攻击,您_绝不能_人为降低限制,而是在网络条件要求超过默认值时增加它(可能是在增加已安装内存后)。

tcp_mem - 3 个整数向量:min, pressure, max

min:当 TCP 分配的内存页数低于此值时,TCP 不关心其内存消耗。

pressure:当 TCP 分配的内存量超过此页数时,TCP 会调整其内存消耗并进入内存压力模式,当内存消耗低于“min”时退出此模式。

max:所有 TCP 套接字允许排队的页数。

默认值在启动时根据可用内存量计算。

tcp_min_rtt_wlen - 整数

跟踪最小 RTT 的窗口最小过滤器的窗口长度。较短的窗口使流在移动到较长路径时(例如,由于流量工程)更快地获取新的(更高)最小 RTT。较长的窗口使过滤器更能抵抗 RTT 膨胀,例如瞬时拥塞。单位是秒。

可能的值:0 - 86400(1 天)

默认值:300

tcp_moderate_rcvbuf - 布尔值

如果设置,TCP 执行接收缓冲区自动调整,尝试自动调整缓冲区大小(不大于 tcp_rmem[2])以匹配路径实现全吞吐量所需的尺寸。默认启用。

tcp_mtu_probing - 整数

控制 TCP 分层路径 MTU 发现。取三个值

  • 0 - 禁用

  • 1 - 默认禁用,当检测到 ICMP 黑洞时启用

  • 2 - 始终启用,使用 tcp_base_mss 的初始 MSS。

tcp_probe_interval - 无符号整数

控制 TCP 分层路径 MTU 发现重新探测的频率。默认情况下,根据 RFC4821,每 10 分钟重新探测一次。

tcp_probe_threshold - 整数

控制 TCP 分层路径 MTU 发现探测何时停止,以搜索范围的字节宽度为参考。默认值为 8 字节。

tcp_no_metrics_save - 布尔值

默认情况下,TCP 在连接关闭时将各种连接指标保存在路由缓存中,以便在不久的将来建立的连接可以使用这些指标来设置初始条件。通常,这会提高整体性能,但有时也可能导致性能下降。如果设置,TCP 将不会在关闭连接时缓存指标。

tcp_no_ssthresh_metrics_save - 布尔值

控制 TCP 是否在路由缓存中保存 ssthresh 指标。

默认值为 1,这会禁用 ssthresh 指标。

tcp_orphan_retries - 整数

当 RTO 重传未被确认时,此值会影响本地关闭的 TCP 连接的超时时间。有关更多详细信息,请参见 tcp_retries2。

默认值为 8。

如果您的机器是负载较高的 WEB 服务器,您应该考虑降低此值,因为此类套接字可能会消耗大量资源。参见 tcp_max_orphans。

tcp_recovery - 整数

此值是一个位图,用于启用各种实验性丢失恢复功能。

RACK: 0x1

启用 RACK 丢失检测,用于快速检测丢失的重传和尾部丢弃。它还包含并禁用了 SACK 连接的 RFC6675 恢复。

RACK: 0x2

使 RACK 的重排序窗口静态(min_rtt/4)。

RACK: 0x4

禁用 RACK 的 DUPACK 阈值启发式算法

默认值:0x1

tcp_reflect_tos - 布尔值

对于监听套接字,对传出数据包重用初始 SYN 消息的 DSCP 值。这允许 TCP 流的两个方向都使用相同的 DSCP 值,前提是 DSCP 在连接的整个生命周期内保持不变。

此选项影响 IPv4 和 IPv6。

默认值:0 (禁用)

tcp_reordering - 整数

TCP 流中数据包的初始重排序级别。TCP 栈可以动态调整流重排序级别,使其介于此初始值和 tcp_max_reordering 之间

默认值:3

tcp_max_reordering - 整数

TCP 流中数据包的最大重排序级别。300 是一个相当保守的值,但如果路径使用每数据包负载均衡(例如 bonding rr 模式),您可能需要增加它

默认值:300

tcp_retrans_collapse - 布尔值

与某些损坏的打印机进行 bug 到 bug 的兼容性。重传时尝试发送更大的数据包,以解决某些 TCP 栈中的错误。

tcp_retries1 - 整数

此值会影响 TCP 在未确认的 RTO 重传导致问题时决定(并向网络层报告此怀疑)的时间。有关更多详细信息,请参见 tcp_retries2。

RFC 1122 建议至少 3 次重传,这是默认值。

tcp_retries2 - 整数

当 RTO 重传未被确认时,此值会影响活动 TCP 连接的超时时间。给定 N 值,遵循指数回退且初始 RTO 为 TCP_RTO_MIN 的假想 TCP 连接将重传 N 次,然后在第 (N+1) 次 RTO 时终止连接。

默认值 15 产生 924.6 秒的假想超时,并且是有效超时的下限。TCP 将在第一个超过假想超时的 RTO 时实际超时。如果 tcp_rto_max_ms 减小,建议也更改 tcp_retries2。

RFC 1122 建议超时至少 100 秒,这对应于至少 8 的值。

tcp_rfc1337 - 布尔值

如果设置,TCP 栈的行为符合 RFC1337。如果未设置,我们不符合 RFC,但会阻止 TCP TIME_WAIT 刺杀。

默认值:0

tcp_rmem - 3 个整数向量:min, default, max

min:TCP 套接字使用的接收缓冲区的最小大小。即使在适度的内存压力下,每个 TCP 套接字也保证可以使用它。

默认值:4K

default:TCP 套接字使用的接收缓冲区的初始大小。此值覆盖其他协议使用的 net.core.rmem_default。默认值:131072 字节。此值导致初始窗口为 65535。

max:TCP 套接字自动选择的接收缓冲区允许的最大接收缓冲区大小。此值不覆盖 net.core.rmem_max。调用 setsockopt() 并使用 SO_RCVBUF 会禁用该套接字接收缓冲区大小的自动调整,在这种情况下此值将被忽略。默认值:介于 131072 和 32MB 之间,取决于 RAM 大小。

tcp_sack - 布尔值

启用选择性确认 (SACKS)。

tcp_comp_sack_delay_ns - 长整数

TCP 尝试减少发送的 SACK 数量,使用基于 SRTT 5% 的计时器,并受此 sysctl 限制,单位为纳秒。默认值为 1 毫秒,基于 TSO 自动调整周期。

默认值:1,000,000 纳秒(1 毫秒)

tcp_comp_sack_slack_ns - 长整数

此 sysctl 控制 SACK 压缩使用的计时器启动时所用的松弛时间。这为小型 RTT 流提供了额外时间,并通过允许机会性地减少计时器中断来降低系统开销。

默认值:100,000 纳秒(100 微秒)

tcp_comp_sack_nr - 整数

可压缩的最大 SACK 数量。使用 0 将禁用 SACK 压缩。

默认值:44

tcp_backlog_ack_defer - 布尔值

如果设置,处理套接字积压的用户线程会尝试为整个队列发送一个 ACK。这有助于避免 TCP 套接字系统调用结束时潜在的长时间延迟。

默认值:true

tcp_slow_start_after_idle - 布尔值

如果设置,则提供 RFC2861 行为并在空闲期后使拥塞窗口超时。空闲期定义为当前 RTO。如果未设置,则拥塞窗口在空闲期后不会超时。

默认值:1

tcp_stdurg - 布尔值

使用 TCP 紧急指针字段的主机要求解释。大多数主机使用较旧的 BSD 解释,因此如果打开此功能,Linux 可能无法与它们正确通信。

默认值:FALSE

tcp_synack_retries - 整数

被动 TCP 连接尝试的 SYNACK 将被重传的次数。不应高于 255。默认值为 5,对应于在当前初始 RTO 为 1 秒的情况下,到最后一次重传的 31 秒。有了这个,被动 TCP 连接的最终超时将在 63 秒后发生。

tcp_syncookies - 整数

仅当内核使用 CONFIG_SYN_COOKIES 编译时有效。当套接字的 SYN 积压队列溢出时发送 syncookies。这是为了防止常见的“SYN 泛洪攻击”。默认值:1

请注意,syncookies 是备用功能。它绝不能用于帮助高负载服务器抵御合法连接速率。如果您在日志中看到 SYN 泛洪警告,但调查显示它们是由于合法连接过载而发生的,您应该调整其他参数,直到此警告消失。参见:tcp_max_syn_backlog、tcp_synack_retries、tcp_abort_on_overflow。

syncookies 严重违反 TCP 协议,不允许使用 TCP 扩展,可能导致某些服务(例如 SMTP 中继)的严重退化,这不是您可见的,而是您的客户端和中继与您联系时可见的。当您在日志中看到 SYN 泛洪警告而实际上并未被泛洪时,您的服务器已严重配置错误。

如果您想测试 syncookies 对您的网络连接有何影响,您可以将此旋钮设置为 2 以无条件启用 syncookies 的生成。

tcp_migrate_req - 布尔值

当在三次握手期间接收到初始 SYN 数据包时,传入连接将绑定到特定的监听套接字。当监听器关闭时,握手期间的在途请求套接字和接受队列中的已建立套接字将被中止。

如果监听器启用了 SO_REUSEPORT,则同一端口上的其他监听器应该能够接受此类连接。

此选项使得在 close() 或 shutdown() 后,可以将此类子套接字迁移到另一个监听器。

通常应使用 BPF_SK_REUSEPORT_SELECT_OR_MIGRATE 类型的 eBPF 程序来定义选择活动监听器的策略。

默认值:0

否则,仅当此选项启用时,内核才会随机选择一个活动监听器。

请注意,不同设置的监听器之间的迁移可能会导致应用程序崩溃。

假设迁移从监听器 A 到 B 发生,并且只有 B 启用了 TCP_SAVE_SYN。B 无法读取从 A 迁移的请求中的 SYN 数据。

为了避免这种情况,请通过在 eBPF 程序类型中返回 SK_DROP 来取消迁移,或禁用此选项。

tcp_fastopen - 整数

启用 TCP Fast Open (RFC7413),以在初始 SYN 数据包中发送和接受数据。

客户端支持由标志 0x1 启用(默认开启)。客户端必须使用带有 MSG_FASTOPEN 标志的 sendmsg() 或 sendto(),而不是 connect() 来在 SYN 中发送数据。

服务器支持由标志 0x2 启用(默认关闭)。然后,要么为所有监听器启用另一个标志 (0x400),要么通过 TCP_FASTOPEN 套接字选项为单个监听器启用,选项值为 SYN 数据积压的长度。

值(位图)为

0x1

(客户端)

在客户端上启用在初始 SYN 中发送数据。

客户端支持由标志 0x1 启用(默认开启)。客户端必须使用带有 MSG_FASTOPEN 标志的 sendmsg() 或 sendto(),而不是 connect() 来在 SYN 中发送数据。

0x2

(服务器)

0x1

启用服务器支持,即允许在三次握手完成之前接受 SYN 数据包中的数据并将其传递给应用程序。

0x4

0x1

无论 cookie 是否可用且不带 cookie 选项,均在初始 SYN 中发送数据。

默认值:0x1

0x200

接受不带任何 cookie 选项的 SYN 中的数据。

0x400

默认情况下启用所有监听器支持 Fast Open,而无需显式 TCP_FASTOPEN 套接字选项。

请注意,只有在分别启用了基本支持(0x1 和 0x2)后,额外的客户端或服务器功能才有效。

tcp_fastopen_blackhole_timeout_sec - 整数

当 TFO 防火墙黑洞问题发生时,用于禁用活动 TCP 套接字上的 Fastopen 的初始时间段(秒)。当 Fastopen 重新启用后立即检测到更多黑洞问题时,此时间段将呈指数增长,当黑洞问题消失时,将重置为初始值。0 表示禁用黑洞检测。

默认情况下,它设置为 0(功能已禁用)。

tcp_fastopen_key - 逗号分隔的 32 位十六进制整数列表

该列表包含一个主密钥和一个可选的备份密钥。主密钥用于创建和验证 cookie,而可选的备份密钥仅用于验证 cookie。备份密钥的目的是在密钥轮换时最大限度地提高 TFO 验证。

如果 tcp_fastopen sysctl 设置为 0x400(见上文),或者如果设置了 TCP_FASTOPEN setsockopt() optname 且之前未通过 sysctl 配置密钥,则内核可以配置一个随机选择的主密钥。

如果通过 setsockopt() 使用 TCP_FASTOPEN_KEY optname 配置密钥,则将使用这些每个套接字的密钥,而不是通过 sysctl 指定的任何密钥。

  • 密钥指定为 4 个 8 位十六进制整数,用‘-’分隔,例如:xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx。前导零可以省略。主密钥和备份密钥可以用逗号分隔。如果只指定一个密钥,它将成为主密钥,并且之前配置的任何备份密钥都将被移除。

  • tcp_syn_retries - 整数

  • 活动 TCP 连接尝试的初始 SYN 将被重传的次数。不应高于 127。默认值为 6,对应于在当前初始 RTO 为 1 秒的情况下,到最后一次重传的 67 秒(当 tcp_syn_linear_timeouts = 4 时)。有了这个,活动 TCP 连接尝试的最终超时将在 131 秒后发生。

默认值:1

tcp_timestamps - 整数

启用 RFC1323 中定义的时间戳。

0: 禁用。

默认值:2

1: 启用 RFC1323 中定义的时间戳,并为每个连接使用随机偏移量,而不是仅使用当前时间。

2: 与 1 类似,但没有随机偏移量。

tcp_min_tso_segs - 整数

每个 TSO 帧的最小段数。

自 Linux 3.12 起,TCP 根据流速率自动调整 TSO 帧的大小,而不是填充 64KB 数据包。对于特定用法,可以强制 TCP 构建大型 TSO 帧。请注意,如果可用窗口太小,TCP 栈可能会拆分过大的 TSO 数据包。

tcp_tso_rtt_log - 整数

根据 min_rtt 调整 TSO 数据包大小

从 Linux 5.18 开始,可以为具有小 RTT 的流调整 TCP 自动大小调整。

旧的自动调整将步调预算拆分,以便每秒发送 1024 个 TSO。

tso_packet_size = sk->sk_pacing_rate / 1024;

使用新机制,我们通过以下方式增加此 TSO 大小:

distance = min_rtt_usec / (2^tcp_tso_rtt_log) tso_packet_size += gso_max_size >> distance;

这意味着非常接近的主机之间的流可以使用更大的 TSO 数据包,从而降低其 CPU 成本。

如果您想使用旧的自动调整,请将此 sysctl 设置为 0。

默认值:9 (2^9 = 512 微秒)

tcp_pacing_ss_ratio - 整数

sk->sk_pacing_rate 由 TCP 栈使用应用于当前速率的比例设置。(current_rate = cwnd * mss / srtt)如果 TCP 处于慢启动阶段,tcp_pacing_ss_ratio 将被应用,以让 TCP 探测更大的速度,假设 cwnd 可以每隔一个 RTT 翻倍。

默认值:200

tcp_pacing_ca_ratio - 整数

sk->sk_pacing_rate 由 TCP 栈使用应用于当前速率的比例设置。(current_rate = cwnd * mss / srtt)如果 TCP 处于拥塞避免阶段,tcp_pacing_ca_ratio 将被应用,以保守地探测更大的吞吐量。

默认值:120

默认值:3

tcp_syn_linear_timeouts - 整数

活动 TCP 连接在默认使用指数回退超时之前,以线性回退超时重传 SYN 的次数。这对被动 TCP 端的 SYNACK 没有影响。

  • 当初始 RTO 为 1 且 tcp_syn_linear_timeouts = 4 时,我们预计 SYN RTO 将为:1, 1, 1, 1, 1, 2, 4, ...(4 次线性超时,以及第一次指数回退使用 2^0 * initial_RTO)。默认值:4

  • tcp_tso_win_divisor - 整数

  • 这允许控制拥塞窗口的百分之几可以被单个 TSO 帧消耗。此参数的设置是突发性与构建更大 TSO 帧之间的选择。

tcp_tw_reuse - 整数

默认值:2

当从协议角度看安全时,为新连接启用 TIME-WAIT 套接字重用。

0 - 禁用

1 - 全局启用

2 - 仅为环回流量启用

未经技术专家建议/请求,不应更改此项。

tcp_tw_reuse_delay - 无符号整数

如果启用了 TIME-WAIT 套接字重用,新连接重用 TIME-WAIT 套接字之前的延迟时间(毫秒)。实际重用阈值在 [N, N+1] 范围内,其中 N 是请求的延迟(毫秒),以确保延迟间隔永远不会短于配置值。

此设置包含关于其他 TCP 时间戳时钟节拍间隔的假设。为了使 PAWS(防序列号回绕)机制对重用连接正常工作,此值不应设置为低于对等方的时钟节拍。

默认值:1000(毫秒)

  • tcp_window_scaling - 布尔值

  • 启用 RFC1323 中定义的窗口缩放。

    tcp_shrink_window - 布尔值

默认值:0

这改变了 TCP 接收窗口的计算方式。

RFC 7323 第 2.4 节指出,在某些情况下可能会提供缩回的窗口,并且 TCP 实现必须确保它们按照 RFC 1122 的规定处理缩小的窗口。

默认值:4K

0 - 禁用。窗口永远不会缩小。

1 - 启用。当需要保持在

自动调整(sk_rcvbuf)设置的内存限制内时,窗口会缩小。这仅在非零接收窗口缩放因子也生效时发生。

tcp_wmem - 3 个整数向量:min, default, max

min:为 TCP 套接字的发送缓冲区保留的内存量。每个 TCP 套接字由于其创建而有权使用它。

default:TCP 套接字使用的发送缓冲区的初始大小。此值覆盖其他协议使用的 net.core.wmem_default。

它通常低于 net.core.wmem_default。

默认值:16K

max:TCP 套接字自动调整的发送缓冲区允许的最大内存量。此值不覆盖 net.core.wmem_max。调用 setsockopt() 并使用 SO_SNDBUF 会禁用该套接字发送缓冲区大小的自动调整,在这种情况下此值将被忽略。

默认值:介于 64K 和 4MB 之间,取决于 RAM 大小。

tcp_notsent_lowat - 无符号整数

默认值:0

TCP 套接字可以通过 TCP_NOTSENT_LOWAT 套接字选项控制其写入队列中未发送字节的数量。如果未发送字节的数量低于每个套接字的值,并且写入队列未满,poll()/select()/epoll() 会报告 POLLOUT 事件。如果达到限制,sendmsg() 也不会添加新缓冲区。

此全局变量控制未使用 TCP_NOTSENT_LOWAT 的套接字的未发送数据量。对于这些套接字,对全局变量的更改会立即生效。

默认值:0

默认值:UINT_MAX (0xFFFFFFFF)

tcp_workaround_signed_windows - 布尔值

如果设置,则假定未收到窗口缩放选项意味着远程 TCP 已损坏,并将窗口视为有符号数量。如果未设置,则假定远程 TCP 未损坏,即使我们没有从它们那里收到窗口缩放选项。

tcp_thin_linear_timeouts - 布尔值

启用对瘦流的线性超时进行动态触发。如果设置,在超时重传时会进行检查,以确定流是否是瘦流(飞行中少于 4 个数据包)。只要发现流是瘦流,最多可以执行 6 次线性超时,然后才启动指数回退模式。这改善了非激进瘦流的重传延迟,这些流通常是时间相关的。有关瘦流的更多信息,请参见 瘦流与 TCP

tcp_limit_output_bytes - 整数

控制每个 TCP 套接字的 TCP 小队列限制。TCP 大量发送方倾向于增加飞行中的数据包,直到收到丢失通知。通过 SNDBUF 自动调整,这可能导致在本地机器(例如:Qdisc、CPU 积压或设备)上排队大量数据包,损害其他流的延迟,对于典型的 pfifo_fast Qdisc 而言。tcp_limit_output_bytes 限制 Qdisc 或设备上的字节数,以减少人为的 RTT/cwnd 并减少缓冲区膨胀。

默认值:4194304 (4 MB)

tcp_challenge_ack_limit - 整数

控制子网络命名空间中 TCP 套接字的哈希桶数量,此值必须在 clone() 或 unshare() 之前设置。

如果该值不为 0,内核将使用向上取整到 2^n 的值作为实际的哈希桶大小。0 是一个特殊值,表示子网络命名空间将共享初始网络命名空间的哈希桶。

请注意,如果内核未能分配足够的内存,子命名空间将使用全局哈希桶。此外,全局哈希桶分布在可用的 NUMA 节点上,但子哈希表的分配取决于当前进程的 NUMA 策略,这可能导致性能差异。

另请注意,tcp_max_tw_buckets 和 tcp_max_syn_backlog 的默认值取决于哈希桶的大小。

可能的值:0, 2^n (n: 0 - 24 (16Mi))

默认值:0

tcp_plb_enabled - 布尔值

如果设置且底层拥塞控制(例如 DCTCP)支持并启用 PLB 功能,则启用 TCP PLB(Protective Load Balancing,保护性负载均衡)。PLB 在以下论文中进行了描述:https://doi.org/10.1145/3544216.3544226。根据 PLB 参数,在感知到持续拥塞时,TCP 会触发传出 IPv6 数据包的流标签字段的变化。流标签字段的变化可能会改变使用 ECMP/WCMP 进行路由的交换机上传出数据包的路径。

PLB 更改套接字 txhash,从而导致 IPv6 流标签字段的变化,目前对 IPv4 头部无操作。可以通过其他网络头部字段(例如 TCP 或 IPv4 选项)或使用封装(其中外部头部由交换机用于确定下一跳)将 PLB 应用于 IPv4。在任何一种情况下,都需要进一步的主机和交换机端更改。

当设置此值时,PLB 假定拥塞信号(例如 ECN)可用并被拥塞控制模块用于估计拥塞度量(例如 ce_ratio)。PLB 需要一个拥塞度量来做出路径重选决策。

默认值:FALSE

tcp_plb_idle_rehash_rounds - 整型

在没有在途数据包的情况下,连续拥塞轮次 (RTT) 达到多少次后可以执行重新哈希。这在 PLB 论文中被称为 M:https://doi.org/10.1145/3544216.3544226

可能的值:0 - 31

默认值:3

tcp_plb_rehash_rounds - 整型

连续拥塞轮次 (RTT) 达到多少次后可以执行强制重新哈希。设置此参数时请务必小心,因为小值会增加重传的风险。这在 PLB 论文中被称为 N:https://doi.org/10.1145/3544216.3544226

可能的值:0 - 31

默认值:12

tcp_plb_suspend_rto_sec - 整型

发生 RTO 时暂停 PLB 的时间,单位为秒。为了避免 PLB 重选路径进入连接“黑洞”,RTO 发生后 TCP 连接会暂停 PLB 路径重选一段随机时间,范围为此参数的 1 倍到 2 倍。添加随机性是为了避免多个 TCP 连接同时重新哈希。此值应设置为修复故障链接所需的时间。

可能的值:0 - 255

默认值:60

tcp_plb_cong_thresh - 整型

在一个往返时间 (RTT) 内标记为拥塞的数据包的比例,用于将该轮次标记为拥塞。这在 PLB 论文中被称为 K:https://doi.org/10.1145/3544216.3544226

0-1 的分数范围映射到 0-256 的范围,以避免浮点运算。例如,128 意味着如果一轮中至少 50% 的数据包被标记为拥塞,则该轮次将被标记为拥塞。

将阈值设置为 0 意味着 PLB 无论拥塞情况如何,每 RTT 都会重新选择路径。这并非 PLB 的预期行为,仅应用于实验目的。

可能的值:0 - 256

默认值:128

tcp_pingpong_thresh - 整型

在 TCP 认为连接是“ping-pong”(请求-响应)连接(延迟确认可以带来好处)之前,必须发生的针对估计的入站数据请求发送的估计数据回复的数量。

此阈值默认为 1,但某些应用程序可能需要更高的阈值才能获得最佳性能。

可能的值:1 - 255

默认值:1

tcp_rto_min_us - 整型

TCP 重传超时最小值(单位:微秒)。请注意,rto_min 路由选项具有最高的配置优先级,其次是 TCP_BPF_RTO_MIN 和 TCP_RTO_MIN_US 套接字选项,最后是此 tcp_rto_min_us sysctl。

推荐的做法是使用小于或等于 200000 微秒的值。

可能的值:1 - INT_MAX

默认值:200000

tcp_rto_max_ms - 整型

TCP 重传超时最大值(单位:毫秒)。请注意,TCP_RTO_MAX_MS 套接字选项具有更高的优先级。

更改 tcp_rto_max_ms 时,了解 tcp_retries2 可能需要更改非常重要。

可能的值:1000 - 120,000

默认值:120,000

UDP 变量

udp_l3mdev_accept - 布尔值

启用此选项允许“全局”绑定套接字跨 L3 主域(例如 VRF)工作,无论数据包源自哪个 L3 域,都可以接收。仅当内核编译时启用了 CONFIG_NET_L3_MASTER_DEV 时才有效。

默认值:0 (禁用)

udp_mem - 3 个整型值的向量:min, pressure, max

允许所有 UDP 套接字排队使用的页数。

min: 允许所有 UDP 套接字排队使用的页数。

pressure: 引入此值是为了遵循 tcp_mem 的格式。

max: 引入此值是为了遵循 tcp_mem 的格式。

默认值在启动时根据可用内存量计算。

udp_rmem_min - 整型

UDP 套接字适度使用的接收缓冲区的最小大小。每个 UDP 套接字都可以使用此大小来接收数据,即使 UDP 套接字的总页数超过 udp_mem 压力。单位是字节。

默认值:4K

udp_wmem_min - 整型

UDP 没有 tx 内存计数功能,此可调参数无效。

udp_hash_entries - 整型

显示当前网络命名空间中 UDP 套接字的哈希桶数量。

默认值:4194304 (4 MB)

udp_child_ehash_entries - 整型

控制子网络命名空间中 UDP 套接字的哈希桶数量,此值必须在 clone() 或 unshare() 之前设置。

如果该值不为 0,内核将使用向上取整到 2^n 的值作为实际的哈希桶大小。0 是一个特殊值,表示子网络命名空间将共享初始网络命名空间的哈希桶。

请注意,如果内核未能分配足够的内存,子命名空间将使用全局哈希桶。此外,全局哈希桶分布在可用的 NUMA 节点上,但子哈希表的分配取决于当前进程的 NUMA 策略,这可能导致性能差异。

可能的值:0, 2^n (n: 7 (128) - 16 (64K))

默认值:0

RAW 变量

raw_l3mdev_accept - 布尔值

启用此选项允许“全局”绑定套接字跨 L3 主域(例如 VRF)工作,无论数据包源自哪个 L3 域,都可以接收。仅当内核编译时启用了 CONFIG_NET_L3_MASTER_DEV 时才有效。

默认值:1(启用)

CIPSOv4 变量

cipso_cache_enable - 布尔值

如果设置,则启用 CIPSO 标签映射缓存的添加和查找。如果未设置,则忽略添加操作,查找始终导致未命中。然而,无论设置如何,缓存仍会在需要时失效,这意味着您可以安全地打开和关闭此功能,并且缓存将始终“安全”。

默认值:1

cipso_cache_bucket_size - 整型

CIPSO 标签缓存由固定大小的哈希表组成,每个哈希桶包含多个缓存条目。此变量限制每个哈希桶中的条目数量;该值越大,可以缓存的 CIPSO 标签映射就越多。当给定哈希桶中的条目数量达到此限制时,添加新条目会导致桶中最旧的条目被删除以腾出空间。

默认值:10

cipso_rbm_optfmt - 布尔值

启用 CIPSO 草案规范第 3.4.2.6 节中定义的“优化标签 1 格式”(详见 Documentation/netlabel)。这意味着,当设置此选项时,CIPSO 标签将用空类别填充,以使数据包数据 32 位对齐。

默认值:0

cipso_rbm_structvalid - 布尔值

如果设置,则在调用 ip_options_compile() 时对 CIPSO 选项进行非常严格的检查。如果未设置,则放宽在 ip_options_compile() 期间进行的检查。无论哪种方式都是“安全”的,因为错误会在 CIPSO 处理代码的其他地方被捕获,但将此设置为 0 (False) 应该会减少工作量(即应该更快),但可能会导致需要严格检查的其他实现出现问题。

默认值:0

IP 变量

ip_local_port_range - 2 个整型值

定义 TCP 和 UDP 用于选择本地端口的本地端口范围。第一个数字是第一个本地端口号,第二个是最后一个本地端口号。如果可能,这些数字最好具有不同的奇偶性(一个偶数和一个奇数值)。必须大于或等于 ip_unprivileged_port_start。默认值分别为 32768 和 60999。

ip_local_reserved_ports - 逗号分隔范围列表

指定为已知第三方应用程序保留的端口。这些端口将不会被自动端口分配使用(例如,当调用 connect() 或 bind() 端口号为 0 时)。显式端口分配行为保持不变。

输入和输出使用的格式都是逗号分隔的范围列表(例如,端口 1、2、3、4 和 10 的“1,2-4,10-10”)。写入文件将清除所有以前保留的端口,并使用输入中给定的列表更新当前列表。

请注意,ip_local_port_range 和 ip_local_reserved_ports 设置是独立的,内核在确定哪些端口可用于自动端口分配时会同时考虑这两个设置。

您可以保留不在当前 ip_local_port_range 中的端口,例如

$ cat /proc/sys/net/ipv4/ip_local_port_range
32000       60999
$ cat /proc/sys/net/ipv4/ip_local_reserved_ports
8080,9148

尽管这有些冗余。但是,如果稍后将端口范围更改为包含保留端口的值,则此设置会很有用。另请记住,这些范围的重叠可能会影响选择紧随保留端口块之后的临时端口的可能性。

默认值:空

ip_unprivileged_port_start - 整型

这是一个按命名空间划分的 sysctl。它定义了网络命名空间中的第一个非特权端口。特权端口需要 root 或 CAP_NET_BIND_SERVICE 才能绑定到它们。要禁用所有特权端口,请将其设置为 0。它们不能与 ip_local_port_range 重叠。

默认值:1024

ip_nonlocal_bind - 布尔值

如果设置,允许进程 bind() 到非本地 IP 地址,这可能非常有用——但可能会破坏某些应用程序。

默认值:0

ip_autobind_reuse - 布尔值

默认情况下,即使新套接字和绑定到该端口的所有套接字都具有 SO_REUSEADDR,bind() 也不会自动选择端口。ip_autobind_reuse 允许 bind() 重用端口,这在使用 bind()+connect() 时很有用,但可能会破坏某些应用程序。首选解决方案是使用 IP_BIND_ADDRESS_NO_PORT,此选项仅应由专家设置。默认值:0

ip_dynaddr - 整型

如果设置为非零值,则启用对动态地址的支持。如果设置为大于 1 的非零值,则在发生动态地址重写时会打印内核日志消息。

默认值:0

ip_early_demux - 布尔值

优化输入数据包处理,针对某些类型的本地套接字进行一次解复用。目前,我们仅对已建立的 TCP 和已连接的 UDP 套接字执行此操作。

它可能会为纯路由工作负载增加额外开销,从而降低整体吞吐量,在这种情况下,您应该禁用它。

默认值:1

ping_group_range - 2 个整型值

将 ICMP_PROTO 数据报套接字限制为组范围内的用户。默认值为“1 0”,表示任何人(甚至 root)都不能创建 ping 套接字。将其设置为“100 100”将授予单个组权限。“0 4294967294”将使其对全世界开放,“100 4294967294”将使其对用户开放,但不对守护进程开放。

tcp_early_demux - 布尔值

为已建立的 TCP 套接字启用早期解复用。

默认值:1

udp_early_demux - 布尔值

为已连接的 UDP 套接字启用早期解复用。如果您的系统可能遇到更多未连接的负载,请禁用此选项。

默认值:1

icmp_echo_ignore_all - 布尔值

如果设置为非零值,则内核将忽略所有发送给它的 ICMP ECHO 请求。

默认值:0

icmp_echo_enable_probe - 布尔值

如果设置为 1,则内核将响应发送给它的 RFC 8335 PROBE 请求。

默认值:0

icmp_echo_ignore_broadcasts - 布尔值

如果设置为非零值,则内核将忽略所有通过广播/多播发送给它的 ICMP ECHO 和 TIMESTAMP 请求。

默认值:1

icmp_ratelimit - 整型

限制发送与 icmp_ratemask 匹配(见下文)的 ICMP 数据包到特定目标的最高速率。0 表示禁用任何限制,否则表示响应之间的最小间隔(毫秒)。请注意,另一个 sysctl,icmp_msgs_per_sec 限制了发送到所有目标的 ICMP 数据包数量。

默认值:1000

icmp_msgs_per_sec - 整型

限制此主机每秒发送的 ICMP 数据包的最大数量。只有类型与 icmp_ratemask 匹配(见下文)的消息受此限制控制。出于安全原因,每秒消息的精确计数是随机的。

默认值:1000

icmp_msgs_burst - 整型

icmp_msgs_per_sec 控制每秒发送的 ICMP 数据包数量,而 icmp_msgs_burst 控制这些数据包的突发大小。出于安全原因,精确的突发大小是随机的。

默认值:50

icmp_ratemask - 整型

由要限制速率的 ICMP 类型组成的掩码。

有效位:IHGFEDCBA9876543210

默认掩码:0000001100000011000 (6168)

位定义(参见 include/linux/icmp.h)

0

回显回复

3

目标不可达 [1]

4

源抑制 [1]

5

重定向

8

回显请求

B

时间超过 [1]

C

参数问题 [1]

D

时间戳请求

E

时间戳回复

F

信息请求

G

信息回复

H

地址掩码请求

I

地址掩码回复

icmp_ignore_bogus_error_responses - 布尔值

某些路由器违反 RFC1122,向广播帧发送伪造响应。此类违规通常通过内核警告记录。如果将其设置为 TRUE,内核将不会发出此类警告,从而避免日志文件混乱。

默认值:1

icmp_errors_use_inbound_ifaddr - 布尔值

如果为零,ICMP 错误消息将使用出站接口的主地址发送。

如果为非零,消息将使用接收到导致 ICMP 错误的数据包的接口的主地址发送。这是许多网络管理员期望路由器具有的行为。它还可以使复杂的网络布局调试变得更加容易。

请注意,如果所选接口没有主地址,则无论此设置如何,都将使用第一个具有主地址的非环回接口的主地址。

默认值:0

igmp_max_memberships - 整型

更改我们可以订阅的多播组的最大数量。默认值:20

理论最大值受限于必须在单个数据报中发送成员报告(即报告不能跨越多个数据报,否则可能混淆交换机并离开您不打算离开的组)。

支持的组数“M”受限于可以放入单个 65535 字节数据报的组报告条目数量。

M = 65536 - sizeof(IP 头部) / (sizeof(组记录))

组记录长度可变,最小为 12 字节。因此 net.ipv4.igmp_max_memberships 不应设置高于

(65536-24) / 12 = 5459

值 5459 假设没有 IP 头部选项,因此实际上此数字可能更低。

igmp_max_msf - 整型

多播组源过滤列表中允许的最大地址数。

默认值:10

igmp_qrv - 整型

控制 IGMP 查询鲁棒性变量(参见 RFC2236 8.1)。

默认值:2(RFC2236 8.1 规定)

最小值:1(RFC6636 4.5 规定)

force_igmp_version - 整型
  • 0 - (默认) 不强制 IGMP 版本,允许 IGMPv1/v2 回退。当所有 IGMPv1/v2 查询器存在计时器过期后,将再次返回 IGMPv3 模式。

  • 1 - 强制使用 IGMP 版本 1。如果收到 IGMPv2/v3 查询,也将回复 IGMPv1 报告。

  • 2 - 强制使用 IGMP 版本 2。如果收到 IGMPv1 查询消息,将回退到 IGMPv1。如果收到 IGMPv3 查询,将回复报告。

  • 3 - 强制使用 IGMP 版本 3。与默认值 0 的反应相同。

注意

这与 force_mld_version 不同,因为 IGMPv3 RFC3376 安全注意事项没有明确说明我们可以像 MLDv2 RFC3810 那样完全忽略其他版本消息。因此,建议将此值设置为默认值 0。

conf/interface/*

更改每个接口的特殊设置(其中“interface”是您的网络接口名称)

conf/all/*

特殊,更改所有接口的设置

log_martians - 布尔值

将具有不可能地址的数据包记录到内核日志中。如果 conf/{all,interface}/log_martians 中的至少一个设置为 TRUE,则接口的 log_martians 将被启用,否则将被禁用

accept_redirects - 布尔值

接受 ICMP 重定向消息。接口的 accept_redirects 将在以下情况下启用:

  • 如果接口的转发功能已启用,则 conf/{all,interface}/accept_redirects 均为 TRUE

  • 如果接口的转发功能已禁用,则 conf/{all,interface}/accept_redirects 中的至少一个为 TRUE

否则接口的 accept_redirects 将被禁用

默认值

  • TRUE(主机)

  • FALSE(路由器)

forwarding - 布尔值

在此接口上启用 IP 转发。这控制了在此接口上接收到的数据包是否可以被转发。

mc_forwarding - 布尔值

执行多播路由。内核需要编译时包含 CONFIG_MROUTE,并且需要多播路由守护进程。conf/all/mc_forwarding 也必须设置为 TRUE 才能为接口启用多播路由

medium_id - 整型

用于通过其连接的介质来区分设备的整数值。当广播数据包仅在一个设备上接收时,两个设备可以具有不同的 ID 值。默认值 0 表示该设备是其介质的唯一接口,值 -1 表示介质未知。

目前,它用于改变 proxy_arp 行为:对于在连接到不同介质的两个设备之间转发的数据包,proxy_arp 功能被启用。

proxy_arp - 布尔值

执行代理 ARP。

如果 conf/{all,interface}/proxy_arp 中的至少一个设置为 TRUE,则接口的 proxy_arp 将被启用,否则将被禁用

proxy_arp_pvlan - 布尔值

私有 VLAN 代理 ARP。

基本上允许代理 ARP 回复返回到同一接口(从中接收到 ARP 请求/征用)。

这样做是为了支持以太网交换机功能,例如 RFC 3069,其中各个端口不允许相互通信,但允许与上游路由器通信。如 RFC 3069 所述,可以通过代理 ARP 允许这些主机通过上游路由器进行通信。不需要与 proxy_arp 一起使用。

这项技术有不同的名称

在 RFC 3069 中称为 VLAN 聚合。Cisco 和 Allied Telesyn 称之为私有 VLAN。Hewlett-Packard 称之为源端口过滤或端口隔离。Ericsson 称之为 MAC 强制转发(RFC 草案)。

proxy_delay - 整型

延迟代理响应。

当启用 proxy_arp 或 proxy_ndp 时,延迟对邻居请求的响应。将选择 [0, proxy_delay) 之间的一个随机值,设置为零表示无延迟回复。单位为 jiffies。默认为 80。

shared_media - 布尔值

发送(路由器)或接受(主机)RFC1620 共享介质重定向。覆盖 secure_redirects。

如果 conf/{all,interface}/shared_media 中的至少一个设置为 TRUE,则接口的 shared_media 将被启用,否则将被禁用

默认值:TRUE

secure_redirects - 布尔值

仅接受指向接口当前网关列表中列出的网关的 ICMP 重定向消息。即使禁用,RFC1122 重定向规则仍然适用。

被 shared_media 覆盖。

如果 conf/{all,interface}/secure_redirects 中的至少一个设置为 TRUE,则接口的 secure_redirects 将被启用,否则将被禁用

默认值:TRUE

send_redirects - 布尔值

发送重定向,如果是路由器。

如果 conf/{all,interface}/send_redirects 中的至少一个设置为 TRUE,则接口的 send_redirects 将被启用,否则将被禁用

默认值:TRUE

bootp_relay - 布尔值

接受源地址为 0.b.c.d 但目的地不是此主机的本地数据包。假设 BOOTP 中继守护进程将捕获并转发此类数据包。conf/all/bootp_relay 也必须设置为 TRUE 才能为接口启用 BOOTP 中继

默认值:FALSE

尚未实现。

accept_source_route - 布尔值

接受带有 SRR 选项的数据包。conf/all/accept_source_route 也必须设置为 TRUE 才能在接口上接受带有 SRR 选项的数据包

默认值

  • TRUE(路由器)

  • FALSE(主机)

accept_local - 布尔值

接受具有本地源地址的数据包。结合适当的路由,这可用于通过线路在两个本地接口之间传输数据包并使其被正确接受。默认值:FALSE

route_localnet - 布尔值

在路由时,不要将环回地址视为火星源或目的地。这允许将 127/8 用于本地路由目的。

默认值:FALSE

rp_filter - 整型
  • 0 - 无源验证。

  • 1 - 严格模式,如 RFC3704 严格反向路径定义:每个传入数据包都对照 FIB 进行测试,如果接口不是最佳反向路径,则数据包检查将失败。默认情况下,失败的数据包将被丢弃。

  • 2 - 宽松模式,如 RFC3704 宽松反向路径定义:每个传入数据包的源地址也对照 FIB 进行测试,如果源地址无法通过任何接口到达,则数据包检查将失败。

RFC3704 中当前的推荐做法是启用严格模式,以防止 DDoS 攻击中的 IP 欺骗。如果使用非对称路由或其他复杂路由,则建议使用宽松模式。

在对 {interface} 进行源验证时,使用 conf/{all,interface}/rp_filter 中的最大值。

默认值为 0。请注意,某些发行版在启动脚本中启用它。

src_valid_mark - 布尔值
  • 0 - 数据包的 fwmark 不包含在反向路径路由查找中。这允许仅在一个方向利用 fwmark 的非对称路由配置,例如透明代理。

  • 1 - 数据包的 fwmark 包含在反向路径路由查找中。这允许 rp_filter 在 fwmark 用于双向路由流量时正常工作。

此设置还会影响在执行 ICMP 回复的源地址选择或确定 IPOPT_TS_TSANDADDR 和 IPOPT_RR IP 选项存储的地址时对 fmwark 的利用。

使用 conf/{all,interface}/src_valid_mark 中的最大值。

默认值为 0。

arp_filter - 布尔值
  • 1 - 允许在同一子网上拥有多个网络接口,并且每个接口的 ARP 请求根据内核是否会将 ARP 请求的 IP 地址数据包从该接口路由出去来响应(因此您必须使用基于源的路由才能使其工作)。换句话说,它允许控制哪些网卡(通常是 1 个)将响应 ARP 请求。

  • 0 - (默认) 内核可以响应带有来自其他接口地址的 arp 请求。这可能看起来不正确,但通常是有意义的,因为它增加了成功通信的机会。在 Linux 上,IP 地址由整个主机拥有,而不是由特定接口拥有。只有在更复杂的设置(如负载均衡)中,这种行为才会导致问题。

如果 conf/{all,interface}/arp_filter 中的至少一个设置为 TRUE,则接口的 arp_filter 将被启用,否则将被禁用

arp_announce - 整型

定义在接口上发送的 ARP 请求中宣布来自 IP 数据包的本地源 IP 地址的不同限制级别

  • 0 - (默认) 使用任何接口上配置的任何本地地址

  • 1 - 尽量避免使用不在目标子网中的本地地址。此模式在通过此接口可达的目标主机要求 ARP 请求中的源 IP 地址是其接收接口上配置的逻辑网络的一部分时很有用。当我们生成请求时,我们将检查所有包含目标 IP 的子网,并保留源地址(如果它来自此类子网)。如果没有此类子网,我们将根据级别 2 的规则选择源地址。

  • 2 - 始终为该目标使用最佳本地地址。在此模式下,我们忽略 IP 数据包中的源地址,并尝试选择我们 prefer 与目标主机通信的本地地址。通过查找所有包含目标 IP 地址的传出接口子网上的主 IP 地址来选择此类本地地址。如果没有找到合适的本地地址,我们选择传出接口或所有其他接口上的第一个本地地址,希望我们的请求能够收到回复,甚至有时无论我们宣布的源 IP 地址如何。

使用 conf/{all,interface}/arp_announce 中的最大值。

提高限制级别会增加从已解析目标接收答案的机会,而降低级别则会宣布更有效的发送方信息。

arp_ignore - 整型

定义响应接收到的解析本地目标 IP 地址的 ARP 请求时发送回复的不同模式

  • 0 - (默认):回复任何接口上配置的任何本地目标 IP 地址

  • 1 - 仅当目标 IP 地址是传入接口上配置的本地地址时才回复

  • 2 - 仅当目标 IP 地址是传入接口上配置的本地地址并且与发送方 IP 地址同属于此接口上的同一子网时才回复

  • 3 - 不回复配置为 scope host 的本地地址,仅回复全局和链接地址的解析

  • 4-7 - 保留

  • 8 - 不回复所有本地地址

当在 {interface} 上收到 ARP 请求时,使用 conf/{all,interface}/arp_ignore 中的最大值

arp_notify - 布尔值

定义地址和设备更改通知模式。

0

(默认):不做任何操作

1

当设备启动或硬件地址更改时,生成无偿 ARP 请求。

arp_accept - 整型

定义接受来自 ARP 表中尚未存在的设备的无偿 ARP (garp) 帧的行为

  • 0 - 不在 ARP 表中创建新条目

  • 1 - 在 ARP 表中创建新条目

  • 2 - 仅当源 IP 地址与接收到 garp 消息的接口上配置的地址在同一子网中时才创建新条目。

如果此设置开启,回复和请求类型的无偿 ARP 都将触发 ARP 表更新。

如果 ARP 表中已包含无偿 ARP 帧的 IP 地址,无论此设置是否开启,ARP 表都将更新。

arp_evict_nocarrier - 布尔值

在 NOCARRIER 事件时清除 ARP 缓存。此选项对于无线设备很重要,因为在同一网络上的接入点之间漫游时,不应清除 ARP 缓存。在大多数情况下,此值应保持默认值 (1)。

  • 1 - (默认):在 NOCARRIER 事件时清除 ARP 缓存

  • 0 - 在 NOCARRIER 事件时不清空 ARP 缓存

mcast_solicit - 整型

处于 INCOMPLETE 状态的多播探测的最大数量,当关联的硬件地址未知时。默认为 3。

ucast_solicit - 整型

处于 PROBE 状态的单播探测的最大数量,当硬件地址正在重新确认时。默认为 3。

app_solicit - 整型

在回退到多播探测(参见 mcast_resolicit)之前,通过 netlink 向用户空间 ARP 守护进程发送探测的最大数量。默认为 0。

mcast_resolicit - 整型

在 PROBE 状态下单播和应用程序探测之后的多播探测的最大数量。默认为 0。

disable_policy - 布尔值

禁用此接口的 IPSEC 策略 (SPD)

disable_xfrm - 布尔值

禁用此接口上的 IPSEC 加密,无论策略如何

igmpv2_unsolicited_report_interval - 整型

下一次非请求 IGMPv1 或 IGMPv2 报告重传的时间间隔,单位为毫秒。

默认值:10000 (10 秒)

igmpv3_unsolicited_report_interval - 整型

下一次非请求 IGMPv3 报告重传的时间间隔,单位为毫秒。

默认值:1000 (1 秒)

ignore_routes_with_linkdown - 布尔值

在执行 FIB 查找时,忽略链路断开的路由。

promote_secondaries - 布尔值

当从此接口移除主 IP 地址时,提升相应的辅助 IP 地址,而不是移除所有相应的辅助 IP 地址。

drop_unicast_in_l2_multicast - 布尔值

丢弃在链路层多播(或广播)帧中收到的任何单播 IP 数据包。

此行为(对于多播)实际上是 RFC 1122 中的 SHOULD,但出于兼容性原因,默认禁用。

默认值:关闭 (0)

drop_gratuitous_arp - 布尔值

丢弃所有无偿 ARP 帧,例如,如果网络上存在已知的良好 ARP 代理,并且不需要使用此类帧(或者在 802.11 的情况下,为了防止攻击,不得使用)。

默认值:关闭 (0)

tag - 整型

允许您写入一个数字,可根据需要使用。

默认值为 0。

xfrm4_gc_thresh - 整型

(自 Linux 4.14 起已废弃) 开始垃圾回收 IPv4 目的地缓存条目的阈值。达到此值的两倍时,系统将拒绝新的分配。

igmp_link_local_mcast_reports - 布尔值

启用 224.0.0.X 范围内的链路本地多播组的 IGMP 报告。

默认值:TRUE

Alexey Kuznetsov. kuznet@ms2.inr.ac.ru

更新者

/proc/sys/net/ipv6/* 变量

IPv6 没有 tcp_* 等全局变量。ipv4/ 下的 tcp_* 设置也适用于 IPv6 [XXX?]。

bindv6only - 布尔值

IPV6_V6ONLY 套接字选项的默认值,该选项将 IPv6 套接字的使用限制为仅限 IPv6 通信。

  • TRUE:禁用 IPv4 映射地址功能

  • FALSE:启用 IPv4 映射地址功能

默认值:FALSE(根据 RFC3493 规定)

flowlabel_consistency - 布尔值

保护流标签的一致性(和唯一性)。您必须禁用它才能在流标签管理器上使用 IPV6_FL_F_REFLECT 标志。

  • TRUE:启用

  • FALSE:禁用

默认值:TRUE

auto_flowlabels - 整型

根据数据包的流哈希自动生成流标签。这允许路由器等中间设备为等价多路径路由等机制识别数据包流(参见 RFC 6438)。

0

自动流标签完全禁用

1

自动流标签默认启用,可以通过 IPV6_AUTOFLOWLABEL 套接字选项按套接字禁用

2

允许自动流标签,可以通过 IPV6_AUTOFLOWLABEL 套接字选项按套接字启用

3

自动流标签已启用并强制执行,不能通过套接字选项禁用

默认值:1

flowlabel_state_ranges - 布尔值

将流标签号空间分成两个范围。0-0x7FFFF 预留给 IPv6 流管理器设施,0x80000-0xFFFFF 预留给 RFC6437 中描述的无状态流标签。

  • TRUE:启用

  • FALSE:禁用

默认值:true

flowlabel_reflect - 整型

控制流标签反射。在任何播环境中使用等价多路径路由时,路径 MTU 发现需要此功能才能正常工作。参见 RFC 7690 和:https://tools.ietf.org/html/draft-wang-6man-flow-label-reflection-01

这是一个位掩码。

  • 1: 对已建立的流启用

    请注意,这会阻止自动流标签更改,例如“tcp: 收到虚假重传时更改 IPv6 流标签”和“tcp: 每次 SYN 和 RTO 重传时更改 txhash”中进行的操作

  • 2: 对 TCP RESET 数据包启用(无活跃侦听器)如果设置,在关闭端口上响应 SYN 数据包发送的 RST 数据包将反映传入流标签。

  • 4: 对 ICMPv6 回显回复消息启用。

默认值:0

fib_multipath_hash_policy - 整数

控制多路径路由使用哪种哈希策略。

默认值:0 (三层)

可能的值

  • 0 - 第 3 层(源和目的地址加上流标签)

  • 1 - 第 4 层(标准 5 元组)

  • 2 - 三层或(如果存在)内部三层

  • 3 - 自定义多路径哈希。用于多路径哈希计算的字段由 fib_multipath_hash_fields sysctl 确定

fib_multipath_hash_fields - 无符号整数

当 fib_multipath_hash_policy 设置为 3(自定义多路径哈希)时,用于多路径哈希计算的字段由此 sysctl 确定。

此值是一个位掩码,用于启用多路径哈希计算的各种字段。

可能的字段有

0x0001

源 IP 地址

0x0002

目的 IP 地址

0x0004

IP 协议

0x0008

流标签

0x0010

源端口

0x0020

目的端口

0x0040

内部源 IP 地址

0x0080

内部目的 IP 地址

0x0100

内部 IP 协议

0x0200

内部流标签

0x0400

内部源端口

0x0800

内部目的端口

默认值:0x0007(源 IP、目的 IP 和 IP 协议)

anycast_src_echo_reply - 布尔值

控制任何播地址作为 ICMPv6 回显回复源地址的使用

  • TRUE:启用

  • FALSE:禁用

默认值:FALSE

idgen_delay - 整型

控制检测到 DAD 冲突后重试隐私稳定地址生成的时间延迟(秒)。

默认值:1(根据 RFC7217 规定)

idgen_retries - 整型

控制检测到 DAD 冲突后生成稳定隐私地址的重试次数。

默认值:3(根据 RFC7217 规定)

mld_qrv - 整型

控制 MLD 查询鲁棒性变量(参见 RFC3810 9.1)。

默认值:2(根据 RFC3810 9.1 规定)

最小值:1(RFC6636 4.5 规定)

max_dst_opts_number - 整型

目标选项扩展头部中允许的最大非填充 TLV 数量。如果此值小于零,则不允许未知选项,并且允许的已知 TLV 数量为此数字的绝对值。

默认值:8

max_hbh_opts_number - 整型

逐跳选项扩展头部中允许的最大非填充 TLV 数量。如果此值小于零,则不允许未知选项,并且允许的已知 TLV 数量为此数字的绝对值。

默认值:8

max_dst_opts_length - 整型

目标选项扩展头部允许的最大长度。

默认值:INT_MAX(无限制)

max_hbh_length - 整型

逐跳选项扩展头部允许的最大长度。

默认值:INT_MAX(无限制)

skip_notify_on_dev_down - 布尔值

控制设备关闭或删除时是否为移除的路由生成 RTM_DELROUTE 消息。IPv4 不生成此消息;IPv6 默认生成。将此 sysctl 设置为 true 会跳过该消息,使 IPv4 和 IPv6 在依赖用户空间缓存跟踪链接事件和清除路由方面保持一致。

默认值:false(生成消息)

nexthop_compat_mode - 布尔值

新的下一跳 API 提供了一种独立于前缀管理下一跳的方法。默认启用与旧路由格式的向后兼容性,这意味着路由转储和通知包含新的下一跳属性,但也包含完整的、扩展的下一跳定义。此外,下一跳配置的更新或删除会为使用下一跳的每个 FIB 条目生成路由通知。一旦系统理解了新的 API,可以禁用此 sysctl 以通过禁用下一跳扩展和冗余通知来实现新 API 的全部性能优势。

请注意,作为向后兼容模式,现代功能的转储可能不完整或不正确。例如,弹性组不会显示为弹性组,而只是显示为下一跳列表。此外,不适合 8 位的权重将显示不正确。

默认值:true(向后兼容模式)

fib_notify_on_flag_change - 整数

每当 RTM_F_OFFLOAD/RTM_F_TRAP/RTM_F_OFFLOAD_FAILED 标志更改时,是否发出 RTM_NEWROUTE 通知。

将路由安装到内核后,用户空间会收到确认,这意味着路由已安装在内核中,但不一定安装在硬件中。硬件中已安装的路由也可能改变其动作,从而改变其标志。例如,一个捕获数据包的主机路由在安装 IPinIP/VXLAN 隧道后可以被“提升”以执行解封装。这些通知将向用户空间指示路由的状态。

默认值:0(不发出通知。)

可能的值

  • 0 - 不发出通知。

  • 1 - 发出通知。

  • 2 - 仅针对 RTM_F_OFFLOAD_FAILED 标志更改发出通知。

ioam6_id - 整型

定义此节点的 IOAM ID。总共 32 位中仅使用 24 位。

最小值:0 最大值:0xFFFFFF

默认值:0xFFFFFF

ioam6_id_wide - 长整型

定义此节点的宽 IOAM ID。总共 64 位中仅使用 56 位。可以与 ioam6_id 不同。

最小值:0 最大值:0xFFFFFFFFFFFFFF

默认值:0xFFFFFFFFFFFFFF

IPv6 分片

ip6frag_high_thresh - 整型

用于重组 IPv6 分片的最大内存。当为此目的分配 ip6frag_high_thresh 字节的内存时,分片处理器将丢弃数据包,直到达到 ip6frag_low_thresh。

ip6frag_low_thresh - 整型

参见 ip6frag_high_thresh

ip6frag_time - 整型

将 IPv6 分片保留在内存中的时间,单位为秒。

conf/default/*:

更改接口特定的默认设置。

这些设置将在创建新接口时使用。

conf/all/*:

更改所有接口特定的设置。

[XXX:除了转发之外还有其他特殊功能吗?]

conf/all/disable_ipv6 - 布尔值

更改此值与更改 conf/default/disable_ipv6 设置以及所有每个接口的 disable_ipv6 设置为相同的值是相同的。

读取此值没有任何特殊含义。它不表示 IPv6 支持是启用还是禁用。即使某个接口将 disable_ipv6 设置为 0 并配置了 IPv6 地址,返回的值也可能为 1。

conf/all/forwarding - 布尔值

启用所有接口之间的全局 IPv6 转发。

IPv4 和 IPv6 在这里的工作方式不同;例如,必须使用 netfilter 来控制哪些接口可以转发数据包,哪些不能。

这还将所有接口的主机/路由器设置“forwarding”设置为指定值。详见下文。

这被称为全局转发。

proxy_ndp - 布尔值

执行代理 NDP。

fwmark_reflect - 布尔值

控制与套接字无关的内核生成 IPv6 回复数据包(例如 TCP RST 或 ICMPv6 回显回复)的 fwmark。如果未设置,这些数据包的 fwmark 为零。如果设置,它们具有其回复的数据包的 fwmark。

默认值:0

conf/interface/*:

更改每个接口的特殊设置。

某些设置的功能行为根据本地转发是否启用而有所不同。

accept_ra - 整型

接受路由器通告;使用它们进行自动配置。

它还决定是否发送路由器请求。当且仅当功能设置为接受路由器通告时,才会发送路由器请求。

可能的值为

0

不接受路由器通告。

1

如果转发被禁用,则接受路由器通告。

2

覆盖转发行为。即使启用了转发,也接受路由器通告。

功能默认

  • 如果本地转发被禁用,则启用。

  • 如果本地转发被启用,则禁用。

accept_ra_defrtr - 布尔值

在路由器通告中学习默认路由器。

功能默认

  • 如果 accept_ra 启用,则启用。

  • 如果 accept_ra 禁用,则禁用。

ra_defrtr_metric - 无符号整型

通过路由器通告学习到的默认路由的路由度量。此值将被分配为通过 IPv6 路由器通告学习到的默认路由的度量。仅当 accept_ra_defrtr 启用时才生效。

可能的值

1 到 0xFFFFFFFF

默认值:IP6_RT_PRIO_USER 即 1024。

accept_ra_from_local - 布尔值

如果 RA 其他方面正常且可接受,则接受源地址在本地机器上的 RA。

默认是不接受这些,因为它可能是一个非预期的网络循环。

功能默认

  • 如果在特定接口上启用了 accept_ra_from_local,则启用。

  • 如果在特定接口上禁用了 accept_ra_from_local,则禁用。

accept_ra_min_hop_limit - 整型

路由器通告中的最小跳数限制信息。

路由器通告中跳数限制信息小于此变量的将被忽略。

默认值:1

accept_ra_min_lft - 整型

路由器通告中可接受的最小生存期值。

生存期小于此值的 RA 部分将被忽略。生存期为零的部分不受影响。

默认值:0

accept_ra_pinfo - 布尔值

在路由器通告中学习前缀信息。

功能默认

  • 如果 accept_ra 启用,则启用。

  • 如果 accept_ra 禁用,则禁用。

ra_honor_pio_life - 布尔值

是否使用 RFC4862 第 5.5.3e 节来确定与路由器通告前缀信息选项中发送的前缀匹配的地址的有效生存期。

  • 如果启用,PIO 有效生存期将始终被遵守。

  • 如果禁用,则使用 RFC4862 第 5.5.3e 节来确定地址的有效生存期。

默认值:0 (禁用)

ra_honor_pio_pflag - 布尔值

前缀信息选项 P 标志表示网络可以使用 DHCPv6-PD 为每个客户端分配唯一的 IPv6 前缀。当用户空间 DHCPv6-PD 客户端运行时,可以启用此 sysctl 使 P 标志生效:即,P 标志抑制同一 PIO 中 A 标志的任何影响。对于给定的 PIO,P=1 和 A=1 被视为 A=0。

  • 如果禁用,则 P 标志将被忽略。

  • 如果启用,P 标志将禁用给定前缀信息选项的 SLAAC 自动配置。

默认值:0 (禁用)

accept_ra_rt_info_min_plen - 整型

RA 中路由信息的最小前缀长度。

前缀小于此变量的路由信息将被忽略。

功能默认

  • 如果 accept_ra_rtr_pref 启用,则为 0。

  • 如果 accept_ra_rtr_pref 禁用,则为 -1。

accept_ra_rt_info_max_plen - 整型

RA 中路由信息的最大前缀长度。

前缀大于此变量的路由信息将被忽略。

功能默认

  • 如果 accept_ra_rtr_pref 启用,则为 0。

  • 如果 accept_ra_rtr_pref 禁用,则为 -1。

accept_ra_rtr_pref - 布尔值

接受 RA 中的路由器优先级。

功能默认

  • 如果 accept_ra 启用,则启用。

  • 如果 accept_ra 禁用,则禁用。

accept_ra_mtu - 布尔值

应用 RA 选项 5 (RFC4861) 中指定的 MTU 值。如果禁用,RA 中指定的 MTU 将被忽略。

功能默认

  • 如果 accept_ra 启用,则启用。

  • 如果 accept_ra 禁用,则禁用。

accept_redirects - 布尔值

接受重定向。

功能默认

  • 如果本地转发被禁用,则启用。

  • 如果本地转发被启用,则禁用。

accept_source_route - 整型

接受源路由(路由扩展头部)。

  • >= 0: 仅接受路由头部类型 2。

  • < 0: 不接受路由头部。

默认值:0

autoconf - 布尔值

使用路由器通告中的前缀信息自动配置地址。

功能默认

  • 如果 accept_ra_pinfo 启用,则启用。

  • 如果 accept_ra_pinfo 禁用,则禁用。

dad_transmits - 整型

发送重复地址检测探测的数量。

默认值:1

forwarding - 整型

配置接口特定的主机/路由器行为。

注意

建议所有接口使用相同的设置;混合路由器/主机场景相当罕见。

可能的值为

  • 0 转发已禁用

  • 1 转发已启用

FALSE (0):

默认情况下,假定为主机行为。这意味着

  1. 在邻居通告中未设置 IsRouter 标志。

  2. 如果 accept_ra 为 TRUE(默认),则发送路由器请求。

  3. 如果 accept_ra 为 TRUE(默认),则接受路由器通告(并进行自动配置)。

  4. 如果 accept_redirects 为 TRUE(默认),则接受重定向。

TRUE (1):

如果本地转发已启用,则假定为路由器行为。这意味着与上述情况正好相反

  1. 在邻居通告中设置 IsRouter 标志。

  2. 除非 accept_ra 为 2,否则不发送路由器请求。

  3. 除非 accept_ra 为 2,否则忽略路由器通告。

  4. 忽略重定向。

默认值:0(禁用),如果全局转发禁用(默认),否则为 1(启用)。

hop_limit - 整型

要设置的默认跳数限制。

默认值:64

mtu - 整型

默认最大传输单元

默认值:1280 (IPv6 要求的最小值)

ip_nonlocal_bind - 布尔值

如果设置,允许进程 bind() 到非本地 IPv6 地址,这可能非常有用——但可能会破坏某些应用程序。

默认值:0

router_probe_interval - 整型

RFC4191 中描述的路由器探测之间的最小间隔(秒)。

默认值:60

router_solicitation_delay - 整型

接口启动后等待发送路由器请求的秒数。

默认值:1

router_solicitation_interval - 整型

路由器请求之间等待的秒数。

默认值:4

router_solicitations - 整型

在假定没有路由器存在之前,发送路由器请求的数量。

默认值:3

use_oif_addrs_only - 布尔值

启用时,通过此接口路由的目的地的候选源地址仅限于此接口上配置的地址集(参见 RFC 6724,第 4 节)。

默认值:false

use_tempaddr - 整型

隐私扩展 (RFC3041) 的偏好。

  • <= 0 : 禁用隐私扩展

  • == 1 : 启用隐私扩展,但优先使用公共地址而不是临时地址。

  • > 1 : 启用隐私扩展并优先使用临时地址而不是公共地址。

默认值

  • 0(对于大多数设备)

  • -1(对于点对点设备和环回设备)

temp_valid_lft - 整型

临时地址的有效生存期(秒)。如果小于所需的最小生存期(通常为 5-7 秒),则不会创建临时地址。

默认值:172800 (2 天)

temp_prefered_lft - 整型

临时地址的首选生存期(秒)。如果 temp_prefered_lft 小于所需的最小生存期(通常为 5-7 秒),则首选生存期为所需的最小生存期。如果 temp_prefered_lft 大于 temp_valid_lft,则首选生存期为 temp_valid_lft。

默认值:86400 (1 天)

keep_addr_on_down - 整型

在接口关闭事件时保留所有 IPv6 地址。如果设置,则不清除没有过期时间的静态全局地址。

  • >0 : 启用

  • 0 : 系统默认

  • <0 : 禁用

默认值:0(地址被移除)

max_desync_factor - 整型

DESYNC_FACTOR 的最大值,这是一个随机值,可确保客户端不会相互同步并在完全相同的时间生成新地址。值以秒为单位。

默认值:600

regen_min_advance - 整型

在当前临时地址被废弃之前,至少提前多久(秒)创建新的临时地址。此值将添加到可能需要重复地址检测来确定何时创建新地址的时间量中。Linux 允许将此值设置为小于默认值 2 秒,但小于 2 的值不符合 RFC 8981。

默认值:2

regen_max_retry - 整型

在放弃尝试生成有效临时地址之前尝试的次数。

默认值:5

max_addresses - 整型

每个接口自动配置地址的最大数量。设置为零表示禁用此限制。不建议将此值设置得太大(或设置为零),因为它很容易导致内核崩溃,因为允许创建太多地址。

默认值:16

disable_ipv6 - 布尔值

禁用 IPv6 操作。如果 accept_dad 设置为 2,并且链路本地地址的 DAD 失败,则此值将动态设置为 TRUE。

默认值:FALSE(启用 IPv6 操作)

当此值从 1 更改为 0(正在启用 IPv6)时,它将在给定接口上动态创建一个链路本地地址,并根据需要启动重复地址检测。

当此值从 0 更改为 1(正在禁用 IPv6)时,它将动态删除给定接口上的所有地址和路由。从现在开始,将无法向所选接口添加地址/路由。

accept_dad - 整型

是否接受 DAD(重复地址检测)。

0

禁用 DAD

1

启用 DAD(默认)

2

启用 DAD,如果发现基于 MAC 的重复链路本地地址,则禁用 IPv6 操作。

给定接口上的 DAD 操作和模式将根据 conf/{all,interface}/accept_dad 的最大值进行选择。

force_tllao - 布尔值

即使响应单播邻居请求,也启用发送目标链路层地址选项。

默认值:FALSE

引用 RFC 2461,第 4.4 节,目标链路层地址

“必须包含此选项以进行多播请求,以避免当对等节点没有缓存条目来返回邻居通告消息时出现无限的邻居请求“递归”。在响应单播请求时,可以省略此选项,因为请求的发送者具有正确的链路层地址;否则,它就无法发送单播请求。然而,在这种情况下包含链路层地址只增加了很小的开销,并消除了发送者在收到先前请求的响应之前删除缓存的链路层地址的潜在竞态条件。”

ndisc_notify - 布尔值

定义地址和设备更改通知模式。

  • 0 - (默认):不做任何操作

  • 1 - 当设备启动或硬件地址更改时,生成非请求邻居通告。

ndisc_tclass - 整型

发送 IPv6 邻居发现(路由器请求、路由器通告、邻居请求、邻居通告、重定向)消息时默认使用的 IPv6 流量类别。这 8 位可以解释为:6 个高位用于 DSCP 值,2 个低位表示 ECN(您可能希望将其清除)。

  • 0 - (默认)

ndisc_evict_nocarrier - 布尔值

在 NOCARRIER 事件时清除邻居发现表。此选项对于无线设备很重要,因为在同一网络上的接入点之间漫游时,不应清除邻居发现缓存。在大多数情况下,此值应保持默认值 (1)。

  • 1 - (默认):在 NOCARRIER 事件时清除邻居发现缓存。

  • 0 - 在 NOCARRIER 事件时不清除邻居发现缓存。

mldv1_unsolicited_report_interval - 整型

下一次非请求 MLDv1 报告重传的时间间隔,单位为毫秒。

默认值:10000 (10 秒)

mldv2_unsolicited_report_interval - 整型

下一次非请求 MLDv2 报告重传的时间间隔,单位为毫秒。

默认值:1000 (1 秒)

force_mld_version - 整型
  • 0 - (默认) 不强制 MLD 版本,允许 MLDv1 回退

  • 1 - 强制使用 MLD 版本 1

  • 2 - 强制使用 MLD 版本 2

suppress_frag_ndisc - 整型

控制 RFC 6980(IPv6 分片与 IPv6 邻居发现的安全影响)行为

  • 1 - (默认) 丢弃分片的邻居发现数据包

  • 0 - 允许分片的邻居发现数据包

optimistic_dad - 布尔值

是否执行乐观重复地址检测 (RFC 4429)。

  • 0: 禁用(默认)

  • 1: 启用

如果 conf/{all,interface}/optimistic_dad 中的至少一个设置为 1,则启用接口的乐观重复地址检测,否则禁用。

use_optimistic - 布尔值

如果启用,在源地址选择期间不将乐观地址分类为已废弃。首选地址仍将优先于乐观地址,但受源地址选择算法中其他排名的影响。

  • 0: 禁用(默认)

  • 1: 启用

如果 conf/{all,interface}/use_optimistic 中的至少一个设置为 1,则启用,否则禁用。

stable_secret - IPv6 地址

此 IPv6 地址将用作生成链路本地地址和自动配置地址的秘密。设置此秘密后生成的所有地址默认将是稳定的隐私地址。这可以通过 addrgenmode ip-link 进行更改。conf/default/stable_secret 用作命名空间的秘密,接口特定的可以覆盖它。拒绝写入 conf/all/stable_secret。

建议在系统安装期间生成此秘密,并在此后保持稳定。

默认情况下,稳定秘密未设置。

addr_gen_mode - 整型

定义如何生成链路本地和自动配置地址。

0

基于 EUI64 生成地址(默认)

1

不生成链路本地地址,对自动配置生成的地址使用 EUI64

2

使用 stable_secret 中的秘密生成稳定的隐私地址 (RFC7217)

3

如果未设置,则使用随机秘密生成稳定的隐私地址

drop_unicast_in_l2_multicast - 布尔值

丢弃在链路层多播(或广播)帧中收到的任何单播 IPv6 数据包。

默认情况下,此功能是关闭的。

drop_unsolicited_na - 布尔值

丢弃所有非请求邻居通告,例如,如果网络上存在已知的良好 NA 代理,并且不需要使用此类帧(或者在 802.11 的情况下,为了防止攻击,不得使用)。

默认情况下,此功能是关闭的。

accept_untracked_na - 整型

定义接受来自邻居缓存中不存在的设备的邻居通告的行为

  • 0 - (默认) 不接受非请求和未跟踪的邻居通告。

  • 1 - 当收到带有目标链路层地址选项的邻居通告(无论是请求的还是非请求的)时,如果邻居缓存中尚不存在所通告的 IPv6 地址的条目,则为路由器在 STALE 状态下添加新的邻居缓存条目。如果没有此旋钮,收到的针对未跟踪地址(邻居缓存中不存在)的 NA 将被静默忽略。

    这符合 RFC9131 中记载的路由器端行为。

    此优先级低于 drop_unsolicited_na。

    这将优化直接连接主机发起初始链外通信的返回路径,确保开启此设置的第一跳路由器不必缓冲初始返回数据包以进行邻居请求。前提是主机配置为在接口启动时发送非请求邻居通告。此设置应与主机上的 ndisc_notify 设置结合使用,以满足此前提。

  • 2 - 扩展选项 (1) 以仅在源 IP 地址与接收邻居通告的接口上配置的地址在同一子网中时才添加新的邻居缓存条目。

enhanced_dad - 布尔值

根据 RFC7527,在用于重复地址检测的 IPv6 邻居请求消息中包含一个随机数选项。收到的 DAD NS 仅当随机数不同时才表示重复地址。这避免了由于我们发送的 NS 消息的环回而导致的任何错误重复检测。除非 conf/{all,interface}/enhanced_dad 都设置为 FALSE,否则将在接口上发送随机数选项。

默认值:TRUE

icmp/*:

ratelimit - 整型

限制发送 ICMPv6 消息的最高速率。

0 表示禁用任何限制,否则表示响应之间的最小间隔(毫秒)。

默认值:1000

ratemask - 逗号分隔范围列表

对于与 ratemask 中范围匹配的 ICMPv6 消息类型,根据 ratelimit 参数限制消息的发送。

输入和输出使用的格式都是逗号分隔的范围列表(例如,ICMPv6 消息类型 0 到 127 和 129 的“0-127,129”)。写入文件将清除所有以前的 ICMPv6 消息类型范围,并使用输入更新当前列表。

请参阅:https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml 获取 ICMPv6 消息类型的数值,例如,回显请求是 128,回显回复是 129。

默认值:0-1,3-127(对 ICMPv6 错误进行速率限制,除了数据包过大)

echo_ignore_all - 布尔值

如果设置为非零值,则内核将忽略所有通过 IPv6 协议发送给它的 ICMP ECHO 请求。

默认值:0

echo_ignore_multicast - 布尔值

如果设置为非零值,则内核将忽略所有通过多播方式发送给它的 ICMP ECHO 请求,这些请求通过 IPv6 协议传输。

默认值:0

echo_ignore_anycast - 布尔值

如果设置为非零,则内核将忽略所有通过 IPv6 协议发送给它并目的地为任何播地址的 ICMP ECHO 请求。

默认值:0

error_anycast_as_unicast - 布尔值

如果设置为 1,则内核将响应由发送给它的 IPv6 协议中目的地为任播地址的请求产生的 ICMP 错误,实质上是将任播视为单播。

默认值:0

xfrm6_gc_thresh - 整型

(自 Linux 4.14 起已废弃) 开始垃圾回收 IPv6 目的地缓存条目的阈值。达到此值的两倍时,系统将拒绝新的分配。

IPv6 更新者:Pekka Savola <pekkas@netcore.fi> YOSHIFUJI Hideaki / USAGI Project <yoshfuji@linux-ipv6.org>

/proc/sys/net/bridge/* 变量:

bridge-nf-call-arptables - 布尔值
  • 1:将桥接的 ARP 流量传递到 arptables 的 FORWARD 链。

  • 0:禁用此功能。

默认值:1

bridge-nf-call-iptables - 布尔值
  • 1:将桥接的 IPv4 流量传递到 iptables 的链。

  • 0:禁用此功能。

默认值:1

bridge-nf-call-ip6tables - 布尔值
  • 1:将桥接的 IPv6 流量传递到 ip6tables 的链。

  • 0:禁用此功能。

默认值:1

bridge-nf-filter-vlan-tagged - 布尔值
  • 1:将桥接的 VLAN 标记 ARP/IP/IPv6 流量传递到 {arp,ip,ip6}tables。

  • 0:禁用此功能。

默认值:0

bridge-nf-filter-pppoe-tagged - 布尔值
  • 1:将桥接的 pppoe 标记 IP/IPv6 流量传递到 {ip,ip6}tables。

  • 0:禁用此功能。

默认值:0

bridge-nf-pass-vlan-input-dev - 布尔值
  • 1:如果 bridge-nf-filter-vlan-tagged 启用,尝试在网桥上找到一个 VLAN 接口并将 netfilter 输入设备设置为该 VLAN。这允许使用例如“iptables -i br0.1”,并使 REDIRECT 目标与 VLAN-on-top-of-bridge 接口配合工作。如果未找到匹配的 VLAN 接口,或者此开关关闭,则输入设备设置为网桥接口。

  • 0:禁用网桥 netfilter VLAN 接口查找。

默认值:0

proc/sys/net/sctp/* 变量:

addip_enable - 布尔值

启用或禁用 RFC5061 中指定的动态地址重配置 (ADD-IP) 功能扩展。此扩展提供了为 SCTP 关联动态添加和移除新地址的能力。

1: 启用扩展。

0: 禁用扩展。

默认值:0

pf_enable - 整型

启用或禁用 pf(pf 是 potentially failed 的缩写)状态。pf_retrans > path_max_retrans 的值也会禁用 pf 状态。也就是说,pf_enable 和 pf_retrans > path_max_retrans 之一都可以禁用 pf 状态。由于 pf_retrans 和 path_max_retrans 可以由用户空间应用程序更改,有时用户期望通过 pf_retrans > path_max_retrans 的值来禁用 pf 状态,但偶尔 pf_retrans 或 path_max_retrans 的值被用户应用程序更改,导致此 pf 状态被启用。因此,有必要添加此项以动态启用和禁用 pf 状态。详情请参阅:https://datatracker.ietf.org/doc/draft-ietf-tsvwg-sctp-failover

1: 启用 pf。

0: 禁用 pf。

默认值:1

pf_expose - 整型

取消设置或启用/禁用 pf(pf 是 potentially failed 的缩写)状态暴露。应用程序可以控制在 SCTP_PEER_ADDR_CHANGE 事件和 SCTP_GET_PEER_ADDR_INFO sockopt 中 pf 路径状态的暴露。当它未设置时,不会发送带有 SCTP_ADDR_PF 状态的 SCTP_PEER_ADDR_CHANGE 事件,并且可以通过 SCTP_GET_PEER_ADDR_INFO sockopt 获取 SCTP_PF 状态传输信息;当它启用时,将为传输变为 SCTP_PF 状态发送 SCTP_PEER_ADDR_CHANGE 事件,并且可以通过 SCTP_GET_PEER_ADDR_INFO sockopt 获取 SCTP_PF 状态传输信息;当它禁用时,将不会发送 SCTP_PEER_ADDR_CHANGE 事件,并且在尝试通过 SCTP_GET_PEER_ADDR_INFO sockopt 获取 SCTP_PF 状态传输信息时返回 -EACCES。

0: 取消设置 pf 状态暴露,与旧应用程序兼容。

1: 禁用 pf 状态暴露。

2: 启用 pf 状态暴露。

默认值:0

addip_noauth_enable - 布尔值

动态地址重配置 (ADD-IP) 要求使用认证来保护添加或删除新地址的操作。此要求是为了防止未经授权的主机劫持关联。然而,较旧的实现可能没有实现此要求,但允许 ADD-IP 扩展。为了互操作性,我们提供了此变量来控制认证要求的强制执行。

1

允许在没有认证的情况下使用 ADD-IP 扩展。此选项仅应在封闭环境中设置,以实现与旧实现的互操作性。

0

强制执行认证要求

默认值:0

auth_enable - 布尔值

启用或禁用认证块扩展。此扩展提供了发送和接收认证块的能力,并且是动态地址重配置 (ADD-IP) 扩展安全操作所必需的。

  • 1: 启用此扩展。

  • 0: 禁用此扩展。

默认值:0

prsctp_enable - 布尔值

启用或禁用部分可靠性扩展 (RFC3758),该扩展用于通知对等方某个 DATA 不再可预期。

  • 1: 启用扩展

  • 0: 禁用

默认值:1

max_burst - 整型

最初可以发送的新数据包数量的限制。它控制生成的流量的突发性。

默认值:4

association_max_retrans - 整型

设置关联在判定远端不可达之前可以尝试重传的最大次数。如果超过此值,关联将被终止。

默认值:10

max_init_retransmits - 整型

关联在声明目的地不可达并终止之前,将尝试重传 INIT 和 COOKIE-ECHO 块的最大次数。

默认值:8

path_max_retrans - 整型

在给定路径上将尝试的最大重传次数。一旦超过此阈值,该路径被视为不可达,当关联是多宿主时,新流量将使用不同的路径。

默认值:5

pf_retrans - 整型

在将流量重定向到备用传输(如果存在)之前,在给定路径上将尝试的重传次数。请注意,这与 path_max_retrans 不同,因为超过 pf_retrans 阈值的路径仍可使用。它仅在堆栈选择传输路径时才被降级。此设置主要用于启用快速故障转移机制,而无需将 path_max_retrans 降低到非常低的值。详情请参阅:http://www.ietf.org/id/draft-nishida-tsvwg-sctp-failover-05.txt。另请注意,pf_retrans > path_max_retrans 的值会禁用此功能。由于 pf_retrans 和 path_max_retrans 都可以由用户空间应用程序更改,因此使用变量 pf_enable 来禁用 pf 状态。

默认值:0

ps_retrans - 整型

Primary.Switchover.Max.Retrans (PSMR),这是一个来自 rfc7829 中第 5 节“主路径切换”的可调参数。当旧主路径上的路径错误计数超过 PSMR 时,主路径将更改为另一个活动路径,以便“SCTP 发送方即使旧主目的地址再次变为活动状态,也允许在新工作路径上继续数据传输”。请注意,此功能默认通过将每个 netns 的“ps_retrans”初始化为 0xffff 来禁用,并且在通过 sysctl 更改时,其值不能小于“pf_retrans”。

默认值:0xffff

rto_initial - 整型

用于计算往返时间的初始往返超时值(毫秒)。这是重传的初始时间间隔。

默认值:3000

rto_max - 整型

往返超时值的最大值(毫秒)。这是重传之间可能经过的最大时间间隔。

默认值:60000

rto_min - 整型

往返超时值的最小值(毫秒)。这是重传之间可能经过的最小时间间隔。

默认值:1000

hb_interval - 整型

心跳(HEARTBEAT)块之间的时间间隔(毫秒)。这些块在空闲路径上以指定的时间间隔发送,用于探测两个关联之间给定路径的状态。

默认值:30000

sack_timeout - 整型

实现将等待发送SACK的时间量(毫秒)。

这意味着非常接近的主机之间的流可以使用更大的 TSO 数据包,从而降低其 CPU 成本。

valid_cookie_life - 整型

SCTP cookie的默认生命周期(毫秒)。此cookie在关联建立期间使用。

默认值:60000

cookie_preserve_enable - 布尔型

启用或禁用扩展SCTP关联建立阶段使用的SCTP cookie生命周期的功能

  • 1:启用cookie生命周期扩展。

  • 0: 禁用

默认值:1

cookie_hmac_alg - 字符串

选择监听SCTP套接字在INIT-ACK块中向连接客户端发送cookie值时使用的HMAC算法。有效值包括

  • md5

  • sha1

  • none

将md5或sha1指定为所选算法的能力取决于这些算法在构建时(CONFIG_CRYPTO_MD5和CONFIG_CRYPTO_SHA1)的配置。

默认值:取决于配置。如果可用则为MD5,否则如果可用则为SHA1,否则为none。

rcvbuf_policy - 整型

确定接收缓冲区是归属于套接字还是关联。SCTP支持在单个套接字上创建多个关联的功能。使用此功能时,单个滞留关联(缓冲大量数据)可能会通过消耗所有接收缓冲区空间来阻止其他关联传输其数据。为了解决这个问题,rcvbuf_policy 可以设置为将接收器缓冲区空间分配给每个关联而不是套接字。这可以防止上述阻塞。

  • 1:rcvbuf空间按关联分配

  • 0:rcvbuf空间按套接字分配

默认值:0

sndbuf_policy - 整型

与上述rcvbuf_policy类似,这适用于发送缓冲区空间。

  • 1:发送缓冲区按关联跟踪

  • 0:发送缓冲区按套接字跟踪。

默认值:0

sctp_mem - 3个整型值的向量:min, pressure, max

允许所有SCTP套接字排队使用的页数。

min:低于此页数时,SCTP 不会关注其内存占用。当SCTP分配的内存量超过此数值时,SCTP开始适度使用内存。

pressure: 引入此值是为了遵循 tcp_mem 的格式。

max:允许所有SCTP套接字排队使用的页数。

默认值在启动时根据可用内存量计算。

sctp_rmem - 3个整型值的向量:min, default, max

仅使用第一个值(“min”),“default”和“max”被忽略。

min:SCTP套接字使用的最小接收缓冲区大小。即使在适度内存压力下,也保证每个SCTP套接字(但不包括关联)都能获得此大小。

默认值:4K

sctp_wmem - 3个整型值的向量:min, default, max

仅使用第一个值(“min”),“default”和“max”被忽略。

min:SCTP套接字可以使用的最小发送缓冲区大小。即使在适度内存压力下,也保证每个SCTP套接字(但不包括关联)都能获得此大小。

默认值:4K

addr_scope_policy - 整型

控制IPv4地址范围(作用域)- draft-stewart-tsvwg-sctp-ipv4-00

  • 0 - 禁用IPv4地址范围(作用域)

  • 1 - 启用IPv4地址范围(作用域)

  • 2 - 遵循草案但允许IPv4私有地址

  • 3 - 遵循草案但允许IPv4链路本地地址

默认值:1

udp_port - 整型

本地UDP隧道套接字的监听端口。通常它使用IANA分配的UDP端口号9899(sctp-tunneling)。

此UDP套接字用于处理传入的UDP封装SCTP数据包(来自RFC6951),并由同一网络命名空间中的所有应用程序共享。当值设置为0时,此UDP套接字将被关闭。

该值也将用于设置传出UDP封装SCTP数据包的UDP头源端口。对于目标端口,请参阅下面的“encap_port”。

默认值:0

encap_port - 整型

默认的远程UDP封装端口。

默认情况下,此值用于设置传出UDP封装SCTP数据包的UDP头目标端口。用户还可以通过使用setsockopt为每个套接字/关联/传输更改此值。更多信息,请参阅RFC6951。

请注意,当连接到远程服务器时,客户端应将其设置为对等服务器上UDP隧道套接字正在监听的端口,并且客户端上的本地UDP隧道套接字也必须启动。在服务器端,它将从传入数据包的源端口获取encap_port。

默认值:0

plpmtud_probe_interval - 整型

PLPMTUD探测计时器的时间间隔(毫秒),该计时器配置为在此期间后到期以接收探测数据包的确认。这也是探测搜索完成后,当前pmtu的探测之间的时间间隔。

当设置为0时,PLPMTUD将被禁用;其他值必须大于等于5000。

默认值:0

reconf_enable - 布尔型

启用或禁用RFC6525中指定的流重新配置(Stream Reconfiguration)功能的扩展。此扩展提供了“重置”流的能力,并包括“传出/传入SSN重置”、“SSN/TSN重置”和“添加传出/传入流”的参数。

  • 1: 启用扩展。

  • 0: 禁用扩展。

默认值:0

intl_enable - 布尔型

启用或禁用RFC8260中指定的用户消息交错(User Message Interleaving)功能的扩展。此扩展允许对在不同流上发送的用户消息进行交错。启用此功能后,如果对等端也支持,I-DATA块将取代DATA块来承载用户消息。请注意,要使用此功能,需要将此选项设置为1,并且还需要将套接字选项SCTP_FRAGMENT_INTERLEAVE设置为2,SCTP_INTERLEAVING_SUPPORTED设置为1。

  • 1: 启用扩展。

  • 0: 禁用扩展。

默认值:0

ecn_enable - 布尔型

控制SCTP使用显式拥塞通知(ECN)。与TCP类似,只有当SCTP连接的两端都表示支持时才使用ECN。此功能通过允许支持的路由器在不得不丢弃数据包之前发出拥塞信号,有助于避免因拥塞造成的损失。

1:启用ECN。 0:禁用ECN。

默认值:1

l3mdev_accept - 布尔型

启用此选项允许“全局”绑定套接字跨 L3 主域(例如 VRF)工作,无论数据包源自哪个 L3 域,都可以接收。仅当内核编译时启用了 CONFIG_NET_L3_MASTER_DEV 时才有效。

默认值:1(启用)

/proc/sys/net/core/*

请参阅:/proc/sys/net/的文档,以获取这些条目的描述。

/proc/sys/net/unix/*

max_dgram_qlen - 整型

数据报套接字接收队列的最大长度

默认值:10