Linux 网络基础(2)应用层(http/https协议、请求格式、响应格式、session、cookie、加密传输)

news2025/2/26 19:11:27

说明:网络基础2讲解的是应用层的典型协议, 通过对于典型协议的理解,来体会数据的网络传输的软件层面的流程与原理。

面试中网络通信相关问题占了很大的比重,而网络通信相关的问题大多都集中在网络基础2这个单元中

下面是应用层的位置:

应用层: 自定制协议 (私有协议) ,HTTP协议;

传输层: UDP & TCP协议

1.应用层

应用层: 负责应用程序之间的数据沟通

应用层协议其实是面向程序员的协议,因为应用程序是程序员写的,因此应用程序之间如何沟通是程序员定的。

程序员自己定理的程序沟通的数据格式约定,而针对某些场景,大佬们定制出的协议,大家觉得非常好,都用了这种协议,这种协议叫做知名协议

自定制协议: 程序员自己定义的程序沟通的数据格式约定

序列化:在网络传输或者数据的持久化存储时,将多个数据对象按照指定格式组织成为一个二进制数据传进行传输或持久化的过程

反序列化: 对二进制数据传,按照指定格式进行解析,得到各个数据对象的过程

程序员设计自定制协议的时候需要考虑的要素有哪些?

1.传输性能:定制一个协议,传输的数据尽可能短小,传输数据的时候才能尽可能的快。

2.解析性能:传输多个数据对象的时候需要进行序列化,对方拿到数据后要进行反序列化,解析性能指得就是序列化和反序列化要足够快

3.调试便捷性:讨论的更多的式对于程序员的可见性,可识别性。

举例:网络版计算器

一个客户端要进行两个数据的运算,运算的过程并不自己进行,而是将数据传输给服务器,让服务器运算,并返回结果。

数学运算: 11 + 22

需要向服务器传输的数据对象有三个: 第一个数字,第二个数字,运算符

协议如何定制:

方案1: 11+22字符串传输, 解析过程:获取数字字符,遇到其他字符截止,取出第一个数字,特殊字符为运算符,剩下的获取数字字符

方案2:解析过程: 先以;进行字符串分割,前两个字符串转换为数字,最后是运算符11;22;+;

方案3:二进制序列化,将三个对象的二进制数据分别放到一整块内存的指定位置,最终按照位置进行解析即可

因为网络传输是跨主机的传输,因此结构体序列化需要考虑:

  1. 结构体内存对齐问题

  1. 传输的数据字节序问题

2.http协议

HTTP协议: 互联网公司中使用最多的协议。

认识: HTTP--超文本传输协议 (最早期就是为用来传输web网页而设计的)

特性:

1.基于字符串明文传输的,调试便捷性高,

2.是一种简单的请求-响应协议(早期是短链接-一次请求-响应结束就关闭)

  1. 基于TCP协议,传输安全可靠。

3.请求格式

格式:想要使用一个协议,用的好,就必须去了解他的格式,了解协议中每一个字段的功能.

1.请求行:请求中的第一行,主要对请求进行关键性描述

请求行中的内容分为三部分,以空格作为间隔,请求行以\n \r作为结尾(请求行,其实刚好就是一行数据)

第一部分: 请求方法:多种多样,描述不同的请求目的

GET:向服务器请求一个网页实体资源,请求中没有正文,但是也可以向服务器提交数据,提交的数据在URL中(安全性低,长度受限

POST: 向服务器提交表单数据,请求中有正文

HEAD:面试中经常会问GET和HEAD有什么区别--目的与GET类似,但是不同的是,实际的响应中不要实体资源,只要响应头部

PUT: 更新服务器上的资源

DELETE:删除服务器上的资源

................

第二部分: URL

第三部分: 协议版本

描述了当前请求所使用的HTTP协议版本,不同的版本之间有功能支持力度上的差异

HTTP协议的版本迭代:

HTTP/0.9--- 0.9版本,是一个不成熟的版本,只能使用GET获取网页,而且也没有当前的完善的协议格式

HTTP/1.0---1.0版本,完善了协议格式,新增支持了更多的请求方法:GET,HEAD,POST,并且有了缓存的控制,以及流媒体的传输

HTTP/1.1---1.1版本,是当前用的最多的版本,新增支持了更多的请求方法:PUT,

DELETE ....;针对当前的网络,觉得以前的通信效率太低了: 支持了长连接,对缓存的管理更加精细了

长连接与短链接:

短链接:建立TCP连接-》发送请求-》接收响应-》关闭连接

每次要获取一个资源,都要重新建立连接,关闭连接,效率很低

长连接(管线化传输):

长连接: 建立连接-》发送请求-》接收响应-》发送请求-》接收响应。。。。-》关闭连接

长连接管线化传输:建立连接-》发送请求-》接收响应-》发送请求1-》发送请求2-》接收响应1-》接收响应2-》关闭连接

HTTP/1.1版本的迭代,更多的是对传输效率的改进

HTTP/2这个版本是一个大跃进,因为并不向前兼容

1.使用二进制传输,以前是名文字符串

2.不用重复每次请求传输相同的头部字段

3.长连接的一些改进,不需要按序响应,解决了队头阻塞问题

4.主动推送功能的加入,服务器响应数据的时候,可以主动响应依赖数据

2.请求头部:一个个的键值对,对于请求的附加描述以及对正文的描过

请求头部: 由的键值对组成,key: val r nkey:针对请求的些附加描述,以及对于请求正文的描述valrin

请求头部 (只会在请求中出现的头部字段,描述请求)

User-Agent,Host,Referer....

正文头部 (在请求与响应中都会出现,主要是对于正文的描述),

Content-Length:129 用于描述正文长度

Content-Type: application/json;charset=UTF-8 用于描述正文的数据类型,决定了对方如何解析处理正文

响应头部(只会在响应中出现的头部字段,描述响应)

Location: http://baidu.com 用于描述重定向

通用头部(在请求与响应中都会出现,属于对于本次通信或者连接的一些描述)

Connection: keep-alive/close : 用于描述当前的连接使用的是短链接还是长连接

3.空行: 间隔头部与正文

空行: \rn 主要用于间隔HTTP头部与正文

主要是实现在HTTP协议解析时,先接收一个完整的HTTP协议头部,根据其中的Content-Length确定正文长度,然后根据正文长度,取出指定长度的正文,则刚好能够完整的获取到一条HTTP请求。

4.正文:提交给服务器的数据

正文: 提交给服务器的数据,类型格式通过Content-Type描述

4.响应格式

响应格式:响应行,响应头部,空行,正文

响应行: 协议版本 状态码 状态码描述\r\n ---> HTTP/1.1 200 0K\r\n

状态码: 用于明确直接的向客户端表示本次请求的处理结果

1xx:继续请求或者协议切换,101---协议切换

2xx:请求已经成功处理了,200---成功处理:206---区间内容处理成功

3xx:表示请求进行了重定向 301---永久重定向 302---临时重定向:

303-see other 304--not modifvy,

重定向:把一个请求,重定向到其他链接。示例:一个请求,要请求的资源,被移动到了其他位置。但是想要依然保持原链接有效301.302,303这种要跟 Location响应头字段搭配使用,Location字段用于指定的重定向的新链接, Location: htp:/baidu.com

4xx:表示客户端的错误, 400--bad request,404--Not Found 请求的资源不存在

5xx: 表示服务器的错误, 500--服务器内部错误

502--bad gateway,代理服务器连接服务器失败; 504-gateway timeout--代理请求超时

状态码描述:没有实际的功能性意义,给程序员看的,是对于状态码的文字描述信息

响应头部: Connction, Location 。。。。

空行:间隔头部与正文

5.Cookie

头部字段中的 Cookie (请求头) & Set-Cookie (响应头)

:http是一个简单的请求-响应协议,不管是短链接还是长连接,连接都不是一直持续的。

这样就会存在一个问题: 例如在购物网站购物,因为连接不是持续的,导致每次买东西都要重新建立连接,进行登录因此就需要不管连接是不是原来的,但是都要能够区分出用户,为了解决这个问题就提出了一个方案: cookie机制

cookie:小饼干,cookie是一种信息缓存机制,将一些信息保存到客户端主机上,等下一次请求服务器的时候读取出来发送给服务器

Set-Cookie (响应头) :告诉客户端,那些信息需要保存起来,保存到客户端本地

6.session(会话)

session: 会话,就是为客户端与服务器的通信建立一个会话,将会话重要内容保存起来,会话内容被保存在服务器上,通过cookie只需要传输Session id 即可这样做有个好处,不会在网络上传输用户的敏感信息

session会话机制,是在cookie的基础上,避免了敏感信息的传输,提高了安全性

cookie和session的区别:

1.cookie是将关键信息保存在客户端本地,每次通信前发送给服务器

2. session是将会话信息保存在服务器,通过session id进行cookie传输,保护隐私性

本质上来说这两种还是有一些安全隐患的: cookie篡改 --- 解决方案: token

7.HTTPS协议

HTTPS协议:在HTTP协议的基础上进行了一层加密,因此HTTPS不是一个新的协议,而是一个加密后的HTTP协议。

加密: SSL/TLS加密

为什么要加密:

身份验证:小明和小红是小学同学,小明有一天给小红表白,我喜欢你,小红说我也喜欢你,你先给我打200块行不行过了一段时间,过年了,小明和小红都回村子了,小明去找小红,小红说我的gg早都已经被盗了。在网络通信的时候,我们都必须明确知道对方是谁,并且还要能够验证,现在通信的就是这个人,而且还要防止对方赖账

解决方案:第三方权威机构+CA认证

8.加密传输

对传输的数据进行加密

通信双方进行传输加密,需要进行密钥的协商

对称加密:数据的加密和解密使用的是相同的密钥

缺点:进行密钥协商的时候容易被劫持,加密形同虚设;

优点:加解密的效率高

非对称加密:数据加密和解密使用的密钥是不一样的

缺点:加解密效率较低

优点:安全,不怕劫持

思想:通过指定的算法(RSA),可以生成一对密钥(公钥&私钥),使用公钥进行数据加密,加密后的数据只能使用私钥进行解密

流程:连接成功后,将自己的公钥发送对方,对方使用公钥加密要传输的数据,这个数据就只能用私钥解密

混合加密

思想:假设是客户端对服务器进行验证

  1. 服务器生成一对非对称密钥,连接成功建立,通信前,将公钥发送客户端

  1. 客户端收到后,使用公钥加密一个随机数A,以及自己支持的对称加密算法

  1. 服务器收到后,使用私钥进行解密,得到随机数A,以及对方的对称加密算法

  1. 服务器向客户端发送一个随机数B,以及自己支持的对称加密算法

客户端和服务器,各自根据两个随机数以及支持的对称加密算法,计算出一个对称,密钥。

e.往后的通信使用对称密钥进行加密解密

在实际的SSL加密中,身份验证和加密传输是整合在一起的。CA证书中包含了更多的信息: 通信方的公钥,机构信息,证书颁发机构信息,失效时间.....整体流程: 单向验证,以服务端验证为主

1.服务器自己生成一对密钥,拿着公钥,去第三方权威机构颁发证书

2.权威机构根据服务器的公钥,生成一个CA证书,给服务器

3.客户端与服务器建立连接后,通信前,服务器先将CA证书发送给客户端

4.客户端收到CA证书,进行解析验证权威机构是否自己信任,在权威机构验证对方身份,解析出公钥

5.客户端生成一个随机数,使用公对随机数+加密算法进行加密,发送给服务器

6.服务器收到数据后,使用私钥进行解密,生成一个自己的随机数,将随机数和加密算法发送给客户端

7.客户端收到数据后,客户端和服务器都有对方的随机数,和自己的随机数,以及加密算法,进行计算得到一个对称密钥

8.往后通信,使用对称密钥进行传输加密

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

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

相关文章

解决dpdk reserve的内存返回的虚拟地址和iova地址一样的问题

1. 背景: 在ubuntu20.04上用dpdk API: rte_memzone_reserve_aligned("L1L2_PCIE_MEMORY", 1.5*1024*1024*1024, rte_socket_id(), RTE_MEMZONE_1GB|RTE_MEMZONE_IOVA_CONTIG, RTE_CACHE_LINE_SIZE); 分配1.5…

a-form中的label超出隐藏

效果 代码: :deep(.ant-form-item-label) {display: flex;justify-content: flex-end;line-height: 16px; //这个数值视具体情况而定label { //这是关键white-space: nowrap;text-align: right;// color: #8a8a8a;max-width: 150px;// padding-right: 3…

OpenCV+ Qt Designer 开发人脸识别考勤系统

文章目录 1. 系统介绍2. 系统架构3. 开发步骤3.1 安装必要的库3.2 设计用户界面3.3 编写代码3.3.1 导入库3.3.2 连接数据库3.3.3 定义主窗口类3.3.4 实时显示摄像头画面3.3.5 进行人脸识别3.3.6 手动打卡3.3.7 显示打卡时间3.3.8 显示图片3.3.9 运行主程序 4. 总结 1. 系统介绍…

day13 - 对指纹图片进行噪声消除

在指纹识别的过程中,指纹图片通常都是现场采集的,受环境的影响会有产生很多的噪声点,如果直接使用,会对指纹的识别产生很大的影响,而指纹识别的应用场景又都是一些比较严肃不容有错的场合,所以去除噪声又不…

MySQL——存储引擎与索引应用

文章目录 一、 存储引擎1.1 MySQL结构1.2 存储引擎简介1.3 存储引擎特点1.3.1 InnoDB1.3.1.1 InnoDB 基本介绍1.3.1.2 InnoDB 逻辑存储结构 1.3.2 MyISAM1.3.3 Memory 1.4 三种引擎特点及区别1.5 存储引擎选择 二、 索引 - 重点2.1 介绍2.2 索引结构2.2.1 B-Tree 多路平衡二叉树…

网络安全面试题汇总(附答案)

作为从业多年的网络安全工程师,我深知在面试过程中面试官所关注的重点及考察的技能点。网络安全作为当前信息技术领域中非常重要的一部分,对于每一个从事网络安全工作的人员来说,不仅需要掌握一定的技术能力,更需要具备全面的综合…

Python学习之pygame模块介绍并制作代码雨

前言 对Python游戏有所了解的朋友都知道,在2D的游戏制作中,经常会用到一个模块pygame,他能帮助我们实现很多方便使用的功能,例如绘制窗口,反馈键盘鼠标信息,播放音频文件,渲染图片文字等等功能…

Java接口测试实战:掌握JMeter技能,让测试更高效!

目录 引言 一.java环境搭建 二.操作示例 1.添加信息头 2.添加请求路径和请求参数 3.添加单个文件 4添加文件集合 三.实操注意事项 1.登录 1.1登录界面断言注意事项 1.2登录界面定义token 2.首页 2.1http请求只有路径 2.2需要引用token变量 3.产品管理 3.1增加产…

Acrel 2000E/G配电室综合监控系统

1、概述 在信息化建设中,配电室运行处于信息交换管理的核心位置,这就要求配电室内所有设备需要时时刻刻正常运转,一旦某台设备出现故障,对数据传输、存储及系统运行构成威胁,就会影响到全局,如果不能及时处…

python flask p5.js mysql 实现数据库查询并网页显示数据(后附完整代码分享)

tips:不涉及session,是纯简单数据共享 实现步骤: 第一步:搭建框架第二步:创建数据库第三步:设计前端网页第四步:后端实现存储数据库整体实现需要的代码文件: 第一步:搭建框架 首先f…

Unity-vr用眼睛注视选择物体

Unity-vr用眼睛注视选择物体 文章目录 Unity-vr用眼睛注视选择物体工程版本用法说明脚本说明WatchController - 注视主控制器WatchEvent - 注视事件WatchGameobject - 被注视物体TimerTool - 计时器工具 总结 工程版本 unity2019.4.9f1 vs2019 项目工程源代码下载 用法说明 …

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023)

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023) Windows 11, version 22H2 官方原版,2023 年 5 月 更新 请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。 作…

《计算之魂》引子

了解计算机基本原理的读者朋友可以跳过这个引子直接阅读第 1 章,因为本书其他章节并不依赖本章内容。不过,如果你愿意花上半小时读一读这一部分,相信会从数学和哲学层面对计算机以及计算的本质有更深刻的理解。 0.1 什么是计算机 如果你有…

混合属性mix-blend-mode不生效

下面的ABCDE是混合图层,box是他们的父级,一般浏览器支持都没什问题需要注意的是,确保父元素不是透明的, 我使用的时候发现给父元素rgba设置透明度这种方式没啥作用,还得是纯色,没去深究,设置纯色…

集成gtest进行单元测试之cmake应用

编写代码有bug是很正常的,通过编写完备的单元测试,可以及时发现问题,并且在后续的代码改进中持续观测是否引入了新的bug。对于追求质量的程序员,为自己的代码编写全面的单元测试是必备的基础技能,在编写单元测试的时候…

二、CNNs网络架构-卷积分离网络架构

《A review of convolutional neural network architectures and their optimizations》论文指出AlexNet的优异性能证明了可以通过增加网络深度提高网络性能。随着网络层数的不断增加,不断增加的计算负担和不显著的性能提升使得更先进的网络架构成为另一个主要的研究…

如何在华为OD机试中获得满分?Java实现【字符串分隔】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

uniapp沉浸式渐变状态栏

插件地址&#xff1a;沉浸式渐变状态栏 - DCloud 插件市场 标准用法 <v-headerview actionBarColor"#fac90f" titleColor"#ffffff" pageTitle这是标题 ><template v-slot:title><!--如需自定义标题&#xff0c;用这个slot自定义内容。否则…

基于postman测试接口(整套接口测试)

可以解决的问题 几百个接口人工测试接口过于繁杂大多测试无法使用请求结果当参数可以使用随机参数支持swagger信息导入随账号持久化保存数据对集合一键测试自定义可视化结果 开启控制台 单个测试尝试 使用请求结果当参数 pm.test("存全局参数", function () {// 获…

【深度学习】基于Python Qt的口罩检测与报警系统

文章目录 yolov7训练系统集成数据库报警记录查看qt页面跳转方式qt 的数据库某表查看页面如何写q742971636 yolov7训练 yolov7:https://github.com/WongKinYiu/yolov7 人脸口罩数据集&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1bnxJPnoRNwUfVzLxKjIvkQ?pwdc0yc …