共计 9177 个字符,预计需要花费 23 分钟才能阅读完成。
这篇文章主要为大家展示了“Linux 中 proc/sys/net 目录是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Linux 中 proc/sys/net 目录是什么”这篇文章吧。
Linux 这几年发展迅速,推出了很多版本。让我们眼花缭乱,不过在每个 Linux 的发行版本中,都存在一个 /proc/ 目录,这就是 Linux 系统目录。有的也称它为 Proc 文件系统。对于那些网络管理员必须要掌握 Linux 系统目录。
在这个目录中,包括了一些特殊的文件,不仅能用来反映内核的现行状态和查看硬件信息,而且,有些文件还允许用户来修改其中的内容,以调节内核的现行工作状态,例如 /proc/sys/ 子目录下的文件。
与 /proc/ 目录中其它目录不相同的是,/proc/sys/ 目录下的文件不仅能提供系统的有关信息,而且还允许用户立即停止或开启内核的某些特性及功能。在 /proc/sys/ 目录中的 /proc/sys/net/ 子目录更是与网络息息相关,我们可以通过设置此目录下的某些文件来开启与网络应用相关的特殊功能,同时,也可以通过设置这个目录下的某些文件来保护我们的网络安全。因此,作为一名 Linux 下的网络管理员,就很有必要详细了解 /proc/sys/net/ 目录下文件的各种功能和设置方法,让它能更好地为我们工作。
一、/proc/sys/net/ 目录说明。
/proc/sys/net/ 目录主要包括了许多网络相关的主题,例如:appletalk/,ethernet/,ipv4/,ipx/, 及 ipv6/。通过改变这些目录中的文件,网络管理员能够在系统运行时调整相关网络参数。虽然在 Linux 中还有很多有关网络的配置方法,但熟悉此目录中的相关内容对网络应用是有很大的帮助的。
在 /proc/sys/net/ 目录下有两个目录,与现在的 IPV4 网络的运行息息相关,调整这两个目录下的某些文件的参数,能为我们的网络应用带到意想不到的效果,这两个目录就是 /proc/sys/net/core/ 目录和 /proc/sys/net/ipv4/ 目录,下面笔者将会对这两个目录中的重要文件分别作一个详细的说明。
1、/proc/sys/net/core/ 目录。
此目录中包括许多设置用来控制 Linux 内核与网络层的交互,即当网络有什么动作时,内核做出什么样的相应反应。
在其中有以下的一些重要文件:
(1)、message_burst:设置每十秒写入多少次请求警告;此设置可以用来防止 DOS***,缺省设置为 50;
(2)、message_cost:设置每一个警告的度量值,缺省为 5,当用来防止 DOS*** 时设置为 0;
(3)、netdev_max_backlog:设置当个别接口接收包的速度快于内核处理速度时允许的最大的包序列,缺省为 300;
(4)、optmem_max: 设置每个 socket 的最大补助缓存大小;
(5)、rmem_default:设置接收 socket 的缺省缓存大小(字节);
(6)、rmem_max:设置接收 socket 的最大缓存大小(字节);
(7)、wmem_default: 设置发送的 socket 缺省缓存大小(字节);
(8)、wmem_max: 设置发送的 socket 最大缓存大小(字节)。
2、/proc/sys/net/ipv4/ 目录。
此目录中的内容用来添加网络设置,在其中的许多设置,可以用来阻止对系统的 ***,或用来设置系统的路由功能。
其中有以下的这些重要的文件:
(1)、icmp_destunreach_rate、icmp_echoreply_rate、icmp_paramprob_rate、icmp_timeexeed_rate:设置发送和回应的最大 icmp 包的速率,最好不要为 0;
(2)、icmp_echo_ignore_all 和 icmp_echo_ignore_broadcasts:设置内核不应答 icmp echo 包,或指定的广播,值为 0 是允许回应,值为 1 是禁止;
(3)、ip_default_ttl:设置 IP 包的缺省生存时间(TTL),增加它的值能减少系统开销;
(4)、ip_forward:设置接口是否可以转发包,缺省为 0,设置为 1 时允许网络进行包转发;
(5)、ip_local_port_range:当本地需要端口时指定 TCP 或 UDP 端口范围。第一数为低端口,第二个数为高端口;
(6)、tcp_syn_retries: 提供限制在建立连接时重新发送回应的 SYN 包的次数;
(7)、tcp_retries1:设置回应连入重送的次数,缺省为 3;
(8)、tcp_retries2: 设置允许重送的 TCP 包的次数,缺省为 15。
二、/proc/sys/net/ 目录下文件的设置方法。
在了解了 /proc/sys/net/core/ 目录和 /proc/sys/net/ipv4/ 目录中一些重要文件的意义和作用后,下面说说如何设置这两个目录中的这些重要文件来为我们工作的。
读者应该了解,在 Linux 系统中,要改变某种服务或设备的工作状态和功能,主要是通过使用命令方式和直接修改它的配置文件方式来达到目的,对于这两个目录下的文件,我们也可以通过这两种方式来修改这些文件内容中的值,使它们按照我们的意图工作。
在进行设置之前,应当注意的是,当你确定要修改某个文件的当前值时,一定要保证输入的命令格式和值的内容都是正确的,因为任何的错误设置都会引起内核的不稳定,如果你不小心造成了这种问题,你就不得不重新引导系统了。在下面的说明中,笔者会将注意的地方特别说明出来的。
首先来看看如何使用命令方式来修改这两个目录下文件的。我们可以通过 echo 和 sysctl 这两个命令来修改这两个目录中的文件,下面笔者将这两个命令的使用方法分别列出来。
1、sysctl 命令是为设置这两个目录中的文件而定制的, 它被默认安装在 /sbin/ 目录中,我们可以通过使用此命令来显示和设置 /proc/sys/net/ 目录下的文件内容。例如:/sbin/sysctl - a 命令用来显示此目录下的所有文件配置内容;/sbin/sysctl - w 命令用来修改此目录下指定文件中的变量值,如:/sbin/sysctl -w net.ipv4.ip_forward= 1 用来设置允许 IP 包转发。其它的参数,读者可以通过输入 /sbin/sysctl - h 命令来得到,在这里就不再具体全部列出了。要注意的是,这个命令的使用需要管理员权限的,如果用户不是以管理员身份登录的,在使用此命令前用 SU 命令得得管理权限后再操作。
2、/proc/sys/net/ 目录下的文件内容也可以通过用 echo 命令来修改。例如:echo 1 /proc/sys/net/ipv4/ip_forward 用来设置允许 IP 包转发;echo 1 /proc/sys/net/ipv4/icmp_echo_ignore_all 用来设置不回应 ICMP ECHO 包。在使用 echo 命令时,还应特别注意此命令的输入格式,即在 echo 命令和值之间,以及值与在于符号()之间,在于符号与要修改的文件路径之间都必需有一个空格。而且,在这两个目录中的有些文件有不上一个的值,所以,如果你想一次性传递多个值,那么,每一个值之间也应保证用空格隔开。
同时也要注意的是,用此方法修改 /proc/sys/net/ 目录下文件中的内容在系统重新启动后,所设置的内容会全部变为默认值,因此,如果要想设置的值永久有效,可以直接把这个命令加入到 /ect/rc.d/rc.local 文件中,在这里,这个文件的路径是指 Red Hat Linux 发行版本中的,其它发行版本读者根据具体情况来定。如果命令项太多,也可以把这些命令项编写成一个脚本后,加上可执行权限,再放到这个文件中,这样当系统启动时,就会按 /etc/rc.d/rc.local 中的设置自动执行。如果你不想修改 /etc/rc.d/rc.local 文件,那么笔者推荐你使用 /sbin/sysctl 命令。
使用命令方式设置 /proc/sys/net/ 目录下的文件固然方便易行,但有一部分读者更喜欢直接修改它们的配置文件的方式,因为这种方式更加直观,但它比较适合对系统了解比较深的用户。
与其它服务或设备不同的是,Linux 系统只为 /proc/sys/net/ 目录提供了一个配置文件,那就是 /ect/sysctl.conf,用户可以通过直接编辑 /ect/sysctl.conf 配置文件,来修改增加相应 /proc/sys/net/ 目录下文件内容中的变量的值,这样当系统启动时就会读取此文件中的配置内容来设置相应的项。用 vi 来编辑此文件是非常简单的,此文件中内容格式也非常清晰易读,如其中有如下条目:net.ipv4.ip_forward=0, 把值修改为 1 后就打开 IP 包转发。其实,用 /sbin/sysctl 命令修改和直接编辑 /etc/sysctl.conf 文件内容具有相同的效果,因此,为了安全,推荐用户优先使用 /sbin/sysctl 命令方式。
到这里,想必读者已经对 /proc/sys/net/ 目录下的 /proc/sys/net/core/ 和 /proc/sys/net/ipv4/ 这两个目录,已经有了一定了解了。可是,这只是笔者为了突出 /proc/ 目录与 IPV4 网络的作用而特别选出来说明,其实,在 /proc/ 目录下,还有许多的文件,虽然不能被用户如上述的两个目录那样可以被设置,但是,可以通过这些文件来了解系统详细情况和现行的运行状态,读者可以从网络上找到这个目录的详细说明。
补充:
/proc/sys/net/ipv4/icmp_timeexceed_rate
这个在 traceroute 时导致著名的“Solaris middle star”。这个文件控制发送 ICMP Time Exceeded 消息的比率。
/proc/sys/net/ipv4/igmp_max_memberships
主机上最多有多少个 igmp (多播)套接字进行监听。
/proc/sys/net/ipv4/inet_peer_gc_maxtime
求 助: Add a little explanation about the inet peer storage? Minimum interval between garbage collection passes. This interval is in effect under low (or absent) memory pressure on the pool. Measured in jiffies.
/proc/sys/net/ipv4/inet_peer_gc_mintime
每一遍碎片收集之间的最小时间间隔。当内存压力比较大的时候,调整这个间隔很有效。以 jiffies 计。
/proc/sys/net/ipv4/inet_peer_maxttl
entries 的最大生存期。在 pool 没有内存压力的情况下(比如,pool 中 entries 的数量很少的时候),未使用的 entries 经过一段时间就会过期。以 jiffies 计。
/proc/sys/net/ipv4/inet_peer_minttl
entries 的最小生存期。应该不小于汇聚端分片的生存期。当 pool 的大小不大于 inet_peer_threshold 时,这个最小生存期必须予以保证。以 jiffies 计。
/proc/sys/net/ipv4/inet_peer_threshold
The approximate size of the INET peer storage. Starting from this threshold entries will be thrown aggressively. This threshold also determines entries time-to-live and time intervals between garbage collection passes. More entries, less time-to-live, less GC interval.
/proc/sys/net/ipv4/ip_autoconfig
这个文件里面写着一个数字,表示主机是否通过 RARP、BOOTP、DHCP 或者其它机制取得其 IP 配置。否则就是 0。
/proc/sys/net/ipv4/ip_default_ttl
数据包的生存期。设置为 64 是安全的。如果你的网络规模巨大就提高这个值。不要因为好玩而这么做——那样会产生有害的路由环路。实际上,在很多情况下你要考虑能否减小这个值。
/proc/sys/net/ipv4/ip_dynaddr/proc/sys/net/ipv4/icmp_destunreach_rate
如果你有一个动态地址的自动拨号接口,就得设置它。当你的自动拨号接口激活的时候,本地所有没有收到答复的 TCP 套接字会重新绑定到正确的地址上。这可以解决引发拨号的套接字本身无法工作,重试一次却可以的问题。
/proc/sys/net/ipv4/ip_forward
内核是否转发数据包。缺省禁止。
/proc/sys/net/ipv4/ip_local_port_range
用于向外连接的端口范围。缺省情况下其实很小:1024 到 4999。
/proc/sys/net/ipv4/ip_no_pmtu_disc
如果你想禁止“沿途 MTU 发现”就设置它。“沿途 MTU 发现”是一种技术,可以在传输路径上检测出最大可能的 MTU 值。参见 Cookbook 一章中关于“沿途 MTU 发现”的内容。
/proc/sys/net/ipv4/ipfrag_high_thresh
用于 IP 分片汇聚的最大内存用量。分配了这么多字节的内存后,一旦用尽,分片处理程序就会丢弃分片。When ipfrag_high_thresh bytes of memory is allocated for this purpose, the fragment handler will toss packets until ipfrag_low_thresh is reached.
/proc/sys/net/ipv4/ip_nonlocal_bind
如果你希望你的应用程序能够绑定到不属于本地网卡的地址上时,设置这个选项。如果你的机器没有专线连接 (甚至是动态连接) 时非常有用,即使你的连接断开,你的服务也可以启动并绑定在一个指定的地址上。
/proc/sys/net/ipv4/ipfrag_low_thresh
用于 IP 分片汇聚的最小内存用量。
/proc/sys/net/ipv4/ipfrag_time
IP 分片在内存中的保留时间(秒数)。
/proc/sys/net/ipv4/tcp_abort_on_overflow
一个布尔类型的标志,控制着当有很多的连接请求时内核的行为。启用的话,如果服务超载,内核将主动地发送 RST 包。
/proc/sys/net/ipv4/tcp_fin_timeout
如果套接字由本端要求关闭,这个参数决定了它保持在 FIN-WAIT- 2 状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是 60 秒。2.2 内核的通常值是 180 秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的 WEB 服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT- 2 的危险性比 FIN-WAIT- 1 要小,因为它最多只能吃掉 1.5K 内存,但是它们的生存期长些。参见 tcp_max_orphans。
/proc/sys/net/ipv4/tcp_keepalive_time
当 keepalive 起用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时。
/proc/sys/net/ipv4/tcp_keepalive_intvl
当探测没有确认时,重新发送探测的频度。缺省是 75 秒。
/proc/sys/net/ipv4/tcp_keepalive_probes
在认定连接失效之前,发送多少个 TCP 的 keepalive 探测包。缺省值是 9。这个值乘以 tcp_keepalive_intvl 之后决定了,一个连接发送了 keepalive 之后可以有多少时间没有回应。
/proc/sys/net/ipv4/tcp_max_orphans
系统中最多有多少个 TCP 套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的 DoS***,你绝对不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)。This limit exists only to prevent simple DoS attacks, you _must_ not rely on this or lower the limit artificially, but rather increase it (probably, after increasing installed memory), if network conditions require more than default value, and tune network services to linger and kill such states more aggressively. 让我再次提醒你:每个孤儿套接字最多能够吃掉你 64K 不可交换的内存。
/proc/sys/net/ipv4/tcp_orphan_retries
本端试图关闭 TCP 连接之前重试多少次。缺省值是 7,相当于 50 秒~16 分钟(取决于 RTO)。如果你的机器是一个重载的 WEB 服务器,你应该考虑减低这个值,因为这样的套接字会消耗很多重要的资源。参见 tcp_max_orphans。
/proc/sys/net/ipv4/tcp_max_syn_backlog
记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有 128M 内存的系统而言,缺省值是 1024,小内存的系统则是 128。如果服务器不堪重负,试试提高这个值。注意!如果你设置这个值大于 1024,最好同时调整 include/net/tcp.h 中的 TCP_SYNQ_HSIZE,以保证 TCP_SYNQ_HSIZE*16 ≤tcp_max_syn_backlo,然后重新编译内核。
/proc/sys/net/ipv4/tcp_max_tw_buckets
系统同时保持 timewait 套接字的最大数量。如果超过这个数字,time-wait 套接字将立刻被清除并打印警告信息。这个限制仅仅是为了防止简单的 DoS***,你绝对不能过分依靠它或者人为地减小这个值,如果网络实际需要大于缺省值,更应该增加这个值(如果增加了内存之后)。
/proc/sys/net/ipv4/tcp_retrans_collapse
为兼容某些糟糕的打印机设置的“将错就错”选项。再次发送时,把数据包增大一些,来避免某些 TCP 协议栈的 BUG。
/proc/sys/net/ipv4/tcp_retries1
在认定出错并向网络层提交错误报告之前,重试多少次。缺省设置为 RFC 规定的最小值:3,相当于 3 秒~8 分钟(取决于 RIO)。
/proc/sys/net/ipv4/tcp_retries2
在杀死一个活动的 TCP 连接之前重试多少次。RFC 1122 规定这个限制应该长于 100 秒。这个值太小了。缺省值是 15,相当于 13~30 分钟(取决于 RIO)。
/proc/sys/net/ipv4/tcp_rfc1337
这个开关可以启动对于在 RFC1337 中描述的“tcp 的 time-wait 暗杀危机”问题的修复。启用后,内核将丢弃那些发往 time-wait 状态 TCP 套接字的 RST 包。却省为 0。
/proc/sys/net/ipv4/tcp_sack
特别针对丢失的数据包使用选择性 ACK,这样有助于快速恢复。
/proc/sys/net/ipv4/tcp_stdurg
使用 TCP 紧急指针的主机需求解释。因为绝大多数主机采用 BSD 解释,所以如果你在 Linux 上打开它,可能会影响它与其它机器的正常通讯。缺省是 FALSE。
/proc/sys/net/ipv4/tcp_syn_retries
在内核放弃建立连接之前发送 SYN 包的数量。
/proc/sys/net/ipv4/tcp_synack_retries
为了打开对端的连接,内核需要发送一个 SYN 并附带一个回应前面一个 SYN 的 ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送 SYN+ACK 包的数量。
/proc/sys/net/ipv4/tcp_timestamps
时间戳可以避免序列号的卷绕。一个 1Gbps 的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。
/proc/sys/net/ipv4/tcp_tw_recycle
能够更快地回收 TIME-WAIT 套接字。缺省值是 1。除非有技术专家的建议和要求,否则不应修改。
/proc/sys/net/ipv4/tcp_window_scaling
一般来说 TCP/IP 允许窗口尺寸达到 65535 字节。对于速度确实很高的网络而言这个值可能还是太小。这个选项允许设置上 G 字节的窗口大小,有利于在带宽 * 延迟很大的环境中使用。
一旦内核认为它无法发包,就会丢弃这个包,并向发包的主机发送 ICMP 通知。
/proc/sys/net/ipv4/icmp_echo_ignore_all
根本不要响应 echo 包。请不要设置为缺省,它可能在你正被利用成为 DoS*** 的跳板时可能有用。
/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts [Useful]
如果你 ping 子网的子网地址,所有的机器都应该予以回应。这可能成为非常好用的拒绝服务 *** 工具。设置为 1 来忽略这些子网广播消息。
/proc/sys/net/ipv4/icmp_echoreply_rate
设置了向任意主机回应 echo 请求的比率。
/proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
设置它之后,可以忽略由网络中的那些声称回应地址是广播地址的主机生成的 ICMP 错误。
/proc/sys/net/ipv4/icmp_paramprob_rate
一个相对不很明确的 ICMP 消息,用来回应 IP 头或 TCP 头损坏的异常数据包。你可以通过这个文件控制消息的发送比率。
以上是“Linux 中 proc/sys/net 目录是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!