【计算机网络基础知识】

首先举一个生活化的例子,当你和朋友打电话时,你可能会使用三次握手和四次挥手的过程进行类比:

三次握手(Three-Way Handshake):

  1. 你打电话给朋友:你首先拨打你朋友的电话号码并等待他接听。这就像客户端向服务器发送一个连接请求。

  2. 朋友接听电话:如果你朋友接听了电话,他会告诉你:“喂,我在这里!”这表示你的连接请求已经被接受。这就像服务器发送一个确认消息给客户端。

  3. 你确认朋友的回答:在你确认朋友在电话线的另一端时,你会说:“好的,我听到了!”这表示你已经知道连接已经建立了。这就是客户端再次向服务器发送一个确认消息。

四次挥手(Four-Way Handshake):

  1. 通话结束:当你和朋友的谈话结束时,你会说:“好的,我得挂了。”这就像客户端发送一个关闭连接的请求给服务器。

  2. 朋友确认挂断:你的朋友会回答:“好的,再见!”这表示服务器已经收到了关闭连接的请求,并且也准备好关闭连接。但是他仍然会等待任何未处理的数据。这是服务器发送一个确认关闭的消息给客户端。

  3. 朋友准备好了:一旦你的朋友处理了所有数据,他会再次说:“好的,现在我也准备好了,我们断开连接吧!”这就像服务器发送一个关闭连接的请求给客户端。

  4. 确认断开连接:你会回答:“好的,再见!”这表示客户端收到了服务器的关闭请求,并且也准备好关闭连接。这就是客户端发送一个确认关闭的消息给服务器。

1.详细讲一下TCP的三次握手与四次挥手

三次握手(Three-Way Handshake)

  1. 第一步:客户端发送 SYN 请求

    • 客户端向服务器发送一个SYN(同步)标志位的数据包,表明客户端想要建立连接。该数据包中还包含客户端的初始序列号(Sequence Number)。
  2. 第二步:服务器确认 SYN 请求

    • 服务器收到客户端发送的SYN请求后,会发送一个SYN-ACK(同步-确认)标志位的数据包作为响应。这个数据包中的SYN标志位表示服务器接收到了客户端的SYN请求,ACK标志位表示服务器同意建立连接,并在确认号(Acknowledgment Number)字段中回复客户端的初始序列号+1,同时也会发送自己的初始序列号。
  3. 第三步:客户端确认 SYN-ACK

    • 客户端收到服务器的SYN-ACK响应后,会发送一个确认数据包,其中ACK标志位置为1,表示客户端确认收到了服务器的响应。同时,客户端会将确认号设置为服务器初始序列号+1。

完成这个过程后,TCP连接就建立起来了,双方可以开始进行数据传输。

四次挥手(Four-Way Handshake)

  1. 第一步:客户端发送关闭连接请求

    • 当客户端决定关闭连接时,会发送一个FIN(结束)标志位的数据包给服务器,表示客户端不再有数据要发送了,但仍可以接收数据。
  2. 第二步:服务器确认关闭请求

    • 服务器收到客户端的FIN后,会发送一个ACK确认数据包,表明服务器收到了关闭请求。服务器在这个响应中可能还会包含一些剩余数据,如果有的话。
  3. 第三步:服务器发送关闭请求

    • 当服务器也准备好关闭连接时,会发送一个FIN标志位的数据包给客户端,表明服务器不再有数据要发送了。
  4. 第四步:客户端确认关闭请求

    • 客户端收到服务器的FIN后,会发送一个ACK确认数据包给服务器,表明客户端收到了关闭请求。然后等待一段时间,确保服务器收到了这个确认,最后关闭连接。

完成这个过程后,TCP连接就彻底关闭了,双方不再进行数据传输。

2.为什么是三次握手不是两次呢,为什么是四次挥手不是三次呢?

为什么是三次握手而不是两次?

  • 第一次握手(SYN):客户端向服务器发送连接请求,并指明初始序列号。
  • 第二次握手(SYN + ACK):服务器收到请求后,确认连接请求,并发送自己的序列号。
  • 第三次握手(ACK):客户端收到服务器的确认后,也发送确认消息,表示连接已建立。

三次握手的设计是为了解决可能出现的两种情况:重复连接请求和延迟的连接请求。通过三次握手,确保了双方的状态都同步了,建立了可靠的连接。

为什么是四次挥手而不是三次?

  • 第一次挥手(FIN):客户端发送关闭连接请求。
  • 第二次挥手(ACK):服务器收到关闭请求后,发送确认消息。
  • 第三次挥手(FIN):服务器在关闭连接之前,先发送关闭连接请求。
  • 第四次挥手(ACK):客户端收到服务器的关闭请求后,发送确认消息,完成连接的关闭。

四次挥手的设计是为了确保双方都能够知道连接已经关闭,避免出现半关闭状态,即其中一方已经关闭了连接,而另一方还在发送数据的情况。

3.get和post的区别,分别适用于什么场景?

总结

get()请求是一种 HTTP 方法,用于从服务器检索数据。它将请求的数据附加在 URL 后面,以查询字符串的形式出现。特点:

  • 安全性和隐私性较低,因为请求数据暴露在 URL 中。
  • 数据量有限制,通常不超过 2KB。
  • 适合请求无状态的操作,如页面跳转、检索数据等。

post()请求是一种 HTTP 方法,用于向服务器发送数据。它将数据存储在请求体中,不会出现在 URL 中。特点:

  • 安全性和隐私性较高,因为数据不暴露在 URL 中。
  • 数据量较大,没有大小限制。
  • 适合请求有状态的操作,如表单提交、上传文件等。

适用场景

(1)GET 请求适用于:

数据检索:如查询数据库记录。

页面跳转:如导航到其他页面。

无状态操作:如天气预报、新闻检索等。

(2)POST 请求适用于:

数据提交:如表单提交、上传文件。

数据创建:如添加新记录到数据库。

有状态操作:如购物车结算、用户登录等。

无状态操作和有状态操作的区别

  • 无状态操作:指的是每次请求都是独立的,不依赖于之前的状态。服务器处理请求时,不会考虑之前的请求或会话信息。这使得无状态操作易于扩展和维护,因为服务器不需要存储任何会话信息。GET请求通常用于无状态操作。
  • 有状态操作:指的是请求可能会改变服务器的状态,或者依赖于之前的请求或会话信息。有状态操作通常需要服务器存储一些信息,比如用户的会话状态或事务状态。POST请求通常用于有状态操作。

深入理解


1.GET 和 POST都是http请求方式, 底层都是 TCP/IP协议;通常GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包(但firefox是发送一个数据包),

2.对于 GET 方式的请求,浏览器会把 http header 和 data 一并发送出去,服务器响应 200
(返回数据)表示成功;

而对于 POST,浏览器先发送 header,服务器响应 100, 浏览器再继续发送 data,服
务器响应 200 (返回数据)。

                        
 

参考链接:

GET和POST请求的区别(超详细)-CSDN博客

https://blog.csdn.net/qq_42931285/article/details/119852294

GET 和 POST 请求:理解它们之间的区别和适用场景-阿里云开发者社区 (aliyun.com)

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

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

相关文章

为什么在 TypeScript 中应优先使用类型而非接口

类型和接口是每个 TypeScript 程序中常用的强大功能。然而,由于类型和接口在功能上非常相似,这就引出了一个问题:哪一个更好? 今天,我们将评估类型和接口,并得出结论,为什么在大多数情况下你应该…

HikariCP连接池初识

HikariCP的简单介绍 hikari-光,hikariCP取义:像光一样轻和快的Connetion Pool。这个几乎只用java写的中间件连接池,极其轻量并注重性能,HikariCP目前已是SpringBoot默认的连接池,伴随着SpringBoot和微服务的普及&…

ssm汽车在线销售系统

摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存…

稀疏高效扩散模型:推动扩散模型的部署与应用

数据驱动的世界中,生成模型扮演着至关重要的角色,尤其是在需要创建逼真样本的任务中。扩散模型(Diffusion Models, DM),以其卓越的样本质量和广泛的模式覆盖能力,已经成为众多数据生成任务的首选。然而&…

nginx: [error] invalid PID number ““ in “/run/nginx.pid“

两种问题,我自己碰到的情况 ./nginx -s reload执行命令后报错 nginx: [error] invalid PID number ““ in “/run/nginx.pid“ 第一种情况,pid被注释了 /usr/local/nginx/conf/nginx.conf #user nobody; worker_processes 1;// 可能是这里被注释了…

【UE5:CesiumForUnreal】——从地球全景聚焦到某区域的动画制作

目录 1.添加Render Texture并和SceneCapture2D关联 1.1 场景准备 1.2 添加Render Texture 1.3 添加SceneCapture2D并关联 2.在Widget上显示Render Texture 2.1 创建Widget 2.2 配置Widget 2.3 添加控制按钮 2.4 添加窗口逻辑 3.制作Sequencer动画 3.1 创建Sequencer…

基于实验的电动汽车动力电池SOC

前言 本文为笔者在学习《基于MATLAB的新能源汽车仿真》过程中学习笔记,所涉及的表格数据和公式均为书籍里的。仿真数据是网上找的恒电流放电数据。本文仅作为笔者的入门学习记录。 一、分析动力电池SOC估算方法 SOC是指动力电池按照规定放电条件可以释放的容量占…

计算机网络 期末复习(谢希仁版本)第5章

**屏蔽作用:**运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 10. 端口用一个 16 位端口号进行标志,允许…

学习使用Opentelemetry python SDK

前言 📢博客主页:程序源⠀-CSDN博客 📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 一、什么是 OpenTelemetry OpenTelemetry 由 OpenTracing 和 OpenCensus 项目合并而成,是一组规范、工具、API…

HQChart小程序教程4-动态控制手势滚动页面

动态控制手势滚动页面 示例效果canvas 控制页面滚动属性步骤1. 使用变量绑定disable-scroll2. 在手势处理函数中控制是否滚动页面 交流QQ群HQChart代码地址 示例效果 canvas 控制页面滚动属性 根据官方文档,disable-scroll 属性是控制画布手势是否可以滚动页面。 h…

《python程序语言设计》2018版第5章第47题绘制随机球,在一个宽120高100的矩形里绘制随机的点

这个题其实并不难。 首先我们利用turtle功能绘制一个矩形,圆心点题里要求的是0,0 这个好办 然后我们根据宽120,高100计算一下。肯定是正负两个值参与其中。 坐标点如下 建立矩形代码如下 turtle.penup() turtle.goto(-60, 50) turtle.pend…

【Redis】什么是Redis缓存 雪崩、穿透、击穿?(一篇文章就够了)

目录 什么是Redis? Redis的正常存储流程? 什么是Redis缓存雪崩? 缓存雪崩 缓存预热 缓存失效时间的随机性 什么是Redis缓存穿透? 缓存穿透 缓存空对象 BloomFilter(布隆过滤器) 什么是Redis缓存击穿&#…

【Python教程】2-函数、逻辑运算与条件判断

在整理自己的笔记的时候发现了当年学习python时候整理的笔记,稍微整理一下,分享出来,方便记录和查看吧。个人觉得如果想简单了解一名语言或者技术,最简单的方式就是通过菜鸟教程去学习一下。今后会从python开始重新更新&#xff0…

TransformerFAM:革新深度学习的新型注意力机制

深度学习领域的一项突破性技术——Transformer架构,已经彻底改变了我们处理序列数据的方式。然而,Transformer在处理长序列数据时面临的二次复杂度问题,限制了其在某些应用场景下的潜力。针对这一挑战,研究者们提出了一种名为Tran…

window wsl2的ubuntu如何配置代理获取docker image

最近两天,docker pull一直下不来docker image, 研究了下可以通过代理pull, 我的是window电脑下的linux子系统wsl2, 装的是ubuntu跑docker. # 创建/etc/systemd/system/docker.service.d路径 sudo mkdir -p /etc/systemd/system/docker.service.d # 创建 http-proxy…

[ue5]建模场景学习笔记(5)——必修内容可交互的地形,交互沙(3)

1.需求分析: 我们现在已经能够让这片地形出现在任意地方,只要角色走在这片地形上,就能够产生痕迹,但这片区域总是需要人工指定,又无法把这片区域无限扩大(显存爆炸),因此尝试使角色无…

【BUG】已解决:Could not find a version that satisfies the requirement tensorflow

已解决:Could not find a version that satisfies the requirement tensorflow 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,同时是武汉城市开发者社区主理人 擅长.net、C…

ARM-V9 RME(Realm Management Extension)系统架构之系统安全能力的架构差异

安全之安全(security)博客目录导读 RME系统中的应用处理单元(PE)之间的架构差异可能会带来潜在的安全风险并增加管理软件的复杂性。例如,通过在ID_AA64MMFR0_EL1.PARange中为每个PE设置不同的值来支持不同的物理范围,可能会妨碍内…

Foxmail邮箱的使用方法和功能最全介绍

Foxmail邮箱是我们办公邮箱中比较有代表性和使用性的一款邮箱软件,今天笔者为大家介绍一下Foxmail邮箱的功能和使用方法。 1、首先我们从安装Foxmail邮箱开始 2、点击安装等待安装成功 3、双击打开 ,出现邮箱设置界面输入我们的账号密码,点击…

Here Doucument

一、Here Document概述 1.概念 使用I/0重定向的方式将命令列表提供给交互式程序 标准输入的一种替代品 2.语法格式 命令 <<标记 标记 3.注意事项 标记可以使用任意合法字符&#xff08;通常为EOF&#xff09; 结尾的标记一定要顶格写&#xff0c;前面不能有任何字符…