TCP之三次握手四次挥手

         在前面的文章中我们了解到http是基于TCP/IP协议的,这篇文章我们来了解一下TCP/IP。

一、TCP与UDP

1、UDP

       基于非连接。类似于写信,不能保证对方能不能接收到,接收到的内容是否完整,顺序是否正确。

    优缺点:性能损耗小,占用资源少,稳定弱,速度块。

2、TCP

      基于连接,类似与通话,能够确认对方能够准确的接收到发送的信息。

    优缺点:数据传输可靠,支持全双工,建立时间和消耗资源过大,有延迟,效率相对较低。

二、TCP建立连接和断开连接

1、三次握手建立连接

(1)作用

          三次握手是TCP用来建立连接的一种机制,确保双方可以正常通信。每一步都需要对方的确认才能进行下一步,从而确保双方都同意建立连接,并且状态得到正确同步。这样可以减少因网络延迟、丢包等问题导致的连接建立失败或错误。

(2)建立过程

  • 第一次握手:客户端发送SYN包,客户端向服务器发送一个SYN(同步)包,其中包含一个初始序列号(ISN)作为起始值。此时客户端处于SYN_SENT(同步已发送)状态。
  • 第二次握手:服务器回复SYN-ACK包,服务器收到客户端的SYN包后,会生成自己的初始序列号,并对客户端的SYN进行确认。服务器构造一个SYN-ACK(同步-确认)包,将自己的初始序列号作为起始值,同时也将确认号设置为客户端初始序列号加一。然后服务器发送这个SYN-ACK包给客户端。此时服务器处于SYN_RCVD(同步已接收)状态。
  • 第三次握手:客户端发送ACK包,客户端收到服务器的SYN-ACK包后,确认服务器的初始序列号和确认号,并构造一个ACK(确认)包,将确认号设置为服务器初始序列号加一。客户端发送这个ACK包给服务器。此时客户端处于ESTABLISHED(已建立连接)状态,服务器收到ACK包后也转入ESTABLISHED状态。
  • 三次握手完成,客户端和服务器正式建立了TCP连接,可以进行数据的传输。

(3)注意事项

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

         ②如果已经建立了连接,但是客户端突然出现故障了怎么办?

         TCP协议引入了超时机制。TCP为每个连接都设置了一个定时器,用于在一定时间内检测连接是否还处于活动状态。如果在规定时间内没有收到客户端的数据,则服务器认为客户端已经断开连接,并会关闭连接。

(4)为什么不能用两次握手?

  • 确保双方都愿意建立连接:在两次握手的情况下,客户端只发送一次连接请求,但服务器无法确认客户端是否真正希望建立连接,因为可能只是一个错误的或者重复的请求。通过三次握手,服务器可以回复确认信号来确认客户端真正的通信意愿。
  • 防止已失效的连接请求影响:如果使用两次握手,可能会遇到客户端已经发送了一个连接请求,在网络中滞留了一段时间后终于到达服务器,导致服务器误认为客户端希望建立连接。而通过三次握手,服务器可以得到客户端最新的连接请求,并且可以排除掉之前的已失效的连接请求。
  • 同步双方的初始序列号:在TCP连接中,每个连接都有一个初始序列号(ISN)用于标识数据流的起始位置。通过三次握手,双方可以交换彼此的初始序列号,从而实现双方序列号的同步,确保后续传输的数据能够正确地按序组装和重组。

2、四次挥手断开连接

(1)作用

       是用于关闭TCP连接的过程。它是在双方确认不再需要通信时,进行连接释放和资源回收的步骤。在这个过程中,双方都需要发送FIN和ACK两个标志位的报文段,以确保双方都知道对方已经确认了关闭连接的请求。最后,当双方都收到了对方发送的ACK报文段后,连接就顺利关闭,并且可以回收连接所占用的资源。

(2)建立过程

  • 第一次挥手:客户端发送连接释放请求(FIN),当客户端确定不再发送数据时,它会发送一个带有FIN标志位的报文段给服务器,表示请求关闭连接。此时,客户端进入FIN-WAIT-1(终止等待1)状态。
  • 第二次挥手:服务器回复确认客户端的请求(ACK),服务器收到客户端的连接释放请求后,会发送一个带有ACK标志位的报文段给客户端,确认收到了客户端的请求。服务端就进入了CLOSE-WAIT 关闭等待状态。
  • 第三次挥手:服务器发送连接释放请求(FIN),客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
  • 第四次挥手:客户端回复确认服务器的请求(ACK),客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命)客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

(3)注意事项

       为什么客户端要等待2MSL?
        确保连接彻底关闭,并在此期间处理延迟报文段和防止端口冲突,从而保证网络通信的可靠性和稳定性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

el-select实现懒加载

先看一个线上的演示示例:https://code.juejin.cn/pen/7273352811440504889 背景 我们在实际开发中经常遇到这样的需求: el-select实现懒加载,用通俗的话说,为了增加响应速度,就是初始下拉只展示50条数据&#xff0c…

excel 分组排序

excel中会遇到对不同分组数据进行排序,比如对于不同班级里的学生按照分数高低进行升序排序,可以采用如下公式 SUMPRODUCT((A$2:A$12A2)*(C$2:C$12>C2))1 如果需要 进行降序排序,将公式中的大于号替换为小于号即可

Unity UI与粒子 层级问题Camera depth Sorting Layer Order in Layer RenderQueue

Unity游戏开发中,模型、界面、特效等,需要规划好layer的概念,涉及到摄像机(Camera)、画布(Canvas)、Shader等相关内容。 在 Unity 中,渲染顺序是由多个因素共同决定的,大…

【暴力DP】2021 icpc上海 I

Problem - I - Codeforces 题意: 思路: 考虑暴力DP即可 设 dp[i][j][k]表示 前 i 个物品,已经翻倍了 j 次,A点数 - B点数为 k 的最大价值和 然后分为这6种决策分类讨论就好了 注意数组里不能有负数,要加个偏移量 P…

百度文心一率先言向全社会开放 应用商店搜“文心一言”可直接下载

8月31日,文心一言率先向全社会全面开放。广大用户可以在应用商店下载“文心一言APP”或登陆“文心一言官网”(https://yiyan.baidu.com) 体验。同时,企业用户可以直接登录百度智能云千帆大模型平台官网,调用文心一言能…

Kubernetes技术--k8s核心技术 configMap

1.概述 configMap最主要的作用是存储一些不加密的数据到/etcd,让pod以变量或者数据卷(volume)挂载到容器。 应用场景:配置文件、存储信息等 2.使用 -1.创建配置文件。 这里我们需要先编写一个配置文件。使用redis,如下所示:

k8s使用ECK(2.4)形式部署elasticsearch+kibana-http协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、准备elasticsearch-cluster.yaml二、部署并测试总结 前言 之前写了eck2.4部署eskibana,默认的话是https协议的,这里写一个使用http…

SpringCloud(十)——ElasticSearch简单了解(三)数据聚合和自动补全

文章目录 1. 数据聚合1.1 聚合介绍1.2 Bucket 聚合1.3 Metrics 聚合1.4 使用 RestClient 进行聚合 2. 自动补全2.1 安装补全包2.2 自定义分词器2.3 自动补全查询2.4 拼音自动补全查询2.5 RestClient 实现自动补全2.5.1 建立索引2.5.2 修改数据定义2.5.3 补全查询2.5.4 解析结果…

面试官如何考察与CAP相关的理论?

在互联网技术面试中,考察分布式技术已经是面试的标配了。很多招聘信息中,你能发现,一线互联网公司在对候选人的要求中都有“分布式系统设计”这一关键词。无论你是程序员,还是架构师,都要掌握分布式系统设计。 案例背…

vue使用打印组件print-js

项目场景&#xff1a; 由于甲方要求&#xff0c;项目需要打印二维码标签&#xff0c;故开发此功能 开发流程 安装包&#xff1a;npm install print-js --saveprint-js的使用 <template><div id"print" ref"print" ><p>打印内容<p&…

WebSocket 协议及其使用案例

文章目录 前言一、初识 WebSocket 协议1.1 什么是 WebSocket 协议1.2 WebSocket 与 HTTP 的关系1.3 WebSocket 握手的过程1.4 WebSocket 解决了什么问题 二、WebSocket 数据帧格式2.1 WebSocket 数据帧格式图示2.2 各字段的详细说明 三、SpringBoot 项目中引入 WebSocket3.1 创…

python中的文件操作

我们平常对文件的基本操作&#xff0c;大概可以分为三个步骤&#xff08;简称文件操作三步走&#xff09;&#xff1a; ① 打开文件 ② 读写文件 ③ 关闭文件 【注意事项】 注意&#xff1a;可以只打开和关闭文件&#xff0c;不进行任何读写 文件打开 open函数&#xff…

Hibernate(Spring Data)抓取策略

文章目录 示例代码放到最后&#xff0c;使用的是Springboot 项目1. 简介2. Hibernate抓取策略分类2.1 即时加载&#xff08;Eager Loading&#xff09;2.2 延迟加载&#xff08;Lazy Loading&#xff09;2.3 子查询加载&#xff08;Subselect Loading&#xff09;2.4 基于批处理…

排序之选择排序

文章目录 前言一、直接选择排序1、直接选择排序基本思想2、直接选择排序代码实现3、直接选择排序的效率 二、堆排序1、堆排序2、堆排序的效率 前言 选择排序的基本思想就是每一次从待排序的数据元素中选出最小(或最大)的一个元素&#xff0c;存放在序列的起始位置&#xff0c;…

pdfh5在线预览pdf文件

前言 pc浏览器和ios的浏览器都可以直接在线显示pdf文件&#xff0c;但是android浏览器不能在线预览pdf文件&#xff0c;如何预览pdf文件&#xff1f; Github: https://github.com/gjTool/pdfh5 Gitee: https://gitee.com/gjTool/pdfh5 使用pdfh5预览pdf 编写预览页面 <…

PSP - 蛋白质结构预测 OpenFold Multimer 模型训练参数与配置

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132575709 OpenFold Multimer 是用于预测蛋白质多聚体结构的计算方法。基于OpenFold 的单体预测框架&#xff0c;利用深度学习技术&#xff0c;结…

Python Flask Web开发二:数据库创建和使用

前言 数据库在 Web 开发中起着至关重要的作用。它不仅提供了数据的持久化存储和管理功能&#xff0c;还支持数据的关联和连接&#xff0c;保证数据的一致性和安全性。通过合理地设计和使用数据库&#xff0c;开发人员可以构建强大、可靠的 Web 应用程序&#xff0c;满足用户的…

Mysql数据库(1)—索引

索引是什么&#xff1f; 索引是帮助MySQL高效获取数据的排好序的数据结构。常见的索引数据结构包括&#xff1a; 二叉树红黑树Hash表B-Tree mysql索引分类 按逻辑结构分类&#xff1a;B tree索引、Hash索引、Full-text索引。按物理存储分类&#xff1a; &#xff08;1&…

Linux命令awk详细用法

简介 awk 是一种强大的文本处理工具&#xff0c;用于在命令行环境下对文件或数据流进行逐行处理和分析。它是由 Alfred Aho、Peter Weinberger 和 Brian Kernighan 在 1977 年开发的&#xff0c;并以他们三人的姓氏命名。awk 在 Unix/Linux 系统中非常常见&#xff0c;也有 Win…

【Git】在idea中多分支开发如何——合并分支、处理冲突

博主简介&#xff1a;22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a;是瑶瑶子啦每日一言&#x1f33c;: “人间总有一两风&#xff0c;填我十万八千梦” 目录 一、背景二、具体操作 一、背景 我当前开发的分支——hfy我想将subject分支的最新代码拉取&…