Linux系统中跟TCP相关的内核参数

1. TCP保活机制

参考 《Nginx(三) 配置文件详解 - 基础模块》3.18章节


  • net.ipv4.tcp_keepalive_intvl:设置两次相邻探活检测的间隔时间。默认是75秒,单位是秒。
  • net.ipv4.tcp_keepalive_probes:设置探活最多检测次数。默认是9次,单位是次。
  • net.ipv4.tcp_keepalive_time:设置TCP连接保活时长。默认是7200秒,单位是秒。

2. TCP Fast Open Cookie 


  • net.ipv4.tcp_fastopen可选值是0、1、2、3,默认是1。设置为0时表示关闭Fast Open Cookie功能,设置为1时表示仅作为客户端时使用Fast Open Cookie功能,设置为2时表示仅作为服务端时使用Fast Open Cookie功能,设置为3时表示无论作为客户端还是服务端时都使用Fast Open Cookie功能。请注意,Fast Open Cookie需要客户端和服务端同时开启才有效,开启后可以用TCP报文首部的Fast Open Cookie选项字段来声明是否使用FOC。FOC生效后,使用HTTP协议通信时,可以减少因三次握手而带来的1个RTT时间消耗(因为三次握手建立连接后,HTTP 请求必须在一个RTT后才能发送)。如果服务器仅作为服务端时,建议设置为2,如果是代理服务器,建议设置为3。

  • net.ipv4.tcp_fastopen_blackhole_timeout_sec = 3600

  • net.ipv4.tcp_fastopen_key = 00000000-00000000-00000000-00000000

3. 设置重传次数最大值


  • net.ipv4.tcp_orphan_retries:FIN报文重传次数最大值,默认值是0,特指8次。如果FIN报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。如果是孤儿连接,重传次数虽未超过8次,但该连接自首次发出FIN报文开始,存活时间已超tcp_fin_timeout设定的时间,那么此时该连接也将会直接关闭。
  • net.ipv4.tcp_retries1报文超时重传次数达到该值且规定等待时间已结束,指示IP层进行MTU探测、刷新路由等。默认是3次。
  • net.ipv4.tcp_retries2:报文超时重传次数达到该值且规定等待时间已结束,连接将会直接关闭。默认是15次。
  • net.ipv4.tcp_syn_retries:SYN报文重传次数最大值,默认是6次。如果SYN报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。
  • net.ipv4.tcp_synack_retries:SYN+ACK报文重传次数最大值,默认是2次。如果SYN+ACK报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。

4. 孤儿连接

        当进程调用 close() 函数关闭连接后,相关句柄已经释放,无论该连接是处于 FIN_WAIT1 状态,还是确实关闭了,此连接已经与进程无关,由内核和另一端完成四次挥手交互,此时这个连接叫做孤儿连接。

        使用 close() 函数关闭连接是完全断开连接,同时关闭读和写,无法继续传输数据,是不优雅的,而 shutdown() 函数是优雅关闭连接,可以控制是关闭读还是写。


  • net.ipv4.tcp_max_orphans:指定系统内核最多能接管多少个孤儿连接。默认是16384个。如果孤儿连接数量超过该值,新增的孤儿连接将不再通过四次挥手来关闭连接,而是直接发送 RST 报文进行强制关闭,并发出警告信息。
  • net.ipv4.tcp_fin_timeout:指定孤儿连接在内核中的最大生存时间,单位是秒,默认是60秒,对应两个MSL,该参数也是设置服务器主动关闭TCP连接时在TIME_WAIT状态的2MSL等待时间。如果在60秒内还未关闭,连接将直接关闭。
  • net.ipv4.tcp_orphan_retries请参考第3章节。

5. 防御SYN Flood攻击

参考 TCP三次握手、四次挥手及状态转换详解


  • net.core.somaxconn:增大TCP全连接队列/accept队列大小,也是增大TCP半连接队列的关键参数。默认值是128。
  • net.core.tcp_max_syn_backlog :增大TCP半连接队列/SYN队列大小。默认值是1024。
  • net.ipv4.tcp_syncookies:设置是否开启syncookies。开启syncookies后,不使用半连接队列就可建立TCP连接。默认值是1,表示仅当 SYN 半连接队列溢出时,才启用它。设置为0时表示关闭,设置为2时表示无条件开启。
  • net.core.netdev_max_backlog:设置每个网卡接收队列的最大长度,防止网卡接收过载。默认值是1000个。内核从网卡收到数据包后,在交由协议栈(如IP、TCP)处理前会先将数据包放入一个缓冲队列中,当接数据包的速率大于内核协议栈处理的速率时,这个缓冲队列会不断增长,但不能超过netdev_max_backlog 参数设置的值,否则数据包将被丢弃。默认情况下,netdev_max_backlog 参数的值是与系统的内存大小和 CPU 数量相关的动态值。它会根据系统的硬件配置进行自适应调整,通常情况下不需要手动设置。除非这台服务器需要处理大量的网络请求,我们才将该值调大。
  • net.ipv4.tcp_synack_retries:降低SYN+ACK报文重传次数。默认是2次。请参考第3章节。

6. accept队列已满策略


  • net.ipv4.tcp_abort_on_overflow:该参数用于设置当accept队列已满时,是否要将后续请求建立的TCP连接置为RST,即返回RST报文。可选值是0或1,默认值是0,表示关闭。当accept队列已满时,如果该参数设置为0,服务端会丢弃掉客户端返回的ack报文。如果设置为1,服务端将发送RST报文给客户端,要求重置连接并重新建立连接。谨慎开启该配置! 

7. 窗口放大


  • net.ipv4.tcp_window_scaling:设置是否开启窗口放大功能。可选值是0或1,默认是1,表示开启窗口放大功能。

8. 优化TIME-WAIT


  • net.ipv4.tcp_tw_reuse:设置是否复用处于 TIME_WAIT 状态的TCP连接,可选值是0或1,默认是0,表示禁止复用连接。请注意,该配置仅适用于主动发起建立TCP连接的一方,也就是仅适用于客户端。开启该选项后,主动发起建立连接的一方在调用 connect() 函数时,如果选择到的端口,已经被相同四元组的连接占用,那么就判断该连接是否处于TIME_WAIT状态,如果该连接处于 TIME_WAIT 状态并且 TIME_WAIT 状态持续时间已超过1秒,那么就重用这个连接,然后就可以正常使用该端口了。所以该选项只适用于主动发起建立连接的一方。如果服务器仅作为服务端,就完全没必要开启该功能。如果服务器是一台代理服务器,建议开启该功能。
  • net.ipv4.tcp_timestamps:设置是否开启TCP时间戳功能,可选值是0或1,默认是1,表示开启时间戳功能。开启后,TCP 头部就会使用时间戳选项,便于精确计算RTT,而且还能避免出现因序列号回绕(PAWS)而引起的延迟报文生效的问题。该参数是开启tcp_tw_reuse功能的前提,在开启tcp_tw_reuse功能前,必须将tcp_timestamps设置为1
  • net.ipv4.tcp_max_tw_buckets:设置处于TIME_WAIT状态的TCP连接的最大值,默认值是5000。当系统中处于 TIME_WAIT 状态的TCP连接数超过该值时,新关闭的连接就不再经历 TIME_WAIT状态,而是直接关闭,这个方法比较暴力。
  • net.ipv4.tcp_fin_timeout:该参数用于设置2MSL时间,请参考第4章节。

9. 快速重传

参考 《TCP 核心工作机制》


  • net.ipv4.tcp_sack:设置是否开启选择性确认SACK,可选值是0或1,默认是1,表示开启SACK。
  • net.ipv4.tcp_dsack:设置是否开启D-SACK(选择性确认时标识重复收到的数据),可选值是0或1,默认是1,表示开启D-SACK。
  • net.ipv4.tcp_comp_sack_delay_ns:设置在压缩SACK报文期间,SACK报文的延迟发送时间。单位是ns(纳秒),默认值是1000000ns,也就是1ms。
  • net.ipv4.tcp_comp_sack_nr:设置压缩SACK报文的最大数量。默认值是44。

10. 拥塞控制


  •  net.ipv4.tcp_congestion_control = cubic
  • net.ipv4.tcp_allowed_congestion_control = reno cubic
  • net.ipv4.tcp_available_congestion_control = reno cubic

11. 设置缓冲区


  • tcp_wmem:设置发送缓冲区大小/范围,默认值是“4096    16384    4194304”,3个参数单位都是字节Byte。
  • tcp_rmem:设置接收缓冲区大小/范围,默认值是“4096    87380    6291456”,3个参数单位都是字节Byte。
  • tcp_mem:设置TCP缓冲区大小/范围,默认值是“42147    56197    84294”,3个参数值单位都是页面,一个页面是4kb,
  • tcp_moderate_rcvbuf:设置是否开启接收缓冲区动态调整功能,可选值是0或1,默认是1,表示开启。
  • net.ipv4.tcp_adv_win_scale = 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451199.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECMAScript3中数组方法

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>ECMAScript3中数组方法</title></head><body><script>//字符串和数组之间相转换的方法 1.join() split() /*var str abcdefg…

implements Serializable

Serializable是一个对象序列化的接口&#xff0c;一个类只有实现了Serializable接口&#xff0c;它的对象才是可序列化的。因此如果要序列化某些类的对象&#xff0c;这些类就必须实现Serializable接口。而实际上&#xff0c;Serializable是一个空接口&#xff0c;没有什么具体…

Codeforces 1045. A. Last chance(网络流 + 线段树优化建边)

题意 给你 \(n\) 个武器&#xff0c;\(m\) 个敌人&#xff0c;问你最多消灭多少个敌人&#xff0c;并输出方案。 总共有三种武器。 SQL 火箭 - 能消灭给你集合中的一个敌人 \(\sum |S| \le 100000\) &#xff1b;认知光束 - 可以消灭 \([l, r]\) 区间中的一个敌人&#xff1b;O…

常用宏定义 - 系统相关

/** 是否iPad */ #define isPad (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)/** 是否iPad */ #define someThing (UI_USER_INTERFACE_IDIOM() UIUserInterfaceIdiomPad)? ipad: iphone/** 获取系统版本 */ #define IOS_VERSION &#xff3b;[UIDevice currentDevi…

周鸿祎详解360手机战略:赚钱不靠硬件靠服务

摘要&#xff1a;奇虎360总裁周鸿祎不久前在微博上宣布360公司将要进军手机行业的消息后&#xff0c;一度掀起业界的轩然大波&#xff0c;褒贬之声均不绝于耳。对于合作厂商的选择&#xff0c;周鸿祎直言出货量是一个重要参考指标&#xff0c;“每年的出货量最少不低于500万~10…

解决报错:;Syntax error on token(s), misplaced construct(s)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 报错如题&#xff0c;这是语法错误&#xff0c;如括号不匹配、代码没有写在一个方法中、少分号、变量名不对、少半个大括号 ... 总之就…

java移位运算符

java中有三种移位运算符 << : 左移运算符&#xff0c;num << 1 相当于num乘以2 >> : 右移运算符&#xff0c;num >> 1 相当于num除以2 >>> : 无符号右移&#xff0c;忽略符号位&#xff0c;空位都以0补齐…

在页面上显示PDF

/// <summary>/// 读取PDF文件/// </summary>/// <param name"fName">文件名称(可以从其他地方传进来)</param>/// <returns></returns>public FileStreamResult readPDF(string fName "pdf文件.pdf"){string dirp …

7.15模拟赛

T1.fuction 吐槽一波错误拼写。 跟考场思路差不多&#xff0c;只不过细节挺多的呢。 判掉a0,b0,c0的几种组合&#xff0c;还有负数的情况要打标记特殊处理。 然后就是一个拓欧啦&#xff0c;先求出ggcd(a,b)&#xff0c;顺便求出axbyg的x和y&#xff0c;然后根据裴蜀定理&#…

苏宁国美盈利报警:线下乏力线上重金加码

摘要&#xff1a;国美电器则发布盈利预警&#xff0c;预计今年一季度净利润同比大幅减少———这也致使国美股价最近连续低位徘徊。苏宁电器一季报显示&#xff0c;今年1至3月公司营业收入226 .41亿元&#xff0c;同比增长10%&#xff0c;但盈利9.51亿元&#xff0c;同比下降15…

WebService到底是什么?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、序言 大家或多或少都听过WebService&#xff08;Web服务&#xff09;&#xff0c;有一段时间很多计算机期刊、书籍和网站都大肆的提…

JAVA中PO,VO,DTO,BO,DAO,POJO解释

&#xff08;一&#xff09;VO与PO ORM是Object Relational Mapping&#xff08;对象关系映射&#xff09;的缩写。通俗点讲&#xff0c;就是将对象与关系数据库绑定&#xff0c;用对象来表示关系数据。在O/R Mapping的世界里&#xff0c;有两个基本的也是重要的东东需要了解&…

互掐盗播风云再起 三大视频网站存和解可能

摘要&#xff1a;近期&#xff0c;视频网站互掐盗播风云再起。腾讯视频已于5月13日向PPS开炮&#xff0c;宣称PPS盗播其五部独家剧&#xff1b;5月14日&#xff0c;搜狐视频亦指责PPS盗播其23部热播剧。面对这两家的连续开炮&#xff0c;PPS方面也进行了相应的回应&#xff0c;…

springboot和quartz整合实现动态定时任务(持久化单节点)

Quartz是一个完全由java编写的开源作业调度框架,为在Java应用程序中进行作业调度提供了简单却强大的机制&#xff0c;它支持定时任务持久化到数据库&#xff0c;从而避免了重启服务器时任务丢失&#xff0c;支持分布式多节点&#xff0c;大大的提高了单节点定时任务的容错性。s…

JAVA中protected的作用

类NewObject中有protected修饰的方法或者属性&#xff0c;则&#xff1a; 同一个包中&#xff1a; 可在同一个包里的子类中实例化NewObject类获得对象&#xff0c;然后可用该对象访问protected修饰的方法或者属性&#xff0c;即.操作访问。可在同一个包里的非子类中实例化NewOb…

wsimport 不是内部或外部命令,也不是可运行的程序或批处理文件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 今天使用wsimport生成webservice client端代码&#xff0c;wsimport提示不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件…

静态变量的多线程同步问题

2019独角兽企业重金招聘Python工程师标准>>> 我们先来讨论一个问题&#xff0c;一个类的静态变量当类被多次实例化的时候&#xff0c;静态变量是否会受影响&#xff1f;首先我们应该清楚的是静态变量是在类被JVM classloader的时候分配内存&#xff0c;并且是分配在…

extends和implements区别

extends和implements区别 extends与implements的不同 1、在类的声明中&#xff0c;通过关键字extends来创建一个类的子类。 一个类通过关键字implements声明自己使用一个或者多个接口。 extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; imple…

评论:电商巨头们谁有勇气晒晒“价格战”账单?

摘要&#xff1a;国内电商接二连三上演的“价格战”&#xff0c;点燃了消费者的购买热情。在笔者看来&#xff0c;如果有哪个大型电商有勇气亮出价格战账单&#xff0c;那对竞争对手的刺激和打击效果将非同一般。晒出了账单后&#xff0c;消费者对购物场所的选择也将一目了然&a…

The xxx collides with a package/type

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 当类和包&#xff0c;重名时&#xff0c;包会报错误&#xff1a;The package aaa.a collides with a type&#xff1b;类也会报警告&…