TCP的三次握手、四次挥手!就像打电话一样简单!

news2024/11/24 0:37:33

目录

学前必会

三次握手详解

和打电话一样

为什么必须要三次?

四次挥手详解

和挂电话一样

为什么要四次挥手?

第四次为何要等待 2*MSL?


相关面试题:

  • 说一下三次握手、四次挥手的过程
  • 三次握手四次挥手的目的是什么?
  • 为什么要三次握手?两次不行吗?
  • 为什么挥手要四次?
  • 每次的状态是什么样的?

学前必会

三次握手四次挥手的作用

在TCP/IP模型中,我们都知道在传输层的TCP协议是面向连接的能保证可靠的数据传输,而学习三次握手、四次挥手其实就是学习TCP协议的连接断开过程

三次握手四次挥手需要标志位

而学习三次握手四次挥手,我们需要用到的有标志位的几个内容

  • ACK:acknowledgement 确认报文
  • seq:sequence 顺序
  • SYN:synchronous 建立联机
  • FIN:finish 结束

三次握手详解

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

第一次:客户端发送一个带有SYN( sql=x )标志的数据包给服务端,客户端状态变为syn_sent状态。

第二次:服务端接收成功后,回传一个带有SYN(sql=y)/ACK(sql=x+1)标志的数据包传递确认信息。其中syn代表询问你能否收到我的信息,ack应答我收到了你的信息。

第三次:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

和打电话一样

三次询问可以确定我们都能说话,且都能听到对方说话。

其实三次握手就是确定客户端和服务区能收能发的过程。

为什么必须要三次?

从打电话那个图我们也可以很好理解

三次握手就能确认双方收发功能都正常,缺一不可。

若缺少第三次握手,服务器是无法确定自己可以发送信息的,而四次又没有必要,所以三次刚好,即能完成任务又不浪费资源~

四次挥手详解

挥手其实就是断开连接的过程!

第一次挥手:客户端发送一个FIN(seq=x)的数据包给服务器,告诉对方我发完了,自己进入FIN-WAIT-1状态。

第二次挥手:服务区收到后,发送一个ACK(ack=x+1)的数据包给客户端,然后服务器变为CLOSE-WAIT状态,客户端收到后进入FIN-WAIT-2状态。

第三次挥手:服务器发送一个FIN(seq=y)的数据包给客户端,服务器变为LAST-ACK状态。

第四次挥手:客户端收到服务器的FIN后,返回给服务器一个ACK(seq=y+1)的数据包,客户端进入TIME-WAIT状态,服务器收到ACK后进入CLOSE状态。如果客户端等到2msl后依旧没有收到信息则默认服务器已正常关闭,然后自己也进入关闭状态。

和挂电话一样

为什么要四次挥手?

TCP 是全双工通信,可以双向传输数据。

任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。

当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

和三次握手一样,但是挥手多了一次就是因为 中间可能还有信息没有发完,所以第二次和第三次的ACK和FIN不能合并发送!没有发完的信息在这两次回收之前发完!

这就好像打电话时候的 "你等我把话说完" "巴拉巴拉巴拉~~" "好了,挂了吧"

第四次为何要等待 2*MSL?

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

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

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

相关文章

明基护眼台灯怎么样?明基、书客、欧普护眼台灯对比测评

不得不说,如今我国儿童青少年总体近视率非常高,甚至超过了50%!其中6岁儿童为14.3%,小学生为35.6%,初中生为71.1%,高中生为80.5%,而造成如此高的近视率的原因主要是不良的学习、生活用眼习惯&…

VMware虚拟机安装Ubuntu22.04教程(2023最新最详细)

目录 简介 1 VMware虚拟机下载与安装 2 Ubuntu操作系统安装与配置 2.1 Ubuntu虚拟机配置 2.2 Ubuntu操作系统安装 简介 Linux是一种自由和开放源代码的操作系统内核,被广泛应用于各种计算机系统中。它以稳定性、安全性和灵活性而闻名,并成为服务器…

科学计算语言Julia编程初步

文章目录 安装基本类型和计算函数初步条件和判断循环向量计算 Julia号称有着比肩C的速度,同时又像Python一样便捷的编程语言,非常适合科研狗使用。之前写了很多博客介绍Julia在数值分析中的应用,这次写一个适合初学者学习的Julia教程系列。 …

客户转化率太低?CRM客户管理系统来帮您

客户是否准确真实、销售跟进策略是否有效、销售跟进流程是否及时等,这些都是影响客户转化的因素。为了提高客户转化率,不少企业开始使用CRM销售管理系统。下面说说销售如何通过CRM系统提高客户转化率? 1、CRM能够识别不同渠道线索质量 CRM系…

开源CasaOS云软件发现关键漏洞

近日,开源 CasaOS 个人云软件中发现的两个严重的安全漏洞。该漏洞一旦被攻击者成功利用,就可实现任意代码执行并接管易受攻击的系统。 这两个漏洞被追踪为CVE-2023-37265和CVE-2023-37266,CVSS评分均为9.8分。 发现这些漏洞的Sonar安全研究…

【数据结构】线性表(十)队列:循环队列及其基本操作(初始化、判空、判满、入队、出队、存取队首元素)

文章目录 队列1. 定义2. 基本操作 顺序队列循环队列1. 头文件和常量2. 队列结构体3. 队列的初始化4. 判断队列是否为空5. 判断队列是否已满6. 入队7. 出队8. 存取队首元素9. 获取队列中元素个数10. 打印队列中的元素9. 主函数10. 代码整合 堆栈Stack 和 队列Queue是两种非常重要…

首次扭亏为盈后,货拉拉还想靠造车更上一层楼?

前阵子,一句【货拉拉“拉不拉”拉布拉多,取决于货拉拉“拉”拉布拉多时拉布拉多“拉”得多不多】的趣梗在网上掀起了一波热潮。而热梗背后的主角货拉拉,近期又透露出了谋求港股上市的消息,进而在市场上又掀起了一波热潮。 招股书…

Java拦截器(Interceptor)和过滤器(Filter)实例详解

一、Java过滤器和拦截器 1.1、过滤器(Filter) Filter过滤器,是Servlet(Server Applet)技术中的技术,开发人员可以通过Filter技术,管理web资源,可以对指定的一些行为进行拦截,例如URL级别的权限…

程序员的金饭碗在哪里?这几个网站建议收藏!帮助你一步登天

俗话说的好,一个趁手的工具抵过诸葛亮。尤其是在程序员这个领域,不仅是一个非常和科技挂钩的领域,而且更新速度非常的迅速。 连java python都在更新,手头上写码的工具却还是老三样怎可行?这就需要我们跟上时代的脚步&…

全局下载报错怎么办

举个例子,当你要全局下载create-react-app,报如下图所示的错 这个时候,关闭掉git base,再以管理员身份运行 你再次下载,ok了

【网络】对于我前面UDP博客的补充

UDP 前言正式开始UDP报文UDP报文如何将UDP报文和报头进行分离和封装UDP如何将有效载荷交付给上层如何提取出完整报文报头是啥报头中的检验和 UDP的特点IO接口乱序问题UDP是全双工的注意事项基于UDP的应用层协议 再次谈论端口五元组端口号范围划分netstatxargs 前言 本篇比较偏…

C#调用C++ 的DLL传送和接收中文字符串

1 c#向c传送中文字符串 设置&#xff1a;将 字符集 改为 使用多字节字符集 cpp代码&#xff1a; extern "C"_declspec(dllexport) int input_chn_str(char in_str[]) {cout<<in_str<<endl;return 0; }c#代码&#xff1a; [DllImport("Demo.dll…

uni-app:引用文件的方法

绝对定位 ①import common from "/utils/common.js" ②import common from "utils/common.js" <template><view></view> </template> <script>import common from "/utils/common.js"export default {data() {ret…

分享一下抽奖活动小程序怎么做

在当今数字化时代&#xff0c;抽奖活动小程序已成为一种高效、创新的营销方式。它不仅能够吸引用户的注意力&#xff0c;提高品牌知名度&#xff0c;还能促进用户参与度&#xff0c;增强用户对品牌的忠诚度。本文将详细介绍如何制作一个成功的抽奖活动小程序&#xff0c;以及它…

[yolo系列:如何固定随机种子(以yolov7为例)]

文章目录 概要随机种子&#xff08;Random Seed&#xff09;第一步第二步第三步第四步 概要 在计算机科学和深度学习领域&#xff0c;随机性是一个常见而重要的概念。在一些情况下&#xff0c;我们需要确保代码每次运行时都能得到相同的随机结果&#xff0c;以便进行模型的可重…

SAR ADC:10 bit 串口控制的模数转换器MS1549,可替TLV1549

MS1549 是一个 10 位开关电容器、逐次逼近型的模数转换 器。此芯片有 2 个数字输入端、 1 个三态输出口&#xff08;包括片选端 口 ( CS ) 、 1 个 I/O CLOCK 端口和 1 个数字输出端 (DATA OUT) &#xff09;&#xff0c; 可以实现三总线接口到总控制器的串行口的数据传输…

正点原子嵌入式linux驱动开发——异步通知

上一篇笔记中使用阻塞或者非阻塞的方式来读取驱动中按键值都是应用程序主动读取的&#xff0c;对于非阻塞方式来说还需要应用程序通过poll函数不断的轮询。最好的方式就是驱动程序能主动向应用程序发出通知&#xff0c;报告自己可以访问&#xff0c;然后应用程序再从驱动程序中…

Redis持久化解析:全面了解Redis的数据持久化机制

文章目录 &#x1f34a; Redis持久化&#x1f389; 什么是持久化&#xff1f;&#x1f389; 持久化的原理&#x1f4dd; RDB持久化&#x1f4dd; AOF持久化&#x1f4dd; 混合持久化&#x1f4dd; save与bgsave &#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、Java领…

使用 VS 2022 开发C#项目的tips

代码操作 删除注释或空行 参考C#【必备技能篇】Visual Studio删除所有的注释和空行 删除所有行注释&#xff1a;包括行内和行外&#xff0c;如下所示 Ctrl H 替换&#xff0c;第一行输入&#xff1a;//[^\n]*\n, 第二行输入&#xff1a;\n。替换即可。 这一步可能出现很多空…

数据结构题型20-第七章 查找

文章目录 1 考察重点2 知识框架3 考察重点4 顺序查找和折半查找4.1 顺序查找4.1.1 一般线性表的顺序查找4.1.2 有序表的顺序查找 4.2 折半查找4.3 分块查找 1 考察重点 2 知识框架 3 考察重点 4 顺序查找和折半查找 4.1 顺序查找 4.1.1 一般线性表的顺序查找 4.1.2 有序表的顺…