【计算机网络】前后端分离,HTTP协议,网络分层结构,TCP

news2025/1/8 6:06:07

❤️ Author: 老九
☕️ 个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏:

文章目录

  • 前后端分类
  • HTTP协议
    • HTTP组成
      • HTTP的版本
      • HTTP的请求方式
      • HTTP请求头
      • HTTP 响应状态码
    • AJAX发送请求
  • 网络分层结构
    • 物理层
    • 链路层
      • ARP协议
    • 网络层
    • 传输层
      • TCP协议
      • 三次握手四次挥手
      • TCP状态图
      • 粘包
      • 心跳包
      • WebSocket

前后端分类

  • 早期的网页都是通过后端渲染完成的:服务器端渲染(SSR);流程就是客户端发出请求,服务器端接受请求并返回相应HTML文档,然后页面刷新,客户端加载新的HTML文档
  • 客户端渲染的缺点:当用户点击某个按钮向服务器发送请求时,页面本质上只是一些数据发生了变化,而此时服务器却要将重绘的整个页面再返回给浏览器加载,而明明只是一些数据的变化却迫使服务器要返回整个HTML文档,这样给网络带宽带来不必要的开销。
  • 有没有办法再页面数据变动时,只向服务器请求新的数据,并且在阻止页面刷新的情况下动态的替换页面中展示的数据呢?这时候就出现了Ajax
  • Ajax是一种实现无页面刷新,获取服务器数据的技术,它的异步特性最重要,可以在不重新刷新页面的情况下与服务器通信,交换数据,或更新页面
    在这里插入图片描述
    在这里插入图片描述

HTTP协议

  • 这是一个超文本传输协议,是一个应用层协议;设计HTTP最初的目的是为了提供一种发布和接受HTML页面的方法;通过HTTP或者HTTPS协议请求的资源由统一资源标识符URL来标识。
  • HTTP是一个客户端和服务器端之间请求和相应的标准;通过浏览器或者其他工具,客户端发起一个HTTP请求到服务器上指定的端口,响应服务器上存储的一些资源。

HTTP组成

  • 一次HTTP请求主要包括:请求和响应
    下面的是请求信息

    响应信息
    在这里插入图片描述

HTTP的版本

  • HTTP/0.9:发布于1991年,只支持GET请求方法,获取文本数据,只要为了获取HTML的内容
  • HTTP/1.0:支持POST,DEAD等请求方法, 支持请求头,响应头等,支持更多种数据类型(不再局限于文本数据),但是浏览器的每次请求都需要与服务器建立一个TCP链接,请求处理完成后立即断开TCP连接,每次建立连接增加了性能损耗;
  • HTTP/1.1:增加了PUT,DELETE等请求方法,采用持久链接(keep-alive),多个请求可以共用同一个TCP连接

HTTP的请求方式

  • GET:get方法请求一个指定资源的表示形式,使用GET的请求应该只被用于获取数据。
  • EHAD:HEAD方法请求一个与GET请求的响应相同的响应,但是没有响应体。比如在准备下载一个文件前,先获取文件的大小,再决定是否进行下载
  • POST:post方法用于将实体提交到指定的资源
  • PUT:put方法用于请求有效的payload替换目标资源的所有当前数据
  • DELETE:delete删除指定的资源
  • PATCH:patch方法用于对资源的相应部分的修改

HTTP请求头

  • 在请求对象的header中包含很多有用的信息,客户端会默认传递过来一些信息
  • content-type是这次请求携带的数据的类型
    application/x-www-form-urlencoded:表示数据被编码成以&分隔的键值对,同时以=分割键和值
    application/json:表示一个json类型
    text/plain:表示文本类型
    application/xml:表示是XML类型
    multipart/form-data:表示是上传文件
  • content-length:文件的大小长度
  • keep-alive:http是基于TCP协议的,但是通常在进行一次请求和响应结束后会立刻中断,在http1.0中,如果想继续保持连接:1.浏览器需要在请求头中添加connection:keep-alive2.服务器需要在响应头添加connection:keep-alive;当客户端再次放请求时,就会使用同一个连接,直到一方中断连接;在http1.1中,所有的连接默认是connection:keep-alive的,在不同的Web服务器会有不同的保持keep-alive的时间
  • accept-encoding:告知服务器,客户端支持的文件压缩格式,比如js文件可以使用gzip编码
  • accept:告知服务器,客户端可以接受文件的格式类型
  • user-agent:客户端相关的信息

HTTP 响应状态码

  • 200:客户端请求成功
  • 201:POST请求,创建新的资源
  • 301:请求资源的URL发生改变,响应中会给出新的URL,也就是重定向
  • 400:客户端的错误,服务器无法或不进行处理
  • 401:未授权的错误,必须携带请求的身份信息,常见于未登录
  • 403:客户端没有访问权限,被拒绝
  • 404:服务器找不到请求的资源
  • 500:服务器遇到了不知道如何处理的情况
  • 503:服务器不可用,可能处理维护或者重载的状态,暂时无法访问

AJAX发送请求

  • AJAX是异步的JavaScript和XML,它可以使用JSON,XML,HTML,text文本等格式发送和接受数据
  • 如果来完成Ajax请求呢 ?
  • 通过XHR方法
    第一步:创建网络请求Ajax对象(使用XMLHttpRequest)
    监听XMLHttpRequest对象状态的变化(宏任务),或者使用onload事件监听
    配置网络请求(通过open方法)
    发送send网络请求
 const xhr = new XMLHttpRequest();
      xhr.onreadystatechange = function () {
        if (xhr.readyState !== XMLHttpRequest.DONE) return;
        console.log(JSON.parse(xhr.response));
      };
      xhr.open("GET", "http://123.207.32.32:8000/home/multidata");
      xhr.send();
  • 注意上面这段代码的那个判断,因为一次HTTP请求后,XMLHttpRequest有很多的状态变化
    在这里插入图片描述

网络分层结构

  • 物理层,链路层,网络层,传输层,应用层
  • 物理层:提供在相邻的设备间提供01传送的功能
  • 链路层:在两台直接相连的设备之间收发数据,数据包发送到网络上之后,至于能不能收到就不管了
  • 网络层:在网络中的任意两台设备间收发数据(点对点单向传输),网络在末端一般是树状结构,在主干道上是网状结构
  • 传输层:tcp,在两个应用程序间收发数据,传输层包括会话层和表示层
  • 应用层:在网络上数据是如何表示的在应用层就规定了,例如是http协议
  • 好处:每一层之间只需要关注相邻的两个层之间的关系

物理层

  • 指相邻设备间的物理连接,连接可以通过有线也可以是无线,有线的话有纯线,还有光纤,光纤有时候会传播很远,中间就会有中继站。物理层就是将数字信息与模拟信号之间的传输及转换,保证通信的两端能够理解01

链路层

  • 链路层仅负责直接连接的设备通信,连接的方式有总线,交换机(数据就直接从哪到哪两个直接沟通,别的机器收不到,但是总线方式就像广播一样,全都能收听到这个数据,并且交换机和支持各种拓扑结构)等等,发送的是数据包(一连串的字节),数据包里有MAC地址,MAC就是网卡的出场编号,指名将数据包发给谁,CRC是校验,通过某种哈希算法,根据前面的数据算出四个字节的东西,如果这个CRC变了,说明前面的数据就变了
  • 每个网卡会有一个全球唯一的MAC地址,用来标识这个设备的ID,作用是在局域网中区分不同的设备,局域网之间的通信是通过MAC地址的,而非IP地址,计算机会通过ARP协议把IP地址转换为目标机器的MAC地址
    在这里插入图片描述
    在这里插入图片描述

ARP协议

  • 我们发送数据包的时候需要直到目的地址的MAC地址,但是我们第一次发送的时候怎么获取呢?这时候出现了ARP协议
  • 发送方先广播一下,问一下谁的ip地址是xxxx,数据包发送的目的地址是ff ff ff ff ff ff,然后如果找到了该ip地址的持有者,就会单独回给这个发送方自己的MAC地址

补充:ping命令:向目标主机发送了ICMP协议的请求报文,待目标主机回复ICMP协议的响应报文后,在控制台输出响应时间等信息,目的为了诊断网络

网络层

  • 网络层负责把IP数据包在全球范围内从起始机器送达到目标机器
  • IP数据包是如何到达目的地址的?通过中间的各个路由器的转发到达的目的地,每个路由器在收到一个数据包后,会查看该数据包的目的地址,然后根据自己的路由表来决定该数据包从哪一个网络接口出去,并发给哪一个下一跳路由器;而路由表中有一部分是静态的,即人工设定的,还有一部分是路由器运行过程中,根据与自身周围的各个路由器交换信息后自动生成的,并且会随着周围路由器的上下线,以及线路的情况,动态调整
    在这里插入图片描述

传输层

  • UDP协议在这一层,UDP仅仅是对IP的增加了端口部分,以区分电脑上的不同软件,socket就是和一个端口绑定的对象
    在这里插入图片描述
  • UDP协议是直接给定目标位置将数据送过去,无响应,不知道有没有送到,接收方会校验数据的正确性,所以送到的话一般来说是对的,发往同一个目标的数据也不保证有序,但是如果当数据量较小(一个数据包可以放的下)的时候,UDP是完全可以胜任的,例如DNS等
  • 这时候就出现了TCP协议

TCP协议

  • 现在有两个机器,其中一个机器有一个端口用来监听请求,当另一个机器发起了连接请求的时候,他们建立了连接,这一个端口也可以同时和很多的主机端口建立连接
  • TCP协议包头
    在这里插入图片描述
  • 序号用于标识段中数据在整个数据流中的位置。接收方使用序号对接收到的段进行排序和重组,以确保数据按正确的顺序进行重组和交付给应用层。确认号是当数据是由多个TCP包发送的,如果发送了5个TCP包,我收到了1,2,4片段,那么返回的确认号就是第3个TCP的编号,确认号:目前最希望收到的下一个字节的编号。
  • URG:紧急数据包
  • ACK:确认,表示这次发送的数据是有意义的,基本都是1
  • RST:当连接出现错误,要断开连接,RST=1就是表示连接重置
  • FIN:连接正常的数据都传送完毕了,要断开连接了,发送一个数据包里的FIN=1
  • 窗口:接收方要在内存中划定一部分区域,用于接受传过来的多个TCP包,这个窗口也是不确定的,如果接受到的数据交付给上层了,那么窗口的头就往前走,窗口的大小就变小了,相当于一个滑动窗口

三次握手四次挥手

  • 首先Server监听,customer客户端会发过来一个数据包,告诉Server端我想建立连接,服务器收到了消息之后告诉客户端ok,没问题,然后客户端再返回给服务器ok!连接才真正的建立完成
  • 第一次和第二次的syn=1,第二次和第三次的ack=1
    在这里插入图片描述
  • 当customer端全部发完了之后,会给server单发一个tcp包,FIN=1,然后server回一个ACK=1,虽然customer给server的包发完了,但是server还可以给customer发数据,最终server给cutomer发一个FIN=1的包之后,customer回一个ACK=1的包之后,才真正的断开了,也就是所谓的四次挥手
  • 挥手的话也可以是三次挥手,第二次挥手的时候,既回ack=1,还有fin=1

TCP状态图

  • 一开始是Closed关闭状态,如果是作为服务器的话,可以是Listen监听状态,然后收到SYN之后,发送SYN=1和ACK=1进入SYN-RCVD状态 ,之后收到客户端发送的ACK=1之后,也进入了Established成功连接状态,在变成SYN_RCVD状态的时候,应用进程关闭了或者不想和客户端建立连接了,回发送一个FIN=1,变成FIN_WAIT_1状态,如果是作为客户端的话,可以主动打开发送SYN,进入SYN-SENT状态,之后有可能接受到对方发的SYN=1和ACK=1, 之后客户端回发送ASK=1,这时候就进入了Established连接成功状态了
  • 三次挥手:如果是想要先断开连接的一方,发送FIN之后,进入FIN_WAIT_1状态,之后收到对方发过来的ACK=1和FIN=1之后,发送给对方ACK=1,状态变为TIME_WAIT
  • 四次挥手:如果是想要先断开连接的一方,发送FIN之后,进入FIN_WAIT_1状态,之后收到对方发过来的ACK=1,这时候就变成了半连接状态FIN_WAIT_2,然后过一段时间之后,我收到了对方发过来的FIN=1,之后我发送ACK=1,进入TIME_WAIT状态

粘包

  • TCP粘包(TCP packet sticking)是指在TCP通信中,发送方连续发送的多个数据包在接收方端被粘合在一起,形成一个大的数据块,从而导致接收方难以正确解析和处理数据。这种现象可能会在网络传输过程中出现。
  • 解决粘包的方法:关键就是要在应用层协议这里,加入包之间的边界。粘包问题世界是应用层的问题。例如:约定每个包以 ;结尾。这个时候只要能够按照 ;来进行切分,就可以区分出当前从哪到哪是一个完整的包。如果通过 框架/库 的话,一般粘包问题就已经被 库/框架 处理了。

心跳包

  • 在网络通信中,心跳包(Heartbeat Packet)是一种用于维护连接状态和检测通信链路可用性的小型数据包。它周期性地发送给对方,用于确认对方的存活状态和保持连接的稳定性。
  • 优点:
    状态监测:心跳包能够周期性地检测客户端或设备的状态,确保连接的存活性和可用性。
    故障检测:通过心跳包的响应情况,可以快速检测到客户端或设备的故障,便于及时处理。
  • 缺点:
    增加网络负载:频繁发送心跳包会增加网络传输的负载,占用一定的带宽和资源。
    延迟影响:发送和接收心跳包需要一定的时间,可能会引入轻微的延迟,特别是在网络状况较差或数据量较大时。
  • 如果你进入电梯后发生断网,无法直接发送心跳包到服务器进行检测。因为网络连接已经中断,无法与服务器进行通信。在这种情况下,无法通过常规的心跳包机制进行检测。
    然而,你可以考虑使用以下方法来检测网络断连:
    重连机制:当网络连接断开后,可以在电梯重新连接网络时尝试重新建立与服务器的连接。这可以通过定时重连的方式实现,一旦检测到网络恢复,可以尝试重新连接服务器并发送心跳包。
    网络检测:电梯可以实时监测网络连接状态。可以通过定期发送小型数据包到已知的可靠服务器,例如发送ICMP回声请求(Ping)来检测网络连通性。如果连续多次发送都无响应,则可以判定为网络断连,并触发相应的处理逻辑。

WebSocket

  • 在TCP中,如果我们如果要实现两端实时通信,webSocket协议可以保证我send一次消息,另一端保证能够收到一次消息。TCP是以字节流为单位,而WebSocket是以消息为单位,发送方发送多少个消息,接收方一定接受多少个消息

————————————————————————
♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「亚太地区百大最帅面孔第101名」的原创文章

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

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

相关文章

555定时器的基本原理和应用案例

前言 555定时器常用于脉冲波形的产生和整形电路中,之前在查找555定时器的原理图和基本管脚信息时,网上的内容大多含糊不清,没有讲的很详细,要么只是单一的管脚图,要么就是简单的文字解释,并且大多数缺乏基…

2023 年大厂实习前端面试题(一):跨域问题

1. 跨域 1.1 跨域问题来源 跨域问题的来源是浏览器为了请求安全而引入的基于同源策略(Same-origin policy)的安全特性。 同源策略是浏览器一个非常重要的安全策略,基于这个策略可以限制非同源的内容与当前页面进行交互,从而减少…

linux 条件变量 pthread_cond_signal

专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 简介 应用场景 与互斥量/信号量的区别 接口介绍 变量定义 初始化 等待被唤…

ROS:ROS的一些基本命令行

目录 一、打开小海龟1.1终端,启动ROS Master:1.2终端2,启动小海龟仿真器:1.3终端3,启动海龟控制节点: 二、查看系统中的计算图三、节点命令3.1查看节点下的命令rosnode3.2显示节点列表rosnode list3.3查看节…

[CISCN2023]unzip

[CISCN2023]unzip 环境搭建 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><form method"post" action"1.php" en…

Java 基础进阶篇(十六):多线程总结

文章目录 一、多线程概述二、多线程的创建1.1 方式一&#xff1a;继承 Thread 类1.2 方式二&#xff1a;实现 Runnable 接口匿名内部类实现方案 1.3 方式三&#xff1a;JDK 5.0新增: 实现 Callable 接口1.4 三种方式对比 二、Thread的常用方法三、线程安全与同步3.1 线程安全3.…

数据类型.

数据类型 数据类型分类 数值类型 tinyint类型 数值越界测试&#xff1a; mysql> create table tt1(num tinyint); Query OK, 0 rows affected (0.02 sec)mysql> insert into tt1 values(1); Query OK, 1 row affected (0.00 sec)mysql> insert into tt1 values(128…

数据仓库基础(通俗易懂,好文)数仓概念

1、数据仓库的概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;,是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供决策支持&#xff08;Decision Support&#xff09…

CISCN WP ——R3vCr4ck

[CISCN-Misc] 签到卡 [CISCN-Misc] 被加密的生产流量 在过滤器中搜索modbus 发现类似base的编码 跟踪TCP流得到Base32密文 在线解密 [CISCN-Crypto]可信度量 非预期解 分析题目&#xff0c;发现修改程序后的测试程序位于容器内&#xff0c;使用winscp通过scp连接容器&#xff…

Flume系列:案例-Flume复制(Replicating)和多路复用(Multiplexing)

目录 Apache Hadoop生态-目录汇总-持续更新 1&#xff1a;案例流程描述 2&#xff1a;实现步骤&#xff1a; 2.1&#xff1a;实现flume1.conf 2.2&#xff1a;实现flume2_hdfs.conf 2.3&#xff1a;实现flume3_dir.conf 3&#xff1a;启动传输链路 Apache Hadoop生态-目录…

移动端开发之基础知识

移动端开发之流式布局 移动端基础浏览器现状手机屏幕现状移动端调试方法 视口布局视口视觉视口理想视口总结&#xff1a; meta视口标签标准的viewport设置 三倍图物理像素&物理像素比多倍图背景缩放 background-size背景图三倍图 多倍图切图 cutterman 移动端开发选择移动端…

这么可爱的彩虹屁老婆,真的不想“娶”一个放桌面上吗?

&#x1f4a7;这么可爱的 彩虹屁老婆 \color{#FF1493}{彩虹屁老婆} 彩虹屁老婆&#xff0c;真的不想“娶”一个放桌面上吗&#xff1f;&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &…

如何在华为OD机试中获得满分?Java实现【比赛评分】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 一个有N个选手参加比赛,…

信号处理与分析-卷积的性质与推导

目录 一、引言 二、信号分析中的卷积 1. 什么是卷积 2. 卷积的性质 3. 卷积的应用 三、离散卷积 1. 离散卷积的定义 2. 离散卷积的计算 3. 离散卷积的性质 四、连续卷积 五、卷积的实际应用 六、总结 一、引言 在信号处理中&#xff0c;卷积是一种非常重要的数学运…

如何在华为OD机试中获得满分?Java实现【吃到最多的刚好合适的菜】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述4. Java算法源码5. 测试6.解题思路1. 题目描述 入职后,导师会请你吃饭…

day2 -- MySQL内部模块

学习目标 我希望了解一下Mysql的工作原理&#xff0c;实现这个工作原理的各个模块是如何协同工作的。 学习内容 服务端与客户端 服务端与客户端如何通信 存储引擎 存储结构 具体细节 这里先放上Mysql可视化结构&#xff0c;来自B站 服务端 服务端也就是我们常说的Mysql&…

多元回归预测 | Matlab蛇群算法(SO)优化最小二乘支持向量机回归预测,SO-LSSVM回归预测,多变量输入模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 多元回归预测 | Matlab蛇群算法(SO)优化最小二乘支持向量机回归预测,SO-LSSVM回归预测,多变量输入模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码 %---…

基于博奇编码的计算全息图及再现研究

一、引言 全息技术作为一种新的成像技术近年来得到迅速的发展&#xff0c;计算机制全息图不需要实物的存在&#xff0c;同时还能通过计算机实现像的再现。计算全息图主要包括迂回位相型计算全息图和修正离轴参考光计算全息图&#xff0c;这两类全息图由不同的编码方式得到。前…

剑指 Offer 12 矩阵中的路径

题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那…

【Unity】Playable使用细则

【Unity】Playable使用细则 本文基于Unity 2021.3 API。 本文介绍官方文档中没提及的Playable使用限制、注意事项、Bug及规避方案&#xff0c;不是Playable的入门教程&#xff01; 如果你还不熟悉Playable的基础用法&#xff0c;请先学习以下官方文档和示例&#xff1a; Playa…