本文首发于个人博客
前言
浏览器是如今必不可少的工具之一,每天都有无数人通过浏览器获取自己需要的信息。那么当你在浏览器中键入一行网址后究竟发生了什么?我们下面一起捋一捋。
图解
具体分析
DNS解析
所谓解析就是把方便人类记忆的域名翻译成计算机的ip地址。比如输入的url是www.baidu.com,首先在本地域名服务器中寻找ip地址,如果没找到,本地域名服务器会请求根域名服务器寻找,如果还是没找到,本地域名服务器会请求com顶级域名服务器,如果还找不到,那么本地域名服务器继续请求baidu.com域服务器。
在linux命令行中输入dig baidu.com +trace
可以详细看到dns解析过程。
1、查询了根域名服务器 ,返回了13个根域名服务器的主机名。(目前全球一共13个根域名服务器)
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-9.P2.el7 <<>> baidu.com +trace
;; global options: +cmd
. 5 IN NS g.root-servers.net.
. 5 IN NS a.root-servers.net.
. 5 IN NS h.root-servers.net.
. 5 IN NS f.root-servers.net.
. 5 IN NS k.root-servers.net.
. 5 IN NS j.root-servers.net.
. 5 IN NS e.root-servers.net.
. 5 IN NS i.root-servers.net.
. 5 IN NS d.root-servers.net.
. 5 IN NS m.root-servers.net.
. 5 IN NS c.root-servers.net.
. 5 IN NS b.root-servers.net.
. 5 IN NS l.root-servers.net.
;; Received 239 bytes from 192.168.142.2#53(192.168.142.2) in 4047 ms
2、返回com.
顶级域名服务器信息
com. 172800 IN NS e.gtld-servers.net.
com. 172800 IN NS c.gtld-servers.net.
com. 172800 IN NS i.gtld-servers.net.
com. 172800 IN NS f.gtld-servers.net.
com. 172800 IN NS k.gtld-servers.net.
com. 172800 IN NS j.gtld-servers.net.
com. 172800 IN NS m.gtld-servers.net.
com. 172800 IN NS l.gtld-servers.net.
com. 172800 IN NS g.gtld-servers.net.
com. 172800 IN NS b.gtld-servers.net.
com. 172800 IN NS d.gtld-servers.net.
com. 172800 IN NS h.gtld-servers.net.
com. 172800 IN NS a.gtld-servers.net.
com. 86400 IN DS 30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com. 86400 IN RRSIG DS 8 1 86400 20210226050000 20210213040000 42351 . sKLysaJvml4IZAj8fgWq+Kx5mNwc/K7vEzqlyRqT1xqQqMLajvy4N+cB 4yEK4P7tRZmus5iJ2n1F8ejG90NonpdxrZMZM5XoiqktGHSUt4cA+9bh 5Howi3VOBE94BEyuPOC7S0PZIO41J8kCASOlQRKwn/JgDJ3fxwM3JJU7 hn8OmZ4cQwI8GuBNf2rrdzr7JaywDTAHGPleTR+aHpxbKN/pIQwQqQN4 cv8OaDY1wxonAuDaFrAUKW4Gl3ekNmFKvmo5a2jybDF+wu14NwRX57Ho hAefWTraAeqQLdm1JJ5IM0B+wokDqpOyZG/9hCBPklqhWL8USLeWr//c uUzkig==
;; Received 1169 bytes from 202.12.27.33#53(m.root-servers.net) in 133 ms
3、返回baidu.com.
域服务器信息
baidu.com. 172800 IN NS ns2.baidu.com.
baidu.com. 172800 IN NS ns3.baidu.com.
baidu.com. 172800 IN NS ns4.baidu.com.
baidu.com. 172800 IN NS ns1.baidu.com.
baidu.com. 172800 IN NS ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20210217054119 20210210043119 58540 com. FD+n+fO9jI2LoVi9ULqvx6lIp8ZP5yC/0HzfnJqiqgTTubTJiVzoVT29 xai2LSeepPqzS/+sehbGHpqOgj21uJoOLePqmaVx/f73ZGcP6Ud2tlkQ QIE++OwDlcQK6P/BM96xdHmGEnG/RaMrFiHV919Xog+sFZddMpjVTtYR q9nST68IU2gLDcNTFeeM7P3CaUdaSRl3LIRz8iuWMrYNSg==
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6 NS DS RRSIG
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN RRSIG NSEC3 8 2 86400 20210217071943 20210210060943 58540 com. N5kC7xBpBiXE1kFHNz0QrRWRsebQhrT+zL+oO8yaR0tRQfIhHR1QMNCl Nf6jGiV+W518OfSN16Ypw54wiKf5esFFNChS0LKgp522CUzp8mYYiI5D c8elJwUrD1mYqzLXTjTQF8v2IK3bi/NwWzCasM3K5YEnP2ihO9aLRATU 3l7MdCQC9kajJ8CzkLtA+JsnK0jTP3YsrClYZmS5jKmz4Q==
;; Received 757 bytes from 192.43.172.30#53(i.gtld-servers.net) in 276 ms
4、最终查到了ip地址
baidu.com. 600 IN A 39.156.69.79
baidu.com. 600 IN A 220.181.38.148
baidu.com. 86400 IN NS ns3.baidu.com.
baidu.com. 86400 IN NS ns7.baidu.com.
baidu.com. 86400 IN NS dns.baidu.com.
baidu.com. 86400 IN NS ns4.baidu.com.
baidu.com. 86400 IN NS ns2.baidu.com.
;; Received 240 bytes from 180.76.76.92#53(ns7.baidu.com) in 22 ms
找到ip地址后会将其存入DNS缓存方便下次查询。
DNS负载均衡
如果一个网站用户很多,那么一台机器显然无法满足大量的请求。DNS负载均衡可以在DNS服务器中为一个域名配备多个ip地址,从而引导用户访问到不同的机器。CDN就是负载均衡技术的体现,它把和用户最近的服务器ip返回给用户。
浏览器进行http请求 服务器返回响应
http是使用tcp作为传输协议的,关于tcp协议可以参考我的另一篇文章。这一段传输过程可以参考《图解HTTP》中的下图。
浏览器渲染页面
浏览器首先解析HTML构建DOM树,然后解析CSS构建CSS规则树,将DOM树和规则树合成渲染树。之后遍历渲染树开始布局,计算每个节点的位置大小信息,将渲染树每个节点绘制到屏幕。具体过程可以参考这篇文章
参考文章
https://segmentfault.com/a/1190000006879700
https://zhuanlan.zhihu.com/p/133906695
https://juejin.cn/post/6844903565610188807