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的显式拥塞通知

未完待续。。。。

posted on 2018-09-07 19:17  Liquan2005  阅读(4136)  评论(0编辑  收藏  举报