IP Sysctl¶
/proc/sys/net/ipv4/* 变量¶
- ip_forward - 布尔值
0 - 禁用 (默认)
非 0 - 启用
在接口之间转发数据包。
此变量是特殊的,其更改会将所有配置参数重置为其默认状态(主机的 RFC1122,路由器的 RFC1812)
- ip_default_ttl - 整数
传出(但未转发)IP 数据包的 TTL(生存时间)字段的默认值。应介于 1 和 255 之间(包括 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 和 DCCP,因为它们会验证例如序列号或关联。此模式不应全局启用,而仅旨在保护例如命名空间中 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 回显回复)。如果未设置,这些数据包的 fwmark 为零。如果设置,它们具有它们回复的数据包的 fwmark。
默认值:0
- fib_multipath_use_neigh - 布尔值
在确定多路径路由的下一跳时,使用现有邻居条目的状态。如果禁用,则不使用邻居信息,数据包可能会被定向到失败的下一跳。仅对使用启用 CONFIG_IP_ROUTE_MULTIPATH 构建的内核有效。
默认值:0(禁用)
可能的值
0 - 禁用
1 - 启用
- fib_multipath_hash_policy - 整数
控制多路径路由使用哪个哈希策略。仅对使用启用 CONFIG_IP_ROUTE_MULTIPATH 构建的内核有效。
默认值:0(第 3 层)
可能的值
0 - 第 3 层
1 - 第 4 层
2 - 第 3 层或内部第 3 层(如果存在)
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 表从 TOS 字段值映射(例如,请参阅 man tc-prio)。
默认值: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 - 整数
允许的最大非 PERMANENT 邻居条目数。当使用大量接口以及与大量直接连接的对等方通信时,增加此值。
默认值: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 套接字的额外调整,另请参阅 tcp_max_syn_backlog。
- tcp_abort_on_overflow - 布尔值
如果监听服务接受新连接的速度太慢,则重置这些连接。默认状态为 FALSE。这意味着如果由于突发而发生溢出,连接将恢复。_仅当_您确实确定无法调整监听守护程序以更快地接受连接时,才启用此选项。启用此选项可能会损害您的服务器的客户端。
- tcp_adv_win_scale - 整数
自 linux-6.6 起已过时。将缓冲开销计算为字节/2^tcp_adv_win_scale(如果 tcp_adv_win_scale > 0),或字节-字节/2^(-tcp_adv_win_scale)(如果它 <= 0)。
可能的值为 [-31, 31],包括边界值。
默认值:1
- tcp_allowed_congestion_control - 字符串
显示/设置非特权进程可用的拥塞控制选项。该列表是 tcp_available_congestion_control 中列出的选项的子集。
默认值为 “reno” 和默认设置 (tcp_congestion_control)。
- tcp_app_win - 整数
为应用程序缓冲区保留最大值 (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 - 整数
如 RFC 1122 和 RFC 6691 中所述,TCP SYN 和 SYNACK 消息通常会通告一个 ADVMSS 选项。
如果此 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 数据包
超出窗口序列号,
超出窗口确认号,或者
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 攻击,您_绝不能_依赖此限制或人为地降低该限制,而是如果网络条件需要大于默认值,则增加该限制(可能是在增加安装的内存后),并调整网络服务以更积极地徘徊和杀死此类状态。请让我再次提醒您:每个孤立项最多会占用约 64K 的不可交换内存。
- tcp_max_syn_backlog - 整数
记住的连接请求 (SYN_RECV) 的最大数量,这些请求尚未收到连接客户端的确认。
这是每个侦听器的限制。
对于低内存计算机,最小值为 128,并且它将与计算机的内存成比例地增加。
如果服务器遇到过载,请尝试增加此数字。
请记住还要检查 /proc/sys/net/core/somaxconn。一个 SYN_RECV 请求套接字会消耗约 304 字节的内存。
- tcp_max_tw_buckets - 整数
系统同时保持的最大 time-wait 套接字数。如果超过此数字,则会立即销毁 time-wait 套接字并打印警告。此限制仅用于防止简单的 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 - 整数
此值影响本地关闭的 TCP 连接的超时时间,当 RTO 重传仍然未被确认时。有关更多详细信息,请参阅 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 是一个相当保守的值,但如果路径使用每个数据包的负载均衡(如绑定 rr 模式),则可以增加它
默认值:300
- tcp_retrans_collapse - 布尔值
与某些损坏的打印机的错误到错误的兼容性。在重新传输时,尝试发送更大的数据包以解决某些 TCP 堆栈中的错误。
- tcp_retries1 - 整数
此值影响 TCP 由于未被确认的 RTO 重传而决定出现问题的时间,并将此怀疑报告给网络层。有关更多详细信息,请参阅 tcp_retries2。
RFC 1122 建议至少重传 3 次,这是默认值。
- tcp_retries2 - 整数
此值影响活动的 TCP 连接的超时时间,当 RTO 重传仍然未被确认时。给定值 N,假设的 TCP 连接在初始 RTO 为 TCP_RTO_MIN 的情况下遵循指数退避,在第 (N+1) 个 RTO 之前将重传 N 次,然后终止连接。
默认值 15 会产生 924.6 秒的假设超时时间,并且是有效超时的下限。TCP 将在第一个超过假设超时的 RTO 时有效超时。
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。使用 SO_RCVBUF 调用 setsockopt() 会禁用该套接字的接收缓冲区大小的自动调整,在这种情况下,将忽略此值。默认值:介于 131072 和 6MB 之间,具体取决于 RAM 大小。
- tcp_sack - 布尔值
启用选择性确认 (SACK)。
- 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 积压队列溢出时发送同步 Cookie。这是为了防止常见的“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 程序通常应用于定义选择活动侦听器的策略。否则,仅当启用此选项时,内核才会随机选择一个活动的侦听器。
请注意,具有不同设置的侦听器之间的迁移可能会导致应用程序崩溃。假设迁移从侦听器 A 发生到 B,并且只有 B 启用了 TCP_SAVE_SYN。B 无法读取从 A 迁移的请求中的 SYN 数据。要避免这种情况,请在 eBPF 程序类型中通过返回 SK_DROP 来取消迁移,或者禁用此选项。
默认值:0
- tcp_fastopen - 整数
启用 TCP 快速打开 (RFC7413) 以在打开 SYN 数据包中发送和接受数据。
客户端支持由标志 0x1 启用(默认情况下启用)。然后,客户端必须使用带有 MSG_FASTOPEN 标志的 sendmsg() 或 sendto(),而不是 connect(),以在 SYN 中发送数据。
服务器支持由标志 0x2 启用(默认情况下禁用)。然后,为所有侦听器启用另一个标志 (0x400),或通过 TCP_FASTOPEN 套接字选项为各个侦听器启用,选项值是 syn 数据积压的长度。
这些值(位图)是
0x1
(客户端)
启用客户端在打开 SYN 中发送数据。
0x2
(服务器)
启用服务器支持,即允许接受 SYN 数据包中的数据,并在三次握手完成之前将其传递给应用程序。
0x4
(客户端)
在打开 SYN 中发送数据,而不管 Cookie 的可用性如何,并且不使用 Cookie 选项。
0x200
(服务器)
在没有任何 Cookie 选项存在的情况下接受 SYN 中的数据。
0x400
(服务器)
默认情况下启用所有侦听器以支持快速打开,而无需显式的 TCP_FASTOPEN 套接字选项。
默认值:0x1
请注意,只有在启用基本支持(分别为 0x1 和 0x2)时,额外的客户端或服务器功能才有效。
- tcp_fastopen_blackhole_timeout_sec - 整数
当发生 TFO 防火墙黑洞问题时,禁用活动 TCP 套接字上的快速打开的初始时间段(以秒为单位)。当在重新启用快速打开后检测到更多黑洞问题时,此时间段将呈指数增长,并在黑洞问题消失时重置为初始值。0 以禁用黑洞检测。
默认情况下,设置为 0(禁用该功能)。
- tcp_fastopen_key - 以逗号分隔的 32 位十六进制整数列表
该列表由主密钥和可选的备份密钥组成。主密钥用于创建和验证 Cookie,而可选的备份密钥仅用于验证 Cookie。备份密钥的目的是在密钥轮换时最大限度地提高 TFO 验证。
如果将 tcp_fastopen sysctl 设置为 0x400(见上文),或者设置了 TCP_FASTOPEN setsockopt() optname 并且之前没有通过 sysctl 配置密钥,则内核可能会配置一个随机选择的主密钥。如果通过使用 TCP_FASTOPEN_KEY optname 的 setsockopt() 配置密钥,则将使用这些每个套接字的密钥,而不是通过 sysctl 指定的任何密钥。
密钥指定为 4 个 8 位十六进制整数,它们之间用“-”分隔,格式为:xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx。可以省略前导零。可以通过逗号分隔来指定主密钥和备用密钥。如果只指定一个密钥,它将成为主密钥,并且任何先前配置的备用密钥都将被删除。
- tcp_syn_retries - 整数
主动 TCP 连接尝试的初始 SYN 重传次数。不应高于 127。默认值为 6,对应于 67 秒(当 tcp_syn_linear_timeouts = 4 时)到最后一次重传,当前初始 RTO 为 1 秒。这样,主动 TCP 连接尝试的最终超时将发生在 131 秒后。
- tcp_timestamps - 整数
启用 RFC1323 中定义的时间戳。
0: 禁用。
1: 启用 RFC1323 中定义的时间戳,并为每个连接使用随机偏移量,而不是仅使用当前时间。
2: 类似于 1,但不使用随机偏移量。
默认值:1
- tcp_min_tso_segs - 整数
每个 TSO 帧的最小分段数。
自 linux-3.12 起,TCP 根据流速自动调整 TSO 帧的大小,而不是填充 64KB 的数据包。对于特定用途,可以强制 TCP 构建大的 TSO 帧。请注意,如果可用窗口太小,TCP 堆栈可能会拆分过大的 TSO 数据包。
默认值:2
- tcp_tso_rtt_log - 整数
基于 min_rtt 调整 TSO 数据包大小
从 linux-5.18 开始,可以针对具有较小 RTT 的流调整 TCP 自动调整大小功能。
旧的自动调整大小功能是将 pacing 预算分割为每秒发送 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
- 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 帧之间进行选择。
默认值:3
- tcp_tw_reuse - 整数
在协议的角度来看安全的情况下,允许为新的连接重用 TIME-WAIT 套接字。
0 - 禁用
1 - 全局启用
2 - 仅为环回流量启用
如果没有技术专家的建议/请求,则不应更改此设置。
默认值:2
- tcp_window_scaling - 布尔值
启用 RFC1323 中定义的窗口缩放。
- tcp_shrink_window - 布尔值
这会更改 TCP 接收窗口的计算方式。
RFC 7323 第 2.4 节指出,在某些情况下可以提供收缩的窗口,并且 TCP 实现必须确保它们按照 RFC 1122 中的规定处理收缩的窗口。
0 - 禁用。窗口永远不会收缩。
- 1 - 启用。窗口在必要时会收缩,以保持在
自动调整(sk_rcvbuf)设置的内存限制内。这仅在非零接收窗口缩放因子也有效时才会发生。
默认值:0
- tcp_wmem - 包含 3 个整数的向量:最小值、默认值、最大值
最小值:为 TCP 套接字的发送缓冲区保留的内存量。每个 TCP 套接字由于其诞生而有权使用它。
默认值:4K
默认值:TCP 套接字使用的发送缓冲区的初始大小。此值将覆盖其他协议使用的 net.core.wmem_default。
它通常低于 net.core.wmem_default。
默认值:16K
最大值:允许用于 TCP 套接字的自动调整发送缓冲区的最大内存量。此值不会覆盖 net.core.wmem_max。使用 SO_SNDBUF 调用 setsockopt() 会禁用该套接字的发送缓冲区大小的自动调整,在这种情况下,此值将被忽略。
默认值:64K 到 4MB 之间,具体取决于 RAM 大小。
- tcp_notsent_lowat - 无符号整数
TCP 套接字可以通过 TCP_NOTSENT_LOWAT 套接字选项控制其写入队列中未发送的字节数。如果未发送的字节数低于每个套接字的值,并且写入队列未满,则 poll()/select()/epoll() 会报告 POLLOUT 事件。如果达到限制,sendmsg() 也不会添加新的缓冲区。
此全局变量控制不使用 TCP_NOTSENT_LOWAT 的套接字的未发送数据量。对于这些套接字,对全局变量的更改会立即生效。
默认值:UINT_MAX (0xFFFFFFFF)
- tcp_workaround_signed_windows - 布尔值
如果设置,则假设未收到窗口缩放选项意味着远程 TCP 已损坏,并将窗口视为有符号量。如果取消设置,则假设即使我们没有收到来自他们的窗口缩放选项,远程 TCP 也没有损坏。
默认值:0
- tcp_thin_linear_timeouts - 布尔值
启用对细流动态触发线性超时。如果设置,则在超时重传时执行检查,以确定流是否为细流(飞行中的数据包少于 4 个)。只要发现该流是细流,就可以执行最多 6 个线性超时,然后再启动指数退避模式。这可以提高非攻击性细流(通常被认为是时间相关的)的重传延迟。有关细流的更多信息,请参阅 细流和 TCP。
默认值:0
- tcp_limit_output_bytes - 整数
控制每个 tcp 套接字的 TCP 小队列限制。TCP 批量发送器倾向于增加飞行中的数据包,直到收到丢失通知。通过 SNDBUF 自动调整,这可能会导致本地机器上排队大量的数据包(例如:qdiscs、CPU 后备或设备),从而损害典型 pfifo_fast qdiscs 的其他流的延迟。tcp_limit_output_bytes 限制 qdisc 或设备上的字节数,以减少人为的 RTT/cwnd 并减少缓冲区膨胀。
默认值:1048576 (16 * 65536)
- tcp_challenge_ack_limit - 整数
限制每秒发送的 Challenge ACK 的数量,如 RFC 5961(提高 TCP 对盲窗口内攻击的鲁棒性)中建议的那样。请注意,这种每个 netns 的速率限制可能会允许一些侧通道攻击,并且可能不应启用。TCP 堆栈无论如何都会实现每个 TCP 套接字的限制。默认值:INT_MAX(无限制)
- tcp_ehash_entries - 整数
显示当前网络命名空间中 TCP 套接字的哈希桶数。
负值表示网络命名空间不拥有其哈希桶,而是共享初始网络命名空间的哈希桶。
- tcp_child_ehash_entries - 整数
控制子网络命名空间中 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(保护性负载均衡)。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 认为连接是“乒乓”(请求-响应)连接(延迟确认可以提供好处)之前,必须发送的估计数据回复的数量,该数量是针对估计的传入数据请求的。
此阈值默认为 1,但某些应用程序可能需要更高的阈值才能获得最佳性能。
可能的值:1 - 255
默认值:1
- tcp_rto_min_us - 整数
最小 TCP 重传超时时间(以微秒为单位)。请注意,rto_min 路由选项对此设置的配置具有最高优先级,其次是 TCP_BPF_RTO_MIN 套接字选项,最后是此 tcp_rto_min_us sysctl。
建议的做法是使用小于或等于 200000 微秒的值。
可能的值:1 - INT_MAX
默认值:200000
UDP 变量¶
- udp_l3mdev_accept - 布尔值
启用此选项允许“全局”绑定套接字跨 L3 主域(例如,VRF)工作,无论数据包源自哪个 L3 域,都可以接收数据包。仅当内核编译时使用了 CONFIG_NET_L3_MASTER_DEV 时才有效。
默认值:0(禁用)
- udp_mem - 3 个整数的向量:最小、压力、最大
所有 UDP 套接字允许排队的页面数。
最小:所有 UDP 套接字允许排队的页面数。
压力:引入此值是为了遵循 tcp_mem 的格式。
最大:引入此值是为了遵循 tcp_mem 的格式。
默认值在启动时根据可用内存量计算得出。
- udp_rmem_min - 整数
在合理范围内,UDP 套接字使用的最小接收缓冲区大小。每个 UDP 套接字都能够使用此大小来接收数据,即使 UDP 套接字的总页数超过 udp_mem 压力。单位是字节。
默认值:4K
- udp_wmem_min - 整数
UDP 没有发送内存记账,因此此可调参数无效。
- udp_hash_entries - 整数
显示当前网络命名空间中 UDP 套接字的哈希桶数。
负值表示网络命名空间不拥有其哈希桶,而是共享初始网络命名空间的哈希桶。
- 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 - 以逗号分隔的范围列表
指定为已知的第三方应用程序保留的端口。这些端口不会被自动端口分配使用(例如,当使用端口号 0 调用 connect() 或 bind() 时)。显式端口分配行为不变。
输入和输出使用的格式都是以逗号分隔的范围列表(例如,“1,2-4,10-10”表示端口 1、2、3、4 和 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)
- 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 header)/(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 中所述,可以通过 proxy_arp 允许这些主机通过上游路由器进行通信。无需与 proxy_arp 一起使用。
这项技术有不同的名称
在 RFC 3069 中,它称为 VLAN 聚合。思科和 Allied Telesyn 称之为专用 VLAN。惠普称之为源端口过滤或端口隔离。爱立信称之为 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 - 布尔值
在路由时,不要将环回地址视为 martian 源地址或目标地址。这使 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 包含在反向路径路由查找中。当 fwmark 用于在两个方向上路由流量时,这允许 rp_filter 发挥作用。
此设置还会影响在为 ICMP 回复执行源地址选择,或确定为 IPOPT_TS_TSANDADDR 和 IPOPT_RR IP 选项存储的地址时,fwmark 的利用率。
使用 conf/{all,interface}/src_valid_mark 的最大值。
默认值为 0。
- arp_filter - 布尔值
1 - 允许您在同一子网上拥有多个网络接口,并根据内核是否会从该接口路由来自 ARP 的 IP 的数据包(因此您必须使用基于源的路由才能使其工作),来回答每个接口的 ARP。换句话说,它允许控制哪些卡(通常是 1 个)将响应 arp 请求。
0 -(默认)内核可以使用来自其他接口的地址响应 arp 请求。这似乎是错误的,但通常是有意义的,因为它增加了成功通信的机会。IP 地址由 Linux 上的完整主机拥有,而不是由特定的接口拥有。仅对于负载平衡等更复杂的设置,此行为才会导致问题。
如果至少一个 conf/{all,interface}/arp_filter 设置为 TRUE,则将为接口启用 arp_filter,否则将禁用
- arp_announce - 整数
定义在接口上发送的 ARP 请求中通告 IP 数据包的本地源 IP 地址的不同限制级别
0 -(默认)使用配置在任何接口上的任何本地地址
1 - 尽量避免使用不在目标接口子网内的本地地址。当通过此接口可达的目标主机要求 ARP 请求中的源 IP 地址属于接收接口上配置的逻辑网络时,此模式很有用。当我们生成请求时,我们会检查包含目标 IP 的所有子网,如果源地址来自此类子网,则保留源地址。如果没有此类子网,我们将根据级别 2 的规则选择源地址。
2 - 始终使用此目标的最佳本地地址。在此模式下,我们忽略 IP 数据包中的源地址,并尝试选择我们首选的与目标主机通信的本地地址。通过查找出站接口上包含目标 IP 地址的所有子网上的主 IP 地址来选择此类本地地址。如果找不到合适的本地地址,我们将选择出站接口或所有其他接口上的第一个本地地址,希望收到我们的请求的回复,有时甚至不在乎我们宣布的源 IP 地址是什么。
使用 conf/{all,interface}/arp_announce 中的最大值。
增加限制级别会增加从已解析目标接收答案的机会,而降低级别会宣布更多有效的发送者信息。
- arp_ignore - 整数
定义用于发送回复以响应接收到的解析本地目标 IP 地址的 ARP 请求的不同模式
0 - (默认):回复在任何接口上配置的任何本地目标 IP 地址
1 - 仅当目标 IP 地址是入站接口上配置的本地地址时才回复
2 - 仅当目标 IP 地址是入站接口上配置的本地地址,并且与发送者的 IP 地址都来自此接口上的同一子网时才回复
3 - 不回复使用主机范围配置的本地地址,仅回复全局和链路地址的解析
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
更新者
Andi Kleen ak@muc.de
Nicolas Delon delon.nicolas@wanadoo.fr
/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 - 整数
控制流标签反射。需要 Path MTU Discovery 在任何广播环境中与等价多路径路由一起工作。请参阅 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(第 3 层)
可能的值
0 - 第 3 层(源地址和目标地址加上流标签)
1 - 第 4 层(标准 5 元组)
2 - 第 3 层或内部第 3 层(如果存在)
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 回复数据包的 fwmark(例如,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。
默认情况下,不接受这些 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):
默认情况下,假定为主机行为。这意味着
邻居通告中未设置 IsRouter 标志。
如果 accept_ra 为 TRUE(默认值),则发送路由器请求。
如果 accept_ra 为 TRUE(默认值),则接受路由器通告(并执行自动配置)。
如果 accept_redirects 为 TRUE(默认值),则接受重定向。
TRUE (1):
如果启用本地转发,则假定为路由器行为。这意味着与上述情况完全相反
邻居通告中设置了 IsRouter 标志。
除非 accept_ra 为 2,否则不会发送路由器请求。
除非 accept_ra 为 2,否则会忽略路由器通告。
忽略重定向。
默认值:如果禁用全局转发(默认值),则为 0(禁用),否则为 1(启用)。
- hop_limit - 整数
要设置的默认跳数限制。
默认值:64
- mtu - 整数
默认最大传输单元
默认值:1280(IPv6 要求最小值)
- ip_nonlocal_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)时,它将在给定接口上动态创建链路本地地址,并在必要时启动重复地址检测 (DAD)。
当此值从 0 更改为 1(正在禁用 IPv6)时,它将动态删除给定接口上的所有地址和路由。从现在开始,将无法向选定的接口添加地址/路由。
- accept_dad - INTEGER(整数)
是否接受 DAD(重复地址检测)。
0
禁用 DAD
1
启用 DAD(默认)
2
启用 DAD,如果发现基于 MAC 的重复链路本地地址,则禁用 IPv6 操作。
给定接口上的 DAD 操作和模式将根据 conf/{all,interface}/accept_dad 的最大值进行选择。
- force_tllao - BOOLEAN(布尔值)
即使在响应单播邻居请求时,也启用发送目标链路层地址选项。
默认值:FALSE
引用 RFC 2461 第 4.4 节,目标链路层地址
“为了避免当对等节点没有缓存条目来返回邻居通告消息时,无限的邻居请求“递归”,必须在多播请求中包含该选项。在响应单播请求时,可以省略该选项,因为请求的发送者拥有正确的链路层地址;否则,它将无法首先发送单播请求。但是,在这种情况下包含链路层地址几乎不会增加开销,并且消除了发送者在收到对先前请求的响应之前删除缓存的链路层地址的潜在竞争条件。”
- ndisc_notify - BOOLEAN(布尔值)
定义地址和设备更改的通知模式。
0 - (默认): 不执行任何操作
1 - 当设备启动或硬件地址更改时,生成未经请求的邻居通告。
- ndisc_tclass - INTEGER(整数)
发送 IPv6 邻居发现(路由器请求、路由器通告、邻居请求、邻居通告、重定向)消息时默认使用的 IPv6 流量类别。这 8 位可以解释为 6 个高位保存 DSCP 值,2 个低位表示 ECN(您可能希望将其清除)。
0 - (默认)
- ndisc_evict_nocarrier - BOOLEAN(布尔值)
在 NOCARRIER 事件时清除邻居发现表。此选项对于无线设备非常重要,在同一网络上的接入点之间漫游时,不应清除邻居发现缓存。在大多数情况下,这应保持为默认值 (1)。
1 - (默认):在 NOCARRIER 事件时清除邻居发现缓存。
0 - 在 NOCARRIER 事件时不要清除邻居发现缓存。
- mldv1_unsolicited_report_interval - INTEGER(整数)
下一次未经请求的 MLDv1 报告重传的间隔(以毫秒为单位)。
默认值:10000(10 秒)
- mldv2_unsolicited_report_interval - INTEGER(整数)
下一次未经请求的 MLDv2 报告重传的间隔(以毫秒为单位)。
默认值:1000(1 秒)
- force_mld_version - INTEGER(整数)
0 - (默认) 不强制执行 MLD 版本,允许 MLDv1 回退
1 - 强制使用 MLD 版本 1
2 - 强制使用 MLD 版本 2
- suppress_frag_ndisc - INTEGER(整数)
控制 RFC 6980(IPv6 邻居发现中 IPv6 分片的安全隐患)的行为
1 - (默认) 丢弃分片的邻居发现数据包
0 - 允许分片的邻居发现数据包
- optimistic_dad - BOOLEAN(布尔值)
是否执行乐观重复地址检测 (RFC 4429)。
0:禁用(默认)
1:启用
如果至少将 conf/{all,interface}/optimistic_dad 之一设置为 1,则将启用该接口的乐观重复地址检测,否则将禁用该检测。
- use_optimistic - BOOLEAN(布尔值)
如果启用,则在选择源地址时不将乐观地址归类为已弃用。在源地址选择算法中的其他排名约束下,仍将在乐观地址之前选择首选地址。
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 - INTEGER(整数)
定义如何生成链路本地地址和自动配置地址。
0
基于 EUI64 生成地址(默认)
1
不生成链路本地地址,将 EUI64 用于从自动配置生成的地址
2
使用 stable_secret 中的密钥生成稳定的隐私地址 (RFC7217)
3
生成稳定的隐私地址,如果未设置则使用随机密钥
- drop_unicast_in_l2_multicast - 布尔值
丢弃在链路层多播(或广播)帧中接收到的任何单播 IPv6 数据包。
默认情况下,此设置处于关闭状态。
- drop_unsolicited_na - BOOLEAN(布尔值)
丢弃所有未经请求的邻居通告,例如,如果网络上存在已知良好的 NA 代理,则无需使用此类帧(或者在 802.11 的情况下,必须不使用以防止攻击)。
默认情况下,此设置处于关闭状态。
- accept_untracked_na - INTEGER(整数)
定义接受来自邻居缓存中不存在的设备的邻居通告的行为
0 - (默认) 不接受未经请求和未跟踪的邻居通告。
1 - 在收到带有指定目标链路层地址选项的邻居通告(无论是请求的还是未经请求的)时,为路由器添加一个新的处于 STALE 状态的邻居缓存条目,如果广告的 IPv6 地址不存在任何邻居条目。如果没有此旋钮,则会默默忽略为未跟踪的地址(邻居缓存中不存在)接收到的 NA。
这符合 RFC9131 中记录的路由器端行为。
此优先级低于 drop_unsolicited_na。
这将优化由直接连接的主机发起的初始链路外通信的返回路径,方法是确保开启此设置的第一跳路由器不必缓冲初始返回数据包来执行邻居请求。前提是主机配置为在接口启动时发送未经请求的邻居通告。应将此设置与主机上的 ndisc_notify 设置结合使用,以满足此前提。
2 - 扩展选项 (1),仅当源 IP 地址与接收邻居通告的接口上配置的地址位于同一子网时,才添加新的邻居缓存条目。
- enhanced_dad - BOOLEAN(布尔值)
根据 RFC7527,在用于重复地址检测的 IPv6 邻居请求消息中包含随机数选项。只有当随机数不同时,收到的 DAD NS 才会发出重复地址的信号。这避免了由于我们发送的 NS 消息的环回而导致的任何重复的误报。除非将 conf/{all,interface}/enhanced_dad 都设置为 FALSE,否则将在接口上发送随机数选项。
默认值:TRUE
icmp/*
:¶
- ratelimit - INTEGER(整数)
限制发送 ICMPv6 消息的最大速率。
0 表示禁用任何限制,否则表示响应之间的最小间隔(以毫秒为单位)。
默认值:1000
- ratemask - 逗号分隔的范围列表
对于与 ratemask 中的范围匹配的 ICMPv6 消息类型,请根据 ratelimit 参数限制消息的发送。
用于输入和输出的格式都是逗号分隔的范围列表(例如,对于 ICMPv6 消息类型 0 到 127 和 129,为“0-127,129”)。写入该文件将清除所有以前的 ICMPv6 消息类型范围,并使用输入更新当前列表。
有关 ICMPv6 消息类型的数值,请参阅:https://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml,例如,回显请求为 128,回显回复为 129。
默认值:0-1,3-127(限制 ICMPv6 错误的速率,除了“数据包太大”之外)
- echo_ignore_all - BOOLEAN(布尔值)
如果设置为非零值,则内核将忽略通过 IPv6 协议发送给它的所有 ICMP ECHO 请求。
默认值:0
- echo_ignore_multicast - BOOLEAN(布尔值)
如果设置为非零值,则内核将忽略通过 IPv6 协议通过多播发送给它的所有 ICMP ECHO 请求。
默认值:0
- echo_ignore_anycast - BOOLEAN(布尔值)
如果设置为非零值,则内核将忽略通过 IPv6 协议发送给它的所有目标为任播地址的 ICMP ECHO 请求。
默认值:0
- error_anycast_as_unicast - BOOLEAN(布尔值)
如果设置为 1,则内核将响应 ICMP 错误,这些错误是由通过 IPv6 协议发送给它的目标为任播地址的请求引起的,本质上将任播视为单播。
默认值:0
- xfrm6_gc_thresh - INTEGER(整数)
(自 linux-4.14 起已过时)我们将开始为 IPv6 目标缓存条目进行垃圾回收的阈值。在两倍于此值时,系统将拒绝新的分配。
IPv6 更新者:Pekka Savola <pekkas@netcore.fi> YOSHIFUJI Hideaki / USAGI 项目 <yoshfuji@linux-ipv6.org>
/proc/sys/net/bridge/* 变量:¶
- bridge-nf-call-arptables - BOOLEAN(布尔值)
1:将桥接的 ARP 流量传递到 arptables 的 FORWARD 链。
0:禁用此功能。
默认值:1
- bridge-nf-call-iptables - BOOLEAN(布尔值)
1:将桥接的 IPv4 流量传递到 iptables 的链。
0:禁用此功能。
默认值:1
- bridge-nf-call-ip6tables - BOOLEAN(布尔值)
1:将桥接的 IPv6 流量传递到 ip6tables 的链。
0:禁用此功能。
默认值:1
- bridge-nf-filter-vlan-tagged - BOOLEAN(布尔值)
1:将桥接的 vlan 标记的 ARP/IP/IPv6 流量传递到 {arp,ip,ip6}tables。
0:禁用此功能。
默认值:0
- bridge-nf-filter-pppoe-tagged - BOOLEAN(布尔值)
1:将桥接的 pppoe 标记的 IP/IPv6 流量传递到 {ip,ip6}tables。
0:禁用此功能。
默认值:0
- bridge-nf-pass-vlan-input-dev - BOOLEAN(布尔值)
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 - BOOLEAN(布尔值)
启用或禁用 RFC5061 中指定的动态地址重新配置 (ADD-IP) 功能的扩展。此扩展提供了动态添加和删除 SCTP 关联的新地址的功能。
1:启用扩展。
0:禁用扩展。
默认值:0
- pf_enable - INTEGER(整数)
启用或禁用 pf(pf 是潜在失败的简称)状态。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 套接字选项中 PF 路径状态的公开。当未设置时,不会发送带有 SCTP_ADDR_PF 状态的 SCTP_PEER_ADDR_CHANGE 事件,并且可以通过 SCTP_GET_PEER_ADDR_INFO 套接字选项获取 SCTP_PF 状态的传输信息;当启用时,对于变为 SCTP_PF 状态的传输,将发送 SCTP_PEER_ADDR_CHANGE 事件,并且可以通过 SCTP_GET_PEER_ADDR_INFO 套接字选项获取 SCTP_PF 状态的传输信息;当禁用时,不会发送 SCTP_PEER_ADDR_CHANGE 事件,并且当尝试通过 SCTP_GET_PEER_ADDR_INFO 套接字选项获取 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 - 整数
主路径切换最大重传 (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 块之间的间隔(以毫秒为单位)。这些块以指定的间隔在空闲路径上发送,以探测 2 个关联之间给定路径的状态。
默认值:30000
- sack_timeout - 整数
实现将等待发送 SACK 的时间量(以毫秒为单位)。
默认值:200
- 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 开始调节内存使用量。
压力:引入此值是为了遵循 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 更改每个套接字/asoc/传输的值。有关详细信息,请参阅 RFC6951。
请注意,当连接到远程服务器时,客户端应将其设置为对等服务器上的 UDP 隧道套接字正在侦听的端口,并且客户端上的本地 UDP 隧道套接字也必须启动。在服务器上,它将从传入数据包的源端口获取 encap_port。
默认值:0
- plpmtud_probe_interval - 整数
PLPMTUD 探测计时器的间隔时间(以毫秒为单位),配置该计时器在此时间段后过期,以接收对探测数据包的确认。这也是完成探测搜索时当前 pmtu 的探测之间的间隔时间。
当设置为 0 时,PLPMTUD 将被禁用,并且其其他值必须 >= 5000。
默认值:0
- reconf_enable - 布尔值
启用或禁用 RFC6525 中指定的流重配置功能的扩展。此扩展提供了“重置”流的能力,它包括“传出/传入 SSN 重置”、“SSN/TSN 重置”和“添加传出/传入流”的参数。
1:启用扩展。
0:禁用扩展。
默认值:0
- intl_enable - 布尔值
启用或禁用 RFC8260 中指定的用户消息交错功能的扩展。此扩展允许交错在不同流上发送的用户消息。如果对等方也支持此功能,则启用此功能后,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