网络模型 #
网络模型分为两类一类是OSI模型,共七层,一类是TCP/IP模型,共四层
其中OSI模型为:应用层–表示层–会话层–传输层–网络层–数据链路层–物理层
TCP/IP模型为:应用层–传输层–网络层–网络接口层
TCP/IP模型 #
应用层:支持各类的应用层协议,例如HTTP、HTTPS等等
传输层:通过端口号提供进程到进程的通信,主要协议是TCP、UDP
网络层:寻址和路由数据包,主要协议是IP协议
网络接口层:负责在相邻的节点之间传输数据,包括封帧、MAC 寻址和物理传输等
应用层协议 #
有HTTP、HTTPS、FTP、DNS、SSH、WebSocket、MQTT等等
报文 #
报文分为请求报文和响应报文,
请求报文:请求行,请求头,请求体
响应报文:状态行,响应头,响应体
状态码 #
1**:提示信息,表示在请求中
2**:成功处理起请求
3**:重定向类的操作提示
4**:客户端的请求出现问题,例如参数错误
5**:服务器的处理出现问题,例如服务器内部报错
HTTP请求类型 #
GET:获取指定的资源
POST:向服务器提交数据,例如表单提交
HTTP长连接 #
HTTP协议采用请求-应答模式,一般来讲,是客户端通过HTTP通信,发起请求,建立TCP连接,服务端返回响应,释放TCP连接
上面的过程这是短连接
而长连接这是不释放TCP连接,此后的HTTP通信都是复用同一个TCP进行发送和接受HTTP请求/应答
HTTP断点重传 #
断点重传:由于各种原因导致文件上传过程被中断,而再次重传不需要把整个文件重新上传一遍
其中主要的关键点是
- 客户端首先对文件进行使用md5哈希加密,建立文件的唯一标识
- 客户端再对文件进行分片,并且标上标识+序号,发送给服务端
- 服务端记录每一个文件的标识+序号,记录进度
- 服务端通过序号将整个文件进行拼接合并
这里由于对整个文件做了哈希处理,所以可以指定同一个文件进行拼接,而不会出现不同文件拼接一起
其次文件分片拥有序号,所以不用强指定文件按照序号一片一片上传,可以不用照顾序号和同时上传,最后由服务端按序号拼接即可
HTTPS协议 #
HTTP是明文传输,端口号:80
HTTPS是加密传输,由可信的CA签发数字证书,端口号:443
HTTPS握手过程 #
HTTPS是通过TLS进行握手通信
TLS第一次握手
客户端向服务端发送Client Hello信息,包括客户端生成的随机数+客户端支持的密码套件
TLS第二次握手
服务端收到请求后,发送Server Hello信息,包括服务端生成的随机数+服务端选定的密码套件+服务端的数字证书
TLS第三次握手
客户端收到响应后,首先检查服务端证书,以及取出公钥加密发送信息,包括加密的一个随机数+加密算法改变通知,此时客户端握手结束
TLS第四次握手
服务端收到请求后,通过协商算法,计算三个随机数算出本次会话的会话密钥,发送最后一次信息,包括加密算法改变通知+服务端握手结束
HTTP2.0 #
- 头部压缩:使用算法减少了头部的重复字段
- 二进制分帧:把头部和数据拆成不同类型的帧,明确不同的帧的长度和类型,方便解析和复用
- 多路复用:每一个请求和响应同属于一个steam流,并且都携带stream ID,多个请求可以在同一条TCP连接上交错传输
HTTP3.0 #
主要使用了基于UDP的QUIC算法,去除了传统的TCP连接
DNS #
dns就是域名系统,其中各个域名的关系类似一个树状结构
- 根DNS服务器
- 顶级域服务器
- 权威域服务器
其中当出现本地域名服务器找不到域名时,则是先向根DNS服务器询问,之后向顶级域服务器询问,最后是权威域服务器给出域名解析结果,本地域名服务器记录缓存
DNS端口:53
DNS同时支持UDP和TCP,一般查询使用UDP,只有区域传送数据才会使用TCP,面向大量数据并且可靠
状态 #
有无状态:是否需要依赖之前访问的交互信息
HTTP是无状态,Cookie和Session是有状态
Cookie和Session之间的区别 #
- 存储位置:Cookie存在客户端,Session存在服务端
- 数据容量:Cookie较小,通常4KB左右,Session最大相当于服务端的内存大小
- 生命周期:Cookie可以设置过期时间,过期后自动删除,也可以关闭浏览器即删除Cookie,Session主要由服务端控制,关闭浏览器不会删除Session
JWT令牌 #
无状态模式,主要是把必要的身份信息声明放在令牌里面,并且对他签名,在服务端验证之后,可以直接得到身份信息,不用每次查询Session
主要字段:
- Header:描述令牌的类型和签名算法
- Payload:保存声明
- Signature:对编码后的Header和Payload进行签名认证
缺点:
- 签发后的很难立即撤销令牌
- 权限更新不及时
- 体积较大
JWT令牌泄露处理 #
- 写一个黑名单机制,把泄露的令牌进行拉黑处理
- 维护一个版本号机制,可以对令牌维护一个token版本号,签发时写入令牌,校验时进行比对