Linux常用内核参数
TCP状态描述
CLOSED:无连接是活动的或正在进行的
LISTEN:服务器在等待进入呼叫
SYN-RECV:一个连接请求已经到达,等待确认
SYN-SENT:应用已经开始,打开一个连接
ESTABLISHED:已经建立的连接
FIN-WAIT1:主动断开一方,第一次发送完FIN
FIN-WAIT2:主动断开一方,收到对端确认的ACK
TIME-WAIT:主动断开一方,收到FIN-ACK
CLOSE-WAIT:被动断开一方,收到对方FIN且发送完ACK后
LAST-ACK:被动断开了方,发送完FIN后
net.ipv4.ip_forward = 1
开启ip转发功能
net.core.netdev_max_backlog = 400000
该参数决定了网络设备接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.optmeme_max = 10000000
该参数指定了每个套接字所允许的最大缓冲区的大小
net.core.rmem_default = 1000000
指定了接收套按字缓冲区大小的缺少值
net.core.rmem_max = 10000000
指定了接收套按字缓冲区大小的最大值
net.core.somaxconn = 1000000
指定socket监听的backlog(监听队列)上限
net.core.wmem_default = 11059200
定义默认的发送窗口大小
net.ipv4.tcp_windows_scaling = 0
关闭tcp_windows_scaling
net.ipv4.tcp_ecn = 0
把TCP的显式拥塞通告关闭
net.ipv4.tcp_max_tw_buckets = 10000
同时保持TEAM_WAIT套接字的最大数量
net.ipv4.tcp_max_syn_backlog = 1024
SYN队列长度,默认1024
net.ipv4.tcp_syncookies = 1
开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_tw_reuse = 1
开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
net.ipv4.tcp_tw_recyle = 1
表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
net.ipv4.tcp_fin_timeout = 10
表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间
net.ipv4.tcp_keepalive_time = 1800
表示当keepalive开启的时候,TCP发送keepalive消息的频率。缺少是2小时。
net.ipv4.tcp_keepalive_probes = 3
如果对方不予应答,探测包的发送次数
net.ipv4.tcp_keepalive_intvl = 15
keepalive探测包发送间隔
net.ipv4.ip_local_port_range = 32768 65000
用于向外连接的端口范围
net.ipv4.tcp_slow_start_after_idle = 0
关闭tcp的连接传输的慢启动,即先休止一段时间,再初始化拥塞窗口
net.ipv4.route.gc_timeout = 100
路由缓存刷新频率,当一个路由失败后,多长时间跳到另一个路由,默认是300
net.ipv4.tcp_syn_retries = 1
在内核放弃建立连接之前发送SYN包的数量
修改完成后执行如下命令生效
$ sudo sysctl -p
使用while检测192.168.2.0/24网段存活的主机
#!/bin/bash
#使用while循环检测192.168.2.0/24网段内存活的主机
#对于ping测试成功的主机立即进行下一轮,对于ping
#测试不成功的主机连续进行三次测试,如果全部失败
#,则提示存机该IP不存在
TESTNET=192.168.2.
ip_check() {
ping -c 1 -w 1 $1 &> /dev/null
}
i=1
while [ $i -le 255 ]
do
FAIL_NUM=0
ip_check $TESTNET$i
if [ $? -eq 0 ] ;then
echo -e " 33[32m$TESTNET$i is alive 33[0m"
else
ip_check $TESTNET$i || let FAIL_NUM++
ip_check $TESTNET$i || let FAIL_NUM++
ip_check $TESTNET$i || let FAIL_NUM++
[ $FAIL_NUM -eq 3 ] && echo -e " 33[31m$TESTNET$i is down 33[0m"
fi
let i++
done
使用for循环检测192.168.2.0/24网段存活的主机
#!/bin/bash
#使用for循环检测192.168.2.0/24网段内的主机
#如果成功直接输出,如果失败,连续检测三次
TESTNET=192.168.2.
ip_check() {
ping -c 1 -w 1 $1 &> /dev/null
}
for i in {1..5};do
FAIL_NUM=0
ip_check $TESTNET$i
if [ $? -eq 0 ];then
echo -e " 33[32m$TESTNET$i is alive 33[0m"
else
ip_check $TESTNET$i && echo -e " 33[32m$TESTNET$i is alive 33[0m" || let FAIL_NUM++
ip_check $TESTNET$i && echo -e " 33[32m$TESTNET$i is alive 33[0m" || let FAIL_NUM++
ip_check $TESTNET$i && echo -e " 33[32m$TESTNET$i is alive 33[0m" || let FAIL_NUM++
[ $FAIL_NUM -eq 3 ] && echo -e " 33[31m$TESTNET$i is down 33[0m"
fi
done
initrd
Linux初始化RAM磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个initrd RAM磁盘卸载,并释放内存。
初始RAM磁盘(RAM)是在实际根文件系统可用之前挂载到系统中的一个初始根文件系统。initrd与内核绑定在一起,并作为内核引导过程的一部分进行加载。内核会将这个initrd文件作为其两阶段引导过程的一部分来加载模块,这样才能稍后使用真正的文件系统,并挂载实际的根文件系统。
initrd中包含了实现这个目标所需要的目录和可执行程序的最小集合,例如将内核模块加载到内核中所使用的insmod工具。
在桌面或服务器Linux系统中,initrd是一个临时文件系统。其生存周期很短,只会用作到真实文件系统的一个桥梁。在没有存储设备的嵌入式系统中,initrd是永久的根文件系统。