好的,有很多参数可以修改。我们尝试列出所有这些参数。部分文档也记录在 Documentation/ip-sysctl.txt 中。
其中一些设置具有不同的默认值,具体取决于您在编译内核时是否对“配置为路由器而不是主机”回答了“是”。
作为一个通用说明,大多数速率限制功能在环回接口上不起作用,所以不要在本地测试它们。限制以“jiffies”为单位提供,并使用前面提到的令牌桶过滤器强制执行。
内核有一个内部时钟,它以每秒“HZ”个滴答(或“jiffies”)的速度运行。在 Intel 上,“HZ”通常为 100。因此,将 *_rate 文件设置为,例如 50,将允许每秒 2 个数据包。令牌桶过滤器也被配置为允许最多 6 个数据包的突发,如果已经积累了足够的令牌。
以下列表中的几个条目是从 /usr/src/linux/Documentation/networking/ip-sysctl.txt 中复制的,该文件由 Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> 和 Andi Kleen <ak@muc.de> 编写。
如果内核判定无法传递数据包,它将丢弃该数据包,并向数据包的源地址发送 ICMP 通知以说明此情况。
完全不响应 echo 数据包。请不要默认设置此项,但如果您被用作 DoS 攻击中的中继,它可能会很有用。
如果您 ping 网络的广播地址,所有主机都应该响应。这构成了一个绝佳的拒绝服务工具。将此项设置为 1 以忽略这些广播消息。
向任何一个目标地址发送 echo 回复的速率。
设置此项以忽略由网络中的主机对发送到它们认为的广播地址的帧反应不良而引起的 ICMP 错误。
一个相对未知的 ICMP 消息,它是在响应具有损坏的 IP 或 TCP 头的错误数据包时发送的。您可以使用此文件控制其发送速率。
这是 traceroute 中“Solaris 中间星号”的著名原因。限制发送的 ICMP Time Exceeded 消息的数量。
主机上监听 igmp (多播) 套接字的最大数量。FIXME:这是真的吗?
FIXME:添加关于 inet peer 存储的简要说明?垃圾回收过程之间的最小间隔。此间隔在池上内存压力较低(或不存在)时生效。以 jiffies 为单位测量。
垃圾回收过程之间的最小间隔。此间隔在池上内存压力较高时生效。以 jiffies 为单位测量。
条目的最大生存时间(time-to-live)。如果池上没有内存压力(即,当池中条目的数量非常小时),未使用的条目将在经过此时间段后过期。以 jiffies 为单位测量。
条目的最小生存时间(time-to-live)。应足以覆盖重组端的片段生存时间(fragment time-to-live)。如果池大小小于 inet_peer_threshold,则保证此最小生存时间。以 jiffies 为单位测量。
INET peer 存储的近似大小。从该阈值开始,条目将被积极地丢弃。此阈值还决定条目的生存时间和垃圾回收过程之间的时间间隔。条目越多,生存时间越短,GC 间隔越短。
如果主机通过 RARP、BOOTP、DHCP 或类似的机制接收到其 IP 配置,则此文件包含数字 1。否则为零。
数据包的生存时间(Time To Live)。设置为安全的 64。如果您的网络很大,请提高它。不要为了好玩而这样做 - 路由环路会造成更大的损害。在某些情况下,您甚至可以考虑降低它。
如果您使用按需拨号和动态接口地址,则需要设置此项。一旦您的按需接口启动,任何尚未收到回复的本地 TCP 套接字都将被重新绑定以具有正确的地址。这解决了启动您的接口本身的连接不起作用,但第二次尝试却起作用的问题。
内核是否应尝试转发数据包。默认情况下关闭。
传出连接的本地端口范围。实际上默认情况下非常小,1024 到 4999。
如果您想禁用路径 MTU 发现(一种确定路径上可能的最大传输单元的技术),请设置此项。另请参阅 Cookbook 章节中关于路径 MTU 发现的部分。
用于重组 IP 片段的最大内存。当为此目的分配了 ipfrag_high_thresh 字节的内存时,片段处理程序将丢弃数据包,直到达到 ipfrag_low_thresh。
如果您希望您的应用程序能够绑定到不属于您系统上的设备的地址,请设置此项。当您的机器位于非永久性(甚至动态)链接上时,这可能很有用,因此您的服务可以在您的链接断开时启动并绑定到特定地址。
用于重组 IP 片段的最小内存。
将 IP 片段保存在内存中的时间,以秒为单位。
一个布尔标志,控制大量传入连接下的行为。启用后,当服务过载时,这将导致内核主动发送 RST 数据包。
如果套接字由我们这边关闭,则将其保持在 FIN-WAIT-2 状态的时间。对等方可能已损坏并且永远不会关闭其端,甚至可能意外死亡。默认值为 60 秒。2.2 中常用的值是 180 秒,您可以恢复它,但请记住,如果您的机器即使是负载不足的 WEB 服务器,您也可能面临用数千个死套接字溢出内存的风险,FIN-WAIT-2 套接字不如 FIN-WAIT-1 套接字危险,因为它们最多消耗 1.5K 的内存,但它们往往存活更长时间。参见 tcp_max_orphans。
启用 keepalive 时,TCP 发送 keepalive 消息的频率。默认值:2 小时。
当探测未被确认时,探测重新传输的频率。默认值:75 秒。
TCP 将发送多少个 keepalive 探测,直到它确定连接已断开。默认值:9。与 tcp_keepalive_intvl 相乘,这给出了在发送 keepalive 后链接可能无响应的时间。
系统中持有的未附加到任何用户文件句柄的 TCP 套接字的最大数量。如果超过此数量,孤立连接将被立即重置并打印警告。此限制的存在只是为了防止简单的 DoS 攻击,您_绝不能_依赖此限制或人为地降低此限制,而是应该增加它(可能在增加安装的内存之后),如果网络条件需要超过默认值,并调整网络服务以更积极地逗留和终止此类状态。让我再次提醒您:每个孤立套接字最多消耗 ~64K 的不可交换内存。
在终止由我们这边关闭的 TCP 连接之前,重试多少次。默认值 7 对应于 ~50 秒-16 分钟,具体取决于 RTO。如果您的机器是负载大的 WEB 服务器,您应该考虑降低此值,此类套接字可能会消耗大量资源。参见 tcp_max_orphans。
记住的连接请求的最大数量,这些请求仍然没有收到来自连接客户端的确认。对于内存超过 128Mb 的系统,默认值为 1024,对于低内存机器,默认值为 128。如果服务器遭受过载,请尝试增加此数量。警告!如果您使其大于 1024,最好将 include/net/tcp.h 中的 TCP_SYNQ_HSIZE 更改为保持 TCP_SYNQ_HSIZE*16<=tcp_max_syn_backlog 并重新编译内核。
系统同时持有的 timewait 套接字的最大数量。如果超过此数量,time-wait 套接字将被立即销毁并打印警告。此限制的存在只是为了防止简单的 DoS 攻击,您_绝不能_人为地降低此限制,而是应该增加它(可能在增加安装的内存之后),如果网络条件需要超过默认值。
与某些损坏的打印机的错误到错误的兼容性。在重传时尝试发送更大的数据包,以解决某些 TCP 堆栈中的错误。
在确定某些事情出错并且有必要向网络层报告此怀疑之前,重试多少次。最小 RFC 值为 3,它是默认值,对应于 ~3 秒-8 分钟,具体取决于 RTO。
在终止活动的 TCP 连接之前,重试多少次。RFC 1122 说限制应该超过 100 秒。这个数字太小了。默认值 15 对应于 ~13-30 分钟,具体取决于 RTO。
此布尔值启用对 RFC 1337 中描述的“tcp 中的 time-wait 刺杀危害”的修复。如果启用,这将导致内核丢弃 time-wait 状态的套接字的 RST 数据包。默认值:0
使用选择性 ACK,它可以用于指示丢失了特定的数据包 - 因此有助于快速恢复。
使用 TCP urg 指针字段的主机需求解释。大多数主机使用较旧的 BSD 解释,因此如果您启用此项,Linux 可能无法与它们正确通信。默认值:FALSE
内核在放弃新连接之前将发送的 SYN 数据包的数量。
为了打开连接的另一端,内核发送一个带有 piggybacked ACK 的 SYN,以确认之前收到的 SYN。这是三次握手的第 2 部分。此设置确定在内核放弃连接之前发送的 SYN+ACK 数据包的数量。
时间戳用于防止序列号回绕等。千兆位链接可能会重新遇到具有过时值的先前序列号,因为它属于上一代。时间戳将使其识别出这个“古老的数据包”。
启用快速回收 TIME-WAIT 套接字。默认值为 1。未经技术专家建议/请求,不应更改此值。
TCP/IP 通常允许最大 65535 字节的窗口。对于非常快速的网络,这可能不够。窗口缩放选项允许接近千兆字节的窗口,这对于高带宽*延迟乘积很有用。
DEV 可以代表真实接口,也可以代表 'all' 或 'default'。Default 也更改尚未创建的接口的设置。
如果路由器确定您将其用于错误的目的(即,它需要在同一接口上重新发送您的数据包),它将向我们发送 ICMP 重定向。然而,这是一个轻微的安全风险,因此您可能希望关闭它,或使用安全重定向。
现在不太常用了。您曾经可以给数据包一个它应该在其路径上访问的 IP 地址列表。可以使 Linux 遵守此 IP 选项。
接受源地址为 0.b.c.d 且目标地址不是此主机的本地数据包。据推测,BOOTP 中继守护程序将捕获并转发此类数据包。
默认值为 0,因为此功能尚未实现(内核版本 2.2.12)。
在此接口上启用或禁用 IP 转发。
请参阅关于 反向路径过滤 的章节。
我们是否在此接口上进行多播转发
如果将其设置为 1,则此接口将响应内核具有路由的地址的 ARP 请求。在构建“ip 伪桥”时非常有用。启用此项之前,请务必确保您的网络掩码非常正确!还要注意,在其他地方提到的 rp_filter 也对 ARP 查询起作用!
请参阅关于 反向路径过滤 的章节。
仅接受默认网关列表中列出的网关的 ICMP 重定向消息。默认启用。
我们是否发送上述提到的重定向。
如果未设置,则内核不假设此设备上的不同子网可以直接通信。默认设置为 “yes”。
FIXME:填写此项
Dev 可以代表真实接口,也可以代表 'all' 或 'default'。Default 也更改尚未创建的接口的设置。
对邻居请求消息的应答的最大随机延迟,以 jiffies 为单位 (1/100 秒)。尚未实现(Linux 尚不支持任播)。
确定要发送到用户级 ARP 守护程序的请求数。使用 0 关闭。
用于计算 RFC2461 中指定的随机可达时间值的基值。
如果邻居可达,则首次探测的延迟。(参见 gc_stale_time)
确定检查过时 ARP 条目的频率。在 ARP 条目过时后,它将再次被解析(当 IP 地址迁移到另一台机器时很有用)。当 ucast_solicit 大于 0 时,它首先尝试直接向已知主机发送 ARP 数据包。当失败且 mcast_solicit 大于 0 时,将广播 ARP 请求。
仅当旧的 ARP/邻居条目至少有 locktime 年龄时,才用新的条目替换它。这可以防止 ARP 缓存抖动。
多播请求的最大重试次数。
在回答我们有代理 ARP 条目的 ARP 请求之前的最大时间(实际时间是随机 [0..proxytime])。在某些情况下,这用于防止网络泛洪。
延迟代理 arp 定时器的最大队列长度。(参见 proxy_delay)。
重传邻居请求消息之间的时间,以 jiffies 为单位 (1/100 秒) 表示。用于地址解析和确定邻居是否不可达。
单播请求的最大重试次数。
挂起的 arp 请求的最大队列长度 - 在 ARP 地址仍在解析时从其他层接受的数据包数量。
涵盖与服务质量相关主题的精装教科书。适合理解基本概念。
这些参数用于限制从路由代码写入内核日志的警告消息。error_cost 因子越高,写入的消息越少。Error_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。
这些参数用于限制从路由代码写入内核日志的警告消息。error_cost 因子越高,写入的消息越少。Error_burst 控制何时丢弃消息。默认设置将警告消息限制为每五秒一条。
写入此文件会导致刷新路由缓存。
用于控制路由缓存的垃圾回收算法的频率和行为的值。这对于执行故障转移可能很重要。至少在 gc_timeout 秒过去后,Linux 才会因为之前的路由已失效而跳到另一条路由。默认设置为 300,如果您希望实现快速故障转移,则可以降低它。
另请参阅 Ard van Breemen 的 这篇文章。
参见 /proc/sys/net/ipv4/route/gc_elasticity。
参见 /proc/sys/net/ipv4/route/gc_elasticity。
参见 /proc/sys/net/ipv4/route/gc_elasticity。
参见 /proc/sys/net/ipv4/route/gc_elasticity。
用于刷新路由缓存的延迟。
路由缓存的最大大小。一旦缓存达到此大小,旧条目将被清除。
FIXME:填写此项
用于刷新路由缓存的延迟。
FIXME:填写此项
FIXME:填写此项
确定是否应向特定主机发送更多 ICMP 重定向的因素。一旦达到负载限制或最大重定向数,将不再发送重定向。
参见 /proc/sys/net/ipv4/route/redirect_load。
重定向的超时时间。在此时间段之后,即使由于已达到负载或数量限制而停止发送重定向,也将再次发送重定向。