本文正在参与 “网络协议必知必会”征文活动
前言
首先祭出一张某位国外大佬画的图
这张图的流程其实已经通俗易懂的的讲解了在浏览器中输入URL会发生什么,接下来详细分析一下
分析
1.在浏览器中输入网址
- 例如在浏览器中输入www.baidu.com
2.浏览器解析域名
- 查找本地hosts文件是否有规则
- 无hosts规则发出DNS请求(本地)
- 有缓存返回,无缓存本地DNS向根DNS服务器进行查询
- 根DNS告诉本地DNS域名,本地DNS向域服务器发出请求,返回域名解析服务器地址
- 本地DNS向域名解析服务器发出请求,返回域名和IP对应关系。将IP返回给用户,对应关系保存在缓存中,下次查询直接返回缓存
3.建立TCP连接
- 本地随机端口(1024-65536)向服务器80端口发起TCP连接请求,请求进入内核TCP/IP协议栈,防火墙,最终到达WEB程序
- 建立连接 三次握手
- 客户端发送信息SYN(你好!我想和你聊一聊)
- 服务端确认信息SYN/ACK(好的,我有空)
- 客户端回传ACK握手结束(好的,我们开始吧)
4.浏览器发起HTTP请求
- 请求方法 GET POST PUT DELETE OPTION ...
- 请求头
- 请求正文
5.服务端处理
- web服务器处理请求
- 调用相应的资源并返回给客户端
- HTTP状态码(将在其他篇章进行讲解)
6.浏览器处理资源
- 解析HTML生成DOM树
- 解析CSS生成CSS规则树,共同生成渲染树
- GPU绘制显示,最终展示在浏览器中
- repaint: 部分重绘
- reflow: 全部重绘
7.关闭TCP连接 四次挥手
- 客户端发送信息FIN
- 服务端接收返回ACK,等待是否未完成传输
- 服务端所有传输结束返回FIN
- 客户端返回ACK关闭TCP连接
一句话总结
在浏览器中输入URL => 进行DNS查询,得到资源地址 => 建立TCP链接(三次握手)=> 发送HTTP请求 => 服务端处理资源返回给前端 => 浏览器解析资源并绘制在页面上 => 关闭TCP连接(四次挥手)