ShadowSocks – 服务端TCP优化配置debian
在debian中安装好shadowsocks后感觉速度还是很慢的话,可以考虑使用一下TCP的优化,效果的话跟锐速等TCP加速软件也是差不多的。
增加tcp连接数量
编辑limits.conf
1 vi /etc/security/limits.conf
在limits.conf文件中增加下面两行
* soft nofile 51200
* hard nofile 51200
ulimit –n 51200
TCP拥塞算法
拥塞算法简介
拥塞控制是一种用来调整传输控制协议(TCP)连接单次发送的分组数量(单次发送量,在英文文献和程序代码中常叫做cwnd)的算法。它通过增减单次发送量逐步调整,使之逼近当前网络的承载量。如果单次发送量为1,此协议就退化为停等协议。单次发送量是以字节来做单位的;但是如果假设TCP每次传输都是按照最大报文段来发送数据的,那么也可以把数据包个数当作单次发送量的单位,所以有时我们说单次发送量增加1也就是增加相当于1个最大报文段的字节数。
拥塞控制假设分组的丢失都是由网络繁忙造成的。拥塞控制有三种动作,分别对应主机感受到的情况:
收到一条新确认。这很好,表明当前的单次发送量小于网络的承载量。
收到三条对同一分组的确认,即三条重复的确认。单次发送量往往大于3,例如发送序号为0、10、20、30、40的5条长度为10字节的分组,其中序号20的丢了,则返回的确认是10、20、20、20。3个20就是重复的确认。
对某一条分组的确认迟迟未到,即超时。例如发送序号为0、10、20、30、40的5条长度为10字节的分组,其中序号30的丢了,则返回的确认是10、20、30、30。这才只有两条重复确认。然而刚刚说过,单次发送量往往大于3,所以超时更可能是因为不止一条分组或确认丢失而引起的,这说明网络比上一情况中的更加繁忙。
当主机收到一条新确认,此时可以增加单次发送量。若当前单次发送量小于倍增阈限(在英文文献和程序代码中常叫做ssthresh),则单次发送量加倍(乘以2),即指数增长;否则单次发送量加1,即线性增长。
当主机收到三条重复的确认——单次发送量减半,倍增阈限等于单次发送量。(进入线性增长期)
当主机探测到超时——倍增阈限=单次发送量÷2,单次发送量=1。
hybla算法优化
查看内核是否支持hybla算法,如若不支持的话只有cubic了。
sysctl net.ipv4.tcp_available_congestion_control
修改sysctl.conf文件来优化相应的算法:
cp /etc/sysctl.conf /root/ #复制一份到root目录
vi /etc/sysctl.conf #编辑sysctl.conf文件
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.core.rmem_max = 67108864
net.core.wmem_max = 67108864
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
net.core.netdev_max_backlog = 250000
net.ipv4.tcp_mtu_probing=1
net.ipv4.tcp_congestion_control=hybla
/sbin/modprobe tcp_hybla
net.ipv4.tcp_congestion_control=hybla
cubic算法优化
net.core.wmem_max = 12582912
net.core.rmem_max = 12582912
net.ipv4.tcp_rmem = 10240 87380 12582912
net.ipv4.tcp_wmem = 10240 87380 12582912
net.ipv4.ip_local_port_range = 18000 65535
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_max_syn_backlog = 3240000
net.core.somaxconn = 3240000
net.ipv4.tcp_max_tw_buckets = 1440000
net.ipv4.tcp_congestion_control = cubic
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_tw_recycle = 1
sysctl –p
注意:每次重启需要重新加载hybla算法模块。
sysctl.conf文件
sysctl.conf文件地址:http://vpssoft.bxl.me/proxy/shadowsocks/chenshaoju/sysctl.conf
#
# /etc/sysctl.conf – Configuration file for setting system variables
# See /etc/sysctl.d/ for additonal system variables
# See sysctl.conf (5) for information.
#
#kernel.domainname = example.com
# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3
##############################################################3
# Functions previously found in netbase
#
# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1
# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
# Uncomment the next line to enable packet forwarding for IPv6
# Enabling this option disables Stateless Address Autoconfiguration
# based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1
###################################################################
# Additional settings – these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
# This line below add by user.
# 设定最大打开文件句柄数为 200000
fs.file–max = 200000
# 设定最大数据接收发送缓冲为 32MB 。
net.core.rmem_max = 33554432
net.core.wmem_max = 33554432
# 设定默认据接收发送缓冲为 256KB 。
net.core.rmem_default = 262144
net.core.wmem_default = 262144
# 将最大队列长度设定为 65535 。
net.core.netdev_max_backlog = 65535
# 将监听队列长度增加到 4096 。
net.core.somaxconn = 4096
# 设定 TCP 接收发送缓存最小、平均和最大分别为 32KB 、 256KB 、 32MB 。
net.ipv4.tcp_rmem = 32768 262144 33554432
net.ipv4.tcp_wmem = 32768 262144 33554432
# 自动检测网络是否支持巨帧包,如果已知支持请设定为 2 ;自动检测为 1 ;不支持请设定为为 0 。
net.ipv4.tcp_mtu_probing = 1
# 使用 hybla 拥塞控制算法。
# 请注意:请使用 sysctl net.ipv4.tcp_available_congestion_control 命令检查是否支持 hybla 拥塞控制算法。
# 若未出现在列表中,请使用 modprobe tcp_hybla 命令加载该模块。
# 若加载失败,说明可能需要将该模块 ( CONFIG_TCP_CONG_HYBLA=y ) 加入内核源码并重新编译。
net.ipv4.tcp_congestion_control = hybla
# 表示开启 SYN Cookies。当出现 SYN 等待队列溢出时,启用 cookies 来处理,可防范少量 SYN 攻击,默认为 0,表示关闭。
net.ipv4.tcp_syncookies = 1
# 表示开启重用。允许将 TIME-WAIT sockets 重新用于新的 TCP 连接,默认为 0,表示关闭。
net.ipv4.tcp_tw_reuse = 1
# 此功能和处于 NAT 环境下的 Android 系统冲突,必须禁用。
net.ipv4.tcp_tw_recycle = 0
# 修改系統默认的 TIMEOUT 时间。
net.ipv4.tcp_fin_timeout = 30
# 表示当 keepalive 启用的时候,TCP 发送 keepalive 消息的频度。缺省是 2 小时,改为 20 分钟。
net.ipv4.tcp_keepalive_time = 1200
# 表示 SYN 队列的长度,默认为 1024,加大队列长度为 8192,可以容纳更多等待连接的网络连接数。
net.ipv4.tcp_max_syn_backlog = 8192
共有 0 条评论