【计算机网络】TCP 的三次握手和四次挥手

news/2024/7/24 11:47:18 标签: tcp/ip, 网络, 服务器

TCP 是面向连接的,面向连接就是数据通讯的时候需要进行三次握手,断开通讯的时候需要进行四次挥手。

1.seq(sequence number),序列号,随机生成的
2.ack(acknowledgement number),确认号,ack=seq+1
3.ACK(acknowledgement),确定序列号有效
4.SYN(synchronous),发起新连接
5.FIN(FINISH),完成

TCP 的三次握手

TCP三次握手示意图:

Client            Server
  |                  |
  |    SYN=SEQ_A     |
  |----------------->|
  |                  |
  |  SYN=SEQ_B       |
  |  ACK=SEQ_A+1     |
  |<-----------------|
  |                  |
  |    ACK=SEQ_B+1   |
  |    SEQ=SEQ_A+1   |
  |----------------->|
  |                  |

在这些示意图中,箭头表示数据流的方向。三次握手中,Client向Server发送一个带有SYN标志的报文段,Server收到后回复一个带有SYN和ACK标志的报文段,然后Client再回复一个带有ACK标志的报文段,完成三次握手。

TCP(Transmission Control Protocol)是一种常用的传输层协议,用于在网络上建立可靠的连接。TCP的三次握手是在建立连接时进行的一系列步骤,以确保通信双方都愿意开始数据传输。下面是TCP三次握手的详细讲解:

  1. 第一次握手(SYN - 发送同步序列号):
    在建立连接之前,客户端首先向服务器发送一个带有SYN标志的TCP报文段。
    这个报文段的序列号(Seq)被设置为一个随机值(假设为A)作为初始序列号。
    客户端还将设置连接标志(SYN)以及窗口大小等信息,并在选项字段中放入一些控制信息。这个报文段的目的是告诉服务器,客户端想要建立连接,并指定初始序列号A。

  2. 第二次握手(SYN + ACK - 发送同步序列号和确认序列号):
    服务器接收到客户端的SYN报文段后,会对其进行确认。
    服务器向客户端发送一个带有SYN和ACK标志的TCP报文段,其中确认号(Ack)被设置为客户端发送的初始序列号A加1(即A+1),而服务器的初始序列号被设置为另一个随机值(假设为B)。
    服务器也会设置自己的连接标志(SYN),并在选项字段中放入一些控制信息。这个报文段的目的是告诉客户端,服务器愿意建立连接,并确认客户端的初始序列号A。

  3. 第三次握手(ACK - 发送确认序列号):
    客户端收到服务器的SYN + ACK报文段后,会向服务器发送一个带有ACK标志的TCP报文段,确认服务器的初始序列号B。
    客户端的确认号被设置为服务器发送的初始序列号B加1(即B+1),而连接标志(SYN)被置为0。此时,连接已建立,双方可以开始进行数据传输。服务器收到这个确认报文段后,也确认了连接的建立。

在这里插入图片描述

这里的 0 是 wireshark 为了直观,调整了的,原始报文中不是 0

通过这三次握手,双方确认了彼此的能力和意愿,建立了一个可靠的连接,可以进行数据传输。这种三次握手机制可以确保通信双方都同意建立连接,减少了误操作或不必要的连接。在数据传输完成后,连接可以通过四次握手来正常关闭。

TCP 的四次挥手

TCP四次挥手示意图:

Client            Server
  |                  |
  |     FIN=SEQ_X    |
  |----------------->|
  |                  |
  |  ACK=SEQ_X+1     |
  |<-----------------|
  |                  |
  |    FIN=SEQ_Y     |
  |  ACK=SEQ_X+1     |
  |<-----------------|
  |                  |
  |  ACK=SEQ_Y+1     | 
  |  SEQ=SEQ_X+1     |
  |----------------->|
  |                  |

四次挥手中,Client首先发送一个带有FIN标志的报文段,然后Server回复一个带有ACK标志的报文段,接着Server发送一个带有FIN标志的报文段,最后Client回复一个带有ACK标志的报文段,完成四次挥手。

TCP(Transmission Control Protocol)的四次挥手是用于关闭一个已建立的连接的过程。与建立连接的三次握手类似,关闭连接需要双方都达成一致。下面是TCP四次挥手的详细讲解:

  1. 第一次挥手(FIN - 发送结束标志):
    当一方(通常是客户端)决定关闭连接时,它会向另一方(通常是服务器)发送一个带有FIN标志的TCP报文段。这个报文段表示发起方没有更多数据要发送,但是仍然愿意接收来自对方的数据。
    发起方将序列号(Seq)设置为当前已发送数据的最后一个字节的序号加1。这个报文段的目的是告诉另一方,发起方希望关闭连接。

  2. 第二次挥手(ACK - 发送确认):
    收到第一次挥手的FIN报文段后,另一方(通常是服务器)会向发起方发送一个带有ACK标志的TCP报文段,表示它已经收到了发起方的关闭请求。
    确认号(Ack)会被设置为发起方的序列号加1,表示另一方已经收到了发起方的所有数据。此时,连接进入半关闭状态,发起方仍然可以发送数据,但另一方不能。

  3. 第三次挥手(FIN - 发送结束标志):
    当另一方(通常是服务器)也准备好关闭连接时,它会发送一个带有FIN标志的TCP报文段给发起方。
    这个报文段的序列号(Seq)被设置为当前已发送数据的最后一个字节的序号加1。此时,另一方表示它已经没有更多数据要发送,并准备好关闭连接。

  4. 第四次挥手(ACK - 发送确认):
    收到第三次挥手的FIN报文段后,发起方会向另一方发送一个带有ACK标志的TCP报文段,表示它已经收到了另一方的关闭请求。
    确认号(Ack)被设置为另一方的序列号加1,表示发起方已经确认了另一方的关闭请求。此时,连接正式关闭,双方都不能再发送数据。

在这里插入图片描述

通过这四次挥手,双方完成了连接的关闭,确保彼此都知道对方已经停止发送数据,从而避免了数据丢失。这个过程保证了连接的可靠关闭,以及释放相关的资源。


http://www.niftyadmin.cn/n/4993899.html

相关文章

如何在qt6中使用replaceFirst和replaceLast

如何在qt6中使用replaceFirst和replaceLast 在qt6中replace默认是replaceAll的&#xff0c;没有replaceFirst和replaceLast&#xff0c;但是可以运用QString提供的以下两个方法现实 qsizetype QString::indexOf(const QString &str, qsizetype from 0, Qt::CaseSensitiv…

【力扣】45.跳跃游戏 II <贪心>

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处&#xff1a;0 < j < nums[i] &#xff1b;i j < n 返回到…

Java 枚举是什么?什么是枚举类?枚举类的用途?

目录 1. 什么是枚举&#xff1f; 2. 枚举类 3. 枚举类的用途 1. 什么是枚举&#xff1f; 我们可以从字面意思来理解&#xff0c;枚&#xff1a;一枚一枚的&#xff0c;举&#xff1a;举例&#xff0c;举出&#xff0c;将二者意思结合起来可以理解为一个一个的举出。 这样听…

解析经典面试题:for 循环中的 let var

更多文章可以看看我的博客&#xff1a;https://icheng.github.io/ 题目 for循环中&#xff0c;使用 var 或 let 声明 i 变量&#xff0c;会得到不同的结果 var arr []; for (var i 0; i < 2; i) {arr[i] function () {console.log(i);} } arr[0](); arr[1]();输出&…

<C++> 继承

1.继承的概念和定义 继承是面向对象其中的一个核心概念之一&#xff0c;继承允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和行为&#xff0c;以便在子类中重用已有的代码并添加新的功能。通过继承&#xff0…

SAP_ABAP_接口技术_RFC远程函数实践总结

SAP ABAP顾问能力模型梳理_企业数字化建设者的博客-CSDN博客SAP Abap顾问能力模型&#xff0c;ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977 SAP接…

回归拟合 | 灰狼算法优化核极限学习机(GWO-KELM)MATLAB实现

这周有粉丝私信想让我出一期GWO-KELM的文章&#xff0c;因此乘着今天休息就更新了(希望不算晚) 作者在前面的文章中介绍了ELM和KELM的原理及其实现&#xff0c;ELM具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点&#xff0c;而KEL…

递归算法学习——电话号码的字母组成,括号生成,组合

目录 一&#xff0c;电话号码的字母组合 1.题意 2.例子 3.题目接口 4.解题代码和思路 代码&#xff1a; 思路&#xff1a; 二&#xff0c;括号的生成 1.题意 2.例子 3.题目接口 四&#xff0c;解题代码和思路 1.先写代码&#xff1a; 2.思路 三&#xff0c;组合 …