当前位置: 首页 > news >正文

三次握手四次挥手详细解析面试常问

文章目录

    • 1.第2次握手传回了ACK,为什么还要传回SYN?
    • 2.断开连接-TCP 四次挥手
    • 3.为什么要四次挥手?
    • 4.为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?
    • 5.如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?
    • 6.为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?

1.第2次握手传回了ACK,为什么还要传回SYN?

image-20230221113716266

服务端传回发送端所发送的 ACK 是为了告诉客户端:“我接收到的信息确实就是你所发送的信号了”,这表明从客户端到服务端的通信是正常的。回传 SYN 则是为了建立并确认从服务端到客户端的通信。

SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement)消息响应。这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。

2.断开连接-TCP 四次挥手

image-20230221113923120

断开一个 TCP 连接则需要“四次挥手”,缺一不可 :

第一次挥手 :客户端发送一个 FIN(SEQ=X) 标志的数据包->服务端,用来关闭客户端到服务器的数据传送。然后,客户端进入 FIN-WAIT-1 状态。

第二次挥手 :服务器收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (SEQ=X+1)标志的数据包->客户端 。然后,此时服务端进入CLOSE-WAIT状态,客户端进入FIN-WAIT-2状态。

第三次挥手 :服务端关闭与客户端的连接并发送一个 FIN (SEQ=y)标志的数据包->客户端请求关闭连接,然后,服务端进入LAST-ACK状态。

第四次挥手 :客户端发送 ACK (SEQ=y+1)标志的数据包->服务端并且进入TIME-WAIT状态,服务端在收到 ACK (SEQ=y+1)标志的数据包后进入 CLOSE 状态。此时,如果客户端等待 2MSL报文最大生存时间) 后依然没有收到回复,就证明服务端已正常关闭,随后,客户端也可以关闭连接了。

只要四次挥手没有结束,客户端和服务端就可以继续传输数据!

3.为什么要四次挥手?

TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

举个例子:A 和 B 打电话,通话即将结束后。

  1. 第一次挥手 : A 说“我没啥要说的了”

  2. 第二次挥手 :B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话

  3. 第三次挥手 :于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”

  4. 第四次挥手 :A 回答“知道了”,这样通话才算结束。

4.为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?

因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。

5.如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?

客户端没有收到 ACK 确认,会重新发送 FIN 请求。

6.为什么第四次挥手客户端需要等待 2*MSL(报文段最长寿命)时间后才进入 CLOSED 状态?

第四次挥手时,客户端发送给服务器的 ACK 有可能丢失,如果服务端因为某些原因而没有收到 ACK 的话,服务端就会重发 FIN,如果客户端在 2*MSL 的时间内收到了 FIN,就会重新发送 ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

ACK 并再次等待 2MSL,防止 Server 没有收到 ACK 而不断重发 FIN。

MSL(Maximum Segment Lifetime) : 一个片段在网络中最大的存活时间,2MSL 就是一个发送和一个回复所需的最大时间。如果直到 2MSL,Client 都没有再次收到 FIN,那么 Client 推断 ACK 已经被成功接收,则结束 TCP 连接

相关文章:

三次握手四次挥手详细解析面试常问

文章目录1.第2次握手传回了ACK,为什么还要传回SYN?2.断开连接-TCP 四次挥手3.为什么要四次挥手?4.为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?5.如果第二次挥手时服务器的 ACK 没有送达客户端&#x…...

组合由于继承

目录 前言: 1.什么是继承? 2.继承的劣势、问题? 3.组合相比继承有哪些优势? 4、如何判断该用组合还是继承? 参考资料 前言: 我们在平时日常开发设计的过程中,经常会有人提到一条经典的设…...

大学计算机基础 知识点总结

一/ 计算机的发展、类型及其应用领域。 1. 计算机(computer)是一种能自动、高速进行大量算术运算和逻辑运算的电子设备。 其特点为:速度快、精度高、存储容量大、通用性强、具有逻辑判断和自动控制能力。 2. 第一台计算机:ENIAC,美国&#…...

手撸React组件库前必须清楚的9个问题

1. 组件库文档问题 以前常用的组件库文档storybook,包括现在也有用dumi、vitepress做组件库文档等。storybook缺点不美观、webpack的热更新太慢,虽然新版本支持了vite提高了速度但还不算稳定。好在各种文档、mdx、测试等组件第三方工具很多集成进去能很…...

试用国内及国外AI绘图软件后的总结

最近AI很火,所以这几天抱着试试看的角度试用了多款AI绘图软件,大概测试了市面上的3款工具吧,3款国外的,1款国内的。因为有对比,波哥也不是专业的评测机构出身,所以这些比对无论是从角度,还是从对…...

DJI 无人机 Onboard SDK ROS 功能包demo运行

DJI 无人机 Onboard SDK ROS 功能包demo运行demo功能准备测试环境运行 dji sdk 节点运行 demo 节点自动飞行任务航点自动飞行兴趣点环绕自动飞行飞行控制本地坐标位置控制搭建好 Onboard SDK ROS 的开发环境后,功能包自身具备一些写好的demo功能案例 dji sdk 的节点…...

揭开JavaWeb中Cookie与Session的神秘面纱

文章目录1,会话跟踪技术的概述2,Cookie2.1 Cookie的基本使用2.2 Cookie的原理分析2.3 Cookie的使用细节2.3.1 Cookie的存活时间2.3.2 Cookie存储中文3,Session3.1 Session的基本使用3.2 Session的原理分析3.3 Session的使用细节3.3.1 Session…...

2023-02-20 Qt 5.13.1 + OpenCV 4.5.4环境编译

引言 OpenCV图像处理在Qt中编译记录。 之前一直是在Python中使用OpenCV,Python中使用某些模块使用pip工具很容易将对应的模块安装在系统中。根据项目需求项目都要转移在国产化中使用,为了适应国产化需求,将代码转移到Qt开发环境中&#xff0c…...

波次分拣系统

一、系统架构: v1.2基站软件管理系统仓库标签v1.4仓库标签二、系统简介: 标签系统主要由标签服务器,基站,电子标签前三部分组成,操作界面借助于京东仓库已有的作业电脑来实现,标签服务器与WMS进行数据对接。…...

【Servlet篇】Request请求转发详细解读

文章目录1. 前言2. 实战案例3. 特点1. 前言 请求转发是一种在服务器内部的资源跳转方式,如图: 上图的大致过程为,浏览器发送请求给服务器,服务器中 a 资源接收到请求,资源 a 处理完请求后将请求发送给资源 b&#xff…...

vector

目录 vector的成员函数: at: ​编辑 size: assign:赋值 insert find? erase swap shrink_to_fit ​编辑 vector的模拟实现: vector的框架: 构造函数: size和capacity r…...

LeetCode——104. 二叉树的最大深度

一、题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/maximum…...

漫画 | Python是一门烂语言?

这个电脑的主人是个程序员,他相继学习了C、Java、Python、Go, 但是似乎总是停留在Hello World的水平。 每天晚上,夜深人静的时候,这些Hello World程序都会热火朝天地聊天但是,这一天发生了可怕的事情随着各个Hello wor…...

2023.2 新方案 java代码混淆 java加密 字符串加密

Java字节码可以反编译,特别是创业公司,很好的项目很容易被别人破解反编译,造成很严重的损失,所以本混淆方案能很好的保护源码,而且在不断迭代,增强混淆效果,异常问题处理,达到保护项目的目的: 本次升级包括: 2023年02年19日 : ht-confusion-project-1.8…...

Swift 周报 第二十三期

前言 本期是 Swift 编辑组自主整理周报的第十四期,每个模块已初步成型。各位读者如果有好的提议,欢迎在文末留言。 欢迎投稿或推荐内容。目前计划每两周周一发布,欢迎志同道合的朋友一起加入周报整理。 勇敢是即便知道好结局不会每每降临在…...

android系统屏幕旋转角度,应用界面横竖屏,设备旋转角度,三者的区别以及使用。

注意区分以下三种概念的区别!!!。以及使用这三种方式判断横竖屏的方式。系统屏幕旋转角度fun getSystemRotation(): Int {val angle (getSystemService(WINDOW_SERVICE) as WindowManager).defaultDisplay.rotation//系统屏幕旋转的角度值re…...

【华为云-开发者专属集市】DevCloud+ECS、MySQL搭建WordPress

文章目录AppBazaar官网选择与购买项目项目概况操作过程购买DevCloud服务创建项目添加制品库应用部署购买ECS添加部署模板并执行任务故障排除安装及访问WordPress登录网站管理后台访问网站完善部署模板资源释放使用总结AppBazaar官网 首先,我们来到AppBazaar的官网&…...

Milvus 群星闪耀时|又一个小目标达成 :社区正式突破 15,000 星!

如果把 Milvus 看作开源世界中的一束微光,那用户便是无垠宇宙中点点闪烁的星光。用户每一次点亮 star 之时,Milvus 就会迸发出更加耀眼的光芒。不知不觉,已有数以万计的 star 为 Milvus 而亮。2022 年 4 月,Milvus 在 GitHub 的 …...

Qt信号与槽使用方法总结

前言 在图形界面编程中QT是为首选,组件之间如何实现通信是核心的技术内容。Qt 使用了信号与槽的机制,非常的高效、简单、易学,方便开发者的使用。本文详细的介绍了Qt 当中信号与槽的概念,并演示了各种信号与槽的连接方式。 什么…...

SpringCloud alibaba-Sentinel服务降级策略

文章目录RT:异常比例:异常数:RT: 平均响应时间 (DEGRADE_GRADE_RT):当 1s 内持续进入 N 个请求,对应时刻的平均响应时间(秒级)均超过阈值(count,以 ms 为单位…...

DICOM序列实时渲染从28fps到126fps:C++无锁队列+GPU命令缓冲复用+ROI局部重绘的工业级调优日志

第一章:DICOM序列实时渲染性能跃迁全景概览 现代医学影像工作流对DICOM序列的实时可视化提出严苛要求:从百层CT扫描到高分辨率MRI动态序列,传统CPU软渲染方案常遭遇帧率跌破15 FPS、交互延迟超300ms的瓶颈。近年来,GPU加速管线、零…...

Transformer 原理与实现(二):从代码看透 Transformer

在上一篇文章 [Transformer 原理与实现(一):从 Attention 到编码解码机制](https://blog.csdn.net/Cha0DD/article/details/159753362) 中,我们从概念层面深入理解了 Transformer 的核心机制。 今天,我们将通过实际的…...

Claude Code 常用命令

先记住一个最重要的动作 在 Claude Code 里,直接输入 /,就能看到当前可用的全部命令。 继续输入 / 加上字母,还可以快速筛选命令。 官方文档也特别说明了一点:并不是所有命令对每个用户都可见。 有些命令会受到平台、套餐、环境或终端能力的影响。一张图先建立命令体系 新…...

嵌入式系统接口技术详解与应用实践

1. 嵌入式系统接口技术概述在嵌入式系统开发中,接口技术是连接处理器与外部设备的关键桥梁。作为一名嵌入式开发工程师,我经常需要根据项目需求选择合适的接口方案。本文将基于多年实战经验,深入解析各类嵌入式接口的工作原理、应用场景和选型…...

收藏备用!AI大模型自学路线(小白/程序员专属),从入门到实战少走90%弯路

当下AI大模型已成技术领域的核心热点,无论是零基础小白,还是想转型进阶的程序员,都纷纷投身其中。但自学过程中,多数人都会陷入“找不到方向、学了不会用、越学越迷茫”的困境。今天就为大家整理一份系统、可落地、无冗余的AI大模…...

3步实现跨系统文件互通:WinBtrfs驱动全解析

3步实现跨系统文件互通:WinBtrfs驱动全解析 【免费下载链接】btrfs WinBtrfs - an open-source btrfs driver for Windows 项目地址: https://gitcode.com/gh_mirrors/bt/btrfs 一、问题场景:双系统用户的文件访问困境 痛点直击:当Wi…...

从MIMO到相控阵:深入浅出聊聊RFSoC的MTS(多片同步)为啥是5G/雷达系统的核心

从MIMO到相控阵:深入浅出聊聊RFSoC的MTS(多片同步)为啥是5G/雷达系统的核心 在5G Massive MIMO基站的天线阵列背后,或是军用雷达的相控阵天线系统中,数以百计的射频收发通道需要像精密交响乐团般协同工作——任何微小的…...

LangChain-AI应用开发框架(四)

目录 一.LangChain软件包安装 二.LangChain能力详解 1.本章节环境说明 2.目标与内容 三.详细过程 1.步骤1: a.申请API key并配置环境变量 b.配置环境变量 步骤2:定义大模型 a.安装OpenAI包 b.定义大模型 步骤3:定义消息列表 步骤4&#xff…...

从点云数据到3D实例分割:手把手带你跑通Mask3D在S3DIS数据集上的完整流程

从点云数据到3D实例分割:手把手带你跑通Mask3D在S3DIS数据集上的完整流程 在三维视觉领域,点云实例分割一直是极具挑战性的任务。想象一下,当你面对一个杂乱无章的办公室场景点云数据时,如何让算法不仅能识别出桌椅、电脑等物体&a…...

怕 AI 短剧平台抽成?自研 AI 短剧创作系统贴牌合作,全部收益自留

入局 AI 短剧,最头疼就是被平台高额抽成、规则限制、数据锁死。流量自己做、内容自己产,收益却要分走大半,随时还面临限流封号。选源头自研系统贴牌合作,彻底摆脱平台捆绑,所有收益全额自留,干货分点讲透&a…...