HTTPS 建立连接流程
title:HTTPS 建立连接流程
participant Client
participant Server
Client->Server:1.TLS版本号,支持的加密算法们,random num C
Server->Client:2.确定的加密算法,random num S, server证书
Client->Client:3.验证Server证书
Client->Client:4.组装会话秘钥
Client->Server:5.通过server的公钥对预主秘钥进行加密传输
Server->Server:6.通过私钥解密得到预主秘钥
Server->Server:7.组装会话秘钥
Client->Server:8.加密的握手消息
Server->Client:9.加密的握手消息
TCP&UDP
传输层协议
TCP 传输控制协议
UDP 用户数据报协议
一、UDP
1.特点
- 无连接
- 尽最大努力交付(不保证可靠传输)
- 面向报文
面向报文
既不合并,也不拆分
(应用层)应用层报文 -> (传输层)UDP首部+UDP用户数据包的数据部分 -> (IP层) IP首部+IP数据报的数据部分
2.功能
- 复用
- 分用
- 差错检测
复用
端口1-->UDP
端口2-->UDP
端口3-->UDP
UDP-->IP
分用
IP-->UDP
UDP-->端口1
UDP-->端口2
UDP-->端口3
差错检测
- 12字节伪首部
- 8字节UDP首部
- 以16字为一单元,按二进制饭吗计算出这些16位字的和,将和的而知之反码写入到检验和位
- 7字节数据
二、TCP
特点
- 面向连接
- 可靠传输
- 面向字节流
- 流量控制
- 拥塞控制
面向连接
- 3次握手建立连接(避免超时)
- 4次挥手断开连接(双向通信 客户端发,服务端回 半闭状态;服务端确认客户端确认)
可靠传输
- 无差错
- 不丢失
- 不重复
- 按序到达
停止等待协议
- 无差错情况
- 超时重传(客户端发送时丢失,超时重传)
- 确认丢失(服务端确认时丢失,客户端超时重传,服务端重传确认)
- 确认迟到(类似确认丢失,但是当客户端收到迟到的确认,可以啥都不做)
面向字节流
- 发送方(发随机字节数据)
- TCP发送缓存池(组合数据)
- TCP链接(成规律发送)
- TCP接收缓存池(接收拆分给接收方)
- 接收方
流量控制(喝茶 动态加水,动态喝水)
滑动窗口协议(发送窗口动态调整,接收窗口动态调整)
拥塞控制
- 慢开始、拥塞避免
- 开始发送报文 数量指数增长
- 达到初始门限值(16),开始线性增长
- 达到网络拥塞值(假设24),直接乘法减小门限值(12),发送报文数恢复到1重新开始
- 递归上述过程
- 快恢复、快重传
DNS 解析(域名->IP地址)
了解DNS解析?
域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文
DNS查询方式
递归查询
我去给你问一下(层层查)
客户端 - 本地DNS - 根域DNS - 顶级DNS - 权限DNS
迭代查询
我告诉你谁知道(本地DNS直接找对应的)
DNS解析常见问题
DNS劫持问题(钓鱼DNS监听域名给error IP)
- DNS劫持与HTTP没有关系()
- DNS解析发生在HTTP建立链接之前
- DNS解析请求使用UDP数据报,端口号53
解决DNS劫持:
- httpDNS
- 长连接
DNS解析转发问题
比如电信为了省事儿转到联通,造成网速慢
httpDNS
- (DNS解析)使用DNS协议想DNS服务器的53端口进行请求
- (httpDNS 不产生DNS解析)使用HTTP协议向DNS服务器的80端口进行请求
- IP直连 + 域名+客户端IP地址,返回具体的DNS地址
长连接
- 客户端 与 代理服务器 建立 长连通道
- 代理服务器 与 API 服务器使用 内网专线 DNS解析通信
Session、Cookie
HTTP协议无状态特点的补偿
一、Cookie
Cookie主要用来记录用户状态,区分用户;状态保存在客户端
过程
- Client 发送请求
- Server生成cookie
- Server响应报文头部字段携带cookie
- Client保存cookie
- 客户端发送的cookie在http请求报文的Cookie首部字段中
- 服务端设置http响应报文的Set-cookie 首部字段
修改Cookie
- 新覆盖旧(满足覆盖规则的新)
- 覆盖规则:name、path、domain、等需要与原cookie一一致
删除Cookie
- 与修改相同(失效新cookie覆盖旧的)
- 设置新的cookie的 expire=过去的时间点(失效),or maxAge=0(失效)
Cookie安全
- 对Cookie加密
- 只在http身上携带Cookie
- 设置Cookie为httpOnly,房子跨站脚本攻击
二、Session
Cookie主要用来记录用户状态,区分用户;状态保存在服务端
过程
- Client 发送请求
- Server生成cookie,生成SessionId在cookie中
- Server响应报文头部字段携带cookie
- Client保存cookie
- Client发送携带Cookie的请求,(Cookie中含有SessionID)
- Server通过SessionId识别用户