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

tcp(7) - Linux man page

https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt

tcp(7) - Linux manual page

# 系统版本
[root@reader ~]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 8.0.1905 (Core) 
Release:	8.0.1905
Codename:	Core

# 内核版本
[root@reader ~]# uname -r
4.18.0-80.11.2.el8_0.x86_64

1. TCP保活机制

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


  • net.ipv4.tcp_keepalive_intvl(integer; default: 75; since Linux 2.4)设置两次相邻探活检测的间隔时间,默认是75秒。
  • net.ipv4.tcp_keepalive_probes(integer; default: 9; since Linux 2.2),设置探活最多检测次数,默认是9次。
  • net.ipv4.tcp_keepalive_time(integer; default: 7200; since Linux 2.2),设置TCP连接保活时长(探活前的空闲时长),默认是7200秒。

2. TCP Fast Open Cookie 


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

  • net.ipv4.tcp_fastopen_key(since Linux 3.7),设置TCP Fast Open的秘钥,便于服务端创建和验证Cookie,默认值是00000000-00000000-00000000-00000000。秘钥是由4个8位十六进制整数组成,每组整数用"-"分割,最长是35位,如xxxxxxxx-xxxxxxxx-xxxxxxxx-xxxxxxxx。前导零可省略。可以通过使用逗号分隔符来指定主密钥和备份密钥。如果只指定了一个密钥,它将成为主密钥,并且之前配置的所有备份密钥都将被删除。

  • net.ipv4.tcp_fastopen_blackhole_timeout_sec(integer; default: 3600; since Linux 3.7)该参数用于设置在发生TFO黑洞时,TCP连接禁用Fast Open功能的时间,默认是3600秒。当发生TFO防火墙黑洞问题时,正在通信的TCP连接会禁用TFO功能,禁用时间由该参数设定。如果禁用时间超过该值后,还是检测到更多黑洞问题,那么将再次禁用,且禁用时间呈指数式增长,直到黑洞问题完全消失再将该参数重置为初始值。0表示禁用黑洞检测。

3. 设置重传次数最大值


  • net.ipv4.tcp_orphan_retries(integer; default: 8; since Linux 2.4),FIN报文重传次数最大值,默认值是0,特指8次。如果FIN报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。如果是孤儿连接,重传次数虽未超过8次,但该连接自首次发出FIN报文开始,存活时间已超tcp_fin_timeout设定的时间,那么此时该连接也将会直接关闭。
  • net.ipv4.tcp_retries1(integer; default: 3; since Linux 2.2)默认是3次。当报文超时重传次数超过该值后,每次重传前,都会指示IP层进行MTU探测、刷新路由等,防止由于网络链路发生变化而导致TCP传输失败
  • net.ipv4.tcp_retries2(integer; default: 15; since Linux 2.2),报文超时重传次数达到该值且规定等待时间已结束,连接将直接关闭。默认是15次,大约相当于13 ~ 30分钟。
  • net.ipv4.tcp_syn_retries(integer; default: 5; since Linux 2.2),SYN报文重传次数最大值,默认是5次,大约相当于180秒。如果SYN报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。
  • net.ipv4.tcp_synack_retries(integer; default: 5; since Linux 2.2),SYN+ACK报文重传次数最大值,默认是5次。如果SYN+ACK报文重传次数达到该值且规定等待时间已结束,连接将直接关闭。

4. 孤儿连接

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

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


  • net.ipv4.tcp_max_orphans(integer; default: --; since Linux 2.4),指定系统内核最多能接管多少个孤儿连接。默认是16384个。如果孤儿连接数量超过该值,新增的孤儿连接将不再通过四次挥手来关闭连接,而是直接发送 RST 报文进行强制关闭,并发出警告信息。初始默认值会根据系统内存情况进行调整。
  • net.ipv4.tcp_fin_timeout(integer; default: 60; since Linux 2.2),指定主动关闭连接方等待被动关闭连接方返回FIN报文(第三次挥手)的最长时间,也就是设置主动关闭连接方处于FIN-WAIT-2状态的最长时间,默认是60秒。如果超过60秒还未接收到FIN报文,连接将直接关闭。该值刚好对应2MSL时长,所以该值的设定逻辑跟TIME-WAIT状态等待2MSL后再关闭的逻辑是一样的。
  • net.ipv4.tcp_orphan_retries请参考第3章节。

5. 防御SYN Flood攻击

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


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

6. 优化TIME-WAIT


  • net.ipv4.tcp_tw_reuse(Boolean; default: disabled; since Linux 2.4.19/2.6),设置是否复用处于 TIME_WAIT 状态的TCP连接,默认是0,表示禁止复用连接。请注意,该配置仅适用于主动发起建立TCP连接的一方,也就是仅适用于客户端。开启该选项后,主动发起建立连接的一方在调用 connect() 函数时,如果选择到的端口,已经被相同四元组的连接占用,那么就判断该连接是否处于TIME_WAIT状态,如果该连接处于 TIME_WAIT 状态并且 TIME_WAIT 状态持续时间已超过1秒,那么就重用这个连接,然后就可以正常使用该端口了。所以该选项只适用于主动发起建立连接的一方。如果服务器仅作为服务端,完全没必要开启该功能。如果服务器是一台代理服务器,建议开启该功能。
  • net.ipv4.tcp_timestamps(Boolean; default: enabled; since Linux 2.2),设置是否开启TCP时间戳功能,默认是1,表示开启时间戳功能,必须是发送方和接收方同时开启才生效。开启后,可使用 Round Trip Time Measurement (RTTM) 和 Protect Against Wrapped Sequences (PAWS)功能。TCP 头部可使用时间戳选项,便于精确计算RTT,而且还能避免出现因序列号回绕(PAWS)而引起的延迟报文生效的问题。该参数是开启tcp_tw_reuse功能的前提,在开启tcp_tw_reuse功能前,必须将tcp_timestamps设置为1
  • net.ipv4.tcp_max_tw_buckets(integer; default: see below; since Linux 2.4),设置处于TIME_WAIT状态的TCP连接的最大值,默认值是5000,默认值会根据系统内存进行调整。当系统中处于 TIME_WAIT 状态的TCP连接数超过该值时,新关闭的连接就不再经历 TIME_WAIT状态,而是直接关闭并打印警告日志,这个方法比较暴力。
  • net.ipv4.tcp_tw_recycle(Boolean; default: disabled; Linux 2.4 to Linux 4.11),请注意,Linux 4.11 之后的版本取消了这个参数。设置是否快速回收处于 TIME_WAIT 状态的TCP连接,默认是0,表示禁用。官方并不建议开启该功能,请谨慎开启。

7. 快速重传

参考 《TCP 核心工作机制》


  • net.ipv4.tcp_sack(Boolean; default: enabled; since Linux 2.2),设置是否开启选择性确认SACK,默认是1,表示开启SACK。
  • net.ipv4.tcp_dsack(Boolean; default: enabled; since Linux 2.4),设置是否开启D-SACK(选择性确认时标识重复收到的数据),默认是1,表示开启D-SACK。
  • net.ipv4.tcp_comp_sack_delay_ns(long integer; default: 1000000ns; since Linux 2.2)设置在压缩SACK报文期间,SACK报文的延迟发送时间。单位是ns(纳秒),默认值是1000000ns,也就是1ms。
  • net.ipv4.tcp_comp_sack_nr(integer; default: 44; since Linux 2.2)设置压缩SACK报文的最大数量。默认值是44。
  • net.ipv4.tcp_fack(Boolean; default: disabled; since Linux 2.2),设置是否开启FACK,默认是0,表示关闭。FACK是一种基于SACK的算法,用来做SACK重传过程中的拥塞控制。请注意,这个参数现在已经成遗留项了,已不再有效。
  • net.ipv4.tcp_early_retrans(integer),设置是否开启尾部丢失探测TLP,默认是3,表示开启TLP。设为0表示禁用TLP,设为3或4表示开启TLP。尾部丢失探测(TLP,Tail Loss Probe)机制是用快速重传方式取代超时重传(RTO)来处理尾包丢失现象。当最后一个数据包发出后,TCP会增加一个尾部超时事件,超时时间是RTO的一半,这样就可以快速重传尾部数据包。请注意,TLP需要RACK才能正常工作(参见tcp_recovery参数)
  • net.ipv4.tcp_recovery(integer),设置是否开启RACK,默认是1,表示开启。设为0表示关闭RACK,设为1表示开启RACK,设为2表示把RACK的重排序窗口静态化(min_rtt/4),设为3表示禁用RACK的DUPACK阈值探索。RACK(Recent ACKnowledgment)是一种新的基于时间的丢包探测算法,RACK的目的是取代传统的基于dupthresh门限的各种快速重传及其变种。

8. 拥塞控制


  • net.ipv4.tcp_ecn(integer; default: 2; since Linux 2.4),设置是否启用显式拥塞通知(ECN)功能,Linux 2.6.30及之前版本只能设为0或1 ,且默认值是1,Linux 2.6.31及之后版本默认值是2。必须是发送方和接收方同时开启才生效。开启后,路由器在丢弃数据包前必须发出拥塞信号,从而避免因拥塞造成的丢包。设为0表示完全禁用ECN,设为1表示发送和接收请求时都启用ECN,设为2表示仅接收请求时启用ECN,而发送请求时不启用ECN。

  • net.ipv4.tcp_ecn_fallback(Boolean; default: enabled; since Linux 4.1),设置是否回退ECN至No-ECN,默认是1,表示启用。如果内核检测到启用ECN的连接不正常,就会禁用ECN功能。

  • net.ipv4.tcp_congestion_control(String; default: see text; since Linux 2.4.13),设置新建立的TCP连接所使用的默认拥塞控制算法,默认是cubic。算法 "reno"始终可用,但根据内核配置,可能会有其它选择。该文件的默认值是内核配置的一部分。
  • net.ipv4.tcp_allowed_congestion_control(String; default: see text; since Linux 2.4.20),为普通进程设置可选用的拥塞控制算法,默认是reno cubic。该列表是 tcp_available_congestion_control 集合的子集。该列表的默认值是 "reno"加上 tcp_congestion_control 的默认设置。
  • net.ipv4.tcp_available_congestion_control(String; read-only; since Linux 2.4.20),显示已注册的拥塞控制算法列表,默认是reno cubic。该列表是 tcp_allowed_congestion_control 的限制集。
  • net.ipv4.tcp_pacing_ca_ratio(integer),默认值是120。sk->sk_pacing_rate 由 TCP 协议栈使用与当前速率的比率来设置。(current_rate = cwnd * mss / srtt)如果 TCP 处于拥塞避免阶段,则会应用 tcp_pacing_ca_ratio 来保守地探测更大的吞吐量。
  • net.ipv4.tcp_pacing_ss_ratio(integer),默认值是200。sk->sk_pacing_rate 由 TCP 协议栈使用与当前速率的比率来设置。(current_rate = cwnd * mss / srtt)如果 TCP 处于慢启动阶段,则会应用 tcp_pacing_ss_ratio,让 TCP 探测更快的速度,前提是 cwnd 可以每隔一个 RTT 增加一倍。

9. 设置缓冲区(窗口)


发送缓冲区 

  • net.ipv4.tcp_wmem(since Linux 2.4),设置发送缓冲区大小/范围[min, default, max],默认值是“4096  16384  4194304”,3个参数的单位都是byte。TCP会根据可用内存空间大小,在[min, max]范围之间自行动态调节发送缓冲区大小。当发送方发送完所有数据且均被ACK确认后,如果后续没有新的数据需要发送,TCP就会把发送缓冲区的内存释放掉。
    • 第一个值用于设置接收缓冲区的最小值,4096 byte = 4kb。当Socket使用 SO_SNDBUF 设置接收缓冲区最小值时,将不受该参数限制。
    • 第二个值用于设置接收缓冲区的初始默认值,16384 byte = 16kb。该值会盖掉 net.core.wmem_default
    • 第三个值用于设置接收缓冲区的最大值,4194304 byte = 4096kb = 4M。该值不会覆盖 net.core.wmem_max当Socket使用 SO_SNDBUF设置接收缓冲区最大值时,将不受该参数限制,而受net.core.wmem_max限制。
  • net.core.wmem_default:设置系统内核为TCP/UDP发送缓冲区分配的初始内存值,由内核自动调整,不建议修改。默认是212992kb,即208M。该值会被net.ipv4.tcp_wmem覆盖
  • net.core.wmem_max:设置系统内核可为TCP/UDP发送缓冲区分配的内存上限值,由内核自动调整,不建议修改。默认是212992kb,即208M。TCP发送缓冲区最大值不会超过该值

接收缓冲区

  • net.ipv4.tcp_rmem(since Linux 2.4),设置接收缓冲区大小/范围[min, default, max],默认值是“4096  87380  6291456”,3个参数的单位都是byte。TCP会根据可用内存空间大小,在[min, max]范围之间动态调节接收缓冲区大小,但必须将tcp_moderate_rcvbuf设置为1才可开启调节功能。
    • 第一个值用于设置发送缓冲区的最小值,4096 byte = 4kb。当Socket使用 SO_RCVBUF 设置发送缓冲区最小值时,将不受该参数限制。
    • 第二个值用于设置发送缓冲区的初始默认值,87380 byte ≈ 86kb。该值会盖掉 net.core.rmem_default
    • 第三个值用于设置发送缓冲区的最大值,6291456 byte = 6144kb = 6M。该值不会覆盖 net.core.rmem_max当Socket使用 SO_RCVBUF设置发送缓冲区最大值时,将不受该参数限制,而受net.core.rmem_max限制。
  • net.core.rmem_default:设置系统内核为TCP/UDP接收缓冲区分配的初始内存值,由内核自动调整,不建议修改。默认是212992kb,即208M。该值会被net.ipv4.tcp_rmem覆盖
  • net.core.rmem_max:设置系统内核可为TCP/UDP接收缓冲区分配的内存上限值,由内核自动调整,不建议修改。默认是212992kb,即208M。TCP接收缓冲区最大值不会超过该值
  • net.ipv4.tcp_moderate_rcvbuf:(Boolean; default: enabled; since Linux 2.4.17/2.6.7),设置是否开启接收缓冲区动态调整功能,默认是1,表示开启。
  • net.ipv4.tcp_mem(since Linux 2.4),设置TCP的总缓冲区大小/范围,默认值是“42147  56197  84294”,3个参数值单位都是page,1个page是4kb,这些值是在系统启动时根据系统内存大小计算得到的。当 TCP 内存小于第1个值时,接收缓冲区不需要进行自动调节;当内存大小在第1个和第2个值之间时,内核开始调节接收缓冲区的大小;当内存大于第3个值时,内核不再为TCP分配新内存,此时无法继续建立新连接。
  • net.ipv4.tcp_adv_win_scale(integer; default: 1; since Linux 2.4),用于划分网络数据缓存区(TCP window size)和应用缓存区(tcp_app_win)对接收缓冲区的占用比例,默认值是1。TCP Socket 接收缓冲区空间(rmem)由应用程序和内核共享,可以理解成网络数据缓冲区和应用缓冲区,其中网络数据缓冲区对应 TCP 接收窗口,应用缓冲区是 "应用程序 "的缓冲区,用于将网络与调度和应用程序延迟隔离开来。如果tcp_adv_win_scale大于0, 网络数据缓冲区大小为 rmem - rmem >> tcp_adv_win_scale,也就是 rmem - rmem / 2^tcp_adv_win_scale,如果tcp_adv_win_scale小于等于0,网络数据缓冲区大小为 space >> (-tcp_adv_win_scale),也就是 rmem / 2^(-tcp_adv_win_scale)。

窗口放大功能

  • net.ipv4.tcp_window_scaling(Boolean; default: enabled; since Linux 2.2),设置是否开启窗口放大功能。默认是1,表示开启窗口放大功能。如需更大的缓冲区,可以启用窗口放大功能,但需要发送方和接收方同时开启才生效。

应用缓冲区

  • net.ipv4.tcp_app_win(integer; default: 31; since Linux 2.4),该变量用于设置 TCP Window中为应用缓冲区预留的字节数。应用缓冲区大小 = Max(window/2^tcp_app_win, mss) 字节。如果为 0,表示不预留应用缓冲区。

10.其它参数


  • net.ipv4.tcp_autocorking(Boolean; default: enabled; since Linux 3.14),设置是否启用TCP auto corking,默认是1,表示启用。启用该功能后,在进行一些小的写操作时,如果此时Qdisc或驱动的传输队列中的报文数超过1个,内核会尽可能多地合并写入并发送,从而减少发送的数据包数量。Socket可以使用 TCP_CORK 参数来启用或禁用该特性。
  • net.ipv4.tcp_limit_output_bytes(integer)用于设置TCP Small Queue队列长度,TSQ属于Qdisc的一种,默认值是262144。
  • net.ipv4.tcp_invalid_ratelimit(integer)用于限制响应无效TCP报文(无效的序列号、无效的确认号、PAWS 校验失败)时的重复确认最大速率,默认值是500ms。
  • net.ipv4.tcp_mtu_probing(integer; default: 0; since Linux 2.6.17),用于控制TCP Packetization-Layer Path MTU Discovery,默认值是0。可选值有3个,设为0表示禁用,设为1表示默认情况下禁用,当检测到ICMP黑洞时才启用,设为2表示始终启用,且使用tcp_base_mss设置的初始MSS。
  • net.ipv4.tcp_base_mss(Integer; default: 512; since Linux 2.6.17),用于设置分组层路径MTU探测时使用的 search_low 初始值。如果启用了MTU探测,该值也是初始MSS大小,默认值是1024。

  • net.ipv4.tcp_challenge_ack_limit(integer),该参数用于限制每秒发送的Challenge  ACK的数量,默认值是1000。为防止 “blind in-window”攻击(合法窗口盲打), RFC5961引入Challenge ACK,用以提要TCP连接的稳健性。4.9 已建立连接的TCP,收到SYN会发生什么?

  • net.ipv4.tcp_early_demux(Boolean),设置是否为已建立的连接开启提前分流功能,默认是1,表示开启。

  • net.ipv4.tcp_frto(integer; default: see below; since Linux 2.4.21/2.6),设置是否开启Forward RTO-Recovery (F-RTO),默认值是2。设为0表示禁用F-RTO,设为1表示开启基本版F-RTO,设为2表示开启增强版F-RTO。F-RTO是一种针对TCP超时重传(RTOs)的增强恢复算法,在RTT波动较大的网络(例如无线)中开启F-RTO效果更佳。

  • net.ipv4.tcp_fwmark_accept(Boolean),设置是否启用fwmark来接收数据包,默认是0,表示禁用。

  • net.ipv4.tcp_l3mdev_accept(Boolean),设置子套接字是否继承L3主设备索引,默认是 0,表示禁用。启用该选项允许“全局”监听套接字跨L3主域(例如,VRFs)工作,其中从监听套接字导出的连接套接字被绑定到发起分组的L3域。仅在内核用CONFIG_NET_L3_MASTER_DEV编译时有效。

  • net.ipv4.tcp_low_latency(Boolean; default: disabled; since Linux 2.4.21/2.6; obsolete since Linux 4.14),Linux 4.14 版本以后已取消该参数。如果启用,TCP堆栈会优先选择较低的延迟,而不是较高的吞吐量。如果禁用此选项,则首选较高的吞吐量。默认是0,表示禁用。

  • net.ipv4.tcp_reordering(integer; default: 3; since Linux 2.4),设置TCP流中数据包的重排序初始/最小级别,默认值是3。TCP协议栈会在初始值和tcp_max_reordering之间动态调整重排序级别。

  • net.ipv4.tcp_max_reordering(integer; default: 300; since Linux 2.4),设置TCP流中数据包的重排序最大级别,默认值是300。

  • net.ipv4.tcp_min_rtt_wlen(integer),用于跟踪最小RTT的窗口化最小滤波器的窗口长度,单位是秒,默认值是300秒。较小的窗口可让流量在移动到较长的路径(如由于流量工程)时更快地获得新的(较高的)最小 RTT。窗口越大,过滤器越有能力抵御 RTT 激增(如瞬时拥塞)。

  • net.ipv4.tcp_min_snd_mss(integer),如 RFC 1122 和 RFC 6691 所述,TCP SYN 和 SYN+ACK 报文通常会公布一个 ADVMSS 选项。如果 ADVMSS 选项小于 tcp_min_snd_mss,它的上限值则默认是 tcp_min_snd_mss。默认是48字节。

  • net.ipv4.tcp_min_tso_segs(integer),设置每个 TSO 帧的最小段数,默认值是2。自 linux-3.12 起,TCP 会根据流量自动调整 TSO 帧的大小,而不是填充 64K 字节的数据包。对于特定用途,可以强制 TCP 构建较大的 TSO 帧。请注意,如果可用窗口太小,TCP 协议栈可能会分割较大的 TSO 数据包。

  • net.ipv4.tcp_no_metrics_save(Boolean; default: disabled; since Linux 2.6.6),设置是否不缓存连接指标,默认是0,表示禁止不缓存,也就是会缓存连接指标。默认情况下,TCP会在连接关闭时将各种连接指标保存在路由缓存中,以便在不久的将来建立新的连接时可以使用这些指标来设置初始条件。 这通常会提高整体性能,但有时也会导致性能下降。如果开启该参数,TCP 将不会在连接关闭时缓存指标。

  • net.ipv4.tcp_notsent_lowat(unsigned integer),默认值是4294967295。借助 TCP_NOTSENT_LOWAT 套接字选项,TCP 连接可控制写入队列中未发送字节的数量。如果未发送字节的数量低于每个套接字的值,并且写入队列未满,poll()/select()/epoll() 就会报告 POLLOUT 事件。如果达到限制,sendmsg() 也不会添加新的缓冲区。该全局变量用于控制未使用 TCP_NOTSENT_LOWAT 的套接字的未发送数据量。对于这些套接字,全局变量的更改会立即生效。

  • net.ipv4.tcp_probe_interval(unsigned integer),设置启动 TCP Packetization-Layer Path MTU Discovery 的频率,默认是600秒探测一次。默认情况下,根据 RFC4821,每 10 分钟重测一次。

  • net.ipv4.tcp_probe_threshold(integer),设置 TCP Packetization-Layer Path MTU Discovery 何时停止(以字节为单位的搜索范围宽度),默认是8字节。

  • net.ipv4.tcp_retrans_collapse(Boolean; default: enabled; since Linux 2.2),设置是否要与一些损坏的打印机实现 "Bug-to-bug "兼容,默认是1,表示开启。重新传输时,尝试发送更大的数据包,以解决某些 TCP 协议栈中的错误。

  • net.ipv4.tcp_rfc1337(Boolean; default: disabled; since Linux 2.2),设置TCP协议栈的行为是否与RFC1337保持一致,默认是0,表示不启用,不保持一致。启用该参数时,TCP 协议栈的行为将与 RFC1337 一致。禁用该参数时,TCP将不遵守 RFC,如果在 TIME_WAIT 状态下收到 RST,会立即关闭套接字,而不会等待 TIME_WAIT 周期结束。

  • net.ipv4.tcp_slow_start_after_idle(Boolean; default: enabled; since Linux 2.6.18),默认是1,表示开启。如果启用,则提供 RFC 2861 行为,并在空闲期后超时拥塞窗口。 空闲时间定义为当前的 RTO。 如果禁用,拥塞窗口不会在空闲期后超时。

  • net.ipv4.tcp_stdurg(Boolean; default: disabled; since Linux 2.2),默认是0,表示禁用。使用Host要求对 TCP 紧急指针字段的解释。大多数主机使用的是较早的 BSD 解释,因此如果打开此选项,Linux 可能无法与它们正确通信。

  • net.ipv4.tcp_thin_linear_timeouts(Boolean),设置是否启用窄数据流线性超时的动态触发,默认是0,表示禁用。如果启用该参数,则会在超时重传时进行检查,以确定数据流是否较小(数据包少于 4 个)。只要发现数据流较小,就可以执行多达 6 次线性超时,然后再启动指数回退模式。这可以改善非攻击性窄数据流的重传延迟,因为窄数据流通常与时间有关。

  • net.ipv4.tcp_tso_win_divisor(integer; default: 3; since Linux 2.6.9),设置单个 TSO 帧占用拥塞窗口的百分比,默认值是3。该参数的设置是在突发和构建较大 TSO 帧之间的权衡。

  • net.ipv4.tcp_workaround_signed_windows(Boolean; default: disabled; since Linux 2.6.26),默认是0,表示禁用。如果启用,则认为未收到窗口缩放选项意味着远程 TCP 已损坏,并将窗口视为带符号的量。如果禁用,则认为即使我们没有收到远程 TCP 的窗口缩放选项,远程 TCP 也没有损坏。

  • 24
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值