/proc/sys/net/ipv4/ 下网络参数的理解

本文详细解读了Linux系统中/proc/sys/net/ipv4目录下的关键文件,包括IP转发开关、数据报生命周期管理、路径MTU探测、TCP参数设置等,帮助读者理解并配置这些网络相关设置。
摘要由CSDN通过智能技术生成

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

/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
增加该值会降低系统性能。
在参数在IP数据包中,即第三层的网络层
在这里插入图片描述

数据报的生存周期(Time To Live):
占8位,常用的英文缩写是TTL(Time To Live),表明数据报在网络中的寿命。
由发出数据报的源点设置这个字段。
其目的是为了防止无法交付的数据报无限制地在因特网中兜圈子,因而白白浪费网络资源。
随着技术的发展,TTL字段的功能改为“跳数限制”。路由器在转发数据报之前就把TTL值减1。若TTL值减少到零,就丢弃这个数据报,不再转发。
因此,现在TTL的单位不再是秒,而是跳数。
TTL的意义是指明数据报在因特网中至多可经过多少个路由器。显然,数据报能在因特网中经过的路由器的最大数是255。
若把TTL的初始值设置为1,就表示这个数据报只能在本局域网中传送。
3) /proc/sys/net/ipv4/ip_no_pmtu_disc
该文件表示在全局范围内关闭路径MTU探测功能。

如果开启功能,将不做路径MTU探测功能。由于网络防火墙可能丢包,路由器有故障,导致路径MTU探测失败。但是最好的办法还是解决路由故障,而不是关掉这个功能,不做路径MTU探测将导致网络消耗过大。

典型的瓶颈原理,一次成功的传输中,mtu是由网络上最"窄"的位置决定的.如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片(fragmentation),把数据报分成若干片,这样每一片都小于MTU。

几种常见网络的MTU值: 以太网 1500字节

缺省设置:0

  1. /proc/sys/net/ipv4/route/min_pmtu
    该文件表示最小路径MTU的大小。
    产品实践中,主要两个网卡MTU的设置;
    缺省设置:552
  2. /proc/sys/net/ipv4/route/mtu_expires
    该文件表示PMTU信息缓存多长时间(秒)。
    缺省设置:600(秒)
  3. /proc/sys/net/ipv4/route/min_adv_mss
    该文件表示最小的MSS(Maximum Segment Size)大小(网络层不需要进行分片重组),取决于第一跳的路由器MTU。
    缺省设置:256(bytes)
    IP Fragmentation
  4. /proc/sys/net/ipv4/ipfrag_low_thresh
    /proc/sys/net/ipv4/ipfrag_low_thresh

/proc/sys/net/ipv4/ipfrag_high_thresh

两个文件分别表示用于重组IP分段的内存分配最低值和最高值,一旦达到最高内存分配值,其它分段将被丢弃,直到达到最低内存分配值。

缺省设置:196608(ipfrag_low_thresh) 262144(ipfrag_high_thresh)

  1. /proc/sys/net/ipv4/ipfrag_time
    该文件表示一个IP分段在内存中保留多少秒。

缺省设置:30(秒)

INET Peer Storage

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

缺省设置:65664

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

缺省设置:120

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

缺省设置:600

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

缺省设置:10

  1. /proc/sys/net/ipv4/inet_peer_gc_maxtime

废物收集(GC)通过的最大间隔,这个间隔会影响到缓冲池中内存的低压力。该值以 jiffies为单位测量。

缺省设置:120

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小时)

  1. /proc/sys/net/ipv4/tcp_keepalive_intvl
    该文件表示发送TCP探测的频率,乘以tcp_keepalive_probes表示断开没有响应的TCP连接的时间。

缺省设置:75(秒)

  1. /proc/sys/net/ipv4/tcp_retries1
    该文件表示放弃回应一个TCP连接请求前进行重传的次数。

缺省设置:3

  1. /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。

  1. /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(秒)

  1. /proc/sys/net/ipv4/tcp_max_tw_buckets

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

缺省设置:180000

  1. /proc/sys/net/ipv4/tcp_tw_recyle

打开快速 TIME-WAIT sockets 回收。除非得到技术专家的建议或要求,请不要随意修改这个值。

缺省设置:0

  1. /proc/sys/net/ipv4/tcp_tw_reuse

该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

缺省设置:0

  1. /proc/sys/net/ipv4/tcp_max_orphans

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

缺省设置:8192

  1. /proc/sys/net/ipv4/tcp_abort_on_overflow

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

缺省设置:0

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

  1. /proc/sys/net/ipv4/tcp_syncookies

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

缺省设置:0

  1. /proc/sys/net/ipv4/tcp_stdurg

使用 TCP urg pointer 字段中的主机请求解释功能。大部份的主机都使用老旧的BSD解释,因此如果您在 Linux 打开它,或会导致不能和它们正确沟通。

缺省设置:0

  1. /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

  1. /proc/sys/net/ipv4/tcp_window_scaling

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

缺省设置:1

  1. /proc/sys/net/ipv4/tcp_sack

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

缺省设置:1

  1. /proc/sys/net/ipv4/tcp_timestamps

该文件表示是否启用以一种比超时重发更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项。

缺省设置:1

  1. /proc/sys/net/ipv4/tcp_fack

该文件表示是否打开FACK拥塞避免和快速重传功能。

缺省设置:1

  1. /proc/sys/net/ipv4/tcp_dsack

该文件表示是否允许TCP发送“两个完全相同”的SACK。

缺省设置:1

  1. /proc/sys/net/ipv4/tcp_ecn

该文件表示是否打开TCP的直接拥塞通告功能。

缺省设置:0

  1. /proc/sys/net/ipv4/tcp_reordering

该文件表示TCP流中重排序的数据报最大数量。

缺省设置:3

  1. /proc/sys/net/ipv4/tcp_retrans_collapse

该文件表示对于某些有bug的打印机是否提供针对其bug的兼容性。

缺省设置:1

  1. /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

  1. /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

  1. /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

  1. /proc/sys/net/ipv4/tcp_app_win

该文件表示保留max(window/2^tcp_app_win, mss)数量的窗口由于应用缓冲。当为0时表示不需要缓冲。

缺省设置:31

  1. /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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值