7、如果 SYN 半连接队列已满,只能丢弃连接吗?并不是这样,开启 syncookies 功能就可以在不使用 SYN 半连接队列的情况下成功建立连接,在前面我们源码分析也可以看到这点,当开启了 syncookies 功能就不会丢弃连接 。
syncookies 是这么做的:服务器根据当前状态计算出一个值,放在己方发出的 SYN+ACK 报文中发出,当客户端返回 ACK 报文时,取出该值验证,如果合法,就认为连接建立成功,如下图所示 。
文章插图
开启 syncookies 功能
syncookies 参数主要有以下三个值:
- 0 值,表示关闭该功能;
- 1 值,表示仅当 SYN 半连接队列放不下时,再启用它;
- 2 值,表示无条件开启功能;
文章插图
8、如何防御 SYN 攻击?
这里给出几种防御 SYN 攻击的方法:
- 增大半连接队列;
- 开启 tcp_syncookies 功能;
- 减少 SYN+ACK 重传次数 。
增大 tcp_max_syn_backlog 和 somaxconn 的方法是修改 Linux 内核参数:
文章插图
增大 backlog 的方式,每个 Web 服务都不同,比如 Nginx 增大 backlog 的方法如下:
文章插图
最后,改变了如上这些参数后,要重启 Nginx 服务,因为半连接队列和全连接队列都是在 listen 初始化的 。
(2)方式二:开启 tcp_syncookies 功能
开启 tcp_syncookies 功能的方式也很简单,修改 Linux 内核参数:
(3)方式三:减少 SYN+ACK 重传次数
当服务端受到 SYN 攻击时,就会有大量处于 SYN_REVC 状态的 TCP 连接,处于这个状态的 TCP 会重传 SYN+ACK ,当重传超过次数达到上限后,就会断开连接 。
那么针对 SYN 攻击的场景,我们可以减少 SYN+ACK 的重传次数,以加快处于 SYN_REVC 状态的 TCP 连接断开 。
文章插图
参考:
[1] 系统性能调优必知必会.陶辉.极客时间.
[2] https://blog.cloudflare.com/syn-packet-handling-in-the-wild
【TCP 半连接队列和全连接队列满了,怎么破?】
推荐阅读
- 司机高速上睡了半小时,车内“无人驾驶”48公里,让人无法相信
- 茶树的形状乔木型,半乔木型茶树先容
- 下半身减肥运动有什么?
- 无线网络连接怎么设置
- httpclient连接池管理,你用对了?
- 发酵茶怎么发酵,生普属于半发酵茶么
- 说起来 TCP 的连接与释放真是个浪漫的故事呢!
- Win10电脑蓝牙连接手机播放音乐
- 东半山忙蚌普洱茶介绍,忙蚌茶区
- 春天喝什么茶?茶叶入菜香自来!