【计算机网络基础知识】

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

三次握手(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)

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

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

相关文章

添加图片到资源文件,QPixmap ,QSplash的用法

实现1个QSplash加载之后&#xff0c;呈现主窗体的效果 1、创建资源文件&#xff0c;添加Splash.png文件 2、main.cpp 编码实现 将图像添加资源文件&#xff0c;复制文件的路径 main.cpp :/img/Splash.png 为资源的文件路径 #include "mainwindow.h" #include <…

51单片机在八位数码管上显示自己学号后八位

1、功能描述 在八位数码管上显示自己学号后八位 2、实验原理 数码管就是通过线路将各个LED灯连接在一起。 P2控制LED的段选&#xff0c; P0控制LED位选。读取时从低位向高位读取&#xff0c;P2_2为高位P2_4为地位&#xff0c;例如P2_4 1; P2_3 0; P2_2 1&#xff0c;那么…

高效学习LabVIEW的方法

学习LabVIEW可以通过系统化课程、在线资源、自学实验、参与论坛、结合实际项目等多角度进行。系统课程提供全面基础&#xff0c;在线资源便于查漏补缺&#xff0c;自学实验强化理解&#xff0c;论坛互动解决疑难&#xff0c;结合实际项目应用提高实践技能。结合项目学习是最高效…

举个栗子!Quick BI 技巧(8):柱形图的制作及应用

众所周知&#xff0c;在数据分析中&#xff0c;柱形图是利用率非常高的一种图&#xff0c;主要是用于比较各组数据之间的差别&#xff0c;并且可以显示一段时间内的数据变化情况。那么在 Quick BI 中要如何来制作柱形图呢&#xff1f; 今天的栗子&#xff0c;我们就来分享如何…

RE_RC4加密

之前做的几道题目&#xff0c;rc4也是经常遇到&#xff0c;今来系统学学&#xff0c;记录一下 对称加密&#xff0c;即加密和解密的密钥可以相互推导&#xff0c;也有的是相同的。 RC4 是以字节流处理每一个字节&#xff0c;而不是 DES 的分组操作。 包含三个参数&#xff1…

ctfshow web

红包题第二弹 <?phpif(isset($_GET[cmd])){$cmd$_GET[cmd];highlight_file(__FILE__);if(preg_match("/[A-Za-oq-z0-9$]/",$cmd)){die("cerror");}if(preg_match("/\~|\!|\|\#|\%|\^|\&|\*|\(|\)|\&#xff08;|\&#xff09;|\-|\_|\{|\}|\…

详细分析Mysql临时变量的基本知识(附Demo)

目录 前言1. 用户变量2. 会话变量 前言 临时变量主要分为用户变量和会话变量 1. 用户变量 用户变量是特定于会话的&#xff0c;在单个会话内可以在多个语句中共享 以 符号开头在 SQL 语句中使用 SET 语句或直接在查询中赋值 声明和赋值 SET var_name value; -- 或者 SE…

前端开发环境:Vue、Element Plus、Axios

目录 1. Vue简介 2. Element Plus简介 3. Axios简介 4. 创建Vue项目 4.1 Node.js安装 4.2 创建Vue项目 4.3 Vue项目的结构 4.4 安装Element-Plus 4.5 安装Axios 4.6 解决跨域问题 5. 应用实例 5.1 创建Vue组件 5.2 配置路由 5.3 配置根组件 5.4 启动前端应用服…

DBeaver入门教学,开源免费,链接数据库的软件

这个可爱的头像就是它 为什么要用这个&#xff0c;小公司一般都用navicat什么的&#xff0c;因为别人一般不会告你&#xff0c;因为告你也没啥钱&#xff0c;但是公司大了有知名度了&#xff0c;用盗版软件就会被告。所以很多好不容易从小做到大的公司&#xff0c;是不允许这种…

Codeforces Round 951 (Div. 2) 题解分享

A. Guess the Maximum 思路 贪心 毫无疑问的是&#xff0c;Alice会选择所有区间最大值的最小值-1&#xff0c;即。 关键是如何选取。我们注意到区间长度越大&#xff0c;这个区间的最大值是随着它不减的&#xff0c;所以如果Bob要让Alice选的最小的话&#xff0c;选择的区间…

再次修改了备忘录

Control <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>与妖为邻备忘录</title><!-- <…

人工智能会终结动物实验吗?

从动物爱好者到实验室技术人员&#xff0c;没有人喜欢让动物进行科学试验。 相反&#xff0c;这样做是为了帮助确保药物和其他物质最终对人类使用是安全的。 长期以来&#xff0c;研究人员一直在寻找非动物替代品。人工智能(AI)系统正在加速这项工作。 人工智能在这一领域的…

Redis学习(十二)Redis的三种删除策略

目录 一、背景二、Redis 的三种删除策略2.1 定时删除&#xff08;用CPU换内存空间&#xff09;2.2 定期删除2.3 惰性删除&#xff08;用内存换CPU性能&#xff09; 三、总结 一、背景 我们都知道 Redis 是一种内存数据&#xff0c;所有的数据均存储在内存中&#xff0c;可以通…

LabVIEW缝缺陷图像标注库

LabVIEW缝缺陷图像标注库 开发了一个基于LabVIEW平台构建的船舶焊缝缺陷图像标注库。该库旨在通过高效和简洁的方式处理和标注船舶焊缝缺陷图像&#xff0c;提高缺陷识别的准确性和效率&#xff0c;进而保障船舶的结构安全。 项目背景 在船舶制造过程中&#xff0c;焊接质量…

ActiveMQ 介绍、下载、安装和控制台

ActiveMQ 介绍 Apache ActiveMQ 是一款非常成熟且功能全面的开源消息中间件&#xff0c;由Apache软件基金会维护。它遵循 Java Message Service (JMS) 规范&#xff0c;这意味着它提供了一组标准的 API&#xff0c;允许 Java 应用程序以一种标准化的方式发送和接收消息。 以下…

什么是距离选通型水下三维激光扫描仪?(上)

最近听说了一种水下三维激光扫描仪——距离选通型激光扫描仪&#xff0c;有可能应用于近岸水下目标高分辨率成像。博主之前用过ULS-500水下激光扫描仪&#xff0c;并写了一篇博文观察级水下机器人使用系列之五三维激光扫描仪。ULS-500对水质和环境要求较高&#xff0c;一般应用…

【Java数据结构】详解LinkedList与链表(三)

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.无头双向非循环链表的实现 2.1成员属性 2.2成员方法 display——打印链表 size——获取单链表长度 addFirst——头插 addLast——尾插 addIndex——在任…

.NET AI如何从0开始?

你是否在思考如何利用AI为您公司的产品增加智能方向的业务扩展&#xff1f; 或者你是否有思考过怎么去利用AI减少部分工作量&#xff1f; 如果你有类似于上面的问题&#xff0c;想要学习AI&#xff0c;并且您是一名.NET开发工程师&#xff0c;或您是一名弃暗投明的Java转.NET…

MySQL查询相邻两条记录的时间间隔

MySQL查询相邻两条记录的时间间隔。最近需要统计相邻两条记录的时间间隔&#xff0c;筛选出时间间隔大于2min的数据记录。因为是同一张表&#xff0c;又需要查询出相邻的数据&#xff0c;所以最开始想到使用子表来做&#xff0c;分别用t1、t2表示&#xff0c;但是实践后发现查询…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时&#xff0c;AXI4接口包括在内。在该模式下&#xff0c;IP核可以在增强模式下操作&#xff08;未选择启用XIP模式&#xff09;或XIP模式&#xff08;选择启用XIP模式&#xff09;。在性能模式下&#xff0c;AXI4接口用于在DTR和DRR位置的突…