/proc/sys/net/ipv4/ 下网络参数的理解以及sysctl命令修改内核参数

本文详细介绍Linux系统中/proc/sys/net/ipv4/目录下的各项配置参数及其作用,包括IP转发、数据报生存周期、路径MTU探测等功能配置,以及TCP连接管理和性能优化的相关设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/proc/sys/net/ipv4/下文件详细解释:


1) /proc/sys/net/ipv4/ip_forward
  该文件表示是否打开IP转发。
  0,禁止
  1,转发
  基本用途:如VPN、路由产品的利用;

  出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。


配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功

less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。

可使用命令echo "1" > /proc/sys/net/ipv4/ip_forward 修改文件内容,重启网络服务或主机后效果不再。若要其自动执行,可将命令echo "1" > /proc/sys/net/ipv4/ip_forward 写入脚本/etc/rc.d/rc.local 或者 在/etc/sysconfig/network脚本中添加 FORWARD_IPV4="YES"


2) /proc/sys/net/ipv4/ip_default_ttl

该文件表示一个数据报的生存周期(Time To Live),即最多经过多少路由器。 
缺省设置:64 

增加该值会降低系统性能。 


3) /proc/sys/net/ipv4/ip_no_pmtu_disc 
该文件表示在全局范围内关闭路径MTU探测功能。 

关闭路径MTU探测(典型的瓶颈原理,一次成功的传输中,mtu是由网络上最"窄"的位置决定的.如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU
几种常见网络的MTU值: 以太网 1500字节
缺省设置:0 


4) /proc/sys/net/ipv4/route/min_pmtu 
该文件表示最小路径MTU的大小。 

产品实践中,主要两个网卡MTU的设置;

缺省设置:552 

5) /proc/sys/net/ipv4/route/mtu_expires 
该文件表示PMTU信息缓存多长时间(秒)。 
缺省设置:600(秒) 


6) /proc/sys/net/ipv4/route/min_adv_mss 
该文件表示最小的MSS(Maximum Segment Size)大小(网络层不需要进行分片重组),取决于第一跳的路由器MTU。 
缺省设置:256(bytes)

 
6.1 IP Fragmentation 
1) /proc/sys/net/ipv4/ipfrag_low_thresh 
  /proc/sys/net/ipv4/ipfrag_low_thresh 
两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。 
缺省设置:196608(ipfrag_low_thresh) 
262144(ipfrag_high_thresh) 

2) /proc/sys/net/ipv4/ipfrag_time 
该文件表示一个IP分段在内存中保留多少秒。 
缺省设置:30(秒) 


6.2 INET Peer Storage 
1) /proc/sys/net/ipv4/inet_peer_threshold 
INET对端存储器某个合适值,当超过该阀值条目将被丢弃。该阀值同样决定生存时间以及废物收集通过的时间间隔。条目越多,存活期越低,GC 间隔越短。 
缺省设置:65664 

2) /proc/sys/net/ipv4/inet_peer_minttl 
条目的最低存活期。在重组端必须要有足够的碎片(fragment)存活期。这个最低存活期必须保证缓冲池容积是否少于 inet_peer_threshold。该值以 jiffies为单位测量。 
缺省设置:120 

3) /proc/sys/net/ipv4/inet_peer_maxttl 
条目的最大存活期。在此期限到达之后,如果缓冲池没有耗尽压力的话(例如:缓冲池中的条目数目非常少),不使用的条目将会超时。该值以 jiffies为单位测量。 
缺省设置:600 

4) /proc/sys/net/ipv4/inet_peer_gc_mintime 
废物收集(GC)通过的最短间隔。这个间隔会影响到缓冲池中内存的高压力。该值以 jiffies为单位测量。 
缺省设置:10 

5) /proc/sys/net/ipv4/inet_peer_gc_maxtime 
废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。该值以 jiffies为单位测量。 
缺省设置:120 


6.3 TCP Variables 
1) /proc/sys/net/ipv4/tcp_syn_retries 
该文件表示本机向外发起TCP SYN连接超时重传的次数,不应该高于255;该值仅仅针对外出的连接,对于进来的连接由tcp_retries1控制。 
缺省设置:5 


2)/proc/sys/net/ipv4/tcp_keepalive_probes 
该文件表示丢弃TCP连接前,进行最大TCP保持连接侦测的次数。保持连接仅在SO_KEEPALIVE套接字选项被打开时才被发送。 
缺省设置:9(次) 


3)/proc/sys/net/ipv4/tcp_keepalive_time 
该文件表示从不再传送数据到向连接上发送保持连接信号之间所需的秒数。 
缺省设置:7200(2小时) 


4)  /proc/sys/net/ipv4/tcp_keepalive_intvl 
该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有相应的TCP连接的时间。 
缺省设置:75(秒) 


5) /proc/sys/net/ipv4/tcp_retries1 
该文件表示放弃回应一个TCP连接请求前进行重传的次数。 
缺省设置:3 


6) /proc/sys/net/ipv4/tcp_retries2 
该文件表示放弃在已经建立通讯状态下的一个TCP数据包前进行重传的次数。 
缺省设置:15 


7)/proc/sys/net/ipv4/tcp_orphan_retries 
在近端丢弃TCP连接之前,要进行多少次重试。默认值是 7 个,相当于 50秒–16分钟,视 RTO 而定。如果您的系统是负载很大的web服务器,那么也许需要降低该值,这类 sockets 可能会耗费大量的资源。另外参考tcp_max_orphans。 


8) /proc/sys/net/ipv4/tcp_fin_timeout 
对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。默认值为 60 秒。过去在2.2版本的内核中是 180 秒。您可以设置该值,但需要注意,如果您的机器为负载很重的web服务器,您可能要冒内存被大量无效数据报填满的风险,FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1,因为它们最多只吃 1.5K的内存,但是它们存在时间更长。另外参考 tcp_max_orphans。 
缺省设置:60(秒) 


9) /proc/sys/net/ipv4/tcp_max_tw_buckets 
系统在同时所处理的最大timewait sockets 数目。如果超过此数的话,time-wait socket 会被立即砍除并且显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要人为的降低这个限制,不过,如果网络条件需要比默认值更多,则可以提高它(或许还要增加内存)。 
  缺省设置:180000 


10) /proc/sys/net/ipv4/tcp_tw_recyle 
打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求,请不要随意修改这个值。 
缺省设置:0 


11) /proc/sys/net/ipv4/tcp_tw_reuse 
该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。 
缺省设置:0 


12) /proc/sys/net/ipv4/tcp_max_orphans 
系统所能处理不属于任何进程的TCP sockets最大数量。假如超过这个数量,那么不属于任何进程的连接会被立即reset,并同时显示警告信息。之所以要设定这个限制,纯粹为了抵御那些简单的 DoS 攻击,千万不要依赖这个或是人为的降低这个限制。 
缺省设置:8192 


13) /proc/sys/net/ipv4/tcp_abort_on_overflow 
当守护进程太忙而不能接受新的连接,就向对方发送reset消息,默认值是false。这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态。只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用。 
缺省设置:0 

半链接队列和全链接队列问题。


14) /proc/sys/net/ipv4/tcp_syncookies 
该文件表示是否打开TCP同步标签(syncookie),内核必须打开了 CONFIG_SYN_COOKIES项进行编译。同步标签(syncookie)可以防止一个套接字在有过多试图连接到达时引起过载。 
缺省设置:0 


15) /proc/sys/net/ipv4/tcp_stdurg 
使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。 
缺省设置:0 


16) /proc/sys/net/ipv4/tcp_max_syn_backlog 
对于那些依然还未获得客户端确认的连接请求,需要保存在队列中最大数目。对于超过 128Mb 内存的系统,默认值是 1024,低于 128Mb 的则为 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 128Mb 32768-610000)则系统将忽略所有发送给自己的ICMP ECHO请求或那些广播地址的请求。 
缺省设置:1024 


17) /proc/sys/net/ipv4/tcp_window_scaling 
该文件表示设置tcp/ip会话的滑动窗口大小是否可变。参数值为布尔值,为1时表示可变,为0时表示不可变。tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力。 
缺省设置:1 


18) /proc/sys/net/ipv4/tcp_sack 
该文件表示是否启用有选择的应答(Selective Acknowledgment),这可以通过有选择地应答乱序接收到的报文来提高性能(这样可以让发送者只发送丢失的报文段);(对于广域网通信来说)这个选项应该启用,但是这会增加对 CPU 的占用。 
缺省设置:1 


19) /proc/sys/net/ipv4/tcp_timestamps 
该文件表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。 
缺省设置:1 


20) /proc/sys/net/ipv4/tcp_fack 
该文件表示是否打开FACK拥塞避免和快速重传功能。 
缺省设置:1 


21) /proc/sys/net/ipv4/tcp_dsack 
该文件表示是否允许TCP发送“两个完全相同”的SACK。 
缺省设置:1 


22) /proc/sys/net/ipv4/tcp_ecn 
该文件表示是否打开TCP的直接拥塞通告功能。 
缺省设置:0 


23) /proc/sys/net/ipv4/tcp_reordering 
该文件表示TCP流中重排序的数据报最大数量。 
缺省设置:3

 
24) /proc/sys/net/ipv4/tcp_retrans_collapse 
该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。 
缺省设置:1 


25) /proc/sys/net/ipv4/tcp_wmem 
该文件包含3个整数值,分别是:min,default,max 
Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。 
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。 
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。 
缺省设置:4096 16384 131072 


26) /proc/sys/net/ipv4/tcp_rmem 
该文件包含3个整数值,分别是:min,default,max 
Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。 
Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的 net.core.wmem中default的 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP 窗口大小为65535。 
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,今天选择参数 SO_SNDBUF则不受该值影响。 
缺省设置:4096 87380 174760 


27) /proc/sys/net/ipv4/tcp_mem 
该文件包含3个整数值,分别是:low,pressure,high 
Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。 
Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。 
High:允许所有tcp sockets用于排队缓冲数据报的页面量。 
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。 
缺省设置:24576 32768 49152 


28) /proc/sys/net/ipv4/tcp_app_win 
该文件表示保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。 
 缺省设置:31 


29) /proc/sys/net/ipv4/tcp_adv_win_scale 
该文件表示计算缓冲开销bytes/2^tcp_adv_win_scale(如果tcp_adv_win_scale >; 0)或者bytes-bytes/2^(-tcp_adv_win_scale)(如果tcp_adv_win_scale )。 
缺省设置:2 


6.4 IP Variables 
1) /proc/sys/net/ipv4/ip_local_port_range 
该文件表示TCP/UDP协议打开的本地端口号。 
缺省设置:1024 4999 
建议设置:32768 61000 


2)/proc/sys/net/ipv4/ip_nonlocal_bind 
该文件表示是否允许进程邦定到非本地地址。 
 缺省设置:0 


3) /proc/sys/net/ipv4/ip_dynaddr 
该参数通常用于使用拨号连接的情况,可以使系统动能够立即改变ip包的源地址为该ip地址,同时中断原有的tcp对话而用新地址重新发出一个syn请求 包,开始新的tcp对话。在使用ip欺骗时,该参数可以立即改变伪装地址为新的ip地址。该文件表示是否允许动态地址,如果该值非0,表示允许;如果该值 大于1,内核将通过log记录动态地址重写信息。 
缺省设置:0 


4) /proc/sys/net/ipv4/icmp_echo_ignore_all 
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 
该文件表示内核是否忽略所有的ICMP ECHO请求,或忽略广播和多播请求。 
0,响应请求 
1,忽略请求 
  
缺省设置:0 
建议设置:1 


5)/proc/sys/net/ipv4/icmp_ratelimit 
6) /proc/sys/net/ipv4/icmp_ratemask 
7) /proc/sys/net/ipv4/icmp_ignore_bogus_error_reponses 
某些路由器违背RFC1122标准,其对广播帧发送伪造的响应来应答。这种违背行为通常会被以告警的方式记录在系统日志中。如果该选项设置为True,内核不会记录这种警告信息。 
缺省设置:0


8) /proc/sys/net/ipv4/igmp_max_memberships 
该文件表示多播组中的最大成员数量。 
缺省设置:20 


6.5 Other Configuration 
1) /proc/sys/net/ipv4/conf/*/accept_redirects 
如果主机所在的网段中有两个路由器,你将其中一个设置成了缺省网关,但是该网关在收到你的ip包时发现该ip包必须经过另外一个路由器,这时这个路由器就会给你发一个所谓的“重定向”icmp包,告诉将ip包转发到另外一个路由器。参数值为布尔值,1表示接收这类重定向icmp 信息,0表示忽略。在充当路由器的linux主机上缺省值为0,在一般的linux主机上缺省值为1。建议将其改为0以消除安全性隐患。 

2)/proc/sys/net/ipv4/*/accept_source_route 
是否接受含有源路由信息的ip包。参数值为布尔值,1表示接受,0表示不接受。在充当网关的linux主机上缺省值为1,在一般的linux主机上缺省值为0。从安全性角度出发,建议关闭该功能。 


3)
/proc/sys/net/ipv4/*/secure_redirects 

其实所谓的“安全重定向”就是只接受来自网关的“重定向”icmp包。该参数就是用来设置“安全重定向”功能的。参数值为布尔值,1表示启用,0表示禁止,缺省值为启用。 


4) /proc/sys/net/ipv4/*/proxy_arp 
设置是否对网络上的arp包进行中继。参数值为布尔值,1表示中继,0表示忽略,缺省值为0。该参数通常只对充当路由器的linux主机有用。


sysctl命令修改内核参数及配置文件

sysctl配置与显示在/proc/sys目录中的内核参数。可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。
    命令格式:
    sysctl [-n] [-e] -w variable=value
    sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
    sysctl [-n] [-e] -a
    常用参数的意义:
    -w   临时改变某个指定参数的值,如
        sysctl -w net.ipv4.ip_forward=1
    -a   显示所有的系统参数
    -p   从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载
    如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能:
    1) #echo 1 > /proc/sys/net/ipv4/ip_forward
    2) #sysctl -w net.ipv4.ip_forward=1
    以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了
    # service network restart  命令,所设置的值即会丢失,如果想永久保留配置,可以修   改/etc/sysctl.conf文件
 将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1
 #!/bin/sh
 sed -i '/net.ipv4.ip_forward/ s/\(.*= \).*/\11/' /etc/sysctl.conf


<think>嗯,用户之前已经问过如何查看net.ipv4.udp_mem这个参数,现在他执行了cat命令,得到三个数值5880、7841、11760,想知道这些参数的含义。之前我已经解释了默认值的含义,可能用户现在看到自己的系统数值不同,需要更具体的解释。 首先,我需要确认这三个值对应的min、pressure、max,单位是内存页,通常每页4KB。用户可能已经了解过基本概念,但需要针对这三个具体数值的解释。可能需要再次强调单位转换,比如将数值乘以4KB得到实际内存大小,这样用户更容易理解。 然后,用户可能想知道这三个值在系统中的作用。例如,min是下限,当内存使用低于这个值时,系统不会限制UDP的分配;pressure是压力阈值,超过后系统开始限制;max是硬性上限。需要明确每个数值对应的阶段和影响。 另外,用户可能有特定的使用场景,比如是否遇到UDP性能问题,或者是否在调整系统参数。需要结合典型场景给出建议,比如高吞吐量应用需要调整max,但也要注意系统内存限制,避免OOM。 还要考虑用户可能的后续操作,比如如何调整这些参数,临时或永久修改的方法,是否需要重启或者使用sysctl -p。同时,关联的其他参数如rmem_max、wmem_max是否需要一起调整,这些在之前的回复中提到过,可以再次提及以提供完整信息。 最后,用户可能需要验证调整后的参数是否生效,可以用sysctl或再次cat命令检查。此外,提醒用户如果遇到问题,可以查看内核日志dmesg来获取相关信息。需要确保回答结构清晰,逐步解释每个数值的含义、单位转换、作用以及调整建议,帮助用户全面理解并应用。</think>在OpenWRT/Linux系统中,`cat /proc/sys/net/ipv4/udp_mem` 输出的三个值 **5880 7841 11760** 是内核中UDP协议栈内存管理的核心参数,具体含义如下: --- ### 一、参数定义(按顺序) | 值 | 名称 | 单位 | 功能描述 | |----|------|------|----------| | **5880** | `min` | 内存页(1页=4 KB) | UDP内存分配下限:当系统UDP总内存使用量 **低于此值** 时,内核不会限制新的内存分配 | | **7841** | `pressure` | 内存页 | 压力阈值:当UDP内存使用量 **超过此值** 时,内核开始限制新内存分配(进入"节流"状态) | | **11760** | `max` | 内存页 | 硬性上限:UDP内存使用量 **绝对不允许超过此值**,超限时直接拒绝分配 | --- ### 二、单位换算(转换为MB) - **计算公式**:`值 × 4 KB ÷ 1024 = MB` - **min**: $5880 \times 4\, \text{KB} \div 1024 = 22.97\, \text{MB}$ - **pressure**: $7841 \times 4\, \text{KB} \div 1024 = 30.63\, \text{MB}$ - **max**: $11760 \times 4\, \text{KB} \div 1024 = 45.94\, \text{MB}$ --- ### 三、参数动态调节机制 1. **正常状态**(UDP内存 < 22.97 MB) 内核自由分配内存,无限制。 2. **压力状态**(22.97 MB ≤ UDP内存 ≤ 30.63 MB) 内核逐步限制新请求,优先保障已有连接。 3. **超限状态**(UDP内存 > 45.94 MB) 直接拒绝分配,可能触发`ENOBUFS`错误(可通过`dmesg`日志查看)。 --- ### 四、调优建议 #### 场景1:高负载UDP服务(如视频流、游戏服务器) - **问题**:频繁达到`pressure`阈值导致丢包 - **解决方案**: ```bash sysctl -w net.ipv4.udp_mem="7841 11760 23520" # 将max翻倍至约92 MB ``` #### 场景2:嵌入式设备(内存受限) - **问题**:UDP内存占用过高触发OOM(Out-Of-Memory) - **解决方案**: ```bash sysctl -w net.ipv4.udp_mem="2940 3920 5880" # 将各值减半 ``` --- ### 五、关联参数验证 ```bash # 查看当前UDP缓冲区实际使用情况 cat /proc/net/sockstat | grep UDP # 输出示例: UDP: inuse 42 mem 324 ``` - `inuse`:活跃的UDP套接字数 - `mem`:当前UDP总内存使用量(单位:内存页) --- ### 六、永久生效配置 将以下内容写入`/etc/sysctl.conf`: ```bash echo "net.ipv4.udp_mem = 5880 7841 11760" >> /etc/sysctl.conf sysctl -p # 立即生效 ``` --- ### 附:参数关系图 ```plaintext UDP内存分配策略 ┌───────────────┐ ┌───────────────┐ ┌───────────────┐ │ 自由分配区 │──────>│ 限制分配区 │──────>│ 拒绝分配区 │ │ (min以下) │ │ (min~pressure)│ │ (max以上) │ └───────────────┘ └───────────────┘ └───────────────┘ ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值