/proc 接口概述
       所有系统级的同产品参数设置都保存在  /proc/sys/net/ipv4/ 目录下.  另外家需要注意的是,很多对于 ip 的内核参数设置也会对 tcp 的行为产生影响.具体请参考linux 对于 ip 参数的帮助手册. 参数通常使用一个整形值来代表布尔型,设置为 0 时通常表示 "false",对应的一个非零值则表示 ("true").


 

tcp_abc

       (Integer; default: 0; Linux 2.6.15 to Linux 3.8)
       控制在 RFC 3465 上定义的 Appropriate Byte Count (ABC), 该值是一个用于在接收到部分 ACK 情况下 缓慢地增长拥塞窗口(cwnd),RFC3465给出了ABC算法,在ABC中,使用被ACK的字节数而不是ACK的数量来作为增窗的反馈信号.可用的值有:

              0  每个 ACK 增加一个 cwnd (不开启 ABC);

              1  每当被ACK的数据字节数达到了一窗的大小即增加一个 cwnd ;

              2  允许补偿延迟发送的 ACK,当接收到2窗大小字节数的 ack 时, 增加 2个 cwnd .

 

参考:https://blog.csdn.net/dog250/article/details/51348568


tcp_abort_on_overflow

       (Boolean; default: disabled; since Linux 2.4)
       当一个服务器进入瓶颈响应太慢或者无法进行accept时,重置连接. 这意味着如果应为突发流量导致overflow,该链接可以被恢复. 仅在你已经确定启用 listen 的服务已经无法针对接受连接的速率做进一步调优的情况下启用该配置.因为启用该配置后配置可能会误伤客户端.


tcp_adv_win_scale

        (integer; default: 2; since Linux 2.4)
       如果 tcp_adv_win_scale 大于 0,则使用 bytes/2^tcp_adv_win_scale 方式计算缓存开销,否则(tcp_adv_win_scale <=0>)则使用 bytes-bytes/2^(-tcp_adv_win_scale) 的公式计算.

       tcp socket 的接收缓存空间是应用与内核共享的, 其中归于 tcp 维护的部分即是 TCP 的 window, 该 window 作为可接收的 window ,tcp 将其通告给对端. 剩余部分用作应用缓存,用于将网络与 调度和应用的延迟 隔离开. tcp_adv_win_scale 默认值为 2, 标识 1/4 大小的用于应用的缓存.


tcp_allowed_congestion_control

        (String; default: 见文本说明; since Linux 2.4.20)
       该选项用于查看和设置非特权进程的可用的拥塞控制算法(参考 TCP_CONGESTION socket 选项). 使用空格键分割列表中个元素,使用换行结束. 这里配置的列表必须是参数 tcp_available_congestion_control 中列表的子集.  该选项值列表的默认值是 "reno" 加上 tcp_congestion_control 参数中的配置值.

tcp_available_congestion_control

        (String; read-only; since Linux 2.4.20)

        展示已经注册的可用的拥塞控制算法列表.使用空格键分割列表中个元素,用换行结束.这是限制在 tcp_allowed_congestion_control 中可用的配置的算法集合.更多的拥塞控制算法可以通过 内核模块的方式提供和加载,这里没有提及.

tcp_congestion_control

        (String; default: see text; since Linux 2.4.13)

        设置用于新建连接的默认拥塞控制算法.  "reno" 总是可用的, 额外的选择的则取决于对该配置. 该选项将被作为系统内核配置的一部分.

[root@CQDC ~]# cat /proc/sys/net/ipv4/tcp_allowed_congestion_control
cubic reno
[root@CQDC ~]# cat /proc/sys/net/ipv4/tcp_available_congestion_control
cubic reno
[root@CQDC ~]# cat /proc/sys/net/ipv4/tcp_congestion_control
cubic

tcp_autocorking

        (Boolean; default: enabled; since Linux 3.14)
       启用时,内核将尽可能多的合并小块的写操作用来减少发包的数量 (from consecutive write(2) and sendmsg(2) calls) .  当至少有一个以前的包在队列规则(Qdisc)或者设备的传送队列中时,合并生效. 应用程序依然可以自行设置socket的 TCP_CORK 选项来优化其行为使其在适当的情况下不要执行合并操作.


tcp_app_win

        (integer; default: 31; since Linux 2.4)
       该变量定义了 TCP 窗口中多少字节用于缓存开销.设置为非零整数时,最大 (window/2^tcp_app_win, mss) 字节将被保留为应用的缓存开销,  设置为0则表示不预留.


tcp_base_mss

        (Integer; default: 512; since Linux 2.6.17)
       打包分组层路径 MTU 探索(MTU probing) 机制中 search_low 参数的起始值.如果启用了MTU probing,这是连接使用的起始 MSS.


tcp_bic

        (Boolean; default: disabled; Linux 2.4.27/2.6.6 to 2.6.13)
       启用 BIC-TCP 拥塞控制算法.  BIC-TCP 是一个仅发送方变更的算法,该算法在提供与tcp优化集成与扩展性的情况下确保大窗口下的RTT线性公平.该协议包含2套方案分别是 叠加增长(additive increase) 和 二分查找增长(binary search increase).当拥塞窗口很大时,叠加增长大幅增加确保了线性 RTT 公平性和可扩展性. 在小窗口拥塞的情况下, 二分查找增长提供了tcp的友好性.

tcp_bic

        (integer; default: 14; Linux 2.4.27/2.6.6 to 2.6.13)
       设置一个BIC TCP 算法生效的窗口最低阈值(单位是 packet数量). 低于该阈值时 BIC TCP和默认的 TCP Reno 表现一致.

tcp_bic_fast_convergence

        (Boolean; default: enabled; Linux 2.4.27/2.6.6 to 2.6.13)
        强制 BIC TCP 在拥塞窗口发生变化时更快地做出响应. 允许共享一个连接的两个流可以更快收敛.


tcp_dma_copybreak

        (integer; default: 4096; since Linux 2.6.24)
       如果系统和内核配置中已经存在 CONFIG_NET_DMA 选项的配置值,该配置项提供一个以 字节为单位的下限值配置,指示socket的读操作可以被卸载到 DMA复制引擎 的大小.


tcp_dsack

        (Boolean; default: enabled; since Linux 2.4)
        启用 RFC 2883 中对于 TCP Duplicate SACK 机制的支持.


tcp_ecn

        (Integer; default: see below; since Linux 2.4)
       启用 RFC 3168 中 显式拥塞通告 Explicit Congestion Notification (ECN)机制.

       允许的配置值及含义如下:

              0      不启用 ECN. 不会发起或接受 ECN.  这是 Linux 2.6.30及以前版本的默认配置.

              1      当被动建立连接对端要求开启时启用 ECN,当主动发起连接时,尝试要求对端开启ECN.

              2      当被动建立连接,对端要求开启时启用 ECN,当主动发起连接时,不尝试要求对端开启ECN. 这是自 Linux 2.6.31
                     开始支持的特性,且被设置为默认值

       当该项功能开启时, 与某些目标端的连接可能被之前的连接所影响,一些沿途路径上的设备的误操作可能导致连接丢失.但是为了鼓励利用模式 1 并处理这项漏洞, linux 又引入了 tcp_ecn_fallback 选项

tcp_ecn_fallback

        (Boolean; default: enabled; since Linux 4.1)
       启用 RFC 3168 中 6.1.1.1.章节的 fallback 特性.  该特性启用时,出站的 ECN-setup SYN 数据包如果超出了标准的 SYN 重传超时时间,将会在重传时清除 CWR and ECE.
       这个参数设置为非0时,如果内核侦测到ECN的错误行为,就会关闭ECN功能。 这个参数实际上是控制后向兼容的一个参数,TCP建立连接的时候需要进行ECN协商过程,SYN报文中需要同时设置CWR和ECE标志位,如果tcp_ecn_fallback设置为非0,那么重传SYN报文的时候就会取消CWR和ECE标志的设置

参考:https://www.cnblogs.com/lshs/p/6038839.html


tcp_fack

        (Boolean; default: enabled; since Linux 2.2)
        启用 TCP Forward Acknowledgement 支持.

参考:https://www.cnblogs.com/lshs/p/6038562.html


tcp_fin_timeout

        (integer; default: 60; since Linux 2.2)
       该选项描述了系统将在等待最后的 FIN 报文多久后强制关闭该 socket.可以用来防止DOS攻击.在Linux 2.2中, 默认值是180s


tcp_frto

        (integer; default: 见下文; since Linux 2.4.21/2.6)
       启用 F-RTO, 一个用于计算 TCP 重传超时时间(RTO)的加强算法.该算法在面对无线连接中信号干扰造成的丢包时尤为有效, 参考 RFC 4138 查看更多细节.

       允许的配置值及含义如下:

              0  关闭.  Linux 2.6.23及以前的版本,这是默认值.

              1  开启 F-RTO 基础版本算法.

              2  如果流使用SACK,那么开启使用 SACK 增强的 F-RTO算法. 当启用SACK时,也可以使用基础版本,但这种情况下,启用了SACK的TCP流中会存在一些 F-RTO 交互计算包时表现不佳的情形. 从Linux 2.6.24版本以后,该值为默认配置.

       注意 Linux 2.6.22及以前的版本, 该参数仅支持 Boolean 值(0和1).

tcp_frto_response

        (integer; default: 0; since Linux 2.6.22)
        当 F-RTO 检测到一个tcp重传超时时间不太准确(虚假)时,(例如, the timeout would have been avoided had TCP set a longer retransmission timeout), TCP可以根据选项决定接下来的处理办法:

              0  减半; 平滑而保守的反应,将拥塞窗口(cwnd)和慢启动阈值(ssthresh)在一个 RTT后设置为原来的一般.

              1  非常保守的处理方式; 虽然不推荐但依然可用, 和剩余的不良的Linux TCP交互, 立即将 cwnd and ssthresh 减半.

              2  较为进取的处理方式; 不做已知无用的拥塞控制测量 (忽悠可能存在的重传丢失); cwnd and ssthresh将被恢复到之前的值.


tcp_keepalive_intvl

        (integer; default: 75; since Linux 2.4)
       发出 TCP keep-alive 探测报文的间隔时间(秒).

tcp_keepalive_probes

        (integer; default: 9; since Linux 2.2)
       指定最大数量的 TCP keep-alive 探测包发送后依然没有收到对端回复的连接将被放弃并杀掉.

tcp_keepalive_time

        (integer; default: 7200; since Linux 2.2)
       tcp连接处于 idle状态多长时间(秒)后发送 keep-alive 探测报文. 只有在 socket上设置了SO_KEEPALIVE 选项的才会发送 Keep-alive. 默认值是 7200 秒(2 小时). 在 keep-alive 开启时一个空闲连接在该选项时间加上 11 分钟(9次间隔 75 秒的探测).

       注意,连接状态跟踪分析和应用的超时可能远远短于该时间.


tcp_low_latency

        (Boolean; default: disabled; since Linux 2.4.21/2.6;obsolete since Linux 4.14)
       启用时,TCP 协议栈将更倾向于低延迟的处理方式. 如果禁用该选项,则更倾向与高吞吐量.修改该配置的一个例子是一个 Beowulf 计算集群. Linux 4.14版本以后, 该配置文件虽然还在,但是其值不会发生任何作用.


tcp_max_orphans

        (integer; default: see below; since Linux 2.4)
       系统中可以存在的最大数量的孤儿 TCP socket 数量orphaned (没有与任何用户文件关联) .当超出此数量时,孤儿连接将被 RESET并且打印一条警告.  该限制用于防止 DOS 攻击. 不建议降低该配置的值.实际网络条件可能会迫使你增加该配置的值, 但是注意每一个孤儿socket可能会占用最高 ~64 kB不可交换的内存空间.  起始默认值被设置为等于内核参数的 NR_FILE. 可以根据系统的内存大小调节该值.

tcp_orphan_retries

        (integer; default: 8; since Linux 2.4)

         尝试探测由本端主动关闭的连接的对端的最大次数.


tcp_max_syn_backlog

        (integer; default: see below; since Linux 2.2)

   服务端被动建立连接段尚未收到客户端ACK的连接数量. 超过该值后,内核开始丢弃连接. 默认值是256,如果系统可用内存>=128MB,将会增加到1024;如果内存小于32MB,将会减少到128.

   在 Linux 2.6.20 之前, 如果需要调整该值至 1024 以上, 需要将include/net/tcp.h 文件中的 SYNACK hash table表大小定义 (TCP_SYNQ_HSIZE) 修改满足:TCP_SYNQ_HSIZE * 16 <= tcp_max_syn_backlog,然后重新编译内核.在 Linux 2.6.20 之后,为了动态设置该值,文件中关于TCP_SYNQ_HSIZE的定义被移除.


tcp_max_tw_buckets

   (integer; default: see below; since Linux 2.4)
   系统中允许的处于 TIME_WAIT 状态 socket 的数量的最大值. 主要用于防止DOS攻击. 默认值是基于系统中的内存大小: NR_FILE*2 .超过该数量后,socket将被关闭并打印一条警告.


tcp_moderate_rcvbuf

   (Boolean; default: enabled; since Linux 2.4.17/2.6.7)
   启用后, TCP 将自动调整接收缓存的大小,尝试自动调整缓存大小来匹配最大吞吐量的要求(最大不会超过 tcp_rmem 大小)


tcp_mem

   (since Linux 2.4)
   3个整形数的向量: [low, pressure, high]. 这些边界条件的单位是系统的内存页的尺寸,主要被TCP用来追踪器内存的使用情况.默认是启动时从可用内存计算得来.tcp只能使用低于该配置值的内存,在32位系统上,大概会限制在900MB,64位系统则不受此限制.

low 配置值:
   当使用的内存量低于该限制时,底层的tcp不需要自行控制内存申请,因为这些内存已经被预先分配好了.

pressure 配置值:
   当TCP 申请使用的内存超过该数量的内存页时,tcp将减缓其内存消耗内存的速度,该压力状态 将在使用的内存页数降低到low 配置值以下时消失.

high 配置值:

   TCP可用的全局最大内存页数量, 该配置值将覆盖任何内核强加的其他限制.


tcp_mtu_probing

  (integer; default: 0; since Linux 2.6.17)
   该参数控制 TCP 封包层的 Path MTU Discovery 功能启用与否. 可用配置如下:

0 不启用

1 默认不启用, 当检测到 ICMP 黑洞是启用.

2 总是启用, 使用 tcp_base_mss 作为 initial MSS .


tcp_no_metrics_save

       (Boolean; default: disabled; since Linux 2.6.6)

       默认情况下, TCP 会在连接关闭时在路由项的cache中存储各连接的 metric值,这样最近的将来可以直接复用这些值作为起始条件.通常情况下,这么做做可以提升性能,但也有一些特殊情况下可能造成性能损失.关闭该选项,TCP将不会在acache中保存关闭的TCP连接的metric值.


tcp_reordering

        (integer; default: 3; since Linux 2.4)

        TCP在没有假设数据包丢并进入慢启动状态下,一个TCP流中允许重排(reorder)的最大值.不建议修改这个值.这是一个重排检测指标,用来最小化由链接中的包重排造成的不必要的回退和重传.


tcp_retrans_collapse

        (Boolean; default: enabled; since Linux 2.2)

        重传的时候尝试合并小报文至一个较大的报文.


tcp_retries1

        (integer; default: 3; since Linux 2.2)

        TCP在一个已经建立的连接上尝试重传一个包的最小次数,不包含获取关联网络层的额外动作.一旦我们超过了这个重传次数,TCP将在每次重传前尝试要求网络层更新路由.默认值是RFC指定的最小值:3.

tcp_retries2

        (integer; default: 15; since Linux 2.2)
        TCP在一个已经建立的连接上尝试重传一个包的最大次数.  默认值是 15,根据重传超时时间,这大概在13到30分钟之间, RFC 1122 指定的最小值是 100 秒,实在是太小了.


tcp_rfc1337

        (Boolean; default: disabled; since Linux 2.2)
        TCP 是否符合 RFC 1337.  不启用时,如果在 TIME_WAIT状态受到一个 RST 将立即关闭socket,而不再等待 TIME_WAIT的周期结束.


tcp_rmem

       (since Linux 2.4)
       由3个整形数组成的向量: [min, default, max]. TCP用这些参数来控制接收缓存的大小.TCP 根据实际可用的内存和此处的配置.遵循以下列出的规则来动态调整接收缓存的大小.

    min   

          每个TCP socket 使用的最小的接收缓存大小.默认值就是内存页的大小.(在Linux 2.4, 默认为 4 kB, 在低内存的系统上可能低于 PAGE_SIZE 的大小 .) 该值主要用于在内存压力模式下,确保内存分配能够成功. 可以再 socket中设置 SO_RCVBUF 选项使该参数配置失效.

    default
         每个TCP socket 使用的默认的接收缓存大小.该参数配置会覆盖定义在 net.core.rmem_default 配置中为所有协议定义的默认接收缓存大小配置作为起始的默认值. 默认大小为 87380 bytes.  (在 Linux 2.4, 在低内存的系统上可能被调低到 43689 字节.) 调高该值会影响所有的TCP socket.  想要实施更大的 TCP windows, 必须配置启用 net.ipv4.tcp_window_scaling(默认为启用) .

      max  

         每个TCP socket 使用的最大的接收缓存大小. 该配置不能覆盖全局配置 net.core.rmem_max. 也不会覆盖在socket 中设置的 SO_RCVBUF 选项指定的大小. 该值使用以下函数算出:max(87380, min(4 MB, tcp_mem[1]*PAGE_SIZE/128)).

          (在 Linux 2.4, 默认是 87380*2 bytes, 低内存的系统可能调低至 87380).

 

cp_wmem

(since Linux 2.4)
       由3个整形数组成的向量: [min, default, max]. TCP用这些参数来控制发送缓存的大小.TCP 根据实际可用的内存和此处的配置.遵循以下列出的规则来动态调整发送缓存的大小.

 min   

       每个TCP socket 使用的最小的接收缓存大小.默认值就是内存页的大小.(在Linux 2.4, 默认为 4 kB, 在低内存的系统上可能低于 PAGE_SIZE 的大小 .) 该值主要用于在内存压力模式下,确保内存分配能够成功. 可以再 socket中设置 SO_SNDBUF选项使该参数配置失效.

 default
         每个TCP socket 使用的默认的发送缓存大小.该参数配置会覆盖定义在 /proc/sys/net/core/wmem_default 配置中为所有协议定义的默认发送缓存大小配置作为起始的默认值. 默认大小为 16 kB.想要实施更大的 TCP windows, 必须将 /proc/sys/net/ipv4/tcp_window_scaling 配置为非零值(default).

  max  

        每个TCP socket 使用的最大的发送缓存大小.  该配置不能覆盖全局配置 /proc/sys/net/core/wmem_max.  也不会覆盖在socket 中设置的 SO_SNDBUF 选项指定的大小 . 使用以下函数算出: max(65536, min(4 MB, tcp_mem[1]*PAGE_SIZE/128)).

         (在 Linux 2.4, 默认是 128 kB,低内存的系统可能调低至 64 kB .)


tcp_sack

         (Boolean; default: enabled; since Linux 2.2)

         启用 RFC 2018 TCP 选择确认机制.

参考:https://www.cnblogs.com/lshs/p/6038555.html


tcp_slow_start_after_idle

(Boolean; default: enabled; since Linux 2.6.18)
        启用后,提供 RFC 2861 描述的机制,在一个空闲周期后将拥塞窗口超时.  空闲周期即是当前的 RTO (重传超时时间).  如果禁用, 在一个空闲周期后将拥塞窗口不会超时.


tcp_stdurg

(Boolean; default: disabled; since Linux 2.2)
        启用该项,那么 将使用 RFC 1122 描述的 TCP urgent-pointer 字段的解释.  根据该解释,紧急指针应该指向紧急数据的最后一字节

       若禁用该项,则使用 BSD-compatible 的关于紧急指针(urgent-pointer)的解释:紧急指针应该指向紧急数据的第一字节.
       启用该选项可能导致交互的兼容性问题.


tcp_syn_retries

(integer; default: 6; since Linux 2.2)
        一个主动发起的TCP连接将会尝试重传发送 初始SYN 的最大次数.  需要小于 255.  默认值是 6, 大概最长持续 127 秒.在 Linux 3.7 以前, 默认值是 5, 大约持续180秒 (结合其他内核参数进行计算).
 


tcp_synack_retries

(integer; default: 5; since Linux 2.2)
          一个被动接受的TCP 连接尝试重传发送 SYN/ACK 的最大次数.  不得高于255.


tcp_syncookies

(Boolean; since Linux 2.2)
              启用 TCP syncookies.  只有使用 CONFIG_SYN_COOKIES 参数编译的内核才能使用该选项. 当一个 TCP socket 的Syn lacklog 队列溢出时,发送 syncookies . 该特性用于避免系统受到SYN flood攻击.  这应该被当做最后的手段来使用!  这违反了TCP协议, 并且和 TCP 的其他部分比如 TCP 扩展相冲突.  可能导致客户端或者中继发生一些问题.不推荐将此作为一个重载服务器上作为一个调优手段,可以尝试使用其他配置来代替该选项达成效果( tcp_max_syn_backlog, tcp_synack_retries, 和 tcp_abort_on_overflow)


tcp_timestamps

(integer; default: 1; since Linux 2.2)
        设置为以下值之一来启用 RFC 1323 描述的 TCP 时间戳功能特性:

              0  禁用时间戳特性.

              1  启用 RFC1323 中阐述的时间戳特性,每个链接不使用当前时间而是用随机偏移.

              2  在 Linux 4.10 及以后版本,该配置启用时间戳特性单不使用随机偏移.


tcp_tso_win_divisor

(integer; default: 3; since Linux 2.6.9)
       该配置控制一个单独的 TCP Segmentation Offload(TSO)帧可以消费拥塞窗口的百分比.  该选项是为了获取突发性能和构建更大的TSO帧的平衡.


tcp_tw_recycle

(Boolean; default: disabled; Linux 2.4 to 4.11)
       快速回收处于 TIME_WAIT 状态的 sockets.  在远端IP不能正确使用时间戳递增规则的情况下不建议使能该选项(处于NAT之后的设备,其时间戳不能同步并遵守递增规则).  参考 RFC 1323(PAWS) 和 RFC 6191.


tcp_tw_reuse

(Boolean; default: disabled; since Linux 2.4.19/2.6)
      确保协议层面安全的情况下允许重用处于 TIME_WAIT 状态的 sockets 作为新建连接 请在技术专家的指导下使用.

仅在使能了 tcp_timestamps 时才会生效,该配置对于主动建立连接方即客户端才有效.

参考:https://blog.csdn.net/bestjie01/article/details/107763946


tcp_vegas_cong_avoid

(Boolean; default: disabled; Linux 2.2 to  2.6.13)
       启用TCP Vegas 拥塞避免算法.  TCP Vegas是一个针对发送方单边实施的 从评估带宽方面招收的算法.  TCP Vegas 通过修改拥塞窗口(cwnd)来调整发送速率.  TCP Vegas改善了丢包情况, 但是不如 TCP Reno 那样有进取性.

参考:https://www.cnblogs.com/aiwz/archive/2012/03/02/6333390.html


tcp_westwood

(Boolean; default: disabled; Linux 2.4.26/2.6.3 to 2.6.13)
        启用 TCP Westwood+ 拥塞控制算法.  TCP Westwood+ 是一个发送方的单边算法, 通过修改 TCP Reno 协议栈来优化 TCP拥塞控制的性能.  它在一段拥塞后基于端到端的带宽测量来设置拥塞窗口(cwnd)和慢启动的阈值(ssthreshold) . Using this estimation, TCP Westwood+ 自适应的根据拥塞时的带宽来 设置 拥塞窗口(cwnd)和慢启动的阈值(ssthreshold). TCP Westwood+相比 TCP Reno 显著增加了有线网络的公平性和无线链路的吞吐量.

参考: https://blog.csdn.net/sinat_20184565/article/details/107040927


tcp_window_scaling

(Boolean; default: enabled; since Linux 2.2)
       启用 RFC 1323 TCP 窗口缩放特性(window scaling).  该特性允许在TCP连接上使用一个大窗口 (> 64 kB) ,只要另一端支持!  正常情况下 TCP 包头的16 bit window 字段长度限制了窗口大小应该小于 64 kB. 想要更大的窗口, 应用增大其 socket buffers 并启用该选项. 

       不启用该配置时,TCP 不会和对端在连接建立时协商 window scaling .


tcp_workaround_signed_windows

(Boolean; default: disabled; since  Linux 2.6.26)
       启用时, 本端没有从对方收到 window scaling 选项时 假设对端的TCP 已经出故障, 并将窗口视为一个指定的值

       禁用时, 假设对端 TCP 没有出问题尽管本端没有从对方收到 window scaling 选项.

 

Logo

更多推荐