当前位置: 首页 > news >正文

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

说明:网络基础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.往后通信,使用对称密钥进行传输加密

相关文章:

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

说明:网络基础2讲解的是应用层的典型协议, 通过对于典型协议的理解,来体会数据的网络传输的软件层面的流程与原理。 面试中网络通信相关问题占了很大的比重,而网络通信相关的问题大多都集中在网络基础2这个单元中 下面是应用层的位…...

解决sshfs挂载报错

使用ssh命令和sshfs命令报错 read: Connection reset by peer rootjiangcheng01:~/common/remote# sshfs -o allow_other htrdxxx.xxx.xxx.xxx:/home/htrd /root/common/remote/dev01 read: Connection reset by peer 报错问题排查,追加命令 -o debug -o sshf s_d…...

由于过多的连接错误而被 MySQL服务器 阻止

Caused by: com.mysql.cj.exceptions.CJException: null, message from server: "Host 10.105.***.** is blocked because of many connection errors; unblock with mysqladmin flush-hosts" 这个错误可能表示当您尝试使用 IP 地址为 "10.105.***.**" 的…...

Go语言实现JDBC

Go语言操作数据库 Go语言提供了关于数据库的操作,包下有sql/driver 该包用来定义操作数据库的接口,这保证了无论使用哪种数据库,操作方式都是相同的; 准备工作: 下载驱动 需要在代码所在文件夹下执行相应的命令 go get github.com/go-sql-driver/mys…...

ubuntu修改环境变量的几种方法

ubuntu修改环境变量的几种方法 有多种方法可以修改Ubuntu系统的环境变量,包括: 临时修改环境变量:在终端中使用export命令可以临时修改环境变量。例如,要将PATH环境变量添加到新目录,可以运行以下命令: …...

基于html+css的图展示95

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…...

数据库基础——5.运算符

这篇文章我们来讲一下SQL语句中的运算符操作。 说点题外话:SQL本质上也是一种计算机语言,和C,java一样的,只不过SQL是用来操作数据库的。在C,java中也有运算符,这两种语言中的运算符和数学中的运算符差距不…...

JMeter 性能测试基本过程及示例

jmeter 为性能测试提供了一下特色: 2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!_哔哩哔哩_bilibili2023年最新出炉性能测试教程,真实企业性能压测全流程项目实战训练大合集!共计11条视频&…...

漏洞复现 CVE-2018-2894 weblogic文件上传

vulhub weblogic CVE-2018-2894 1、 搭建好靶场,按提示访问 http://192.168.137.157:7001/console 按照给出的文档,会查看容器的日志,找到管理员用户名/密码为 weblogic / h3VCmK2L,暂时用不到,不需要登录 2、未授权…...

二叉树:填充每个节点的下一个右侧节点指针(java)

leetcode116:填充每个节点的下一个右侧节点指针 leetcode原题链接:题目描述递归解法一递归方法二(效率更高)二叉树专题 leetcode原题链接: 116题:填充每个节点的下一个右侧节点指针 题目描述 给定一个 完美二叉树 &a…...

Android 12.0修改系统默认设备类型的平板电脑类型为设备类型

1.概述 在12.0的系统rom产品开发中,对于产品设备类型都默认为tablet即平板电脑类型,即 product="tablet" 在一些不是平板的项目中,可能需要修改这个类型为device类型 即 product="device",这就需要找到相关设置系统属性的代码,修改系统属性就可以了 2…...

debug研究

debug研究 debug的condition 通常用在for循环里面 for循环中实际使用 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UsmJ93w5-1685344057464)(D:\typora_pic_all\image-20230529145417753.png)] log.info("当前共有{}条数据待处理", vos…...

zabbix监控系统

一、Zabbix概述 1、使用zabbix的原因 作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监控软件,我们可以: ●通过一个友好的界面进…...

Python入门学习

一、执行Python(Hello World)程序 对于大多数程序语言,第一个入门编程代码便是 “Hello World!”,以下代码为使用 Python 输出 “Hello World!” 1.1 创建hello.py文件 1.2 编写程序 #!/usr/bin/python…...

自动驾驶嵌入式开发工程师:车载SOC开发修炼秘籍

声明:本文档是博主在开发学习过程中写的笔记,本意是便于以后开发复盘,参考《 ug1144-petalinux-tools-reference-guide》、《ug1085》、黑金Zynq UltraScale MPSoC 5EV开发板资料、英伟达官方资料。大佬勿喷 大佬勿喷 大佬勿喷!&a…...

Linux之搭建环境

文章目录 1 FileZilla软件2 Linux搭建samba文件共享服务器,实现基于Linux和Windows的共享文件服务2.1 smaba的安装与基本应用2.2 samba的账号权限配置2.3 win系统下的文件无法复制到Linux共享文件夹中 1 FileZilla软件 在跟着正点原子教程安装后,出现如下…...

泡利矩阵(一)

〇、厄米矩阵 厄米矩阵(Hermitian Matrix),也称为自共轭矩阵(Self-adjoint Matrix),是线性代数中的一个重要概念。它是指一个复数域上的方阵,其转置矩阵与共轭矩阵相等。 具体来说&#xff0c…...

通用支付系统设计

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体可以看成是…...

metaRTC+ZLMediaKit实现webrtc的推拉流

概述 ZLMediaKit是一个基于C11的高性能运营级流媒体服务框架,是一个支持webrtc SFU的优秀的流媒体服务器系统。 metaRTC新版本支持whip/whep协议,支持whip/whep协议的ZLMediaKit推拉流。 信令通信 ZLMediaKit新版本支持whip和whep协议,支…...

【JavaSE】Java基础语法(八)

文章目录 🍓1. 类和对象🍹🍹1.1 类和对象的关系🍹🍹1.2 类的定义 🍓2. 对象内存图🍹🍹2.1 单个对象内存图🍹🍹2.2 多个对象内存图2.3 多个对象指向相同内存图…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 ​ 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...