网络分层模型和应用协议

news2024/12/23 12:20:24

网络分层模型和应用协议

分层模型

分层模型的意义

当遇到一个复杂问题的时候,可以使用分层的思想把问题简单化。
比如, 你有一杯82年的可乐,想要分享给你的朋友张富贵,但你们已经很久没有联系,要完成这件事,你可能需要考虑:

  • 我用什么装可乐
    • 可能的方案:塑料瓶、玻璃瓶、煤气罐
  • 怎么保证可乐始终保持低温?
    • 可能的方案: 保温箱、小冰箱
  • 如何保证可乐不被运输的人偷喝?
    • 封条、在上面写毒药
  • 如何获取张富贵的地址?
    • 可能的方案: 报案失踪, 联系私人侦探、联系物流公司朋友
  • 如何运输
    • 可能的方案:自行车、汽车、火车、高铁、飞机、火箭

这样就形成了一个分层结构
在这里插入图片描述
从常理出发,我们可以得出以下结论:

  • 每层相对独立,只解决自己的问题
  • 每层无须考虑上层的交付,仅需把自己的结果交给下层即可
  • 每层由多种方案可供选择,选择不同的方案不会对上下层造成影响
  • 每一层会在上一层的基础上增加一些额外信息

五层网络模型

网络解决的问题是: 两个程序之间如果交换数据
这是一个非常复杂的问题,因为两个程序有可能出现在不同的设备上。
那么面对复杂的问题,可以使用分层的方式来简化
经过不断的演化,网络 最终形成了五层模型, 如下图所示
在这里插入图片描述

数据的传输

由一个程序(发送方)发送数据,数据在传输的过程中会进行五成网络模型从上到下的依次封装,在另一个程序(接收方)接收到数据之后,会将数据从下到上依次解封装,保证数据的正确性
在这里插入图片描述

四层、七层、五层网络模型

在这里插入图片描述

应用层协议

URL

URL(uniform resource locator, 统一资源定位符)用于定位网络服务
在这里插入图片描述
URL是一个固定格式的字符串
在这里插入图片描述
它表达了:
从网络中哪台计算机(domain)中的哪个程序(port)寻找哪个服务(path),并注明了获取服务的具体细节(query),以及要用什么样的协议通信(schema)
这里面包含了一些细节

  • 当协议是http端口为80时,端口可以省略
  • 当协议时https端口为443时,端口可以省略
  • schema、domain、path是必填的,其他的根据具体要求填写

HTTP

超文本传输协议(Hyper Text Transfer Protocol,HTTP),是一个广泛运用于互联网的应用层协议
99%的情况下,前端开发者接触的都是HTTP协议
该协议规定了两个方面的内容:

  • 传递消息的模式
  • 传递消息的格式

传递消息的模式

在这里插入图片描述
HTTP使用了一种极为简单的消息传递模式,[请求 - 响应]模式
发起请求的称之为客户端,接收请求并完成响应的称之为服务器。【请求 - 响应】完成后,一次性交互结束

传递消息的格式

在这里插入图片描述
HTTP消息格式是一种纯文本的格式,文本分为三个部分:

请求行
请求头
					// ⇐ 注意这里是有一个空行 
请求体

具体每一部分写什么内容,要看具体的服务要求

发送请求的工具

有非常多的工具都可以发送http请求,比如 postman、apifox等,但这里推荐一个非常直观的工具

  1. vscode安装插件 REST Client
    在这里插入图片描述
  2. 新建一个xxx.http 文件
  3. 编写请求脚本
POST /api/user/login HTTP/1.1
Host: study.duyiedu.com
Content-Type: application/json

{
  "loginId":"admin",
  "loginPwd":"123123"
}
  1. 发送请求
    在这里插入图片描述

关键信息

请求方法

在请求行中的第一个单词是请求方法
在HTTP协议中,请求方法仅仅有语义的区别,只是表达了这次请求的【愿望】。
关于请求方法的协议原文见HTTP/1.1规范RFC7231-Chapte4
在这里插入图片描述
比如GET表达了客户端想要获取一些东西,POST表达了客户端想要提交一些东西,常见的请求方法有:

  • GET:获取
  • POST:提交
  • PUT:修改
  • DELETE:删除

具体在开发中应该选择什么请求方法,一定要看服务方的要求
通常情况下

  • 获取数据一般使用GET
  • 提交数据一般使用POST
  • 各种静态资源的获取,一般使用GET

请求头 - HOST
HOST标注了URL地址中 的Domain + Port
示例:

Host: study.duyiedu.com

请求头 - Content-Type
Content-Type标注了附带的请求具体是什么格式
比如,请求体的数据为loginId:admin, loginPwd:123456, 请求体可以用不同的格式发出

Content-Type: application/x-www-form-urlencode

loginId=admin&loginPwd=123123
Content-Type: application/x-www-form-urlencode
{"loginId": "admin", "loginPwd": "123123"}
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryraPtlntBIqy4X2Ho

------WebKitFormBoundaryraPtlntBIqy4X2Ho
Content-Disposition: form-data; name="loginId"

admin
------WebKitFormBoundaryraPtlntBIqy4X2Ho
Content-Disposition: form-data; name="loginPwd"

123456
------WebKitFormBoundaryraPtlntBIqy4X2Ho--

响应码

响应码(状态码、消息码)是响应行中的一个数字,后面往往跟上一个对应的单词,用于表达服务器对这个响应的整体【态度】
常见的响应码大类有:
在这里插入图片描述
常见的状态码

  1. 200 OK: 一切正常
  2. 301: 资源已被永久重定向
    你的请求我收到了,但是呢,你要的东西不在这个地址了,我已经永远的把它移动到了一个新的地址,麻烦你取请求新的地址,地址我放到了响应头的Location中了
    试试请求:www.douyutv.com
  3. 302:资源已被临时重定向。
    你的请求我收到了,但是呢,你要的东西不在这个地址了,我临时的把它移动到了一个新的地址,麻烦你取请求新的地址,地址我放到了请求头的Location中了
  4. 304:文档内容未被修改。
    你的请求我收到了,你要的东西跟之前是一样的,没有任何的变化,所以我就不给你结果了,你自己就用以前的吧。啥?你没有缓存以前的内容,关我啥事
  5. 400:语义有误,当前请求无法被服务器理解
服务器无法识别为url地址内容
  1. 403: 服务器拒绝执行。
    你的请求我已收到,但是我就是不给你东西
  2. 404: 资源不存在
    你的请求我收到了,但我没有你要的东西
  3. 500: 服务器内部错误。
    你的请求我已收到,但这道题我不会,解不出来,先睡了

响应头 - Content-Type

Content-Type标注了附带的响应体是什么格式
常见的值有:

  1. text/plain: 普通纯文本
  2. text/html:html文档
  3. text/javascriptapplication/javascript: js代码
  4. text/css: css代码
  5. image/jpeg: jpg图片
  6. attachment:附件
  7. 其他类型MIME文件

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

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

相关文章

《深入浅出计算机组成原理》学习笔记 Day2

文章目录指令篇1. 从高级语言到机器指令1.1 CPU的作用1.2 代码如何变为机器码1.3 指令的分类2. 指令跳转2.1 CPU 是如何执行指令2.2 条件和循环的本质3. 函数调用3.1 栈的作用3.2 Stack Overflow指令篇 1. 从高级语言到机器指令 计算机或者说CPU本身并没有能力去理解这些高级…

配置远程服务器时候sftp的配置以及注意事项【在本地配置sftp】

我之所以不用PutTy是因为这个工具有问题,在我的电脑上怎么也安装不上,也找了很多办法根本没用。如这个 我试过修改权限以及各种安装办法连安装都不行。 所以才决定直接使用vscode自带的上传工具上传到服务器。 想要上传到服务器,需要使用vsc…

2023牛客寒假算法基础集训营1 -- G-鸡格线(map + 内置二分写法)

题目如下: 示例1 输入 3 5 0 2 114514 2 1 1 2 2 2 1 1 3 1 2输出 114516 114551 3445思路 or 题解: 通过 f(x)round(10∗x)f(x) round(10*\sqrt{x})f(x)round(10∗x​) 我们可得到: 经过至多 111111 次 0 -> 01~99 -> 99100 ~ i…

如何利用jar命令把前端代码打进jar包

目录背景介绍简单介绍几个常用的jar命令参数查询一个文件在jar包中的位置将文件解压到当前目录把一个目录打包进jar把一个文件打包进jar更新jar的shell脚本update.sh命令执行过程部分截图背景介绍 前后端分离是目前主流的开发模式,部署的时候也是利用类似nginx实现…

C++之多态

文章目录一、多态的理解二、多态的定义及实现1.多态的构成条件2.虚函数3.虚函数的重写/覆盖4. C11 的 override 和 final5.重载、重写/覆盖、隐藏/重定义三、抽象类四、多态的原理1.虚函数表2.多态的原理3.动态绑定与静态绑定五、单继承和多继承关系的虚函数表1.单继承中的虚函…

【Git】IDEA 集成 Git

7、IDEA 集成 Git 7.1、配置 Git 忽略文件 1、Eclipse 特定文件 2、IDEA 特定文件 3、Maven 工程的 target 目录 问题 1:为什么要忽略他们? 答:与项目的实际功能无关,不参与服务器上部署运行。把它们忽略掉能够屏蔽 IDE 工具之间的差异。 …

联合变换相关器摄远物镜光学设计

联合变换相关器摄远物镜光学设计 联合变换相关器工作原理 随着科学技术的飞速发展,光学相关探测器件由最初的匹配滤波器发展到今天的联合变换相关器,联合变换相关器与范得耳-卢格特相关器相比,具有灵活性好、识别精度高等特点,所…

Media基础知识一

1.视频文件是什么? FLV, MKV, MP4是不同的视频后缀名,不同的视频格式就像一个容器。容器里封装的是音视频流。 FFmpeg:一款开源软件,用来处理音视频,对音视频进行编解码。要在Android中使用FFmpeg,需要下载…

vue-element-admin 换肤功能,登录后不同权限不同皮肤,刷新不会失效

一、拉vue-element-admin的代码跑起来 安装依赖时会遇到一些问题,tui-editor装不上,需要按照以下步骤删除它 1、vue-element-admin\package.json 删除‘tui-editor’:‘1.3.3’依赖项。 2、vue-element-admin\src\components 删除MarkdownE…

C++ 三种智能指针及其设计实现unique_ptr、 share_ptr 指针

0、差不多春节啦。。。。。 好久没有写博客,写一写吧。。。。。。 祝大家嗨皮,提前恭喜发财 1、三种智能指针的使用方法 C 有3种指针:share_ptr, unique_ptr, weak_ptr 1.1)unique_ptr 指针 std::unique_ptr 是一种独占的智能指…

Sklearn标准化和归一化方法汇总(1):标准化 / 标准差归一化 / Z-Score归一化

Sklearn中与特征缩放有关的五个函数和类,全部位于sklearn.preprocessing包内。作为一个系列文章,我们将逐一讲解Sklearn中提供的标准化和归一化方法,以下是本系列已发布的文章列表: Sklearn标准化和归一化方法汇总(1)&#xff1a…

ESP32 (WIFI)-AP、STA模式(13)

提示:本博客作为学习笔记,有错误的地方希望指正 文章目录一、ESP32 WIFI模式概述二、ESP32 WIFI-AP初始化流程三、WIFI-AP示例四、ESP32 WIFI-STA初始化流程五、WIFI-STA示例一、ESP32 WIFI模式概述 参考资料:ESP IDF编程手册V4.4   WIFI主…

【GD32F427开发板试用】Systick系统定时器的使用

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动,更多开发板试用活动请关注极术社区网站。作者:HonestQiao 基于Arm Cortex-M系列内核的MCU,都包含了SysTick定时器。 所谓SysTick即为系统定时器,又称嘀嗒定时器&am…

Docker Swarm

Swarm 是什么? Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。 主要解决什么问题 1. 解决docker server的集群化管理和部署。 2. Swarm通过对Docker宿主机上添加的标签信息来…

分享60个PHP源码,总有一款适合您

PHP源码 分享60个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 60个PHP源码下载链接:https://pan.baidu.com/s/1SvjbzolwuMrQyhVb_byG5Q?pwdx831 提取码&#xff…

生物素点击标记试剂:DBCO-SS-PEG3-biotin,1430408-09-5,生物素PEG3二硫键DBCO

1、理论分析:中文名:生物素-三聚乙二醇-二硫-二苯并环辛炔,生物素-PEG3-二硫-DBCO ,生物素PEG3-二硫二苯并环辛炔英文名:DBCO-S-S-PEG3-biotin,Biotin-PEG3-SS-DBCOCAS号:1430408-09-5化学式&am…

如何使用ArcGIS进行点抽稀

01 概述对于制图工作者而言,遇到大量的点要素(POI、村名等)标注的时候往往非常的麻烦,因为这些点往往都是十分的密集,直接标注很影响制图的美观。如果直接去处理原始的数据,会导致后续的数据更新维护麻烦&a…

pdf合并在线,大家都在用的工具

工作和生活当中都有很多场景需要我们提交PDF文档,而且有时候要求仅能提交一份,如果这时候刚好你的文档分成了几份,就得先合并之后才能提交。要在线合并PDF并不麻烦,关键是用对工具。下面就来给大家介绍几款热门的软件,…

Spring Boot(五十五):基于redis防止接口恶意刷新和暴力请求

下面的教程,通过intercept和redis针对urlip在一定时间内访问的次数来将ip禁用,可以根据自己的需求进行相应的修改,来达到自己的目的 下面只讲解大致步骤,不详细讲解,需要完整代码的可以自行下载。 https://download.c…

数据结构之查找详解

一、什么是查找表? 1.1 定义 查找表是由同一类型的数据元素构成的集合。例如电话号码簿和字典都可以看作是一张查找表。 1.2 查找表的几种操作: 1)在查找表中查找某个具体的数据元素; 2)在查找表中插入数据元素&am…