调整Linux的TCP需要用到的参数深度分析

欢迎进入网络技术社区论坛,与200万技术人员互动交流 >>进入

当keepalive打开的情况下,TCP发送keepalive消息的频率.(由于目前网络攻击等因素,造成了利用这个进行的攻击很频繁,曾经也有cu的朋友提到过,说如果2边建立了连接,然后不发送任何数据或者rst/fin消息,那么持续的时间是不是就是2小时,空连接攻击?tcp_keepalive_time就是预防此情形的.我个人在做nat服务的时候的修改值为1800秒)

tcp_keepalive_probes:INTEGER

默认值是9

TCP发送keepalive探测以确定该连接已经断开的次数.(注意:保持连接仅在SO_KEEPALIVE套接字选项被打开是才发送.次数默认不需要修改,当然根据情形也可以适当地缩短此值.设置为5比较合适.

tcp_keepalive_intvl:INTEGER

默认值为75

探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间.默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃.(对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是WEB类服务器需要改小该值,15是个比较合适的值)

tcp_retries1 :INTEGER

默认值是3

放弃回应一个TCP连接请求前?需要进行多少次重试.RFC 规定最低的数值是3?这也是默认值?根据RTO的值大约在3秒 – 8分钟之间.(注意:这个值同时还决定进入的syn连接)

tcp_retries2 :INTEGER

默认值为15

在丢弃激活(已建立通讯状况)的TCP连接之前?需要进行多少次重试.默认值为15,根据RTO的值来决定,相当于13-30分钟(RFC1122规定,必须大于100秒).(这个值根据目前的网络设置,可以适当地改小,我的网络内修改为了5)

tcp_orphan_retries :INTEGER

默认值是7

在近端丢弃TCP连接之前?要进行多少次重试.默认值是7个?相当于 50秒 – 16分钟?视 RTO 而定.如果您的系统是负载很大的WEB服务器?那么也许需要降低该值?这类 sockets 可能会耗费大量的资源.另外参的考 tcp_max_orphans .(事实上做NAT的时候,降低该值也是好处显着的,我本人的网络环境中降低该值为3)

tcp_fin_timeout :INTEGER

默认值是 60

对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间.对方可能会断开连接或一直不结束连接或不可预料的进程死亡.默认值为 60 秒.过去在2.2版本的内核中是 180 秒.您可以设置该值?但需要注意?如果您的机器为负载很重的web服务器?您可能要冒内存被大量无效数据报填满的风险?FIN-WAIT-2 sockets 的危险性低于 FIN-WAIT-1 ?因为它们最多只吃 1.5K 的内存?但是它们存在时间更长.另外参考 tcp_max_orphans.(事实上做NAT的时候,降低该值也是好处显着的,我本人的网络环境中降低该值为30)

tcp_max_tw_buckets :INTEGER

默认值是180000

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

tcp_tw_recycle :BOOLEAN

默认值是0

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

tcp_tw_reuse:BOOLEAN

默认值是0

该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接(这个对快速重启动某些服务,而启动后提示端口已经被使用的情形非常有帮助)

tcp_max_orphans :INTEGER

缺省值是8192

系统所能处理不属于任何进程的TCP sockets最大数量.假如超过这个数量?那么不属于任何进程的连接会被立即reset,并同时显示警告信息.之所以要设定这个限制?纯粹为了抵御那些简单的 DoS 攻击?千万不要依赖这个或是人为的降低这个限制(这个值Redhat AS版本中设置为32768,但是很多防火墙修改的时候,建议该值修改为2000)

tcp_abort_on_overflow :BOOLEAN

缺省值是0

当守护进程太忙而不能接受新的连接,就象对方发送reset消息,默认值是false.这意味着当溢出的原因是因为一个偶然的猝发,那么连接将恢复状态.只有在你确信守护进程真的不能完成连接请求时才打开该选项,该选项会影响客户的使用.(对待已经满载的sendmail,apache这类服务的时候,这个可以很快让客户端终止连接,可以给予服务程序处理已有连接的缓冲机会,所以很多防火墙上推荐打开它)

tcp_syncookies :BOOLEAN

默认值是0

只有在内核编译时选择了CONFIG_SYNCOOKIES时才会发生作用.当出现syn等候队列出现溢出时象对方发送syncookies.目的是为了防止syn flood攻击.

注意:该选项千万不能用于那些没有收到攻击的高负载服务器,如果在日志中出现synflood消息,但是调查发现没有收到synflood攻击,而是合法用户的连接负载过高的原因,你应该调整其它参数来提高服务器性能.参考:

tcp_max_syn_backlog

tcp_synack_retries

tcp_abort_on_overflow

syncookie严重的违背TCP协议,不允许使用TCP扩展,可能对某些服务导致严重的性能影响(如SMTP转发).(注意,该实现与BSD上面使用的tcp proxy一样,是违反了RFC中关于tcp连接的三次握手实现的,但是对于防御syn-flood的确很有用.

tcp_stdurg :BOOLEAN

默认值为0

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

tcp_window_scaling :INTEGER

缺省值为1

该文件表示设置tcp/ip会话的滑动窗口大小是否可变.参数值为布尔值,为1时表示可变,为0时表示不可变.tcp/ip通常使用的窗口最大可达到 65535 字节,对于高速网络,该值可能太小,这时候如果启用了该功能,可以使tcp/ip滑动窗口大小增大数个数量级,从而提高数据传输的能力(RFC 1323).(对普通地百M网络而言,关闭会降低开销,所以如果不是高速网络,可以考虑设置为0)

tcp_timestamps :BOOLEAN

缺省值为1

Timestamps 用在其它一些东西中?可以防范那些伪造的 sequence 号码.一条1G的宽带线路或许会重遇到带 out-of-line数值的旧sequence 号码(假如它是由于上次产生的).Timestamp 会让它知道这是个 ‘旧封包’.(该文件表示是否启用以一种比超时重发更精确的方法(RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项.)

[1][2][3]

接受失败,是我们不常听到或看到的一个命题,我们大都接受的是正面的教育,

调整Linux的TCP需要用到的参数深度分析

相关文章:

你感兴趣的文章:

标签云: