TCP/IP 参数配置详解

了解LINUX TCP/IP的参数配置是网络性能调优的前提,但是要清楚的记得这几十个参数也不容易,为了方便下次查看,所以查找了linux的manual手册和网上的资料。主要列出了“/proc/sys/net/ipv4”下面的参数。

1.IP 参数

ip_always_defrag: 在LINUX早期的版本中出现,现在已经没有了,就不作说明了。

ip_autoconfig:这个没有文档说明。

ip_default_ttl (整数; 默认值:64; since Linux 2.2):这个是IP数据报的最大生存周期, 默认为64,每经过一个路由器减1,直到为0,数据包丢掉。可以针对每个socket进行设置。

ip_dynaddr (布尔;  默认值: 0(disabled); since Linux 2.0.31):开启动态的socket IP 地址,可以伪装网口的地址为新的IP 地址,主要用于拨号上网。 0 表示disable, 1表示enable,2表示开启冗余模式。

ip_forward (布尔; 默认值:disabled; since Linux 1.2):开启IP地址的转发功能,也可以针对每个网口进行设置, (目标地址不可达的数据报,不会转发)。

ip_local_port_range (since Linux 2.2):这个文件包含了两个数值用来表示本地端口的取值范围,如果在这范围的临时端口号用完,系统会出错。这个端口区间不会和伪造的端口产生冲突。但是任意选择端口区间也是有问题的,一般要大于1024,最好是大于4096。这样避免与公用的端口冲突,也会减小防火墙对其的影响。

ip_no_pmtu_disc (布尔; 默认值: disabled; since Linux 2.2):如果开启功能,将不做路径MTU探测功能。由于网络防火墙可能丢包,路由器有故障,导致路径MTU探测失败。但是最好的办法还是解决路由故障,而不是关掉这个功能,不做路径MTU探测将导致网络消耗过大。

ip_nonlocal_bind (布尔; 默认值: disabled; since Linux 2.4):如何开启,将会允许socket绑定非本地的IP,这个有时非常有用,但是可能会导致上层应用程序错误。
    ●ip6frag_time (整数; 默认值: 30): 保存IPV6 分片包在内存中的时间,以秒为单位。
    ●ip6frag_secret_interval (整数; 默认值: 600):重生IPV6分片包的hash secret 间隔时间,以秒为单位。
    ●ipfrag_high_thresh (整数), ipfrag_low_thresh (整数):如果IP 分片队列达到了ipfrag_high_thresh,这个队列将会被减少为 ipfrag_low_thresh, 包含具有字节数的整数。

2.TCP 参数

tcp_abc(整数; 默认值: 0; Linux 2.6.15 to Linux 3.8): 控制适当字节数,定义在RFC 3465, ABC是一种针对部分确认应答减慢增长拥塞窗口(cwnd)的方法。可能的值有 0: 每个确认应答增加拥塞窗口(cwnd)(没有开启ABC) 1: 每一个最大传输段应答增加拥塞窗口一次。 2:允许增加拥塞控制窗口两次,如果应答是为了补偿延时应答的针对两个段的应答。

tcp_abort_on_overflow (布尔; 默认值: disabled; since Linux 2.4): 如果监听服务太慢并且不能持续接收服务,将开启重连。 这意味着如果发生突发溢出,这个连接将会被恢复。开启这个选项仅当你确信这个监听守护进程不能被调整到更快的接收服务。开启这个选项将伤害到客户端。
    ●tcp_adv_win_scale (整数; 默认值: 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)。 socket 接收缓存空间是在应用程序和内核之间分享的, TCP维护部分缓存作为TCP窗口,这个接收窗口大小被用于通告连接对端。剩下的缓存空间作为应用程序缓存,用于隔离网络的调度和应用程序延迟.tcp_adv_win_scale默认值是2,表明了应用程序的缓存占总缓存的1/4。

tcp_allowed_congestion_control(字符串; 默认值: see text; since Linux 2.4.20):显示/设置可用的拥塞控制算法选项非特权的进程(请参阅TCP_CONGESTION)。列表中的项目是由空格分隔并由换行符终止。该列表是列在其中的一个子集tcp_available_congestion_control。这个列表的默认值是“reno”加上默认设置tcp_congestion_control。

tcp_autocorking (布尔; 默认值: enabled; since Linux 3.14): 如果选项开启,内核为了减少发送包的数量,会尝试尽可能多的合并小的写入。至少一个数据包在Qdisc或设备传输队列等待,才能进行合并。应用程序也可以通过在socket中设置TCP_CORK来优化自己的行为。
    ●tcp_available_congestion_control (字符串; read-only; since Linux2.4.20): 这是一个注册的拥塞控制算法列表,每一项是被空格分隔并由换行符终止。这个列表是tcp_allowed_congestion_control的限制集,更多的算法会被当作模块可用,但是不会被加载进去。
    ●tcp_app_win (整数; 默认值: 31; since Linux 2.4):该变量定义了多少TCP窗口字节被用于做缓存开销。最大值为(window/2^tcp_app_win, mss), 0表示没有保留。
    ●tcp_base_mss (整数; 默认值: 512; since Linux 2.6.17):search_low的初始值, 被用于MTU路径探测,如果MTU路径探测开启,这个初始MSS将被连接使用。

tcp_bic (布尔; 默认值: disabled; Linux 2.4.27/2.6.6 to 2.6.13):开启BIC TCP拥塞控制算法。BIC-TCP的提出者们发现了TCP拥塞窗口调整的一个本质:那就是找到最适合当前网络的一个发送窗口,为了找到这个窗口值,TCP采取的方式是(拥塞避免阶段)每RTT加1,缓慢上升,丢包时下降一半,接着再来慢慢上升。BIC-TCP的提出者们看穿了事情的本质,其实这就是一个搜索的过程,而TCP的搜索方式类似于逐个遍历搜索方法,可以认为这个值是在1和一个比较大的数(large_window)之间,既然在这个区间内需要搜索一个最佳值,那么显然最好的方式就是二分搜索思想。BIC-TCP就是基于这样一个二分思想的:当出现丢包的时候,说明最佳窗口值应该比这个值小,那么BIC就把此时的cwnd设置为max_win,把乘法减小后的值设置为min_win,然后BIC就开始在这两者之间执行二分思想--每次跳到max_win和min_win的中点。

tcp_bic_low_window (整数; 默认值: 14; Linux 2.4.27/2.6.6 to 2.6.13):设置BIC TCP开启拥塞窗口阈值,低于这个阈值BIC TCP的行为将和其他TCP reno一样。
    ●tcp_bic_fast_convergence (布尔; 默认值: enabled; Linux 2.4.27/2.6.6 to 2.6.13):强制BIC TCP更快地响应拥塞的变化窗口。允许两个流共享相同的连接汇聚更快。
    ●tcp_congestion_control (字符串; 默认值: see text; since Linux 2.4.13): 设置默认的被用于新的连接的拥塞控制算法,默认算法“reno”将一直存在,其他的算法需要依赖于内核配置,对于这个文件的默认值是内核配置的一部分。
    ●tcp_dma_copybreak (整数; 默认值: 4096; since Linux 2.6.24):更低限制的socket的读取大小(byte为单位)可能被转至DMA拷贝引擎,如果在系统内核设置了CONFIG_NET_DMA选项。
    ●tcp_dsack (布尔; 默认值: enabled; since Linux 2.4):支持RFC2883中的重复SACK特性。
    ●tcp_ecn (整数; 默认值: see below; since Linux 2.4):开启RFC3168的显式拥塞通知

未完待续。。。。

原文地址:https://www.cnblogs.com/liquan2005/p/9119083.html

时间: 2024-08-02 19:29:23

TCP/IP 参数配置详解的相关文章

nginx一些参数配置详解

nginx的配置:    正常运行的必备配置:       1.user username [groupname];           指定运行worker进程的用户和组       2.pid /path/to/pidfile_name nginx的pid文件 3.worker_rlimit_nofile #;            一个worker进程所能够打开的最大文件句柄数:       4.worker_rlimit_sigpending #;            设定每个用户能够

网络编程之TCP/IP各层详解

网络编程之TCP/IP各层详解 我们将应用层,表示层,会话层并作应用层,从TCP/IP五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议,就理解了整个物联网通信的原理. 首先,用户感知到的只是最上面一层--应用层,自上而下每层都依赖于下一层,所以我们从最下层开始切入,比较好理解. 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件. 一.物理层 由来:孤立的计算机之间要一起"玩耍",就必须接入Internet,即计算机之间必须完成组网. 物理层功能:主要是基于电器特性发

linux串口编程参数配置详解

1.linux串口编程需要的头文件 #include <stdio.h>         //标准输入输出定义 #include <stdlib.h>        //标准函数库定义 #include <unistd.h>       //Unix标准函数定义 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>          //文件控制定义 #incl

Spark 性能相关参数配置详解-shuffle篇

作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 随着Spark的逐渐成熟完善, 越来越多的可配置参数被添加到Spark中来, 在Spark的官方文档http://spark.apache.org/docs/latest/configuration.html 中提供了这些可配置参数中相当大一部分的说明. 但是文档的更新总是落后于代码的开发的, 还有一些配置参数没有来得及被添加到

logback 常用参数配置详解

logback 常用配置详解(二) <appender> <appender>: <appender>是<configuration>的子节点,是负责写日志的组件. <appender>有两个必要属性name和class.name指定appender名称,class指定appender的全限定名. 1.ConsoleAppender: 把日志添加到控制台,有以下子节点: <encoder>:对日志进行格式化.(具体参数稍后讲解 ) &

TCP/IP协议——ARP详解(转载)

本文主要讲述了ARP的作用.ARP分组格式.ARP高速缓存.免费ARP和代理ARP. 1.学习ARP前要了解的内容 建立TCP连接与ARP的关系 应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表: 如果目的IP和自己在同一个网段: 当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header

TCP/IP协议——ARP详解

本文主要讲述了ARP的作用.ARP分组格式.ARP高速缓存.免费ARP和代理ARP. 1.学习ARP前要了解的内容 建立TCP连接与ARP的关系 应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表: 如果目的IP和自己在同一个网段: 当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则调用网络接口send函数(参数为IP Packet和目的MAC))将数据提交给网络接口,网络接口完成Ethernet Header

TCP/IP五层模型详解

将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理. 首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬件 物理层 物理层由来:孤立的计算机之间必须完成组网. 物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0 数据链路层 数据链路层的功能:定义了电信号的分组方式

TCP/IP协议模型详解

一.网络协议模型 1.OSI七层网络协议模型 OSI七层协议(Open System Interconnection):将网络连接过程分成数个层次(layer),每个层次负都有特定的独立功能,且每个层次的程序代码可以独立撰写,每个层次间的功能不会相互干扰. 说明: 1)越接近硬件的层次为底层(layer1),越接近应用程序的则为高层(layer7) 2)接收端或者发送端,每一层只认识对方的同一层次的数据 3)每层都有其独特的头部数据header,告知对方信息,其后的数据为真实数据 (1)物理层P