Linux kernel 的使用问题(3)

(1) tcp_fin_timeout:在一个tcp会话过程中,在会话结束时,A首先向B发送一个fin包,在获得B的ack确认包后,A就进入FIN WAIT2状态等待B的fin包然后给B发ack确认包。这个参数就是用来设置A进入FIN WAIT2状态等待对方fin包的超时时间。如果时间到了仍未收到对方的fin包就主动释放该会话。参数值为整数,单位为秒,缺省为180秒。

(2) tcp_syn_retires:设置开始建立一个tcp会话时,重试发送syn连接请求包的次数。 参数值为小于255的整数,缺省值为10。假如你的连接速度很快,可以考虑降低该值来提高系统响应时间,即便对连接速度很慢的用户,缺省值的设定也足够大了。

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

针对每一网络接口的内核网络参数

通过针对每一网络接口的内核网络参数,你可以为诸如eth0、eth1等具体的网络接口指定响应的内核网络参数。注意:/proc/sys/net/ipv4/conf/all/下的参数将应用于所有的网络接口。

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

(2) log_martians:将包含非法地址信息的ip包记录到内核日志。参数值为布尔值。

应用实例:

上面我们讲过rp_filter反向路径过滤参数,同时我们可以执行下面的语句

echo "1" > /proc/sys/net/ipv4/conf/all/log_martians

然后就可以将进行ip假冒的ip包记录到/var/log/messages。

(3) forwarding:启用特定网络接口的ip转发功能。参数值为布尔值,1表示进行记录。

应用实例:

echo "1" > /proc/sys/net/ipv4/conf/eth0/forwarding

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

(5) secure_redirects:前面我们已经提到过"安全重定向"的概念,其实所谓的"安全重定向"就是只接受来自网关的"重定向"icmp包。该参数就是用来设置"安全重定向"功能的。参数值为布尔值,1表示启用,0表示禁止,缺省值为启用。

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

改变有关系统缺省参数限制

1. _SHM_ID_BITS:在/usr/src/linux/include/asm/shmparam.h文件中定义了该值;

作用:定义共享内存段表识的数量;其缺省值为7,变化范围:1-128;

调谐:可将该值增大到9,需重新编译内核;

2. MSGMNI:/proc/sys/kernel/msgmni文件中定义了该值;

作用:该值定义了消息队列的最大长度;要使db2(7.1版)正常运行,其最小值为128;

对于高负荷的DB2服务器,可将该值调整为 >= 1024;

调谐:对于2.4.6版本的内核,其缺省值为16;可用以下三中方法改变该值

(1) bash# sysctl -w kernel.msgmni=128

(2) bash# sysctl -w kernel.msgmni=128

(3) 如果要在系统启动时改变该值,可在/etc/sysctl.conf文件中加入以下几句:

# Sets maximum number of message queues to 128
# Set this to 1024 or higher on production systems
kernel.msgmni = 128

(用ipcs -l 命令来查看当前ipc 参数的各种设置)

3. NR_TASKS:/usr/src/linux/include/linux/tasks.h文件中定义了该

MAX_TASKS_PER_USER被定义为NR_TASKS/2;linux 将DB2的每个实例看作用户,每个连结一般都使用一个进程,而每个实例的最大连结数被限制为NR_TASKS/2;尽管2.4的内核对该值无限制,但有linux该缺省值仍为512;

调谐:>= 1024, 重新编译内核;

4. SEMMNI:/usr/src/linux/include/linux/sem.h 文件中定义了该值;

作用:该值定义了linux所能支持的最大信号量表识;

调谐:其缺省值为128,增大到1024;

从IPV4过渡到IPV6

尽管IPv6比IPv4具有明显的先进性,要想在短时间内将Internet和各个企业网络中的所有系统全部从IPv4升级到 IPv6是不可能的。为此,做为IPv6研究工作的一个部分,IETF制定了推动IPv4向IPv6过渡的方案,其中包括三个机制:兼容IPv4的 IPv6地址、双IP协议栈和基于IPv4通道的IPv6。

兼容IPv4的IPv6地址是一种特殊的IPv6单点广播地址,一个 IPv6节点与一个IPv4节点可以使用这种地址在IPv4网络中通信。这种地址是由96个0位加上32位IPv4地址组成的,例如,假设某节点的 IPv4地址是192.56.1.1,那么兼容IPv4的IPv6地址就是:

0: 0:0:0:0:0:C038:101。

双 IP协议栈是在一个系统(如一个主机或一个路由器)中同时使用IPv4和IPv6两个协议栈。这类系统既拥有IPv4地址,也拥有IPv6地址,因而可以收发IPv4和IPv6两种IP数据报。也就是用两套,需要使用IPv4的时候就使用IPv4,需要使用IPv6的时候就使用IPv6。

与双IP协议栈相比,基于IPv4通道的IPv6是一种更为复杂的技术,它是将整个IPv6数据报封装在IPv4数据报中,由此实现在当前的IPv4网络(如Internet)中IPv6节点与IPv4节点之间的IP通信。基于IPv4通道的IPv6实现过程分为三个步骤:封装、解封和通道管理。封装,是指由通道起始点创建一个IPv4包头,将IPv6数据报装入一个新的IPv4数据报中。解封,是指由通道终结点移去IPv4包头,还原原始的IPv6数据报。通道管理,是指由通道起始点维护通道的配置信息。IPv4通道有四种方案:路由器对路由器、主机对路由器、主机对主机、路由器对主机。

当进行通信的两个主机都有兼容IPv4的IPv6地址时,数据发送方主机将建立一个主机对主机通道。通道起始点(数据发送方主机)确定数据接收方主机就是通道终结点,并自动从其兼容IPv4的IPv6地址中抽取后32个地址位以确定通道终结点的IPv4地址,这种类型的通道被称为自动通道(automated tunneling)。

双IP协议栈和基于IPv4通道的IPv6网络使IPv4网络能够以可控的速度向 IPv6迁移。在开始向IPv6过渡之前,必须设置一个同时支持IPv4和IPv6的新的DNS服务器。有关设置或关于IPv6更多的详细内容可访问 IPv6相关网站。我们在这里仅为在Linux下使用IPV6提供一种简单的理论叙述。

小结
至此,我们已经详细介绍了Linux系统的网络性能调谐方面的内容,包括网络调谐测试工具的使用方法及其可实现的功能,网络配置文件解析,网络性能调谐方法等。您对这系列文章有什么想法,请直接在下面留言。如果您对网络调谐技术有更好的见解,欢迎您来稿。

linux

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wzwdxp.html