浏览器是如何打开网页的,我写了一篇小白也能读懂的科普
向不懂技术的小白讲清楚,浏览器是如何通过一个网址,找到响应的服务器并打开网页的

前言
因为不是科班出身,所以哪怕我一直在从事编程工作,还是会时常暴露一些基础知识的盲区。我记得很多很多年前,我刚刚接触 CDN 相关的工作时,有一次找同事讨论一个关于域名解析的技术方案,我表达了我的疑问后,同事说:“你说这话,就说明你对域名解析的概念还不太了解。”
我一听,嗯,机会来了:“对,我确实是不太了解,要不你大概跟我说说。”同事真不错,三言两语就把基本概念讲清了,也瞬间消除了我的疑惑。
如今,这些知识对我来说已经算是常识了,不过最近在搭建网站的过程中,我发现还是能学到一些之前没太在意的细节,所以我觉得这类内容还是值得写一写的。那就用一个经典的例子,浏览器打开网页,然后由易到难,由简入繁,来说说这其中蕴含的各种网络与架构设计的知识。
今天先从科普开始。
举个栗子

我们先从普通用户的视角来看看一个网页是如何被打开的。比如我要打开我的个人网站,于是就会在浏览器中输入网址:www.laidbackgeek.com ,然后按下回车键,浏览器就会把对应的网页显示出来了。
如今可能很少有人会直接输入网址了,因为有了搜索引擎,还有收藏夹,再加上国内各种浏览器自己的首页,它们才是各种网站的入口。但本质上它们只是帮你在地址栏输入了对应的地址。
当然,讲解前你还得有一个最基础的认知,就是网页的数据是存储在无数的服务器上的,浏览器就是通过你输入的网址,找到了存有其对应网页的服务器,才能把网页数据从服务器上拉取到浏览器中,然后再显示出来。
寻找服务器
那就先来看第一个环节,浏览器是如何通过一个网址来找到其对应的服务器的。在我的网站上随便点开一篇文章,把地址栏中完整的网址拿出来看看:
https://www.laidbackgeek.com/blog/how-browsers-open-webpages-beginners-guide
在这个网址中,蓝色的部分叫做域名,浏览器就是通过它来定位服务器的。也就是说,存在一个域名与服务器的对应关系表,浏览器只要拿着域名在这个关系表中找到对应的服务器,就知道上哪去拉取数据了。
这个关系表就被称为 DNS(Domain Name System)。为什么会存在 DNS 呢?因为在互联网中,服务器的位置是通过 IP 地址(下文简称 IP)来标识的,也就是像 14.215.178.80 这样由三个句点隔开的四个数字构成的字符串。
14.215.178.80 并不是 IP 本来的样子,IP 本质上是一个32位的二进制数字,是为了便于识别和记录,才写成了这个样子。这也只是老版的 IP,被称为 IPv4,而如今正在蓬勃发展的新版 IP 被称为 IPv6,是个128位的二进制数字。
浏览器通过 IP 就能找到对应的服务器,但是,IP 显然并不适合人类识别与记忆,而我们用户关心的是网站,也不是服务器,所以普通用户使用更容易记忆的域名来关联网站,而浏览器则利用 DNS 将域名转化为 IP,来找到对应的服务器。
于是前面例子中打开网页的过程就变成这样了,用户想打开一个网页,于是就把标识这个网页的网址输入浏览器,浏览器根据网址中的域名,通过 DNS 来找到其对应的服务器的 IP,然后就可以通过 IP 连接到这台服务器,拉取相应的网页数据了。
寻找DNS
那么 DNS 又在哪里呢,浏览器是如何从 DNS 那里查找 IP 的呢?
DNS 的数据同样也存在于互联网的服务器上,前面说了,服务器的位置是通过 IP 来标识的,也就是说,浏览器需要先知道 DNS 的 IP,才能访问到 DNS,才能拿域名找到其对应网站的 IP。那么这个 DNS 的 IP,也就是 DNS 的地址,又从何而来呢?
在网络中,不只是服务器是通过 IP 来标识的,我们的电脑、手机,以及所有需要联网的设备都是一样的,你必须有一个 IP 才能和网络中的其他设备互联互通。为此,当你的电脑开始联网时,它会向它所在的网络申请一个 IP,而在网络分配 IP 的同时,也会告知它一个 DNS 地址。
所以,当你的电脑联上网的时候,它就已经知道了 DNS 的地址,后续再访问任何网址时,它就会根据这个地址,找到 DNS 服务器,就能寻找网站服务器的 IP 了。
你可能又会问了,网络给电脑分配 IP 时,告诉了它 DNS 的地址,那这个网络又是怎么知道这个 DNS 地址的呢?
我们以一般的家庭宽带为例,电脑通过网线或者 WiFi 连接到路由器,路由器连接到光猫,光猫再通过光纤连接到网络运营商,比如联通。前面说电脑联网时,网络会分配一个 IP,实际上这个 IP 是由路由器来分配的,也就是路由器将 DNS 地址告知电脑的。
那路由器又是怎么知道 DNS 地址的呢,有两种方式,一种是手动设置,也就是进入路由器后台,手动输入一个 DNS 地址。当然,一般用户是不会这么做的,不设置的话,就是第二种方式,自动获取DNS。
自动获取的方式,就跟你电脑获取 DNS 的方式类似,不过有两种情况。如果你是通过路由器拨号上网的,那么将会由联通宽带给你分配 IP,同时告知你 DNS 地址。如果你是通过光猫拨号上网的,那么就是由联通宽带告知光猫 DNS 地址,路由器再从光猫获取 DNS 地址。
总之就是从终端到网络供应商,一层层地被分配 IP,被告知 DNS 地址。到了网络供应商,DNS 作为最最基础的网络服务,他们自然知道 DNS 地址,早就在网络设备上做好了配置。
DNS 数据
那 DNS 服务器上,那些域名与服务器对应的关系又是从何而来的呢?那自然是网站的维护者配置的。
比如我上周就上线了我的个人网站,步骤也简单:
- 开发一个网站
- 将网站部署到服务器
- 注册一个域名
- 为域名添加解析记录,也就域名与服务器的对应关系
然后这个对应关系就会被同步到 DNS 服务器上,然后大家就可以从浏览器访问到我的网站了。
总结
结合以上所有的环节,我们再重新整理一下浏览器打开网站的过程。

首先,网站是由站长开发维护的:
- 站长开发了网站
- 把网站部署到了服务器
- 注册了一个域名
- 向 DNS 添加了解析记录
然后当用户想浏览网站时
- 用户的电脑联网时,它也获取到了 DNS 地址
- 想上网,便需要把对应的网址输入浏览器
- 浏览器根据 DNS 地址,将网址中的域名发给 DNS
- 从 DNS 上获取到对应的 IP
- 根据 IP 找到对应的服务器
- 从服务器拉取网页数据并显示
以上便是当我们用浏览器打开网页时,所涉及到的所有环节了。
后记
毕竟是想写篇科普,所以这些环节已经经过了大量的简化,希望能让不懂技术的人也能看懂。而在实际上网过程中,像从 DNS 获取 IP,还有从服务器拉取网页数据并显示,这些过程都要复杂得多,涉及到多级缓存、网络协议等。
所以,我会再从专业的角度把浏览器打开网页的过程重新写一遍,即是小白的进阶,也是专业人士的基础,这些内容够我写几篇的了,敬请期待。
原本还想用 AI 画几幅漫画来配合讲解,不过尝试的结果不太好,细节和连贯性很难兼顾,提示词应该还有不少提升空间,不过感觉离我的标准应该也有不小的距离,慢慢试吧。