1、在 /proc/sys/net/ipv4/目录下,包含的是和 tcp/ip 协议相关的各种参数,下面我们就对这些网络参数加以详细的说明。 参数名 参数类型 参数值 (如无特别标注 ,内存类的单位为 byte,关于时间的单位为秒 ) 官方详细说明 (skylove 对该参数的个人心得或补充说明 ) ip_forward : BOOLEAN 0 - 关闭 (默认值 ) 非 0 值 - 打开 ip 转发 在网络本地接口之间转发数据报。该参数非常特殊,对该参数的修改将导致其它所有相关配置参数恢复其默认值 (对于 主机参阅 RFC1122,对于路由器参见 RFC1812)(在其他一些操作系统中 ,这个参
2、数不是 boolean 型 ,而是 INTEGER 型 ,设置为 0 为不转发 ,1 为根据接口情形决定是否转发 ,2 是始终转发 ) ip_default_ttl : INTEGER 默认值为 64 表示 IP 数据报的 Time To Live 值 (在网络传递中 ,每经过一 “跳 “,该值减少 1,当 ttl为 0的时候,丢弃该包 .该值越大 ,即在网络上可以经过的路由器设备的数量越多 ,但一个错误的包,也会越发浪费生存周期 .根据目前的实际情形而看,设置 为 32 已经足够普通网络访问Internet 的需求了 ) ip_no_pmtu_disc : BOOLEAN 默认值为 FALS
3、E(0) 关闭路径 MTU探测 (典型的瓶颈原理 ,一次成功的传输中 ,mtu是由网络上最 “窄 “的位置决定的 .如果 IP 层有一个数据报要传,而且数据的长度比链路层的 MTU 还大,那么 IP 层就需要进行分片( fragmentation),把数据报分成若干片,这样每一片都小于 MTU。 几种常见网络的 MTU 值 : 超通道 65535 16Mb/ s 令牌网 (IBM) 17914 4Mb/ s 令牌网 (IEEE 802.5) 4464 FDDI 4352 以太网 1500 IEEE 802.3/802.2 1492 X.25 576 点对点 (低延时 ) 296 ipfrag_
4、high_thresh : INTEGER 默认值为 262144 用来组装分段的 IP 包的最大内存量。两个文件分别表示用于重组 IP 分段的内存分配最低值和最高值,一旦达到最高内存分 配值,其它分段将被丢弃,直到达到最低内存(ipfrag_low_thresh 见下文 )分配值。 (根据我个人理解 ,就是达到最高后 ,就 “关门打狗 “,直到处理到最低值的时候才又开门放分段的 ip 包进来处理 .如果最高 /最低差距过小 , 很可能很快又达到限制又开始丢弃包 ;而设置过大 ,又会造成某段时间丢包时间持续过久 .因此需要适当地考虑 ,默认值中给出的最低 /最高比率值为 3/4.此外补充说明
5、, kernel 中 ,对内存的使用单位 ,都是以 byte 为单位的 .当 TCP 数据包传输发生错误时,开始碎片整理。有效的数据包保留在内存,同时损 坏的数据包被转发。我在 1G 内存的 NAT 机器上 ,分别设置最低为 262144,最高为 393216) ipfrag_low_thresh : INTEGER 默认值为 196608 参见 ipfrag_high_thresh。 ipfrag_time : INTEGER 默认值为 30 保存一个 IP 分片在内存中的时间。 inet_peer_threshold : INTEGER 默认值为 65664 INET 对端存储器某个合适值
6、,当超过该阀值条目将被丢弃。该阀值同样决定生 存时间以及废物收集通过的时间间隔。条目越多存活期越低 GC 间隔越短 (GC=Grabage Collection 废物收集 ?默认值 65664=65536 + 128 是怎么得来的呢 ?看 include/net/inetpeer.h struct inet_peer 的内容 ,是为了 IP ROUTE 更快 ,缓冲对方 IP 的信息 ,一个对方 IP 一个记录 .该值与 inet_peer_gc_maxtime inet_peer_gc_mintime inet_peer_maxttl inet_peer_minttl inet_peer_t
7、hreshold 参数都是用来控制这个 cache 的大小的。似乎这个 cache 消耗比较大 ,在 CU 上有朋友提到过在一个 26M 的嵌入式 Linux 中 ,这个 cache 就用到了 1M多内存 ) inet_peer_minttl : INTEGER 默认值为 120 条目的最低存活期。在重组端必须要有足够的碎片 (fragment)存活期。这个最低存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies 为单位测量。 (每次整理的 时候 ,会考虑小于 inet_peer_minttl 的 ip 条目一定保存 ,而大于 inet_peer_m
8、axttl时间设置的 ip 条目会被释放 ) inet_peer_maxttl : INTEGER 默认值为 600 条目的最大存活期。在此期限到达之后如果缓冲池没有耗尽压力的话 (例如缓冲池中的条目数目非常少 )不使用的条目将会超时。该值以 jiffies 为单位测量。 inet_peer_gc_mintime : INTEGER 默认值为 10 废物收集 (GC)通过的最短间隔。这个间隔 会影响到缓冲池中内存的高压力。 该值以 jiffies 为单位测量。 (如果长期不整理 ,会 cache 很多条目 ,而整理的时间太频繁 ,又会给系统造成压力 ,这个值就是确定最小整理周期间隔的 ) in
9、et_peer_gc_maxtime : INTEGER 默认值为 120 废物收集 (GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。 该值以 jiffies 为单位测量。 Jiffie: 内核使用的内部时间单位,在 i386 系统上大小为 1/100s,在Alpha 中为 1/1024S。在 /usr/include/asm/param.h 中的 HZ 定义有特定系统的值。 =TCP 参数 = tcp_syn_retries : INTEGER 默认值是 5 对于一个新建连接,内核要发送多少个 SYN 连接请求才决定放弃。不应该大于 255,默认值是 5,对应于 180 秒左右
10、时间。 (对于大负载而物理通信良好的网络而言 ,这个值偏高 ,可修改为 2.这个值仅仅是针对对外的连接 ,对进来的连接 ,是由 tcp_retries1 决定的 ) tcp_synack_retries : INTEGER 默认值是 5 对于远端的连接请求 SYN,内核会发送 SYN ACK 数据报,以确认收到上一个 SYN 连接请求包。这是所谓的三次握手 ( threeway handshake)机制的第二个步骤。这里决定内核在放弃连接之前所送出的 SYN+ACK 数目。不应该大于 255,默认值是 5,对应于 180 秒左右时间。(可以根据上面的 tcp_syn_retries 来决定这个
11、值 ) tcp_keepalive_time : INTEGER 默认值是 7200(2 小时 ) 当 keepalive 打开的情况下, TCP 发送 keepalive 消息的频率。 (由于目前网络攻击等因素 ,造成了利用这个进行的攻击很频繁 ,曾经也有 cu 的朋友提到过 ,说如果 2 边建立了连接 ,然后不发送任何数据或者 rst/fin 消息 ,那么持续的时间是不是就是 2 小时 ,空连接攻击 ? tcp_keepalive_time 就是预防此情形的 .我个人在做 nat 服务的时候的修改值为 1800 秒 ) tcp_keepalive_probes: INTEGER 默认值是
12、9 TCP 发送 keepalive 探测以确定 该连接已经断开的次数。 (注意 :保持连接仅在SO_KEEPALIVE 套接字选项被打开是才发送 .次数默认不需要修改 ,当然根据情形也可以适当地缩短此值 .设置为 5 比较合适 ) tcp_keepalive_intvl: INTEGER 默认值为 75 探测消息发送的频率,乘以 tcp_keepalive_probes 就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为 75 秒,也就是没有活动的连接将在大约 11 分钟以后将被丢弃。(对于普通应用来说 ,这个值有一些偏大 ,可以根据需要改小 .特别是 web 类服务器需 要改小该值
13、 ,15 是个比较合适的值 ) tcp_retries1 : INTEGER 默认值是 3 放弃回应一个 TCP 连接请求前需要进行多少次重试。 RFC 规定最低的数值是 3这也是默认值根据 RTO 的值大约在 3 秒 - 8 分钟之间。 (注意 :这个值同时还决定进入的 syn 连接 ) tcp_retries2 : INTEGER 默认值为 15 在丢弃激活 (已建立通讯状况 )的 TCP 连接之前需要进行多少次重试。默认值为 15,根据 RTO 的值来决定,相当于 13-30 分钟 (RFC1122 规定,必须 大于 100 秒 ).(这个值根据目前的网络设置 ,可以适当地改小 ,我的网
14、络内修改为了 5) tcp_orphan_retries : INTEGER 默认值是 7 在近端丢弃 TCP 连接之前要进行多少次重试。默认值是 7 个相当于 50 秒 - 16 分钟视 RTO 而定。如果您的系统是负载很大的 web 服务器那么也许需要降低该值这类 sockets 可能会耗费大量的资源。另外参的考 tcp_max_orphans 。 (事实上做 NAT 的时候 ,降低该值也是好处显着的 ,我本人的网络环境中降低该值为 3) tcp_fin_timeout : INTEGER 默认值是 60 对于本端断开的 socket 连接, TCP 保持在 FIN-WAIT-2 状态的时
15、间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在 2.2 版本的内核中是 180 秒。您可以设置该值但需要注意如果您的机器为负载很重的 web 服务器您可能要冒内存被大量无效数据报填满的风险 FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1 因为它们最多只吃 1.5K 的内存但是它们存在时间更长。 另外参考 tcp_max_orphans。 (事实上做 NAT 的时候 ,降低该值也是好处显着的 ,我本人的网络环境中降低该值为 30) tcp_max_tw_buckets : INTEGER 默认值是 180000 系统在同时所处理的
16、最大 timewait sockets 数目。如果超过此数的话 time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制纯粹为了抵御那些简单的 DoS 攻击千万不要人为的降低这个限制不过如果网络条件需要比默认值更多则可以提高它 (或许还 要增加内存 )。 (事实上做 NAT 的时候最好可以适当地增加该值 ) tcp_tw_recycle : BOOLEAN 默认值是 0 打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求请不要随意修改这个值。 (做 NAT 的时候,建议打开它 ) tcp_tw_reuse: BOOLEAN 默认值是 0
17、 该文件表示是否允许重新应用处于 TIME-WAIT 状态的 socket 用于新的 TCP 连接 (这个对快速重启动某些服务 ,而启动后提示端口已经被使用的情形非常有帮助 ) tcp_max_orphans : INTEGER 缺省值是 8192 系统所能处理不属于任何进程的 TCP sockets 最大数量。假如超过这个数量那么不属于任何进程的连接会被立即 reset,并同时显示警告信息。之所以要设定这个限制纯粹为了抵御那些简单的 DoS 攻击千万不要依赖这个或是人为的降低这个限制 (这个值 Redhat AS 版本中设置为 32768,但是很多防火墙修改的时候 ,建议该值修改为 2000
18、) tcp_abort_on_overflow : BOOLEAN 缺省值是 0 当守护进程太忙而不能接受新的连接,就象对方发送 reset 消息,默认值是 false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。 (对待已经满载的sendmail,apache 这类服务的时候 ,这个可以很快让客户端终止连接 ,可以给予服务程序处理已有连接的缓冲机会 ,所以很多防火墙上推荐打开它 ) tcp_syncookies : BOOLEAN 默认值是 0 只有在内核编译时选择了 CONFIG_SYNCOO
19、KIES 时才会发生作用。当出现 syn 等候队列出现溢出时象对方发送 syncookies。目的是为了防止 syn flood 攻击。 注意:该选项千万不能用于那些没有收到攻击的高负载服务器,如果在日志中出现synflood 消息,但是调查发现没有收到 synflood 攻击,而是合法用户的连接负载过高的原因,你应该调整其它参数来提高服务器性能。参考 : tcp_max_syn_backlog tcp_synack_retries tcp_abort_on_overflow syncookie 严重的违背 TCP 协议,不允许使用 TCP 扩展,可能对某些服务导致严重的性能影响 (如 SMT
20、P 转发 )。 (注意 ,该实现与 BSD 上面使用的 tcp proxy 一样 ,是违反了 RFC 中关于 tcp 连接的三次握手实现的 ,但是对于防御 syn-flood 的确很有用 .) tcp_stdurg : BOOLEAN 默认值为 0 使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的 BSD解释,因此如果您在 Linux 打开它或会导致不能和它们正确沟通。 tcp_max_syn_backlog : INTEGER 对于那些依然还未获得客户端确认的连接请求需要保存在队列中最大数目。对于超过 128Mb 内存的系统默认值是 1024 低于 1
21、28Mb 的则为 128。如果服务器经常出现过载可以尝试增加这个数字。警告假如您将此值设为大于 1024最好修改 include/net/tcp.h 里面的 TCP_SYNQ_HSIZE 以保持 TCP_SYNQ_HSIZE*16 0)或者bytes-bytes/2(-tcp_adv_win_scale)(如果 tcp_adv_win_scale = 0)。 tcp_rfc1337 :BOOLEAN 缺省值为 0 这个开关可以启动对于 在 RFC1337 中描述的 “tcp 的 time-wait 暗杀危机 “问题的修复。启用后,内核将丢弃那些发往 time-wait 状态 TCP 套接字的 RST 包 . tcp_low_latency : BOOLEAN 缺省值为 0 允许 TCP/IP 栈适应在高吞吐量情况下低延时的情况;这个选项一般情形是的禁用。 (但在构建 Beowulf 集群的时候 ,打开它很有帮助 ) tcp_westwood :BOOLEAN 缺省值为 0 启用发送者端的拥塞控制算法,它可以维护对吞吐量的评估,并试图对带宽 的整体利用情况进行优化;对于 WAN 通信来说应该启用这个选项。
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。