网络编程知识预备(2) —— 三次握手与四次挥手、半连接状态、2MSL

article/2025/11/5 10:54:49

参考:网络编程知识预备(2) ——三次握手与四次挥手、流量控制(滑动窗口)、拥塞控制、半连接状态、2MSL_行稳方能走远的博客-CSDN博客

目录

一、三次握手

什么是三次握手?

三次握手图解

三次握手过程解析

(1)第一次握手

(2)第二次握手

(3)第三次握手

二、四次挥手

什么是四次挥手?

四次挥手图解

四次挥手过程解析

(1)第一次挥手

(2)第二次挥手(半连接)

(3)第三次挥手

(4)第四次挥手

三、2MSL作用

四、 常见问题

1、为什么连接是三次握手,关闭却要四次挥手(半连接)?

2、连接中途客户端突然故障怎么办(保活计时器、探测报文段、心跳包)?


一、三次握手

什么是三次握手?

        手机能够使用联网功能是因为手机底层实现了 TCP / IP 协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。

TCP共有6个标志位,常见的:

标志位含义
SYN(synchronous)建立连接
ACK(acknowledgement)响应确认
FIN(finish)结束
RST(reset)重置

建立起一个TCP连接需要经过“三次握手”

三次握手图解

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三次握手过程解析:

(1)第一次握手

客户端发送 SYN 包( syn = j )到服务器,并进入 SYN_SEND 状态,等待服务器确认。

j 是一个随机数,通过看服务器返回的 j + 1 是否正确,判断第一次握手服务器是否正确响应。

(2)第二次握手

服务器确认客户的 SYN 包,同时发送 ACK 包( ack = j + 1 )作为回应;

自己也发送一个 SYN 包( syn = k ),共两个包,此时服务器进入 SYN_RECV 状态

k 也是一个随机数,也是用于看客户端返回的 k+1 是否正确,判断第二次握手客户端是否正确响应。

(3)第三次握手

客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK ( ack = k + 1 ),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

二、四次挥手

什么是四次挥手?

        四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在 socket 编程中,这一过程由客户端或服务端任一方执行close来触发。

四次挥手图解

在这里插入图片描述

在这里插入图片描述

四次挥手过程解析:

(1)第一次挥手

客户端发送一个 FIN = M,用来关闭客户端到服务器端的数据传送,客户端进入 FIN_WAIT_1状态

意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据

(2)第二次挥手(半连接)

服务器端收到 FIN 后,先发送 ack = M + 1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态(半连接状态),继续等待服务器端的FIN报文。

(3)第三次挥手

当服务器端确定数据已发送完成,则向客户端发送 FIN = N 报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态

(4)第四次挥手

客户端收到 FIN = N 报文后,就知道可以关闭连接了。

但是他还是不相信网络,怕服务器端不知道要关闭,所以发送 ack = N + 1后进入TIME_WAIT状态,如果 Server 端没有收到 ACK 则可以重传。服务器端收到ACK后,就知道可以断开连接了。

客户端等待了 2MSL 后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了

三、2MSL作用

在这里插入图片描述

  • 假设客户端最后一个确认报文段丢失,如果没有2MSL等待时间,那么服务端一直发送超时重发报文,最终无法进入CLOSED状态

  • 2MSL时长可以使本次连接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的TCP连接中不会出现旧连接中的报文段

四、 常见问题

1、为什么连接是三次握手,关闭却要四次挥手(半连接)?

建立连接时,ACK 和 SYN 可以放在一个报文里来发送。

而关闭连接时,被动关闭方可能还需要发送一些数据,再发送 FIN 报文表示同意现在可以关闭连接了,所以它这里的 ACK报文 和 FIN报文 多数情况下都是分开发送的。

说得尽可能具体一些就是

        客户端发送FIN关闭报文,但是服务端仍在给他发送数据不能马上停止服务端先给出ACK报文回应(你的请求我收到了,但要等我发完数据才能关闭哦)。当服务端发送完毕后,再发送FIN报文请求关闭,所以这两个报文不能同时发送,故有了四次挥手。

        如果把三次握手改为仅需要两次握手,可能发生死锁。

2、连接中途客户端突然故障怎么办(保活计时器、探测报文段、心跳包)?

在这里插入图片描述

         TCP还设计有一个①保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。

        服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个②探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

另外的:如果客户端没有数据发送,又不想断开的话还要发③心跳包,心跳包这个数据没用,只是告诉服务器我客户端还在【长连接】

智能家居项目目录

智能家居(1) —— 工厂模式引入&工厂模式实现继电器控制

智能家居(2) —— 工厂模式实现烟雾报警

智能家居(3) —— 串口通信(语音识别)线程控制

智能家居(4) —— 网络服务器线程控制

智能家居(5) —— 智能家居项目整合(语音控制线程,网络控制线程、烟雾报警线程)

网络编程知识预备(1) —— 7层OSI网络模型

网络编程知识预备(2) —— 三次握手与四次挥手、半连接状态、2MSL

网络编程知识预备(3) —— TCP流量控制(滑动窗口)、拥塞控制

网络编程知识预备(4) —— SOCKET、TCP、HTTP之间的区别与联系

网络编程知识预备(5) —— 了解应用层的HTTP协议与HTTPS协议

网络编程知识预备(6) —— libcurl库简介及其编程访问百度首页

智能家居(6) —— 香橙派摄像头安装实现监控功能

智能家居(7) —— 人脸识别 & 翔云平台编程使用(编译openSSL支持libcurl的https访问、安装SSL依赖库openSSL)

智能家居(8) —— 香橙派摄像头加入设备工厂


http://chatgpt.dhexx.cn/article/7w1QXBix.shtml

相关文章

2.5Modelsim

视频链接:https://v.youku.com/v_show/id_XNTkxNDg2MTEwNA.html?x&sharefromandroid&sharekey59e4c264c93de043603d938d05eb7fd10 题目:例2.5.1中2选1数据选择器的仿真步骤 原理与目的: 原理:数据选择是指经过选择&am…

TCP的四次挥手及为什么要等待2MSL

一、四次挥手的详述 1、假设Client端发起中断连接请求,也就是发送FIN报文。 2、Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以…

为什么等待2MSL

下面是TCP四次挥手的图 介绍一下上图中的主要关键字 FIN_WAIT1是主动断开连接方发出关闭请求后的状态,表示主动方(主动断开TCP连接的一方)已经没有信息要发送给被动方 CLOSED_WAIT是被动方接收到主动方的关闭请求后返回ACK响应后的状态,此时被动方应该…

释放连接:四次挥手过程?为什么要等待2MSL

储备知识:TCP报文段的首部格式(讲下面提到的): 1.FIN:用来释放一个连接。当FIN1时,表示此报文段的发送方的数据已经发送完毕,并要求释放运输连接。 2. 确认ACK(acknowledgment&#…

SAML2.0使用

最近在工作中和海外一家公司对接单点登录,用到了SAML2.0协议,目前公司的单点登录 还是比较老的CASE3.5版本,不支持SAML2,要支持也要定制优,由于后面肯定是要升级,所 以不在源码上做调整支持,单独…

TCP第四次挥手后为什么要等待2MSL后才断开链接?等待时间为什么是2MSL?

为何要等待2MSL? 1.假如第四次挥手失败了,因为丢失而未到达服务器会怎样呢?这样,服务器会一直收不到客户端的回应,也就无法得知客户端是否收到了即将要断开连接的请求。客户端此刻还蒙在鼓里,还在等待服务器…

为什么TIME_WAIT状态是2MSL?(2个原因)

为什么TIME_WAIT的时间是2MSL? 先来看看上文中TIME_WAIT状态存在的两个理由。 首先看理由1,为了可靠地实现全双工连接的终止,假设图2-5中客户端发送的最后一个ACK丢失,服务端将重传FIN,为了能够收到这个超时重传的FIN…

Time-wait状态(2MSL)

本文转自:https://blog.csdn.net/overstack/article/details/8833894,尊重原创 三次握手四次挥手图: time_wait之后会等2msl。 什么是2MSL: MSL是Maximum Segment Lifetime,译为“报文最大生存时间”,他是任何报文在…

【Linux网络编程】TCP状态转换、半关闭、2MSL时长

------------->【Linux系统编程/网络编程】(学习目录汇总) <-------------- 目录 1. 三次握手、四次挥手过程中的状态变化2. TCP状态转换图3. 半关闭4. 2MSL时长4.1 为什么要2MSL时长&#xff1f;4.2 端口复用 1. 三次握手、四次挥手过程中的状态变化 先结合下图回顾一下…

TIME_WAIT状态(2MSL)的作用

主动关闭的Socket端会进入TIME_WAIT状态&#xff0c;并且持续2MSL时间长度&#xff0c;MSL就是maximum segment lifetime(最大分节生命期&#xff09;&#xff0c;这是一个IP数据包能在互联网上生存的最长时间&#xff0c;超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分…

【CSS】关于CSS的几种移动端布局方式

关于CSS的几种移动端布局方式 一、移动端布局01.meta视口标签设置02.移动布局的分类有哪些&#xff1f;03.为什么需要二倍图&#xff1f;&#xff08;1&#xff09;物理像素和物理像素比&#xff08;2&#xff09;二倍图&#xff08;根据需要确定多倍图&#xff09;&#xff08…

css:居中的几种布局方式

居中布局的方式 初始状态 <!DOCTYPE html> <html lang"en"> <head><style>.outer {width: 100px;height: 100px;border: 1px solid #f00;}.inner {width: 30px;height: 30px;background-color: #000;}</style> </head> <bo…

常见的CSS页面布局方式

详情&#xff1a;CSS页面结构是我们日常生活中最常使用到的&#xff0c;当然目前可能大家用的最多的是elementUI实现布局&#xff0c;简单方柏霓&#xff0c;下面介绍几种常见的原生页面布局的方式 公共的样式部分 <style>* {margin: 0;padding: 0;}.layout {margin-bot…

css的几种布局方式都在这

说道布局方式&#xff0c;是我们经常遇到的问题&#xff0c;下面我们就来讲解css的常见的一些布局方式。 1.双飞翼布局&#xff08;两边定宽&#xff0c;中间自适应&#xff09; 主要是通过浮动与margin实现&#xff0c;代码如下&#xff1a; <!DOCTYPE html PUBLIC &quo…

css横向布局的几种方式

首先我们先看看 html部分 bodyTip 内的三个标签我们需要让他们横向显示并且根据浏览器宽度平均显示 <body> <!--头部--> <div class"head">我是头部 </div> <div class"bodyTip"><!--左边--><div class"lef…

CSS 多种布局方式

​css布局是工作中最常碰到的&#xff0c;同时也是笔试 or 面试中会被问到的问题&#xff0c;故在本文整理了css多种布局方式&#xff0c;以供参考。 此篇较长四千五百字左右&#xff0c;读者可分三部分阅读&#xff0c;水平居中布局&#xff0c;垂直居中布局&#xff0c;水平…

HTML+CSS第十课:常见的3种网页布局方式:表格布局、DIV+CSS布局、框架布局

知识点:网页布局的方式 1、网页布局 常见的页面布局方式:表格布局、DIV+CSS布局、框架布局。 表格布局:用来显示较多的数据,如OA系统、ERP系统或CRM系统。(一般用在局部)DIV+CSS布局:相对来说最灵活的布局方式,完全实现内容和样式的分离。框架布局:通常用在网站后台…

css常见布局方式

css常见布局方式 0、前言1、两栏布局1.1 浮动 margin1.2 浮动 BFC&#xff08;overflow: hidden&#xff09;1.3 定位 margin-left1.4 给父容器设置flex布局&#xff0c;左盒子固定宽度&#xff0c;然后给右子元素设置 flex: 1。1.5 table布局 2、三栏布局2.1 float布局2.2 …

CSS布局的三种方式

绝对定位 绝对定位&#xff1a; ​ 属性&#xff1a;position 值&#xff1a;absolute <style> p.abs{position: absolute;left: 150px;top: 50px; }</style><p >正常文字1</p> <p >正常文字2</p> <p class"abs" >绝对定…

CSS五种布局方式

是CSS知识体系的重中之重 早期以table为主&#xff08;简单&#xff09; 后来以技巧性布局为主&#xff08;难&#xff09; 现在有flexbox/grid(偏简单) 响应式布局是必备知识 常用布局方法 table表格布局 <!DOCTYPE html> <html lang"en"> <head&…