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

HTTP/HTTPS/TCP原理

一、HTTP

1.1 网络分层请求

网络一共经历的大概以下几个分层,不同的网络介质消息需要通过转换。

在这里插入图片描述
1.2 OSI模型

在这里插入图片描述
1.3 一个HTTP的分层解析流程

  • 首先输入域名http://test.com
    步骤一

  • 客户端1
  • 应用层1:浏览器是不认识域名,只认识IP。浏览器会先查看是否有域名->IP的缓存,如果有则访问。如果没有则查看本地host文件,如果还是没有,就会发起一个DNS请求(传输层采用UDP)获取请求域名的IP地址。
  • 传输层1:传输层采用UDP协议,经过传输层,处理后会在DNS请求报文的基础上添加UDP的请求头。
  • 网络层1:在UDP请求报文的基础上加上IP请求头,通过ARP请求来解析出mac地址。
  • 数据链路层1:将网络层的mac地址拿到,加上对应mac地址,最后交给物理层的物理介质。

  • 路由器
  • 物理层:通过物理层进行连接。
  • 数据链路层:查看mac地址是否是自己,如果是则解析,不是则丢弃。
  • 网络层:将请求报文进行解析,首先通过运营商的DNS服务器,如果解析成功则层层返回到服务器1。

步骤二

  • 客户端1
  • 应用层1:拿到ip地址后,使用HTTP,传输一些TCP的参数,代表使用TCP协议。
  • 以上类似。
  • 服务端1
  • 传输层:通过运营商进行解析到达对端的服务器,进行层层解析,通过传输层的TCP请求80端口提交给应用程序。
  • 应用层:解析HTTP请求报文,构造HTTP响应报文,层层解析返回到客户端。

1.4 HTTP协议

超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它是一种无状态协议。

1.4.1 HTTP请求报文格式

在这里插入图片描述

1.4.2 HTTP请求流程

  • 从URL解析出域名,检查域名有无对应的IP(通过浏览器DNS缓存和本地HOST),如果没有获取,则通过DNS服务器j进行获取。
  • 进行TCP的三次握手(HTTPS还需要进行TLS交换密钥的握手)
  • 浏览器发送HTTP请求
  • 浏览器拿到HTTP响应
  • 浏览器拿到响应报文, 渲染页面。
  • TCP四次挥手

1.5 TCP协议

在这里插入图片描述1.5.1 TCP的请求报文

在这里插入图片描述

Source port:源端口(基本上市随机生成)
Dest port:目的端口
Sequence number:序列号
Acknowledgment number:应答编号
Header length:首部的长度
Unused:保留字段
Unused右边:报文的标示,什么类型的报文(ACK为响应的报文,SYN为请求的报文,FIN为关闭连接的报文)
Receive Window:当前服务器可接收数据大小的窗口值
Urgent data pointer:紧急数据指针(有的话,应用程序会优先处理)
Options:可选参数
Data:数据

1.5.2 TCP的三次握手

在这里插入图片描述

  • 服务器首先会处于LISTEN状态,客户端发送SYN的请求报文,seq序列号x为随机生成。
  • 服务端收到SYN报文,会创建响应报文,回送一个ACK报文给客户端,通过ack=x+1来确认唯一的SYN报文,并且随机生成一个seq序列号y,回送一个SYN报文。
  • 客户端收到响应报文后,会进入到ESTABLISHED状态,发送一个ACK报文给服务端,ack=y+1来确认对应的连接。
  • 服务端收到ACK报文后,连接确认建立。

1.5.2 TCP的四次挥手

在这里插入图片描述

  • 客户端发送FIN的报文,seq=i
  • 服务端收到客户端的FIN报文,服务端回送ACK报文,ack=i+1
  • 服务端回送FIN报文,seq=j
  • 客户端回送收到服务端FIN报文,回送ACK报文,ack=j+1
  • 客户端进入TIME_WAIT,等待报文来回的时间(如果上一步丢包,服务端无法关闭连接,服务端会重试FIN报文请求,需要一个来回保证关闭连接。防止滞留在网络中的报文,对新建立的连接造成数据困扰)

二、HTTPS

在这里插入图片描述

应用层的HTTP不再和TCP进行交互,而是SSL安全套接层(TLS),安全套接层主要是对数据进行加密和解密

2.1 摘要、对称加密算法、非对称加密算法

  • 摘要算法: 哈希算法、散列算法,它通过一个函数,把任意长度的数据转换为一个长度固定的数据串
    摘要结果是不可逆的,不能被还原为原数据。
  • 对称加密算法: 编解码使用相同的密钥的算法(如AES、RC4)
  • 非对称加密算法: 使用公钥加密,需要使用私钥解密。使用私钥加密,需要使用公钥解密。

2.2 安全层的握手

在这里插入图片描述

  • 客户端发送加密条件列表给服务端
  • 服务端选择最安全的加密套件,并发送公钥数字证书
  • 客户端生成随机密钥,并用公钥进行加密,并发送给服务端
  • 服务端用私钥解密,获取密钥

相关文章:

  • (二)Spring教程——Spring框架特点
  • JVM 自定义类加载器
  • 用Rust打印杨辉三角
  • 消息队列——Kafka
  • RabbitMQ中间件安装
  • 2024OD机试卷-虚拟理财游戏 (java)
  • 图论(算法竞赛、蓝桥杯)--Dijkstra算法最短路
  • 进制转换md5绕过 [安洵杯 2019]easy_web1
  • 防御保护:VPN
  • git 中使用git clean删除未跟踪Untracked的文件
  • Eclipse是如何创建web project项目的?
  • 【wine】中文字体显示乱码 口口口 直接复制windows字体
  • 基于TCP的socket API,让你拥有另一套自己的服务器~
  • 关于IO的探究:BIO、NIO、AIO(未完待续)
  • API接口名称(item_search - 按关键字搜索淘宝商品)[item_search,item_get,item_search_shop等]
  • 拥抱云原生,Java与Python基于gRPC通信
  • 【node.js从入门到精通】使用express创建web服务器,路由,进行中间件的创建链接路由及其他中间件
  • 【C语言】-字符串函数和内存函数(下)
  • r语言使用rjags R2jags建立贝叶斯模型|附代码数据
  • wifi码小程序全面分析
  • 使用小程序实现图表(圆饼图、柱状图、折线图)
  • 自动驾驶如何面对恶劣天气问题?景联文科技提供相关数据标注服务
  • 微服务项目架构演变过程
  • 搭建线性网络对MNIST数据集进行训练、测试,并且预测图片
  • 【HTML+CSS】静态网页设计期末大作业——我的家乡无锡印象
  • @Cacheable和@CacheEvict的学习使用
  • 宝塔面板安装部署Vue项目,Vue项目从打包到上线
  • 《MLB棒球创造营》:走近棒球运动·迈阿密马林鱼队
  • 【设计模式】行为型模式-第 3 章第 3 讲【解释器模式】
  • 【云原生之Docker实战】使用Docker部署pdf2htmlEX文件转换工具
  • Observability:集群监控 (一) - Elastic Stack 8.x
  • 【maven】什么是坐标(依赖)继承与模块、web项目启动访问