TCP(传输操控协议),是一种面向衔接的、牢靠的、基于字节流的传输层通信协议,它树立起的衔接是双向的、对称的。

名词介绍

TCP 有 6 种标识位,SYN: 树立联机,ACK:承认,PSH:传送,FIN:结束,RST:重置,URG:紧迫,Sequence number:顺序号码,Acknowledge number:承认号码。

TCP 三次握手的意图

TCP 三次握手是为了树立衔接,在这个进程中需要完结两件事:

  1. 承认自己和对方都能发送、接纳报文
  2. 把与自己相关的特别信息发送给对方,比方:报文的初始序列号、发送数据的缓冲区巨细,能接纳的最大报文段长度等。

TCP 三次握手的流程

下面描述了 TCP 三次握手的流程

TCP 三次握手进程剖析

第一次握手:主机 A 向主机 B 发送 SYN=1,Seq=x,Sep 是报文的初始序列号。主机 B 经过 SYN=1 得知主机 A 恳求树立联机。

第2次握手:主机 B 向主机 A 发送 SYN=1,ACK=1,Sep=y,ACknum=x+1。主机 A 经过 SYN=1 得知主机 B 恳求树立联机,经过 ACK=1 得知主机 B 在承认联机,主机 A 查看 ACknum 是否等于 x+1,若等于则进入第三次握手。

第三次握手:主机A 向主机 B 发送 ACK=1,ACknum=y+1。主机 B 经过 ACK=1 得知主机 A 在承认联机,主机 B 查看 ACknum 是否等于 y+1,等于衔接树立成功。

完结三次握手,主机 A 与主机 B 开始传送数据。

第一次握手主机 B 接纳到报文后,它知道自己能接纳报文,主机 A 能发送报文,可是主机 A 对自己的能力一无所知;第2次握手主机 A 接纳到报文之后,结合第一次握手发送的报文,它自己能发送报文,接纳报文,主机 B 能发送报文,接纳报文;第三次握手主机 B 接纳到报文后,结合前面两次握手,它知道自己能发送报文,接纳报文,主机 A 发送报文,接纳报文;

SYN 进犯

SYN 进犯是一种 DoS 进犯,进犯者利用 TCP 协议的缺点,发送大量的半衔接恳求,消耗服务器资源,使服务器无法及时处理正常的恳求。进犯原理如下:

正常的 TCP 衔接要阅历三次握手,第一次客户端发送 SYN 标志的数据包,第2次服务端回来一个 SYN/ACK 的应对包,第三次客户端回来一个承认包 ACK,这样才完结 TCP 衔接。服务器宣布应对包之后将等候客户端呼应,直达超时,在等候期间,服务器将半衔接状态的恳求保存在缓存行列中,假如进犯方发起了大量的 SYN 标志的数据包,并且不呼应服务端的 SYN/ACK 的应对包,那么就会使服务端的 TCP 资源迅速耗尽,导致正常的衔接不能进入。

SYN 进犯不能完全阻挠,除非重新规划 TCP 协议,预防 SYN 进犯的方法如下:

  1. 缩短超时(SYN Timeout)时刻
  2. SYN cookies 技术
  3. 经过防火墙、路由器等过滤网关防护