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. 通过防火墙、路由器等过滤网关防护
相关推荐
DARLING Zero two♡1 天前
【计算机网络】简学深悟启示录:udp&&tcp协议
tcp/ip·计算机网络·udp
Cache技术分享1 天前
370. Java IO API - POSIX 文件权限
前端·后端
程序员小寒1 天前
JavaScript设计模式(七):迭代器模式实现与应用
前端·javascript·设计模式·迭代器模式
晓13131 天前
React篇——第七章 React 19 编译器深度解析
前端·javascript·react.js
Csvn1 天前
错误边界处理
前端·react.js
Jacob00001 天前
【Vue | initial】 创建初始化项目
前端
以太浮标1 天前
华为eNSP模拟器综合实验之- NATServer 实践配置解析
网络·网络协议·华为·智能路由器·信息与通信
im_AMBER1 天前
手撕代码之事件委托
前端·javascript·面试
用户8113581881201 天前
React全家桶笔记(三):React进阶 — 事件处理、表单与生命周期
前端
用户8113581881201 天前
React全家桶笔记(二):React组件核心 — State、Props、Refs
前端