首页 > 其他分享 >正本清源:TCP协议之三次握手和四次挥手

正本清源:TCP协议之三次握手和四次挥手

时间:2024-08-06 18:06:36浏览次数:15  
标签:断开连接 -- 正本清源 TCP 连接 四次 握手 服务端 客户端

一、三次握手的原理

通俗解释:

1> 客户端发送一条请求到服务端(通过TCP报文,其中标记位是SYN),问:我可以跟你建立连接吗? --第一次握手
2> 服务端收到了客户端发来的请求连接的报文,回复给客户端一个确认信息同意建立连接(标记为ACK),同时发送连接请求到客户端,问:我服务端可以和你客户端建立连接吗?注意:连接是双向的。 -- 第二次握手
3> 客户端收到了服务端的请求连接报文,然后回复给服务端一个确认信息同意建立连接。 -- 第三次握手

上面的三次握手其实就是为了建立如下图所示的从客户端到服务端,再从服务端到客户端的双向通路。

二、四次挥手的原理
啥玩意就三次握手,四次挥手的?啥意思呀?
其实很简单,所谓的三次握手就是建立客户端与服务端的连接,四次挥手就是断开客户端与服务端的连接。
来吧,直接上图:

通俗解释:

1> 客户端发送一条断开请求到服务端(通过TCP报文,其中标记位是FIN),说:我已经把数据传输完毕了,请求断开连接 -- 第一次挥手
2> 服务端收到了客户端发来的请求断开连接的报文,回复给客户端一个确认信息同意断开连接(标记为ACK) -- 第二次挥手
3> 服务端向客户端发送请求断开连接的报文,说:我也已经数据传输完毕了,请求断开连接 -- 第三次挥手
4> 客户端收到服务端发来的请求断开连接的报文,回复给服务端一个确认信息同意断开连接 -- 第四次挥手

哈哈,到这里我猜你一定会很困惑,为什么建立连接只需要三次,而断开连接需要四次呢?
其实很简单,答案如下:

建立连接的时候,不涉及数据传输问题,所以在第二次握手的时候,服务端在回复确认信息的同时就可以发送想跟客户端建立连接的请求。
断开连接的时候,因为可能会涉及到数据传输,客户端到服务端的传输结束了,难道就意味着服务端到客户端的传输结束了吗?想一想FTP上传下载功能,上传完能代表下载完了吗???

上面就是关于三次握手和四次挥手最正确的解释,你去问很多干了多年的老开发,老多人告诉你的答案都是错误的,甚至他们根本就不知道这个原理。当然了,不知道原理不耽误写代码,毕竟大部分人都是代码的搬运工,像我这种天赋异禀的万古奇才还是极少的,哈哈,开个玩笑。

标签:断开连接,--,正本清源,TCP,连接,四次,握手,服务端,客户端
From: https://www.cnblogs.com/kkbest/p/18342188

相关文章

  • 快速理解 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......
  • 简析传输层协议——TCP、UDP协议
    TCP/IP协议族的传输层协议TCP(TransmissionControlProtocol)传输控制协议UDP(UserDatagramProtocol)用户数据报协议TCP协议介绍:TCP是面向连接的、可靠的进程到进程通信的协议TCP提供全双工服务,即数据可在同一时间双向传输TCP报文段:TCP将若干个字节构成一个分......
  • 【Linux】TCP全解析:构建可靠的网络通信桥梁
    文章目录前言1.TCP协议概述2.TCP报头结构3.如何理解封装和解包呢?4.TCP的可靠性机制4.1TCP的确认应答机制4.2超时重传机制5.TCP链接管理机制5.1经典面试题:为什么建立连接是三次握手?5.2经典面试题:为什么要进行四次挥手?6.流量控制7.滑动窗口机制8.拥塞控制9.......
  • 基于OpenCV C++的网络实时视频流传输——Windows下使用TCP/IP编程原理
    1.TCP/IP编程1.1概念IP是英文InternetProtocol(网络之间互连的协议)的缩写,也就是为计算机网络相互连接进行通信而设计的协议。任一系统,只要遵守IP协议就可以与因特网互连互通。所谓IP地址就是给每个遵循tcp/ip协议连接在Internet上的主机分配的一个32bit地址。按照TC......
  • 【Linux或者Windows中相关网络工具使用介绍】nc、ping、ifconfig、ipaddr、tcpdump、l
    在实际的网络排错、运维诊断、或者是开发过程中,熟练运用Linux或者Windows当中的有关网络工具,能够助力我们更迅速更精准地定位故障。因而,今天给大家分享几款必掌握的网络利器。1.nc命令在Linux中,nc命令即netcat命令,它被称为网络工具中的“瑞士军刀”,是一个功能强大的......
  • 使用epoll编写TCP服务器示例
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<netinet/in.h>#include<sys/socket.h>#include<arpa/inet.h>#include<sys/epoll.h>#include<unistd.h>#include......