IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> HTTP 基础 -> 正文阅读

[网络协议]HTTP 基础

?

OSI

在这里插入图片描述

TCP/IP

TCP/IP 协议:是传输层的一个面向连接的安全可靠的一个传输协议
三次握手的机制是为了保证能建立一个安全可靠的连接:
那么第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里面:SYN 标志位置为 1,表示发起新的连接。当服务端收到这个报文之后就知道客户端要和我建立一个新的连接,于是服务端就向客户端发送一个确认消息包,在这个消息包里面:ack 标志位置为 1,表示确认客户端发起的第一次连接请求。
以上两次握手之后,对于客户端而言:已经明确了我既能给服务端成功发消息,也能成功收到服务端的响应。但是对于服务端而言:两次握手是不够的,因为到目前为止,服务端只知道一件事,客户端发给我的消息我能收到,但是我响应给客户端的消息,客户端能不能收到我是不知道的。
所以,还需要进行第三次握手,第三次握手就是当客户端收到服务端发送的确认响应报文之后,还要继续去给服务端进行回应,也是一个 ack 标志位置 1 的确认消息。通过以上三次连接,不管是客户端还是服务端,都知道我既能给对方发送消息,也能收到对方的响应。那么,这个连接就被安全的建了。

四次挥手:
四次握手机制也是由客户端去发起,客户端会发送一个报文,在报文里面 FIN 位标志位置一,当服务端收到这个报文之后,我就知道了客户端想要和我断开连接,但是此时服务端不一定能做好准备,因为当客户端发起断开连接的这个消息的时候,对于服务端而言,他和还有可能有未发送完的消息,他还要继续发送,所以呢,此时对于服务端而言,我只能进行一个消息确认,就是我先告诉服务端,我知道你要给我断开连接了,但是我这里边还可能没有做好准备,你需要等我一下,等会儿我会告诉你,于是呢,发完这个消息确认包之后,可能稍过片刻它就会继续发送一个断开连接的一个报文啊,也是一个 FIN 位置 1 的报文也是由服务端发给客户端的啊,这个报文表示服务端已经做好了断开连接的准备,那么当这个报文发给客户端的时候,客户端同样要给服务端继续发送一个消息确认的报文一共有四次,那么,通过这四次的相互沟通和连接

个人理解

本质就是 TCP 使全双工连接,
因此 A 请求 B,B 确认告诉 A, B 请求 A,A 确认告诉 B,只是说开始的时候,B 请求 A 由 2 步合为了一步。
而 4 次挥手释放连接本质上和建立连接没啥区别,只是因为传送数据完毕之后 A 和 B 并不对等(可能 A 传输先完成,B 传输未完成)因此中间的过程并不能像建立连接那样可以进行合并

HTTP 报文格式

1.起始行 (start line) : 描述请求或响应的基本信息
2.头部字段集合(header) : 使用 key-value 形式更详细地说明报文
3.消息正文(entity) : 实际传输的数据,它不一样是纯文本,可以是图片,视频等二进制数据

请求行报文格式

1.METHOD : 请求方法 (如 GET/HEAD/PUT/POST 等),表示对资源的操作 2.空格
3.URI :请求目标,标记了请求方法要操作的资源 4.空格
5.VERSION : 版本号,表示报文使用的 HTTP 协议版本 6.换行

响应行报文格式

1.VERSION : 版本号,表示报文使用的 HTTP 协议版本 2.空格
3.STATUS CODE : 状态码,比如 200 是请求成功,500 是服务器错误等 4.空格
5.REASON : 原因,作为数字状态码补充,是更详细的解释文字,帮助人理解原因 6.换行

HTTP 头字段

头部字段是 key-value 的形式,key 和 value 之间用*:”分隔,最后用 CRLF 换行表示字段结束。比如前后分离时经常遇到的要与后端协商传输数据的类型"Content-type:application/jison",
这里 key 就是"Content-type", value 就是"application/json"。HTTP 头字段非常灵活,不仅可以使用标准里的 Host. Connection 等已有头,也可以任意添加自定义头,这就给 HTTP 协议带来了无限的扩展可能。

头字段注意事项

1.字段名不区分大小写, 字段名里不允许出现空格,可以使用连字符"-",但不能使用下划线””(有的服务器不会解析带" “的头字段)。字段名后面必须紧接着”:”,不能有空格,而“:”后的字段值前可以有多个空格;
2.字段的顺序是没有意义的,可以任意排列不影响语义;
3.字段原则上不能重复,除非这个字段本身的语义允许,例如 Set-Cookie.

常用头字段

HTTP 协议中有非常多的头字段,但基本上可以分为四大类:
1.请求字段: 请求头中的头字段;如 Host, Referer。
2.响应字段: 响应头中的头字段,如: Server, Date ;
3.通用字段: 在请求头和响应头里都可以出现,如 Content-type, Connection ;

HTTP 请求步骤

输入地址并确认后,浏览器对域名进行访问,浏览器对域名进行解析,如果浏览器有域名对应的 DNS 相关信息的缓存,有的话可以拿到服务端的 IP 地址,如果没有的话,会去本地的 host 文件查看是否进行了配置,如果 host 文件没有配置相关的信息,那么就会发起 DNS 的请求用来获取对应的服务器的 IP 地址。应用端会构造 DNS 的请求报文,应用层会调用传输层的 UDP 的相关协议进行数据传输,会在 DNS 的基础上加上 UDP 的请求头然后传输信息至网络层,网络层会在 UDP 的请求报文基础上加上 IP 的请求头然后到数据链路层,数据链路层会实现二层寻址,会加上自己的 mac 信息和通过网络层的 ARP 协议里拿到的下一步基地的 mac 信息一起通过物理层一起传输出去,通常传到路由器,然后路由器这个三层设备最终会通过运营商的路线传输到下一个路由器地址,达到服务器后信息通过相同步骤进行层层解析 HTTP 的请求报文,然后构造 HTTP 响应报文沿着相同的步骤传输至客户端

在这里插入图片描述

TCP 协议 (Transmission Control Protocol)

定义:面向连接的,可靠的,基于字节流的传输层通信协议
特点:
1.基于连接的:数据传输之前需要建立连接
2.全双工的:双向传输
3.字节流:不限制数据大小,打包成报文段,保证有序接收,重复报文自动丢弃
4.流量缓冲:解决双方处理能力的不匹配
5.可靠的传输服务:保证可达,丢包时通过重发机制实现可靠性
6.拥塞控制:防止网络出现恶性拥塞

TCP 连接原理

1.TCP 连接:四元组[源地址,源端口, 目的地址,目的端口 ]
2.确立连接: TCP 三次握手
a.同步通信双方初始序列号( ISN, initial sequence number )
b.协商 TCP 通信参数(MSS, 窗口信息,指定校验和算法)

!](https://img-blog.csdnimg.cn/df5bc05a9a214f618ecc5f3a258fffc8.png)

?

HTTPS

由于 HTTP 天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求/响应报文,数据不具有可信性。
因此就诞生了为安全而生的 HTTPS 协议。
使用 HTTPS 时,所有的 HTTP 请求和响应在发送到网络之前,都要进行加密。

HTTPS 与 HTTP 对比

在这里插入图片描述

SSL/TLS

SSL 即安全套接层(Secure Sockets Layer),由网景公司于 1994 年发明,
IETF 在 1999 年把它改名为 TLS (传输层安全,Transport Layer Security)
正式标准化,到今天 TLS 已经发展出了主流的三个版本,分别是 2006 年的 1.1、 2008 年的 1.2,2018 的 1.3, 每个新版本都紧跟密码学的发展和互联网的现状,持续强化安全和性能,已经成为了信息安全领域中的权威标准。

摘要算法

摘要算法能够把任意长度的数据’压缩’成固定长度、而且独一无- _的“摘要”字符
串,就好像是给这段数据生成了-个数字“指纹”。任意微小的数据差异,都可
以生成完全不同的摘要。所以可以通过把明文信息的摘要和明文一起加密进行
传输,数据传输到对方之后再进行解密,重新对数据进行摘要,再比对就能发
现数据有没有被篡改。这样就保证了数据的完整性。

!](https://img-blog.csdnimg.cn/da110d821e59441d9f966e3dd6d09217.png)

加密算法

1.加密算法:对称密钥加密算法:编、解码使用相同密钥的算法,如(AES,RC4,ChaCha20 )
举例:
原文:11101010110101 , 密钥:01011011010101
加密后(密文):10110001100000 异或算法,原文与密码进行对比,相同为 0,不相同为 1
解密后:11101010110101 异或算法,原文与密码进行对比,相同为 0,不相同为 1

2.非对称密钥加密算法:
它有两个密钥,一个叫“公钥”,一个叫“私钥”。两个密钥是不同的,公钥可以公开给任何人使用,而私钥必须严格保密。
非对称加密可以解决“密钥交换的问题。网站秘密保管私钥,在网上任意分发公钥,你想要登录网站只要用公钥加密就行了,密文只能由私钥持有者才能解密。而黑客因
为没有私钥,所以就无法破解密文。非对称密钥加密系统通常需要大量的数学运算,比较慢。如(DH、DSA. RSA、ECC )

HTTPS 加密原理

在这里插入图片描述

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:50:39  更:2022-07-21 21:52:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:25:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码