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. 通过防火墙、路由器等过滤网关防护
相关推荐
深念Y1 分钟前
一个Bug:Vue Router 4.3.0 导致浏览器窗口无法最小化
前端·vue.js·bug·窗口·最小化·bilibili·视频网站
湛海不过深蓝2 分钟前
【procomponents】根据表单查询表格数据的两种写法
前端·javascript·react.js
大Mod_abfun4 分钟前
AntdUI教程#1ChatList交互(vb.net)
服务器·前端·ui·交互·antdui·聊天框
憧憬成为web高手5 分钟前
xss学习记录--xss-lab部署
前端·学习·xss
窝子面6 分钟前
十四、弹窗组件
前端
局i7 分钟前
从零封装第一个 Vue 组件:极简入门指南
前端·javascript·vue.js
Jave21087 分钟前
Vue下一个大版本会是怎样?它的最终目标是怎样的?
前端·vue.js·经验分享
JamesYoung79717 分钟前
第三部分 — 服务工作者(后台)chrome.runtime 是什么(在 MV3 的说法中)
前端·javascript·chrome