TCP 三次握手过程分析

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

名词介绍

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

TCP 三次握手的目的

TCP 三次握手是为了建立连接,在这个过程中需要完成两件事:

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

TCP 三次握手的流程

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

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

第二次握手:主机 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 对自己的能力一无所知;第二次握手主机 A 接收到报文之后,结合第一次握手发送的报文,它自己能发送报文,接收报文,主机 B 能发送报文,接收报文;第三次握手主机 B 接收到报文后,结合前面两次握手,它知道自己能发送报文,接收报文,主机 A 发送报文,接收报文;

SYN 攻击

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

正常的 TCP 连接要经历三次握手,第一次客户端发送 SYN 标志的数据包,第二次服务端返回一个 SYN/ACK 的应答包,第三次客户端返回一个确认包 ACK,这样才完成 TCP 连接。服务器发出应答包之后将等待客户端响应,直达超时,在等待期间,服务器将半连接状态的请求保存在缓存队列中,如果攻击方发起了大量的 SYN 标志的数据包,并且不响应服务端的 SYN/ACK 的应答包,那么就会使服务端的 TCP 资源迅速耗尽,导致正常的连接不能进入。

SYN 攻击不能完全阻止,除非重新设计 TCP 协议,预防 SYN 攻击的方法如下:

  1. 缩短超时(SYN Timeout)时间
  2. SYN cookies 技术
  3. 通过防火墙、路由器等过滤网关防护
相关推荐
夏花里的尘埃1 小时前
vue3实现echarts——小demo
前端·vue.js·echarts
努力学习的木子2 小时前
uniapp如何隐藏默认的页面头部导航栏,uniapp开发小程序如何隐藏默认的页面头部导航栏
前端·小程序·uni-app
开开心心kai4 小时前
如何快速申请免费SSL证书,实现网站HTTPS安全传输
网络·网络协议·安全·https·ssl
java小郭5 小时前
html的浮动作用详解
前端·html
水星记_5 小时前
echarts-wordcloud:打造个性化词云库
前端·vue
强迫老板HelloWord6 小时前
前端JS特效第22波:jQuery滑动手风琴内容切换特效
前端·javascript·jquery
续亮~7 小时前
9、程序化创意
前端·javascript·人工智能
RainbowFish7 小时前
「Vue学习之路」—— vue的常用指令
前端·vue.js
Wang's Blog7 小时前
Webpack: 三种Chunk产物的打包逻辑
前端·webpack·node.js
pan_junbiao7 小时前
HTML5使用<blockquote>标签:段落缩进
前端·html·html5