前言

tcp 三次握手性能优化。

正文

服务器三次握手流程示例:

下面就是3次握手的过程:

知道这个有什么用呢?

我举一个我使用到的例子哈。

比如有很多 tcp 连接到一台机器上机器上,那么tcp_max_syn_backlog就需要调大。

服务器设置

net.ipv4.tcp_max_syn_backlog 调大。
net.ipv4.tcp_synack_retries: 被动建立连接时,发syn/ack 重试的次数。

第一个很好理解哈,backlog越大,那么承载越多。
第二个是网络不好的时候syn/ack 重试次数越多,那么连接失败率越低。

客户端syn_sent 状态:

net.ipv4.tcp_syn_retries = 6 主动建立连接时,发syn重试的次数
net.ipv4.ip_local_port_range = 32000 60000 设置端口范围

客户端也好理解哈,就是网络拥堵设置多一些重试,端口范围大一些,这样连接的越多。

然后如果是不断的发送数据然后断开,然后重连的话,那么可以使用tcp fast open来实现。

这个图其实很好理解哈。

左边的是普通情况。就是在最后ack确认的情况下把请求发出去。但是第二次请求的时候还是要建立3次握手。

第二种就是第一次发送syn+ack确认的时候给一个cookie。

这个cookie 有什么作用呢?那就是第二次连接的时候直接发送syn+cookie,那么对方会syn+ack 就连接完成了。

为什么可以这么做呢? 实际上这个cookie 里面存在滑动窗口大小,那么就不用最后的ack确认了。

如何打开这个tcp fast open 呢?

linux 参数:net.ipv4.tcp_fastopen

0 是关闭

1 是作为客户端时可以使用tfo

2 是作为服务器时可以使用tfo

3 无论作为客户端还是服务器,都可以使用tfo

上一节中介绍了syn攻击,那么如何应对呢?

net.core.netdev_max_backlog 接收自网卡、但未被内核协议栈处理的保温队列长度

net.ipv4.tcp_max_syn_backlog syn_rcvd 状态连接的最大个数

net.ipv4.tcp_abor_on_overflow 超出处理能力时,对新来的syn直接回rst,丢弃链接

另外一种 防御sync 攻击的方式是,tcp_syncookies方式。

就是当syn队列满的时候,新的syn不进入队列中,计算出cookie再以syn + ack 中的序列号返回客户端。

正常客户端发报文时,服务器根据报文中携带的cookie 重新恢复连接。

由于 cookie 占用序列号空间,导致此时所有tcp可选功能失效,例如扩充窗口等。

然后还有一个概念,那就是tcp_defer_accept,这种就是只有对方发送数据的时候,那么服务器才会去激活客户端获取连接。

下一节看下如何传输数据。

原文地址:http://www.cnblogs.com/aoximin/p/16182335.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性