首页 > 其他分享 >TCP三次握手和四次挥手

TCP三次握手和四次挥手

时间:2024-08-07 19:59:19浏览次数:9  
标签:ACK 报文 确认 TCP 发送 四次 握手 服务端 客户端

TCP报文中一些字段的含义

确认ACK:仅当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有报文的传输都必须把ACK置1
同步SYN:在连接建立时用来同步序号。当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该使SYN=1,ACK=1
终止FIN:用来释放连接。当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求
释放

TCP 三次握手

一次握手:客户端发送连接请求报文到服务端。报文首部中的同步SYN=1,同时选择一个初始序列号 seq=x ,发送后客户端进入SYN_SEND状态,等待服务端的确认。
二次握手:服务端发送确认报文到客户端。确认报文中包含:确认ACK=1,同步SYN=1,确认号ack=x+1(客户端初始序列号+1),同时也要为自己初始化一个序列号 seq=y。然后服务端进入SYN_RECV状态。
三次握手:客户端发送确认报文到服务端。确认报文:ACK=1,确认号ack=y+1(服务端的初始序列号+1),自己的序列号seq=x+1(服务端返回的确认号ack的值)。然后客户端和服务端都进入ESTABLISHED状态,完成 TCP三次握手。

为什么要三次握手?

三次握手的目的是建立可靠的通信信道,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是否正常

第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
第二次握手:Client 确认了自己发送、接收正常,对方发送、接收正常;Server 确认了对方发送正常,自己接收正常(此时Server还需确认自己的发送和对方的接受是否正常)
第三次握手:Server 确认了自己发送、接收正常,对方发送、接收正常

三次握手过程中可以携带数据吗?

在 TCP 三次握手过程中,第三次握手是可以携带数据的(客户端发送完ACK 确认包之后进入 ESTABLISHED 状态)。

TCP 四次挥手

第一次挥手:客户端发送连接释放报文到服务端。终止FIN=1,序列号seq=u。然后客户端进入FIN-WAIT-1(终止等待1)状态。
第二次挥手:服务端发动确认报文到客户端 。确认ACK=1,确认号ack=u+1,序列号seq=v。发送确认报文后服务端进入CLOSE-WAIT(关闭等待)状态。客户端接收确认报文后进入FIN-WAIT-2(终止等待2)状态,此时客户端等待服务端发送连接释放报文(第三次挥手)
第三次挥手:服务端发送连接释放报文到客户端。确认ACK=1,终止FIN=1,确认号ack=u+1,序列号seq=w。然后服务端进入LAST-ACK(最后确认)状态,等待客户端的确认
第四次挥手:客户端发送确认报文服务端。确认ACK=1,确认号ack=w+1,序列号seq=u+1.然后客户端进入TIME-WAIT状态。服务端接收确认报文后进入 CLOSE 状态。

如果客户端等待2MSL后依然没有收到回复,就证明服务端已正常关闭,随后客户端关闭连接

为什么客户端最后还要等待2MSL才断开?

第一,客户端发送的最后一个ACK报文可能丢失。如果该报文丢失,服务器会认为自己第三次挥手时发送的报文没有被成功接收,于是服务器会重新发送报文。而客户端就能在这个2MSL时间段内收到这个重传的报文,然后给出回应报文,并且会重启2MSL计时器。

第二,确保当前连接的报文不会出现在下一次连接中。每个报文最多只有1 MSL寿命。最坏情况下,ACK经历了1 MSL才到达服务端,假如在ACK到达前一瞬间,服务端重传了FIN并发生了滞留,需要等待1 MSL才可让其失效。因此,在最坏情况下,需要2 MSL才可让双向的滞留报文失效。1 MSL+1 MSL= 2 MSL

为什么要四次挥手?


举个例子:A 和 B 打电话,通话即将结束时
第一次挥手:A 说“我说完了”(发送连接释放报文)
第二次挥手:B 回答“我知道了”(发送确认报文)。但是 B 可能还会有要说的话
第三次挥手:B 说“我说完了”(发送连接释放报文)。
第四次挥手:A 回答“我知道了”(发送确认报文)。B听到后离开通话(CLOSE 状态),A等待一会儿后也离开通话(CLOSE 状态)

什么是 SYN洪泛攻击?如何防范? 

SYN洪泛攻击属于 DOS 攻击的一种,它利用 TCP 协议缺陷,通过发送大量的半连接请求,耗费 CPU 和内存资源。

原理:
 在三次握手过程中,服务器发送 [SYN/ACK] 包之后、收到客户端的 [ACK] 包之前的 TCP 连接称为半连接状态(half-open connect),此时服务器处于 SYN_RECV(等待客户端响应)状态。如果未接收到客户端的 [ACK],则会不断重发请求直至成功。
 SYN 攻击的攻击者在短时间内伪造大量不存在的 IP地址,向服务器不断地发送 [SYN] 包,服务器回复 [SYN/ACK] 包,进入半连接状态。由于源地址是不存在的,服务器会不断的重发直至超时。
由于这些伪造的 [SYN] 包将长时间占用未连接队列,导致目标系统运行缓慢、网络堵塞甚至系统瘫痪。

检测:当在服务器上看到大量的半连接状态时,特别是源 IP 地址是随机的,基本上可以断定这是一次SYN 攻击。

防范:
通过防火墙、路由器等过滤网关防护。

通过加固 TCP/IP 协议栈防范,如增加大半连接数上限,缩短超时时间

标签:ACK,报文,确认,TCP,发送,四次,握手,服务端,客户端
From: https://blog.csdn.net/kiku1002149488/article/details/140990609

相关文章

  • OSI和TCP的握手/挥手
    引子关于3次握手,4次回收,OSI七层模型以及各层的作用,较为深入的整理一下。OSI七层模型全称open-system-interconnect。由国际组织提出的一套关于全球范围的计算机可以开放式通信的规范。OSI参考模型包含7层,从上到下分别是从上到下作用请求发出的流程相关协议应......
  • 认识Modbus RTU与Modbus TCP
    (选自成都纵横智控-ModbusRTU与ModbusTCP协议区别详解 )ModbusRTU和ModbusTCP是两种常用的工业通信协议,用于连接电子设备,但它们在多方面有所不同。以下是它们的详细比较:ModbusRTU协议类型:ModbusRTU是一种串行通信协议,通常使用RS-232、RS-422或RS-485标准进......
  • 泗博MODBUS TCP转PROFINET网关EPN-330实现焊机与西门子PLC的连接
    随着工业自动化水平的不断提高,各种设备之间的互联互通变得至关重要。然而,由于不同设备可能采用不同的通信协议,如何实现它们之间的无缝连接,成为了许多工程师和企业面临的难题。今天,我们就来分享一个上海泗博成功的案例,看看如何通过泗博自动化的MODBUSTCP转PROFINET网关EPN-330,实现......
  • 基于tcp,html,数据库的在线信息查询系统项目总结
    1.项目背景在线信息查询系统是一种可用于检索和展示各种信息的计算机程序或平台。主要特点包括:用户接口:通常提供友好的界面,用户可以方便地输入查询条件。数据存储:系统往往连接到数据库,存储大量信息,以供查询和分析。搜索功能:支持关键词搜索、筛选和分类功能,帮助用户快速找到......
  • 正本清源:TCP协议之三次握手和四次挥手
    一、三次握手的原理通俗解释:1>客户端发送一条请求到服务端(通过TCP报文,其中标记位是SYN),问:我可以跟你建立连接吗?--第一次握手2>服务端收到了客户端发来的请求连接的报文,回复给客户端一个确认信息同意建立连接(标记为ACK),同时发送连接请求到客户端,问:我服务端可以和你客户端建......
  • 快速理解 TCP 的三次握手和四次挥手
    前言TCP的三次握手和四次挥手是TCP协议的常见考点,下面我们通过一张图和几条记忆点来快速理解。TCP连接传输状态图三次握手上图中最上面的红色部分就是三次握手。握手是双方刚见面的时候,所以是用来建立连接的。第一次握手:客户端发送SYN报文给服务端。客户端发起......
  • 为什么 xgboost.QuantileDMatrix 使用自定义数据迭代器对数据进行四次传递?
    我正在尝试使用自定义数据迭代器,如下所示此处,因为我的数据集太大。只是为了测试它是如何工作的,我正在使用示例的子集并运行以下代码。X是我的数据的numpy数组。我的迭代器如下所示classIterForQDMatrix(xgb.core.DataIter):def__init__(self,d......
  • linux运维一天一个shell命令之tcpdump详解
    一、tcpdump的概念tcpdump是一个数据包捕获工具,能够拦截和显示通过网络接口的数据包。它可以实时捕获数据包,也可以将捕获的数据保存到文件中以便后续分析。tcpdump支持基于多种条件(如IP地址、端口号、协议等)来捕获特定的数据包。二、主要功能和特点1.数据包捕获:tcp......
  • Modbus RTU与Modbus TCP协议区别详解
    工业自动化领域中,设备之间的数据传输至关重要,而Modbus协议作为一种通信标准,被广泛应用于各类自动化系统。而Modbus协议有两种常见的变体:ModbusRTU和ModbusTCP,下面本文将详细探讨这两种协议的区别。物理层ModbusRTU采用串行通信方式,利用RS-232或RS-485接口进行数据传输。它......
  • [Microsoft][ODBC Driver 17 for SQL Server]TCP 提供程序:错误代码 0x2746 - 客户端无
    我正在尝试运行odoo项目ubuntu:22.04pyodbc==4.0.28python:3.8opensslversion:OpenSSL1.1.1p21Jun2022**ERROR:DIAG[08001][Microsoft][ODBCDriver17forSQLServer]TCPProvider:Errorcode0x2746DIAG[08001][Microsoft][ODBCDriver......