TCP分三个阶段

  1. 连接建立(三次握手)
  2. 数据传输
  3. 连接释放(四次挥手)

TCP工作过程

TCP连接建立阶段

  1. 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  2. 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

TCP数据传输阶段

  1. seq为本次发送的数据中的第一个字节的标号
  2. ack为希望下一次收到的数据中第一个字节的标号

TCP连接释放

  1. 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
  2. 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  3. 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
  4. 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

TCP Flood 攻击

  据统计,有90%的DoS攻击使用的是TCP协议,而SYN洪泛优势其中最常见的一种攻击。下面就以SYN Flood代表TCP Flood对这类攻击的基本原理进行描述。

安全缺陷

  在3次握手进行的过程中,服务器需要保持所有未完成的握手信息(称为半开连接,即收到了TCP-SYN并发送了SYN-ACK,但第三次握手信息(ACK)未收到的状态)直到握手完成或超时(不同的系统超时长度的设置不同,一般情况下在75秒左右)以后丢弃该信息。而且,半开连接的数量是有限的,比如很多OS设置为1024个,当服务器的半开连接栈用完,服务器将不再接受其他的连接请求。

攻击原理

  SYN Flood 攻击就是攻击者向攻击目标发送大量伪造的TCP 连接请求报文,即 SYN 包; 而当攻击目标收到连接请求时,就会在目标的 TCP 协议栈分配资源, 并记录其信息到半连接队列中,同时回应 ACK + SYN; 此时, 攻击者却不再发送ACK 确认报文以完成第三次握手, 而是将继续发送大量的SYN 连接请求包。这样不仅会导致被攻击者在短时间内需要为大量半连接分配内存资源,还会使得系统对后续到来的SYN 包在自身的半连接队列中查找是否有此包的握手信息,从而消耗大量 CPU 资源, 最终造成被攻击者无法向正常用户提供所需服务。

防御策略

  1. 基于退让的防御策略

    a)缩短半连接队列的保持时间。

    b)增大半连接队列的大小。

    c)负载均衡策略。

  2. 基于 TCP 协议栈缺陷的防御策略

    a)SYN Cookie 技术

      Cookie 机制是服务器收到客户端的连接请求后, 系统可简单记录该连接信息,形式即如源 IP、 源端口、 时间戳的三元组。但并不会为其分配资源, 而是根据这个 SYN 包的相关信息计算生成某一 Cookie 值, 并将其作为 ACK + SYN 包的序列号返回给客户端。在接到 ACK 报文时, 就可以第一时间验证报文的三元组信息,如果信息满足条件则进行 Cookie 验证, 否则直接丢弃。

    b)SYN Cache 技术

      该方法通过一个专用的 HASH 表( Cache) 来保存半连接信息,直至收到 ACK 信息才为连接分配系统资源 (TCB) .

    c)SYN Proxy 技术

      只有在 SYN 代理确认连接的有效性后, 才向内部服务器发起连接请求。所以当攻击发生时, 攻击造成的危害就将转移到至该代理上,借此以保护服务器端。是基于 SYN Cookie 和SYN Cache 的,这也是对 SYN Cookie 的另一种改进。只是需要注意,一旦代理被攻击破坏, 其保护的服务器也都将无法向外界提供服务,这也成为 SYN Proxy 方法的瓶颈所在。

TCP工作过程;TCP Flood的攻击的原理和现象;TCP协议设计的安全隐患与防范对策的更多相关文章

  1. 第三次实验报告:使用Packet Tracer分析TCP连接建立过程

    目录 1 实验目的 2 实验内容 3. 实验报告 3.1 建立网络拓扑结构 3.2 配置参数 3.3 抓包,分析TCP连接建立过程 4. 拓展 (不作要求,但属于加分项) 1 实验目的 使用路由器连接 ...

  2. 扯谈网络编程之Tcp SYN flood洪水攻击

    简单介绍 TCP协议要经过三次握手才干建立连接: (from wiki) 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,server回应(SYN+ACK)包,可是攻击者不回应ACK包,这 ...

  3. TCP SYN flood洪水攻击原理和防御破解

    简介 TCP协议要经过三次握手才能建立连接: 于是出现了对于握手过程进行的攻击.攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+AC ...

  4. 不可不知的socket和TCP连接过程

    html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...

  5. TCP三次握手与DDOS攻击原理

    TCP三次握手与DDOS攻击原理 作者:冰盾防火墙 网站:www.bingdun.com 日期:2014-12-09   在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. ...

  6. TCP数据传输过程详解

    在学习三次握手的时候,我们知道其中有seq.ack两个序列号. 如果不仔细了解,那么可能只知道发回去的时候要加一. 下文将着重介绍,关于序列号的传输过程. 最关键的一句话:序列号为当前端成功发送的数据 ...

  7. 性能测试基础 ---TCP通信过程的状态码与过程,以及出现错误码的分析(TIME_WAIT,CLOSE_WAIT)

    TCP通信过程 如下图所示,TCP通信过程包括三个步骤:建立TCP连接通道(三次握手).数据传输.断开TCP连接通道(四次挥手). 这里进一步探究TCP三路握手和四次挥手过程中的状态变迁以及数据传输过 ...

  8. TCP连接建立过程中为什么需要“三次握手”(转)

    传输控制协议(Transmission Control Protocol, TCP)是一种面向连接的.可靠的.基于字节流的运输层(Transport layer)通信协议.是专门为了在不可靠的互联网络 ...

  9. zabbix主动、被动TCP连接过程

    zabbix主动.被动TCP连接过程 https://blog.csdn.net/u010668387/article/details/79460183

随机推荐

  1. keras训练和保存

    https://cloud.tencent.com/developer/article/1010815 8.更科学地模型训练与模型保存 filepath = 'model-ep{epoch:03d}- ...

  2. 数组.html

    <script > var arr1 = [1, 2, 3, 4, 5, 6 ]; 赋值 var arr2 =Array(1,2,3,4,5,6); var arr3 = new Arra ...

  3. 用最通俗的话解释AJAX是什么东西

    直白地说,就是没用AJAX的网页,你点一个按钮就要刷新一下页面,尽管新页面上只有一行字和当前页面不一样,但你还是要无聊地等待页面刷新. 用了AJAX之后,你点击,然后页面上的一行字就变化了,页面本身不 ...

  4. TP微信扫码支付

    1.官网下载php扫码支付adk,放在项目引入第三方类库中 2.配置config中相关参数 注意:可能会遇到问题 微信支付错误问题的解决:curl出错,错误码:60 Fatal error: Unca ...

  5. es6基础(4)--字符串扩展

    //字符串扩展 { console.log('a','\u0061'); console.log('s','\u20BB7');//超过了0xffff console.log('s','\u{20BB ...

  6. tomcat7.0安装笔记

    1. 解压,新增系统环境变量CATALINA_HOME,值为tomcat所在目录,如E: tomcat7.0 PS:安装JAVA时没有配置系统变量JAVA_HOME,导致报错无法启动tomcat,新建 ...

  7. 由echarts想到的js中的时间类型

    在工作中使用echarts时,偶然发现折线图中对时间类型变量的用法: now前面的+号何解? now = new Date(+now + oneDay); 后来查阅资料,看到一篇博客,解释如下:这是对 ...

  8. crawlspider 多分页处理

    提问:如果想要通过爬虫程序去爬取”糗百“全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Request模块递归回调parse方法). 方法二:基 ...

  9. oracle项目代码

    ------------------------------------------------ create table DEP_WRTF_RSLT ( sr_no_id ) not null, d ...

  10. 微信小程序开发warning: Now you can provide attr "wx:key" for a "wx:for" to improve performance

    用微信官方的模板发现突然报了这个warning,检查原因: 官方解释: wx:key 如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <i ...