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. SAS 数据集生成map 文件

    OPTIONS NOCENTER PS=MAX LS=MAX; LIBNAME S '.'; DATA A;    INPUT X $ @@;    CARDS;A1 A2 A3 B1 B2 B3   ...

  2. iOS 懒加载 字典转模型

    >>>懒加载 一.介绍 懒加载又称延时加载,即在系统调用时加载,如果系统不调用则不会加载,所谓懒加载其实就是重写其get方法. 在使用懒加载时要先判断该方法是否存在,如果不存在再进行 ...

  3. 生成excel的时候要用双引号。。。。。

    <?php header("Content-type:application/vnd.ms-excel"); header("Content-Disposition ...

  4. OpenStack各组件逻辑关系、通信部署关系及工作流程

    一. OpenStack组件之间的逻辑关系 OpenStack 是一个不断发展的系统,所以 OpenStack 的架构是演进的,举个例子: E 版本有5个组件  Compute 是 Nova:Imag ...

  5. oracle start with connect by prior 递归查询用法

    start with 子句:遍历起始条件,有个小技巧,如果要查父结点,这里可以用子结点的列,反之亦然. connect by 子句:连接条件.关键词prior,prior跟父节点列parentid放在 ...

  6. es6(15)--generator

    //generator处理异步,下一步用next,遇到return或者yied就会停止 { //generator基本定义 let tell=function* (){ yield 'a'; yiel ...

  7. slenium使用鼠标+键盘事件或者双击实现代码

    参考文章: https://www.ibm.com/developerworks/cn/java/j-lo-keyboard/

  8. jvm 内存分配 (转)

    深入理解JVM—JVM内存模型  http://www.cnblogs.com/dingyingsi/p/3760447.html 我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区 ...

  9. spring的IOC 的底层实现原理

    IOC:Inversion of Control  控制反转. 指的是 对象的创建权反转(交给)给 Spring. 作用是实现了程序的解耦合.

  10. error C2011: “timespec”:“struct”类型重定义

    error C2011: “timespec”:“struct”类型重定义 C++ pthread pthread.h 中的 timespec 和time.h 中的 结构定义重复了 ,同时两个头文件中 ...