全连接攻击:

所谓的全连接攻击说的就是客户端仅仅“连接”到服务器,然后再也不发送任何数据,直到服务器超时后处理或者耗尽服务器的处理进程。

为何不发送任何数据呢?因为一旦发送了数据,服务器检测到数据不合法后就可能断开此次连接,如果不发送数据的话,很多服务器只能阻塞在recv或者read调用上。

很多的服务器架构都是每连接一个进程的方式,这种服务器更容易受到全连接攻击,即使是进程池/线程池的方式也不例外,症状就是服务器主机建立了大量的客户端处理进程,然后阻塞在recv/read而无所事事,大量的这种连接会耗尽服务器主机的处理进程。

如果处理进程数量达到了主机允许的最大值,那么就会影响到该主机的正常运作,比如你再也无法ssh到该主机上了。

半连接攻击

半连接攻击是一种针对协议栈的攻击,或者说是一中针对主机的攻击,皮之不存毛将焉附,主机一旦被攻击而耗尽了内存资源,用户态的应用程序也将无法运行。

半连接攻击是一种攻击协议栈的攻击方式,坦白说就是攻击主机的一种攻击方式。通过将主机的资源消耗殆尽,从而导致应用层的程序无资源可用,导致无法运行。

在正常情况下,客户端连接服务端需要通过三次握手,首先客户端构造一个SYN连接数据包发送至服务端,自身进入SYN_SEND状态,当服务端收到客户端的SYN包之后,为其分配内存核心内存,并将其放置在半连接队列中,服务端接收客户SYN包并会向客户端发送一个SYN包和ACK包,此刻服务端进入SYN_RECV态。客户端收到包之后,再次向服务端发送ACK确认包。至此连接建立完成,双方都进入ESTABLSHEDZ状态。半连接就是通过不断地构造客户端的SYN连接数据包发向服务端,等到服务端的半连接队列满的时候,后续的正常用户的连接请求将会被丢弃,从而无法连接到服务端。此为半连接攻击方式。根据服务端的半连接队列的大小,不同主机的抵抗这种SYN攻击的能力也是不一样。

半连接攻击与全连接攻击区别

半连接攻击耗尽的是全局的内存,因此可以用不为半连接分配内存的方式加以预防–syn cookie。

而全连接攻击耗尽的是主机的处理进程和连接数量,因此可以限制处理进程的创建或者限制预创建的进程池进程的分配。

解决全连接攻击

可以通过不为全连接分配进程处理的方式来防范全连接攻击,具体的情况是当收到数据之后,在为其分配一个处理线程。具体的处理方式在accept返回之前是不分配处理线程的。直到接收相关的数据之后才为之提供一个处理过程。例如在apache服务中,是通过预创建一定量的子进程作为处理连接继承。所有的自己进程都继承父进程的sockfd,每当有一个连接过来时,只有当accept返回是,才会为该链接分配一个进程来处理连接请求。负责,子进程一直处于等待状态。如果出现值是连接存在,而始终不放数据,该链接的状态是SYN_RECV,在协议栈中,提供一个保活期给该链接,如果超过保活期还没有数据到来,服务端协议栈将会断开该链接。如果没有该保活期,虽然避免了ESTABLESHED状态的数量,但是SYN_RECV的数据量的增长仍旧是不可估算的,所以需要利用保活期来监控该链接是需要清除断开。

解决半连接攻击

可以通过拓展半连接队列的大小,来进行补救,但缺点是,不能无限制的增加,这样会耗费过多的服务端资源,导致服务端性能地下。这种方式几乎不可取。现主要通syn cookie或者syn中继机制来防范半连接攻,部位半连接分配核心内存的方式来防范

这一切是通过TCP_DEFER_ACCEPT这个套接字参数来实现的,它的接口形式如下:
setsockopt(listen_socket, SOL_TCP, TCP_DEFER_ACCEPT, &val, sizeof(val))
其中val是一个数字,它代表一个时间,字面上理解,在这个时间过去后仍没有数据到来的话就会在不指派服务进程(accept不返回)的情况下断开连接,可是这只是一个方面,协议栈的实现中还有另外一个方面,那就是服务器协议栈会试图重传自己的synack好几次,因此这个限制时间是受到tcp协议栈的synack的重传次数和defer_accept的值共同决定的。

————————————————
参考文章链接:https://blog.csdn.net/dog250/article/details/5955094

浅谈TCP半连接攻击与全连接攻击相关推荐

  1. tcp连接之半连接攻击和全连接攻击总结

    众所周知,tcp通信是一个面向连接的过程,客户端要和服务端连接,必须进行连接才能进行通信.在tcp连接中,有两种连接攻击方式,是半连接攻击机和全连接攻击,对此搜积相关资料做了一个总结. <1&g ...

  2. TCP 半连接队列和全连接队列满了,怎么破?

    作者 | 小林coding 来源 | 小林coding 责编 | 王晓曼 前言 网上许多博客针对增大 TCP 半连接队列和全连接队列的方式如下: 增大 TCP 半连接队列方式是增大 tcp_max_s ...

  3. linux 全连接队列,TCP半连接队列和全连接队列的可能和出现问题和解决方案

    问题描述 监控系统发现电商网站主页及其它页面间歇性的无法访问: 查看安全防护和网络流量.应用系统负载均正常: 系统重启后,能够暂时解决,但持续一段时间后间歇性问题再次出现. 此时问题已影响到整个网站的 ...

  4. TCP半连接队列和全连接队列(史上最全)

    TCP半连接队列和全连接队列 文章很长,建议收藏起来慢慢读! 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 :<尼恩Java面试宝典>持续更新+ 史上最全 + 面试必备 2000 ...

  5. [计算机网络] - TCP半连接队列和全连接队列

    转载自:https://blog.csdn.net/qq_34827674/article/details/106448326 1. 概念 在 TCP 三次握手的时候,Linux 内核会维护两个队列, ...

  6. 【tcp】TCP 半连接队列、全连接队列基本概念

    TCP  三次握手状态变化 对于客户端: 初始的状态是处于 CLOSED 状态.CLOSED 并不是一个真实的状态,而是一个假想的起点和终点. 客户端调用 connect 以后会发送 SYN 同步报文 ...

  7. 浅谈tcp协议与tcp_tw

    浅谈tcp_tw_reuse 流量控制.拥塞控制 什么是TIME_WAIT状态? 为什么要设计TIME_WAIT状态? 原因一:防止历史连接中的数据,被后面相同四元组的连接错误的接收 原因二:保证「被 ...

  8. socketmq 设置队列大小_TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?...

    前言 网上许多博客针对增大 TCP 半连接队列和全连接队列的方式如下: 增大 TCP 半连接队列方式是增大 tcp_max_syn_backlog: 增大 TCP 全连接队列方式是增大 listen( ...

  9. 重学TCP协议(9) 半连接队列、全连接队列

    1. 半连接队列.全连接队列基本概念 三次握手中,在第一步server收到client的syn后,把相关信息放到半连接队列中,同时回复syn+ack给client(第二步),同时开启一个定时器,如果超 ...

最新文章

  1. 强化学习(一)---绪论
  2. CPU核数跟多线程的关系
  3. go context之WithTimeout的使用
  4. mongodb单表最大记录数_SpringBoot+Cloud全家桶微服务实战项目之文档型数据库MongoDB四...
  5. 尚学堂java答案解析 第二章
  6. CV Papers|计算机视觉论文推荐周报20200501期
  7. arduino i2c 如何写16位寄存器_基于STM32使用I2C读取传感器数据
  8. 求求了!让 Python 的热搜消失吧!!
  9. python pandas教程pdf_学习python中的pandas有没有好的教程推荐?
  10. opentsdb+grafana监控系按使用总结
  11. 如何复制百度文档中的内容
  12. c语言答辩ppt案例,c语言ppt例子课题答辩ppt成品中南民族大学.ppt
  13. matlab批量写入文件,matlab批量合并txt文件
  14. 【Pr】视频剪辑学习记录——导出
  15. DTC(diagnostic trouble code)
  16. SAP批量修改物料标准成本
  17. Java实例——Java方法
  18. 孙陶然:聪明工作就是要先问目的
  19. 转ARM 指令 详解
  20. 前_Fri Jun 16 00:00:00 CST 2017_转换后2017/6/13 15:36:39_IllegalArgumentException

热门文章

  1. 如何有效管理项目任务
  2. request.get乱码解决
  3. 深度学习之CNN卷积神经网络详解以及猫狗识别实战
  4. 《冻结的希望》中的人体冷冻技术,能够打开永生的魔盒吗?
  5. 赛尔号服务器维护时间4月27,赛尔号03月27日更新攻略汇总 瀚海界神重获新生
  6. npm 卡住 type-fest@^0.20.2 问题解决
  7. 浅谈zto大数据计算与业务系统的融合
  8. Redis主从复制详解(入门教程)
  9. 两个数组合并成一个数组
  10. 小米手机应用ICON角标Badger显示