【网络小知识】TCP协议介绍/三次握手,四次挥手的作用

news2024/11/15 10:41:53

在这里插入图片描述

前端开发人员需要了解三次握手和四次挥手的原因是,这些概念是在客户端和服务器端之间进行网络通信时所涉及到的 TCP 协议的基本知识。而对于前端来讲,如果页面中请求服务端数据时出现连接失败、延迟等问题,就需要对TCP协议中三次握手、四次挥手所对应的状态码有一定的理解。

目录

  • ⭐一、TCP协议初认识
  • ⭐二、三次握手四次挥手

⭐一、TCP协议初认识

TCP(Transmission Control Protocol)是一种面向连接的传输层协议,主要用于互联网中的无差别网络。它提供了全双工、可靠、有序、面向连接和基于字节流的数据传输服务,可以确保数据以正确的方式从一个应用程序传输到另一个应用程序。

TCP 协议具体包括以下特点:

面向连接:在 TCP 传输数据之前,必须经过建立连接阶段,即三次握手。数据传输完毕后,还需要进行四次挥手来关闭连接。这个过程保证了每个数据包都能够通过可靠的方式被发现,传递到其目录地。

全双工:TCP 连接支持全双工模式,即两端可以同时发送和接收数据,而不用等待对方或交替进行发送和接收。

基于字节流:在 TCP 协议中,数据被分割成多个 IP 分组,并且不同的 IP 分组可以通过不同路径按照任意顺序到达目的地。因此,TCP 数据流被视为一个无限长的字节流,TCP 把这个流切分成若干块(segment),并负责将这些块重新组装成原始的数据。

可靠性:TCP 会利用确认、重传和超时机制等方法来确保数据的可靠性,保证每个数据包能够正确地到达它们的目标,且没有重复。

有序性:TCP 协议可以确保数据报按照发送顺序逐一传递,并在目的地重新组装回来。这就保证了接收方可以准确地重建原始消息。

流量控制和阻塞控制:TCP 协议会根据网络从源头到目的地的延迟情况和连接的带宽大小进行流量控制和拥塞控制。通过使用滑动窗口协议和其他方法,防止发送方发送过多数据,导致网络不能承受负载而发生阻塞。

综上所述,TCP 协议是一个可靠的、通用的传输协议,在互联网中广泛使用,能够在不稳定或高负荷的网络环境下实现稳定的数据传输,并通过对传输过程的状态监控、反馈机制以及流量控制等保护手段来确保数据传输的可靠性。

⭐二、三次握手四次挥手

三次握手和四次挥手是 TCP 协议中的重要概念,下面分别进行详解及其用途:

三次握手
三次握手指建立 TCP 连接时,客户端和服务端之间进行的互相确认过程。它具体包括以下步骤:

第一步(Client -> Server):客户端请求连接,发送 SYN 数据包给服务端。
第二步(Server -> Client):服务端收到 SYN 数据包后,确认收到请求,并发回 ACK 数据包,并根据自己的当前状态返回 SYN+ACK 数据包。
第三步(Client -> Server):客户端接收到服务器的 SYN+ACK 数据包后,返回 ACK 确认数据包,通知服务端连接已建立。
三次握手主要用途是确保双方能够建立可靠的 TCP 连接,验证连接正常并准备好接受和发送数据,同时防止因网络或其他原因导致连接中断或数据丢失。

四次挥手
四次挥手指关闭 TCP 连接时,客户端和服务端之间进行的互相确认过程。它具体包括以下步骤:

第一步(Client -> Server):客户端发起关闭请求,发送 FIN 数据包给服务端。
第二步(Server -> Client):服务端收到 FIN 数据包后,发送 ACK 数据包给客户端,确认已经接收到关闭请求。
第三步(Server -> Client):如果服务端还有未发送的数据,那么它将在 ACK 包中包含它的 FIN 包以通知客户端还需要等待数据传输完成。否则,服务端直接发送 FIN 数据包给客户端,标识服务端已经准备好关闭连接。
第四步(Client -> Server):客户端收到服务器的 FIN 数据包后,发回 ACK 数据包,确认接受关闭请求并通知服务端可以断开连接。
四次挥手主要用途是确保 TCP 连接能够正常地终止,防止客户端和服务端在正常关闭之前断开连接而导致数据丢失,同时释放掉资源以便其他连接使用。

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

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

相关文章

VS——Visual Studio 2022 社区版——安装

VS——Visual Studio 2022 社区版——安装 下载安装官网下载:点击【免费Visual Studio 】即可下载安装界面:选择社区版 Community 安装先修改【安装位置】,选择【全部下载后安装】【工作负荷】选择 【使用C桌面开发】【语言包】点击【安装】&…

排序算法(二)

三、桶排序 先看定义: 桶排序会进行两次排序,一次将所有元素分配到不同的桶中,一次针对每个桶排序或再次排序所有元素。 练习题: 1) 力扣https://leetcode.cn/problems/top-k-frequent-elements/这道题就是非常典型…

NFS能使使用者访问网络上别处的文件就像在使用自己的计算机一样

先关闭selinux跟防火墙 安装NFS yum install nfs-utils -y 配置共享目录 mkdir /webdata 赋权 chmod 755 /webdata 修改配置文件 vim /etc/exports 换顺序启动 systemctl start rpc-bind systemct start nfs 测试 showmount -e 客户端挂载 创建共享目录 mkdir /we…

BUUCTF-rip

https://www.cnblogs.com/refrain-again/p/15001283.html 看了这个文章 我起码能理解我们栈溢出的目的 在做题之前 我们需要先理解 栈的存储方法 从上往下看 就能理解入栈 说回这道题目 为什么这道题目是栈溢出 1.查看基本信息 checksec file 是kali下的elf文件 相当于w…

ASEMI代理ADI亚德诺AD8061ARTZ-REEL7车规级芯片

编辑-Z AD8061ARTZ-REEL7芯片参数: 型号:AD8061ARTZ-REEL7 −3dB小信号带宽:320MHz −3dB大信号带宽:280MHz 0.1 dB平坦度的带宽:30MHz 斜率:650V/μs 总谐波失真:-77dBc 输入电压噪声&…

Kotlin | 这些隐藏的内存陷阱,你应该熟记于心

作者:Petterp 引言 Kotlin 是一个非常 yes 的语言,从 null安全 ,支持 方法扩展 与 属性扩展,到 内联方法、内联类 等,使用Kotlin变得越来越简单舒服。但编程从来不是一件简单的工作,所有简洁都是建立在复杂…

电子招标采购系统:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点:招标类项目立项申请入口,用户可以保存为草稿,提交。 2、非招标立项申请 功能点:非招标…

使用SpringAOP的方式修改controller接口返回的数据

1为什么需要修改返回接口的数据? 先看一个关于返回接口数据中包含时间的接口,如下接口中的birth属性,是日期,假设我们不做任何处理,那么在页面,我们看到的将是如下的时间显示效果,这明显不是我…

NVM-无缝切换Node版本

NVM-无缝切换Node版本 如果未使用nvm之前已经下载了node,并且配置了环境变量,那么此时删除这些配置(Node的环境以及Node软件),使用nvm是为了在某些项目中使用低版本的node NVM下载 进入github的nvm readme: https://github.com/coreybutler/nvm-windows…

企业如何利用数据打造新的人才战略?

由于利率上升、能源价格上涨、政治不确定性、全球供应限制以及寻找和资助昂贵人才的问题,企业的优先事项,也就是人们的优先事项,正在以前所未有的速度发生转变。在数据的基础之上迅速做出正确决策,并灵活精准地向他人传达意义。 …

必要的项目管理软件因素

什么样的项目管理软件好?对于一个项目团队来说,从项目开始到项目结束,需要多个部门的配合。每个成员可能会参与一个以上的项目,这通常需要并行的多个项目。据介绍,国外90%以上的项目是用软件管理的,而中国只…

dump 定位分析

在缺少pdb的时候如何分析dump? windbgidaWindbg定位崩溃位置 通过windbg打开dump,并且分析dump !analyze -v 分析: 分析dump: !analyze -v错误原因:读取空指针错误线程:00001e04,可通过命令…

【Linux进阶篇】磁盘及分区

目录 🍁文件系统 🍂虚拟机添加磁盘 🍂磁盘分区方式 🍂分区格式化 🍂挂载磁盘 🍁磁盘高级管理 🍂LVM:逻辑卷 🍃创建PV 物理卷 🍃创建VG 卷组 🍃创建…

说说你对 Webpack 的理解?解决了什么问题?

1、对webpack的理解 简单来说,webpack 是一个用于现代JavaScript应用程序的静态模块打包工具。 当 webpack处理应用程序时,它会在内部构建一个依赖图,此依赖图对应映射到项目所需的每个模块(不再局限js文件)&#xf…

【数据结构与算法】 - 双向链表 - 详细实现思路及代码

目录 一、概述 二、双向链表 三、双向链表实现步骤  📌3.1 C语言定义双向链表结点  📌3.2 双向链表初始化  📌3.3 双向链表插入数据  📌3.4 双向链表删除数据  📌3.5 双向链表查找数据  📌3.6 双向链…

总线仿真与测试工具CANoe介绍(图文并茂)

1、什么是CANoe CANoe是德国Vector公司的一款用于开发、测试和分析单个ECU和整个ECU网络的综合性工具,包括软件和硬件。它在整个开发过程中为网络设计者、开发和测试工程师提供支持:从规划到系统级测试。由于其多种变体和功能能够对不同的项目提供支持,被全球OEM和供应商广…

USB 速度识别

文章目录USB 速度识别低速设备全速设备高速设备空闲状态低速 / 全速设备高速设备SE0SE1USB 速度识别 在 USB host 或者 hub 的每个下行端口(downstream facing port)的 D 和 D- 上分别接了一个 15KΩ 的下拉电阻到地,这样,当端口…

SpringBoot自动装配原理(附面试快速答法)

文章目录SpringBoot自动装配原理1. 从调用SpringApplication构造器方法开始2. 解析启动类4.按需装配4.1 分析dubbo自动装配5. 如果定义自己的starter6. 面试答法SpringBoot自动装配原理 之前面试被问到这个题目,只会答一些spi、AutoConfigration注解、Import之类的&…

《SQLi-Labs》01. Less 1~5

Less-1 ~ Less-5 前言Less-1知识点题解 Less-2题解 Less-3题解 Less-4题解 Less-5知识点题解 sqli。开启新坑。 前言 对于新手,为了更加直观的看到 sql 注入语句,可以在以下文件添加两句: echo $sql; # 将构造的 sql 语句进行输出 echo &qu…

Maven依赖冲突分析和解决

使用maven管理jar包依赖时,可能会出现jar包版本冲突,不同版本的api调用方式可能不同,会出现NoSuchMethodError和ClassNotFoundException问题,甚至编译不通过,如:在common-lang3 的3.8.1版本中MethodUtils::…