TCP三次握手,四次挥手,以及11种状态详解

三次握手和四次挥手指的是TCP(传输控制协议)中的连接建立与断开过程。这两个过程是确保数据能够可靠传输的重要机制。

三次握手(建立连接)

  1. 第一次握手:客户端发送一个带有SYN(同步序列编号)标志的包到服务器,并进入SYN_SEND状态,等待服务器确认。这个包的主要目的是告诉服务器“我想和你建立一个连接”。

  2. 第二次握手:服务器收到客户端的SYN包后,会以一个SYN+ACK(同步-确认)的包作为应答,表示接受客户端的连接请求。此时,服务器进入SYN_RECV状态。

  3. 第三次握手:客户端收到服务器的SYN+ACK包后,会发送一个ACK(确认)包给服务器,以此确认服务器的SYN+ACK包已成功接收。客户端进入ESTABLISHED状态,此时连接已经建立完成。当服务器接收到客户端的ACK包后也进入ESTABLISHED状态,双方可以开始数据传输了。

四次挥手(断开连接)

  1. 第一次挥手:主动关闭方(可以是客户端也可以是服务端)发送一个FIN(结束)标志的包给对方,表示“我已经没有数据要发给你了”。发送方进入FIN_WAIT_1状态。

  2. 第二次挥手:被动关闭方收到FIN包后,发送一个ACK包作为响应,确认号为收到的序号加1。被动关闭方进入CLOSE_WAIT状态,而主动关闭方则进入FIN_WAIT_2状态。

  3. 第三次挥手:被动关闭方可能还有未发送的数据给主动关闭方,所以当这些数据发送完毕后,被动关闭方也会发送一个FIN包给主动关闭方,表示“我也没有数据要发送了”。此时,被动关闭方进入LAST_ACK状态。

  4. 第四次挥手:主动关闭方收到被动关闭方的FIN包后,会发送一个ACK包作为响应,然后进入TIME_WAIT状态。不是立即关闭连接,而是等待足够的时间以确保被动关闭方能收到最后一个ACK包,之后才真正关闭连接。被动关闭方在收到ACK包后,关闭连接,进入CLOSED状态。

整个过程中,TIME_WAIT状态的存在是为了处理网络中可能存在的延迟或丢失的报文段,确保所有数据都已正确传输。通常情况下,一个端口在TIME_WAIT状态下需要等待2MSL(最大段生命周期)的时间,这是为了确保旧的连接状态信息从网络中消失,不会影响新建立的连接。

11种状态 

TCP(传输控制协议)定义了一系列的状态来管理连接的建立和终止过程。这些状态反映了TCP连接在其生命周期内的不同阶段。以下是TCP连接的11种状态及其简要说明:

  1. CLOSED:初始状态,表示没有连接。
  2. LISTEN:服务器进程正在等待进入连接的请求。
  3. SYN_SENT:应用进程已经发送了一个连接请求,但还没有收到确认。客户端在第一次握手时会进入此状态。
  4. SYN_RECEIVED:仅在三次握手过程中短暂出现。当一方向另一方发送SYN包并收到了SYN+ACK包,但在发送最终的ACK包之前处于此状态。
  5. ESTABLISHED:连接已经建立,双方可以开始传输数据。
  6. FIN_WAIT_1:主动关闭方已经发送了FIN包,等待对方的确认(ACK)。这是第一次挥手时的状态。
  7. FIN_WAIT_2:主动关闭方已经收到了对方的ACK确认,等待对方发送FIN包。
  8. CLOSE_WAIT:被动关闭方收到了对方的FIN包,已经发送了ACK确认,但自身还未发送FIN包。这是一方准备关闭连接,但应用程序尚未调用close()的情况。
  9. CLOSING:一种罕见的状态,发生在双方同时尝试关闭连接的情况下。即当一方发送FIN包后,几乎同时接收到对方的FIN包。
  10. LAST_ACK:被动关闭方已经发送了自己的FIN包,等待对方的最终ACK确认。
  11. TIME_WAIT:主动关闭方发送了最后的ACK确认后进入此状态,等待2MSL(最大段生命周期)的时间,以确保最后的ACK包能够到达对方,从而保证连接的完全关闭。之后,连接将被删除,返回到CLOSED状态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/2446.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【真题笔记】16年系统架构设计师要点总结

【真题笔记】16年系统架构设计师要点总结 存储部件接口嵌入式处理器产品配置配置管理用户文档系统文档CMM(能力成熟度模型)螺旋模型敏捷软件开发的方法学软件工具面向对象的分析模型设计模型COP(面向构件的编程)构件原子构件模块S…

【力扣打卡系列】二分查找(红蓝染色法)

坚持按题型打卡&刷&梳理力扣算法题系列&#xff0c;语言为go&#xff0c;Day8 在排序数组中查找元素的第一个和最后一个位置 题目描述解题思路 二分查找 注意勿漏循环&#xff0c;条件为left < right注意比较的是nums[mid]与target的值&#xff0c;不是mid注意if s…

NGINX 交叉编译 arm32

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

openstack之guardian介绍与实例创建过程

运行特征 采集模块&#xff1a;扩展Ceilometer&#xff0c;采集存储网、业务网连通性、nova目录是否可读写&#xff1b; 收集模块&#xff1a;将采集到的数据存储到数据库中&#xff1b; 分析模块&#xff1a;根据采集的结果&#xff0c;分析各节点状态&#xff0c;并进行反向检…

操作集成、数据集成、界面集成-系统架构师(八十八)

1软件开发环境由软件工具集和环境集成机制构成&#xff0c;前者支持软件活动的过程和任务&#xff0c;后者提供统一数据模式和数据接口规范的数据集成机制&#xff0c;支持个各开发活动之间通信、切换、调度和协同的&#xff08;&#xff09;。 A 操作集成机制 B 控制集成机制…

项目经理必看:PMP证书值不值得考?一文了解真相!

大部分人对“PMP证书”这个词语可能有点陌生&#xff0c;但很多想从事于项目管理或带团队当领导的人对此还是比较熟悉的。 PMP是由美国项目管理协会发起的&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0c;1999年由我国国家外国专家局引进&am…

空元组同一空间,空列表不是同一空间print(a is b, c is d)

1. 在Python&#xff08;Python的官方实现&#xff09;中&#xff0c;对于小整数有一个整数缓存机制&#xff1a; - 整数对象在 -5到256&#xff08;包含 -5和256&#xff09;之间是被缓存的。这意味着在这个范围内的整数&#xff0c;当你在代码中多次使用相同的值创建整数对象…

电通旗下VeryStar连摘Campaign 亚太科技MVP及鼎革奖两项大奖

近日&#xff0c;电通CXM&#xff08;客户体验管理&#xff09;旗下费芮互动VeryStar开发的OmniRetail零售数字化平台及其中的OmniCRM分别摘得重磅奖项。OmniCRM在Campaign亚太2024年度亚太地区Tech MVP中当选“最有价值科技产品”&#xff0c;OmniRetail荣获“2024「鼎革奖」数…

【vba源码】禁用复制功能Ctrl+C

hi&#xff0c;大家好呀&#xff01; 又到了和大家一起来分享Access开发的功能点时间了&#xff0c;最近总感觉时间不够用&#xff0c;感觉要做的事情有很多&#xff0c;但总是被乱七八糟的事情给打扰&#xff0c;好在我们每个人有Passion&#xff01;最近更新的Access2024的教…

「C/C++」C++11 之<thread>多线程编程

✨博客主页何曾参静谧的博客📌文章专栏「C/C++」C/C++程序设计📚全部专栏「VS」Visual Studio「C/C++」C/C++程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid函数说明目…

JUC从实战到源码:LockSupport

LockSupport学习与使用 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xff0c;欢迎指正&…

Linux之信号量

前言 IPC中介绍过信号量, 为了让进程间通信, 从而多个执行流看到同一份公共资源, 对于并发访问造成数据不一致问题, 就需要把公共资源保护起来, 从而就需要同步与互斥. 信号量共有三个特性: 1. 本质是一把用于描述临界资源资源的数目的计数器 2. 每一个执行流想访问公共资源内…

eval长度限制绕过

我把他的叙述写成代码&#xff0c;大概如下&#xff1a; <?php $param $_REQUEST[param]; if(strlen($param)<17 && stripos($param,eval) false && stripos($param,assert) false) {eval($param); } ?> 那么这个代码怎么拿到webshell&#xf…

Linux - 进程间通信(管道)

文章目录 一、进程间通信的目的二、进程间通信的本质三、管道1、介绍2、匿名管道3、命名管道 一、进程间通信的目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源。通知事件&#xff1a;一个进程需要向另一个或…

【软考】反规范化技术

论反规范化技术 反规范化有这几种技术&#xff0c;增加冗余列&#xff0c;增加派生列&#xff0c;重组表和分割表。其中冗余列是指同一个字段在另外的表中存储一份&#xff0c;减少连表操作。增加派生列是基于另外一个列或者多个列&#xff0c;计算得到一个新的列&#xff0c;可…

SpringBoot day 1104

ok了家人们这周学习SpringBoot的使用&#xff0c;和深入了解&#xff0c;letgo 一.SpringBoot简介 1.1 设计初衷 目前我们开发的过程当中&#xff0c;一般采用一个单体应用的开发采用 SSM 等框架进行开发&#xff0c;并在 开发的过程当中使用了大量的 xml 等配置文件&#x…

Python | Leetcode Python题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, w: List[int]):self.pre list(accumulate(w))self.total sum(w)def pickIndex(self) -> int:x random.randint(1, self.total)return bisect_left(self.pre, x)

C++ | Leetcode C++题解之第528题按权重随机选择

题目&#xff1a; 题解&#xff1a; class Solution { private:mt19937 gen;uniform_int_distribution<int> dis;vector<int> pre;public:Solution(vector<int>& w): gen(random_device{}()), dis(1, accumulate(w.begin(), w.end(), 0)) {partial_sum(…

弹簧质点系统求Hessian

Verification https://www.matrixcalculus.org/ (1-l0/norm2(p-q))*(p-q)

游游的游戏大礼包

游游的游戏大礼包 import java.util.*; public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);long n in.nextInt();long m in.nextInt();long a in.nextInt();long b in.nextInt();long ret 0;for(long x 0; x < Math.…