应用层
2023-04-25 15:51:35 10 举报
AI智能生成
应用层
作者其他创作
大纲/内容
万维网和域名系统
网络资源
URI
URL(统一资源定位符)
方案(http://或https://等)
服务器web地址(域名/ip:端口号)
web资源路径(以/结尾为文件夹)
URN(统一资源命名符)
应用程序体系架构
C/S
C/S(客户端/服务器)
快、安全、灵活
开发成本高
B/S(浏览器-服务器)
方便,依托浏览器、成本低
安全性低
p2p
对等通信,主要用于流量密集型应用
web结构组件
代理
位于客户端和服务器之间的 http中间实体
转发所有 Web 流量
可以对请求和响应进行过滤
网关
连接其他应用程序的特殊 web 服务器
常用于将 http 流量转化为其他的协议
隧道
对两条连接之间http通信报文进行盲转发的特殊代理
https的实现
DNS域名系统
作用
将域名和 ip 地址相互映射
本质是一个分布式数据库
dns域名支持中文字符
结构
分层结构
DNS原理
1.查询本地的 hosts 映射关系
2.查询本地DNS解析器缓存
3.查询本地DNS服务器ip地址
设置在TCP/IP协议参数中的首选 dns 服务器
4.本地DNS访问根服务器,根服务器返回顶级域名服务器IP,然后重复该过程找到网址映射关系
客户端 A 向本地域名服务器查询为递归查询,本地域名服务器向根域名服务器查询为迭代查询。
DNS数据传输
dns 既采用 udp 协议也采用 tcp 协议
53端口通信默认UDP传输
返回的响应超过的 512 字节用TCP
区域传送用TCP
dns 服务器之间进行的数据传输
网页解析的过程
输入网址
DNS解析
TCP链接
发送HTTP请求
处理请求
包括重定向响应
浏览器渲染
解析HTML文件
构建DOM树
解析CSS构建渲染树
布局渲染树绘制屏幕
TCP断开连接
HTTP
HTTP报文结构
简略信息
请求方法
URL
协议版本
请求头部Header或响应头部header
内容主体
示例
HTTP请求方法
方法
get
数据放在URL后
浏览器记录会保存URL
通常用于只读服务端数据,对服务器更安全
不能进行复杂加密
只支持ASCII字符格式参数
提交的数据大小有限制
(不同浏览器对URL长度有限制,例如火狐为64KB,Chrome为8KB)
具有幂等性
header和Data一起发送
post
数据放在body中
数据不被浏览器记录
用于修改服务器上资源,对客户端更安全
可以进行复杂加密
对格式参数无限制
提交的数据理论上无限制
无幂等性
XMLHttpRequest的POST方法会先发送Header再发送Data
HTTP状态码
100-199信息性状态码
含义:接收的信息正在处理
200-299成功状态码
含义:请求正常处理完毕
200:成功返回响应
300-399重定向状态码
含义:使用替代位置访问
301:永久重定向,客户端第一次访问此 url 时,告知客户端以后直接访问新的 url,该状态保存在浏览器缓存中。
302:临时重定向,客户端每次访问此 url 时,告知客户端重定向到新的 url ,后续访问依然访问当前的 url。
400-499客户端错误状态码
含义:服务器无法处理请求
401:当前用户无该资源访问权限
403:请求被服务器禁止
404:请求的URL不存在
500-599服务器错误状态码
含义:服务器处理请求出错
501:请求的方法服务器不支持或超出服务器能力
504:请求资源服务器超时,来自网关或代理服务器
HTTP首部
通用首部字段
请求和响应都可以使用,与报文相关的信息
请求首部字段
仅在请求中使用的首部
响应首部字段
仅在响应中使用的首部
实体首部字段
用于应对实体部分的首部,一般是对实体内容进行说明。
(非标准)扩展首部
需要特定的扩展首部来实现特殊的功能
具体应用
链接管理
短连接与长链接
场景:客户端可能出现发送多个HTTP的使用场景(如请求多媒体)
http/1.1之前默认短连接,每个请求新建一个TCP连接
http/1.1开始默认长链接,首部为Connection:Keep-Alive
长链接需要由客户端或服务器提出断开,首部为Connection:Close
流水线(管线化技术)
场景:默认情况HTTP按顺序发出,响应后发出下一个,可能会等待很长时间
流水线在同一条长链接连续发送请求,不等待响应返回
提高HTTP速度和TCP连接利用率
要求响应也要按顺序接收难以预知网络情况,造成队头阻塞,很少使用
无状态协议和cookie
场景:http是一种无状态协议,不对请求或响应做持久化处理,确保协议的可伸缩性
解决方案
cookie
客户端第一次发送请求
服务器进行cookie设置(set-cookie首部),返回一个加密的cookie
浏览器保存cookie(包括名(name)和值(value)),后续请求携带cookie(cookie首部)
性质
优点
不需要在服务器存储客户端的数据
占用资源小
可拓展性高
缺点
不安全,获取cookie后可以直接伪造登录状态
cookie一般比sessionID大,传输占用资源
禁用cookie:可将信息放入url的params中,通过重写url传递
session
客户端第一次发送请求
服务器创建session对象,产生sessionID
服务器进行cookie设置(set-cookie首部),在其中加入sessionID,将会话时间设置为cookie有效期并返回
服务器将sessionID保存在服务器文件或数据库中
浏览器保存cookie(此时保存的是sessionID),后续请求只有cookie的sessionID有实际效益
会话结束后浏览器删除cookie,用户需要重新输入账号密码
性质
优点
安全
传输占用资源较小
缺点
需要在服务端存储数据,可能面临分布式问题,且占用资源较大
token(JWT-Jason Web Token)
客户端第一次发送请求
服务器生成JWT
JWT内容
header-头部
声明需要用什么算法生成签名
payload-负载
特定数据,例如有效期、用户名等
signature-签名
header和payload进行Base64编码后按照header的算法加密,生成signature签名信息定义秘钥
服务器保存JWT签名密文(密钥),将JWT发送给客户端
客户端将JWT按照cookie或session或LocalStorage的方式存储
下次登录时将token放在Authorization中或者cookie中,服务端收到token后使用密钥解密确认身份
放在cookie中
依赖后端set-cookie响应头
可以用HttpOnly防止cookie被JS捕获,避免XSS攻击
存在CSRF攻击问题
放在请求头Authorization字段中(JWT认证规范要求)
由JS代码写入
JS添加全局拦截器,天然防止CSRF攻击
Nodejs不支持cookie,可以由JS写入Secure、Expires功能
性质
优点
安全
无状态实现
服务器端只存储密钥,占用资源小
缺点
服务器不掌握客户端状态,无法主动踢出用户登录
HTTP和HTTPS
场景:HTTP安全性问题
明文通信,内容可能被窃听
无状态不验证身份,可能伪装登入
无状态不验证报文完整性,可能被篡改
引入:https将tcp发送和接收的数据的request通过ssl/tls进行处理
数据加密
对称加密
加密解密同一密钥,运算快但密钥无法安全传输
非对称加密
加密解密不同密钥
公钥所有人可得,发送方通过公钥加密,此时加密通信密钥
接收方通过私钥解密,获得通信密钥
特性
确保密钥传输的安全性
运算速度慢
无法防止中间人攻击
数字证书认证
概念:数字证书认证机构 (CA, Certificate Authority) 是客户端和服务器双方都信任的第三方机构
服务器将公钥、域名、组织以及CA颁发者等数据打包找到CA
CA用自己的私钥加密数据集合,称为签名
CA将签名和数据一起发送给服务器,被称为TLS证书
服务器将TLS证书传给浏览器
浏览器用CA公钥(植入在浏览器内部)解密验证结果是否和TLS证书是否一致
一致进行SSL握手,不一致出现风险提醒
安全性得到提升,解决了中间人攻击问题
ssl/tls报文摘要功能验证报文完整性
场景:HTTP提供MD5报文摘要功能,但是不安全,可能被篡改
HTTPS结核科加密和认证,加密 + 摘要检验 + 认证 = 数据完整
HTTP和HTTPS的区别
HTTPS
价格昂贵
速度稍慢
默认端口443
通信安全
HTTP
免费
速度快
默认端口80
通信不安全
websocket
场景:一般的C/S结构,服务端无法主动与客户端建立连接,可能会限制例如消息推送等服务
定义:websocket,即 web 浏览器与 web 服务器之间全双工通信标准
websocket 协议由 IETF 定为标准
WebSocket API 由 W3C 定为标准
特征:
建立在TCP协议上
兼容http协议,默认端口也为80和443
握手采用HTTP协议,不易屏蔽,能通过各种HTTP代理服务器
数据格式轻量,性能开销小,通信高效
可以发送文本,也可以发送二进制数据
没有同源限制,客户端可以与任意服务器通信
HTTP版本
http 0.9,非正式标准版本
http1.0,第一个正式版本
默认不支持长连接,需要设定keep-alive
强缓存expired和协商缓存last-modified\if-modified-since有一定缺陷
http1.1
默认长链接(keep-alive)
支持TCP复用,但是一个时间只能对应一个HTTP请求(http请求在tcp中串行)
支持流水线(管线化技术),单连接发送多个,但是响应也要按顺序接收,难以预知网络情况,造成队头阻塞,很少使用
增加强缓存cache-control、协商缓存etag\if-match
报文首部不压缩,主体压缩
优化手段(减少连接次数)
CSS雪碧图
将网站多个小图标整合成大图标,然后用JS或CSS分布到网站上
data urls
将图片编码写入HTML或CSS
缺点:编码结果太长
域名分片
设置多个网站域名使得资源能够同时传输
HTTP2.0
多路复用,单个TCP中交错发送请求响应等,多个HTTP请求并行互不影响
报文划分为不同的帧,例如首部帧和数据帧
负载上面有个流标识符,使得帧到达后可以按流标识符顺序或权重排列
传输的帧是二进制格式编码,快且安全
解决应用层队头阻塞,不解决TCP层面队头阻塞
服务端推送(过时技术)
点击一次就将后续可能需要的文件一并发送
无法防止由误触带来的资源浪费以及存在DDOS攻击压力问题
引入HPACK算法对报文首部压缩
HTTP3.0
选用UDP协议并在其上新增一个QUIC协议
将HTTP3.0和TLS握手过程进行整合(1RTT)
缓存恢复会话实现0RTT
将QUIC帧的组装转给传输层进行并且实现加密,并封装为QUIC数据包
QUIC数据包含有connectionID信息,防止网络突然改变造成IP改变重新握手
发展QPACK压缩格式,适用UDP
SOCKET套接字
定义:对网络中不同主机上的应用进程之间进行通信的接口
类型
流套接字(TC套接字)
数据报套接字(UDR套接字)
丢包需要在程序中处理
原始套接字
传送非传输层数据包(如Ping的ICMP数据包)
传送操作系统无法处理的数据包
其他
内容分发网 CDN
含义:利用更靠近用户的服务器从而更快更可靠地将资源发给用户
属于一种形式的Web缓存(代理服务器)
本地DNS服务器访问域名权威服务器时返回一个CSN权威服务器
访问缓存中内容使用条件GET方法,得到该内容上次修改时间以方便更新
优点
更快的数据分发
部署多台服务器,提高系统整体的带宽性能
可以看成是一种冗余机制,具有高可用性
抓包原理
通过监控客户端和服务器端其中任意一个网络节点(网卡),对数据安网络协议解析
常用协以及端口
0 条评论
下一页