看似简单的问题, 算是对这几天的记录做一个回顾.
更新
[2019-3-23]
Added
- 新增
IP协议描述 - 新增
ICMP协议描述
[2019-3-25]
Added
- 补充
检查浏览器缓存相关内容 - 新增
分析url - 新增
提取url中的域名 - 新增
DNS解析相关过程
Changed
- 更改
DNS解析 -> 非转发模式相关条目
[2019-3-28]
Changed
- 更改
CDN位置 分析url内部分组TCP四次分手下的SYN -> FIN
Added
- 新增
超时重传机制 - 新增
滑动窗口机制
[2019-5-9]
Changed
- 文章格式调整
- 步骤更改
CDN应在DNS解析后检查浏览器缓存应在DNS解析前
[2020-11-3]
Changed
- 优化
DNS解析过程
[2020-11-7]
Changed
- 优化
DNS 解析过程
[2020-11-14]
Fixed
SSL握手应在TCP握手之后
一、过程
- 输入关键词
- 浏览器联想
- 键入Enter
- 分析url
- url组成
- 协议
- 主机
- 虚拟目录
- url参数
- url组成
- 提取url中的域名
- 检查浏览器缓存
- Service Worker
- 运行在浏览器背后的独立线程
- 可用作缓存
- Memory Cache
- 内存缓存
- 页面关闭释放
- 一般用作
JS、CSS文件
- Disk Cache
- 磁盘缓存
- 长期有效
- 一般用作
图片资源缓存
- Push Cache
HTTP/2新功能- 在一次资源请求中, 服务器可以主动推送客户端可能需要的资源
- 可与
H5的SSE(监听服务端发送事件)配合使用
- New Request
- Service Worker
- DNS解析
- 提取url中的域名信息
- 检查浏览器缓存
- 检查操作系统缓存的
Hosts文件 - 检查路由器缓存
- 检查运营商提供的本地DNS服务器(
localDNS)缓存, 不具有权威性 - 检查是否在
本地区域配置文件中, 返回解析结果, 具有权威性 localDNS进行转发 or 非转发- 转发模式:
localDNS将域名解析请求转发给CNAME指向的CDN的 DNS 负载均衡系统 - 非转发模式: 进行下一步
- 转发模式:
localDNS进行递归 or 迭代查询- 递归查询:
localDNS向rootDNS发起域名解析请求 =>rootDNS再去找顶级 DNS 服务器 => 顶级 DNS 找权威 DNS => 权威 DNS 将解析到的结果原路返回给localDNS - 迭代查询:
localDNS向 rootDNS 发起域名解析请求 => rootDNS 返回顶级 DNS 服务器的地址给localDNS=>localDNS再去找顶级 DNS => … => 最终得到解析结果
- 递归查询:
- 本地DNS服务器接收到IP地址
- 写入缓存
- 返回给客户端
- CDN
- 提取url中的域名
- 本地DNS服务器解析
- 将域名解析权交给 CNAME 指向的 CDN 的 DNS 负载均衡系统
- DNS负载均衡返回离用户最近的IP地址给本地DNS服务器
- 本地DNS返回IP地址给用户
- TCP三次握手
- 客户端发送SYN(seq = x)到服务器, 进入
SYN-SEND状态 - 服务端发送SYN + (ACK = x + 1) + (seq = y)到服务器, 进入
SYN-RECEIVED状态 - 客户端发送ACK = y + 1, 确认接受连接, 双方进入
ESTABLISHED状态 - 超时重传机制
- 停止等待ARQ
- 正常传输
- 一方发送数据报文, 在规定的时间内对方接收到应答, 就取消定时器
- 报文丢失
- 发送备份的数据
- ACK超时
- 重传报文
- 正常传输
- 连续ARQ
- 滑动窗口机制
- 控制流量
- 滑动窗口机制
- 停止等待ARQ
- 客户端发送SYN(seq = x)到服务器, 进入
- TLS/SSL四次握手
- Client Hello(随机数X, 支持的加密方法)
- Server Hello(rsa公钥, 随机选取客户端支持的加密方法, 随机数Y, 证书)
- Client生成随机数secret, 发送使用公钥加密后的secret
- Server通过私钥解密secret, 利用X、Y、secret生成
session-key(唯一的对话密钥)
- IP、ICMP
- IP
- 寻址
- 路由功能
- 分段
- 数据包的分片和重组, 以适应数据链路层的传输限制
- 寻址
- ICMP
ping命令- 报告无法传送的数据包的错误
- IP
- ARP
- 地址解析协议
- IP地址 -> MAC地址(路由器、网卡的‘身份证号’)
- 以太网
- 信道传输
- 回溯⬆
- 服务端返回各种资源
- 浏览器渲染机制
- 解析构建DOM树
- 浏览器根据html文件的编码方式, 将字节转化为对应字符
- 将字符串转化为符合
H5标准的令牌(尖括号字符串) - 转化为对应的DOM节点, 并完善其属性
- 根据节点的对应关系构建DOM树
- 解析构建CSSOM树
- 浏览器根据css文件的编码方式, 将字节转化为对应字符
- 将字符串转化为符合
H5标准的令牌(尖括号字符串) - 将令牌转化为相应的CSS Rules样式对象
- 根据CSS样式的层级关系, 构建CSSOM树
- 构建Render Tree
- 从DOM树的根节点开始遍历
- 只添加可见节点
- 计算节点(flow)
- 绘制(paint)
- 解析构建DOM树
- TCP四次分手
- 客户端发送FIN + (seq = x)至服务器, 进入
FIN-WAIT-1状态 - 服务端发送(ACK = x + 1) + (seq = y)到客户端, 进入
CLOSE-WAIT状态, 此时仍然可以发送数据到client - 等待资源发送完成, 再次发送FIN + (seq = z)到客户端, 进入
LAST-ACK状态, 此时客户端进入FIN-WAIT-2状态. - 客户端发送(ACK = z + 1)确认应答, 通过
延时确认机制, 等待2MSL, 确保服务端接收到消息.
- 客户端发送FIN + (seq = x)至服务器, 进入