从输入域名到到炼气化神

65 阅读5分钟

这个问题可以从浏览器和计算机网络两个角度考虑,让我们一起看看

一图流

这个一图流重浏览器而非计网

image.png

  1. HTTP

  1. 浏览器首先会解析 URL ,获取 网址 & 参数
  2. 根据 HTTP 请求 URL 获取缓存
  3. 确定 Web 服务器网址和文件名后,生成 HTTP 请求头,并委托操作系统执行发送前操作

缓存

如果当前存在此 get 请求的缓存,则不用发送请求(200)。命中强制缓存

如果当前没有缓存,则发送请求,如果命中服务端缓存则是协商缓存 ( 304 )

  1. DNS

  1. HTTP消息生成后,浏览器委托操作系统发送消息给 Web 服务器
  2. 首先通过 DNS 获取真实域名

获取 DNS 的过程可以大致分为个纬度 ,缓存纬度和获取拓扑纬度

  • 缓存纬度: 浏览器 DNS 缓存 - 操作系统 DNS 缓存 - host 文件记录 - 请求
  • 请求纬度:递归请求(一直向上请求到根服务器),迭代请求 (指路不带路)
  1. 协议栈

  • 经过 HTTP 消息生成和 DNS 解析后,我们已经知道了发送到具体 IP,接下来的网络协议部分就是操作系统负责的了。具体一点,负责这部分传输工作的是操作系统的协议栈
  1. 应用程序调用 Socket 库,委托协议栈工作

  2. 协议栈负分为上下两半,上面负责接收应用层的委托

  3. 下半负责使用 IP 协议控制网络包的收发

    1. ICMP 错误信息传输协议
    2. ARP IP 到 MAC 到 DNS 协议
  4. 交由下层硬件执行具体发送操作

暂时无法在飞书文档外展示此内容

  1. TCP - 端到端

详细的 TCP 内容也可看看我的文章。

建立连接之后浏览器发送一个初始的 HTTP GET 请求

image.png

TCP 流程拆分

  • 确认4元组
  • 三次握手建立起连接 (确保双方都有接收和发送信息的能力)
  • TCP 分割数据 消息 > MSS 则需要分割
  • 组装 TCP 报文

Maximum Segment Size MSS 是除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

Maximum Transmission Unit 即最大传输单元,指在计算机网络(以太网)中传输的数据包的最大长度。

TCP 属性要点

  • 使用包序号保序

  • 使用 ACK 解决丢包问题

  • 使用状态位维护双方状态机

    • ( SYN ACK RST FIN SYN_SENT SYN_RCVD ESTABLISHED)
  • 使用滑动窗口做流量控制

  • 使用慢启动做拥塞控制

TLS 协商

TLS 是(传输层安全 transition level securtiy) 已废弃的安全层套接字 SSL (Security socket layer) 的继任者

Web & HTTP

TLS 握手发生在 TCP 握手之后

  1. 握手和认证阶段:相互 hello 并发送随机数,并认证服务端 SSL /TLS 证书
  2. 生成预主密码,就是生成一个随机的密码给后端,并用随机数和密码生成会话密钥
  3. 完成和确认完成
  1. IP - 点对点

TCP 委托 IP 模块将数据包封装成网络包发送

  1. IP 头封装

  2. IP 路由选择。

    1. 通过路由表的IP地址与其子网掩码的与运算结果与目标IP与当前子网掩码的与运算结果对比,如果一致,说明可以发送到这个子网
    2. 如果没有匹配上,则匹配默认路由方向。会走到 ISP (互联网服务提供商)
  1. MAC

MAC 地址只在局域网中有效

局域网中路由到网关,或者局域网多设备连接到时候使用

  1. 读取发送方 MAC (内置设备中)

  2. 获取接收方 MAC (ARP \ Address Resolution Protocol )

    1. 尝试读缓存
    2. 广播获取 MAC 地址
  3. 生成和发送 MAC 报文

MAC 地址 (ARP 协议) 只在局域网通信和网关通信的时候需要,不会在外部互联网传播

  1. 网卡

将数字信号转化为电信号。

  1. 添加报头和起始帧分界符

  2. 通过 FCS 帧校验序列判断数据是否存在差错

    1. 其实就是循环冗余校验 CRC-32(只检测不纠正)
  1. 交换机 - 没有 IP

  1. 交换机根据 MAC 地址表查找 MAC 地址,然后将信号发送到相应的端口
  2. 如果没有匹配的就全都发,等待返回并记录

广播地址

MAC FF:FF:FF:FF:FF:FF

IP 255.255.255.255

  1. 路由器 - 有 IP

工作和交换机相似(根据路由表 (交换机用MAC,路由器用 IP)转发数据包),又和网卡相似(有IP)

  1. C&S

服务端和客户端相互解封装

  1. 浏览器

  1. 对数据包进行解码和解压缩
  2. 如果可以,则将返回的数据缓存 ( get 请求可缓存 )
  3. 根据资源判断如何处理 ( HTML/下载类类型 )考虑 HTML情况 👇
  4. 提交文档给浏览器进程
  5. 浏览器进程通知渲染进程,同时更改页面状态
  6. 渲染进程的GUI线程并行解析 HTML & CSS
  7. 生成 renderTree - 布局树
  8. 分层,绘制, 分块,光栅化 , 合成 , 展示

笔者才疏学浅,各位读者多多担待,不吝赐教。部分插图来自网络,侵删。