前言
点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱
你在浏览器里敲下 www.baidu.com
,页面“嗖”地一下打开了,看起来轻松又理所当然。可其实在这短短一两秒里,背后发生了一整套“网络魔法”。
假设你打开浏览器,输入 www.example.com
,然后按下了回车。
这个时候,操作系统第一反应不是“去访问网页”,而是:
“我得先知道这个域名对应的 IP 地址 才行。”
毕竟浏览器、系统和网卡这些底层组件只认 IP 地址,不认人类可读的域名。
于是它启动了第一步流程:DNS 查询。
DNS,全称 Domain Name System,简单来说就是把人类记得住的网址翻译成计算机能理解的 IP 地址的一个系统。查询步骤大致如下:
系统先看看:我是不是最近刚查过 www.example.com
?如果缓存里就有 IP 地址,直接拿来用,省事。
比如 Chrome、Firefox 都会自己维护一个 DNS 缓存池,避免每次都打 DNS 请求。
如果你电脑里手动配了 hosts
文件(比如改过 127.0.0.1 www.baidu.com
来屏蔽广告),系统会优先使用这个文件中的解析。
前几步都没找到,那就得发一个 DNS 请求,去问网络提供商的 DNS 服务器(通常是你路由器的上级,或者你手动设的如 8.8.8.8)。
这一步是关键:
“嘿,我要访问
www.example.com
,请问它的 IP 地址是多少?”
如果你的本地 DNS 服务器(比如电信的)也不知道答案,它就会帮你一步步问上去:
这叫做 递归查询。最终拿到一条信息,比如:
www.example.com -> 93.184.216.34
TTL: 300 秒
意思是:这个域名对应的 IP 是 93.184.216.34
,缓存有效期是 300 秒。
拿到这个 IP 后,DNS 查询这步就结束了。
拿到 IP 地址后,浏览器才真正开始进入访问流程。接下来是:
浏览器发起 TCP 三次握手,准备和目标 IP 建立连接。一般是连到对方服务器的 80(HTTP)或 443(HTTPS)端口。
如果是加密连接,还得走一套 TLS 握手流程(验证证书、公钥协商、对称密钥协商等)。
这时候浏览器才会发送这样的内容:
GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0...
服务器收到请求后,返回 HTML 内容、JS、图片、CSS 等。
浏览器拿到内容,开始解析 HTML → 加载资源 → 执行 JS → 渲染页面。
这一整个过程,用户看到的是“页面打开了”。
因为它快,通常只有几十毫秒,有时候甚至是 0(本地缓存命中)。但你一旦遇到:
很可能就是 DNS 出了问题。
常见 DNS 故障表现:
这也是为什么很多人喜欢把 DNS 手动换成:
8.8.8.8
(Google)1.1.1.1
(Cloudflare)223.5.5.5
(阿里)更快、更稳定、更干净。
下次网页打不开,别急着重启电脑,先试试:
ping www.baidu.com
nslookup www.baidu.com
你可能一眼就看出问题出在哪了。
关注 公众号 神的孩子都在歌唱 可领取 几十G的 python ,java, 计算机基础,算法,网络等学习资料
作者:神的孩子都在歌唱 本人博客:https://blog.csdn.net/weixin_46654114 转载说明:务必注明来源,附带本人博客链接