TCP三次握手四次挥手详解

news2024/11/16 13:41:45
  • 三次握手
    在这里插入图片描述

    • 第一次:客户端发送请求连接的报文;SYN=1,表请求建立连接的报文;seq,序列号,随机。

    • 第二次:服务端发送请求连接和同意连接的报文;ACK=1,表示确认号有用;ack=x+1,表示服务端希望客户端发送的下一个报文的序列号;seq,随机。

    • 第三次:客户端发送同意连接的报文,seq为x+1;

    • 开始数据连接后,如果客户端需要发送数据,他的序列号应该为seq=x+1;如果服务端需要发送数据,他的序列号应该为seq=y+1.(因为服务端在接收报文后,没有在发确认报文,客户端也就不知道下一个报文的序列号)

    • 问题:三次握手中如果第一个报文丢失?

      客户端会重发第一个报文,因为客户端没有收到第二个确认(请求)报文;

      服务端不做任何操作。

    • 问题:三次握手中如果第二个报文丢失?

      客户端会重发第一个报文,因为客户端没有收到服务端第二个确认(请求)报文;

      服务端会重发第二个报文,因为服务端没有收到客户端的第三个确认报文。

    • 问题:三次握手中如果第三个报文丢失?

      客户端不做任何操作,因为客户端发送的第三个报文是确认报文,只要本端发送出去就行了;

      服务端会重发第二个报文,因为服务端没有收到客户端的第三个确认报文,然后客户端重发第三个报文

    • 问题:三次握手为什么一定要是三次,能不能用两次来建立?

      不可以,因为网络延时问题,服务端没有接收客户端的确认报文,会重新发送;那么这时,第二次发送的第二个报文到了客户端,建立连接;数据发送完成后,断开连接,突然第一次发送的报文到了,又会建立一次连接,会占用链路资源。

  • 四次挥手

- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ebsV71Zh-1672447968786)(C:\Users\26807\AppData\Roaming\Typora\typora-user-images\image-20221001163807347.png)]

  • MSL:一个数据报文在网络中存在的最长时间(2分钟),为了防止报文的丢失,客户端和服务端会等待2MSL,再关闭数据传输的连接。

  • 第一次:客户端发送请求断开连接的报文;FIN=1,表示断开连接。seq,基于数据传输中客户端发送的最后一个报文。

  • 第二次:服务端发送同意断开连接的确认报文,seq,基于数据传输的最后一个报文。seq,基于数据传输中服务端发送的最后一个报文。

  • 第三次:服务端发送请求断开连接的报文;seq,因为连接断开,所以seq随机。ack=u+1,因为对于服务端来说,连接已经断开,为了防止第二个报文网络延时/丢失,所以会加上ACK=1,ack=u+1。

  • 第四次:客户端发送同意断开连接的确认报文;

  • 问题:如果第一报文丢失?
    客户端重发第一个报文,服务端再重发第二个报文,客户端没有接收到第二个报文。
    - 问题:如果第二报文丢失?
    客户端重发第一个报文,服务端再重发第二个报文,客户端没有接收到第二个报文。

  • 问题:如果第三报文丢失?
    服务端重发第三个报文,客户端再发送第四个报文

  • 问题:如果第四报文丢失?
    服务端重发第三个报文,客户端再发送第四个报文

  • 问题:为什么不将第二第三次合拼?
    因为数据的传输是双向的,有可能客户端数据传输完毕,而服务端数据没有。

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

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

相关文章

【一起从0开始学习人工智能】0x01机器学习基础+初次实践

从零开始----到敲出一个推荐系统 文章目录人工智能概述流派能做什么什么是机器学习数据集构成机器学习算法分类机器学习开发流程学习框架和资料怎么做机器学习库与框架可用数据集sklearn使用自带数据集sklearn数据集使用拿到的数据是否全部用来训练模型人工智能概述 人工智能-…

Linux下对文件权限的理解

一、权限的概念 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”,普通用户的命…

【Python爬虫 • selenium】selenium4新版本自动获取驱动的常见问题

文章目录前言一、安装驱动二、使用步骤1.导入包2.生成驱动3.打开网站二、selenium闪退问题处理1. selenium版本与代码不匹配2. selenium代码异常三、代码示例1.selenium4代码示例1. Chrome2. Chromium3. Brave4. Firefox5. IE6. Edge7. Opera2.selenium3代码示例1. Chrome2. Ch…

蓄热式加热炉燃烧技术

通过阅读前辈们的一些文章,关于蓄热式加热炉燃烧技术方面进行了总结。 一个蓄热燃烧单元至少由两个烧嘴本体、两个体积紧凑的蓄热室、换向阀和与之配套的控制系统组成,即应用蓄热式 (高温空气 )燃烧技术的炉子烧嘴需成对安装,当烧嘴 A 工作时…

【云原生】K8s PSP 和 securityContext 介绍与使用

文章目录一、概述二、PodSecurityPolicy 的发展1)以前为什么需要 PodSecurityPolicy?2)现在为什么 PodSecurityPolicy 要消失?三、PSP 简单使用1)开启PSP2)示例演示1、没有PSP场景测试2、定义PSP【1】资源限…

C++中的多态(原理篇)

多态的原理 虚函数表 下面这一串代码 class A { public:virtual void func(){cout << "func1()" << endl;} private:int _a; };我们看到了a对象的大小是8bit大小&#xff0c;但是a对象里面不应该只是一个_a吗&#xff1f;当我们打开监视窗口发现 a对象…

C++STL-list的简易实现

文章目录1. list的介绍2. 迭代器的分类3. list的构造4. list的实现4.1 list的基本结构4.2 list的push_back函数4.2 list的迭代器4.2.1 operator- >4.2.2 const迭代器4.3 insert函数4.4 earse函数4.5 迭代器失效问题4.6 析构函数4.7 构造函数4.8 拷贝构造1. 传统写法2. 现代写…

【C++升级之路】第四篇:类和对象(下)

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【C学习与应用】 ✒️✒️本篇内容&#xff1a;类与对象知识汇总&#xff0c;包括初始化列表的基本概念和使用的注意事项、explicit关键字、C/C中的static成…

Python【方法和返回值(Union)联合类型】注解

什么是类型注解&#xff1a;供调用者在使用函数&#xff08;方法&#xff09;时&#xff0c;如果没有完善的文档作为参考&#xff0c;开发者不知道要给定义的【变量、方法中的函数、】传入什么数据类型&#xff0c;以免减少编译错误。有了类型注解可以让 IDE 知道了数据类型后&…

C++语法2——for、while、do-while的语法及区别

C语言语法1详情请看这两篇博客&#xff1a;&#xff08;此号为本人小号&#xff09; 四则运算及基本语法 数据类型 接下来要讲得是循环语句 for循环 基本语法&#xff1a; for(表达式1&#xff1b;表达式2&#xff1b;表达式3) {内嵌语句&#xff1b; }执行顺序&#xff1a;…

js如何计算年龄?如何创建Javascript 年龄计算器?

如何创建年龄计算器? 要构建这个项目,我们需要HTML,CSS和Javascript。 让我们来看看这个项目是如何工作的。项目由输入日期组成。用户必须单击它并选择他们的出生日期或任何所需的日期。在此之后,用户必须单击计算按钮。用户单击计算按钮后,我们会根据他们输入的日期(…

深入理解ConcurrentLinkedQueue源码

1. 概述 在我们的日常开发中&#xff0c;经常会使用队列这种数据结构&#xff0c;需要它的队尾进、队头出的特点。于是&#xff0c;Doug Lea大师设计了一个线程安全的队列ConcurrentLinkedQueue&#xff0c;它是采用链表的形式构成的。我们接下来尝试通过代码去了解其中的设计…

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法

S7-200SMART通过表格指令实现模拟量信号滑动平均值滤波的具体方法 当现场的模拟量信号波动太大,而通过硬件的方式尚无法实现平稳的信号输入时,可采用软件上的滤波进行信号处理, 本次和大家分享的即通过取多个信号值的平均值的方式实现模拟量滤波的具体方法示例,仅供大家参考…

DataNode节点下线速度优化

目录 一、节点掉线或退役 1.1区分节点掉线和节点退役的区别 1.2 如何处理节点掉线出现的各种风暴 1.2.1 Datanode的block复制 1.2.2 控制节点掉线RPC风暴的参数 二、如何快速节点下线 一、节点掉线或退役 背景&#xff1a;5台数据节点&#xff0c;存储40T数据 block数112…

高等数学(上) —— 一元积分学

文章目录Ch4.不定积分原函数F(x)F(x)F(x)原函数存在定理不定积分∫f(x)dx\int f(x)dx∫f(x)dx不定积分公式不定积分 ⇦⇨ 变上限积分&#xff1a;∫f(x)dx∫0xf(t)dt\int f(x){\rm d}x\int_0^xf(t){\rm d}t∫f(x)dx∫0x​f(t)dtCh5.定积分1.定积分定义定积分的几何意义2.定积分…

ESP32的python开发环境搭建:Thonny+MicroPython

1 Thonny安装 Thonny —— 一个面向初学者的 Python IDE。Thonny良好的支持Microbit、ESP32和树莓派等的开发. 安装下载地址&#xff1a; https://thonny.org/ 2 Micropython安装 MicroPython 是 Python 3 语言的精简实现 &#xff0c;包括Python标准库的一小部分&#xff0…

Vector - VT System - 板卡_VT8006/VT8012

由于最近不幸变为了小*人&#xff0c;因此断更了一周&#xff0c;今天稍有好转&#xff0c;就新加一块大家应该会比较感兴趣的VT板卡硬件介绍吧&#xff0c;也预示着新的开始&#xff0c;马上也要到了元旦&#xff0c;新的一年即将开始&#xff0c;提前在这里祝福大家在新的一年…

JavaPub面试宝典【第22版】

JavaPub面试宝典【第22版】 直接上干货&#xff0c;几百篇原创笔记都在这。 文章列表 &#x1f4da;最少必要面试题 Java基础Java并发入门Java容器JavaWebJVMMySQLMyBatisSpringSpringBootRedisElasticSearchKafkaZookeeperDocker缓存 &#x1f4d6;知识点总结 下面是原创…

linux 下命令

linux 下命令 Linux 是一套免费使用和自 由传播的类 Unix 操作系统&#xff0c; 是一个基于 POSIX 和 UNIX 的多用户、 多任务、 支持多线程和多 CPU 的操作系统。 它能运行主要的 UNIX 工具软件、 应用程序和网络协议。 它支持 32 位和 64 位硬件。 Linux 继承了 Unix 以网络为…

uniCloud云开发----4、uniCloud云开发进阶使用方法

uniCloud云开发进阶使用方法前言1、云对象的importObject的创建和使用(1&#xff09;创建云对象&#xff08;2&#xff09;编辑云对象&#xff08;3&#xff09;在.vue文件中调用云对象&#xff08;4&#xff09;在.vue文件中调用方法2、客户端直接连接数据库(1)直接在客户端引…