浏览器里敲个网址,回车,等几秒,页面出来了。
你很难想象这么简单一个操作,背后捅了多少层篓子。
输入网址
↓
DNS 查询(域名 → IP)
↓
建立连接(TCP / QUIC)
↓
HTTPS 握手(TLS)
↓
发送请求(HTTP)
↓
服务器返回内容
上面这六步,任何一步翻车,浏览器大概率只甩你一句——
无法访问此网站。
所以别一打不开就"DNS 挂了"。
DNS 有时候确实有问题,但它真没那么全能。
DNS 到底是干什么的
一句话:把域名翻译成 IP。
你记住的是 blog.arctan.top,浏览器需要的是一串数字。DNS 就是中间的翻译官——浏览器问一句"这域名在哪",DNS 回一个 IP,完事。
打个比方:
- 域名 = 联系人名字
- IP = 电话号码
- DNS = 通讯录
要注意的是,同一个域名在不同地区可能返回不同 IP。这不一定是被搞了,大概率只是 CDN 在调度,让你就近访问。
有了 IP,网站也不一定打得开
DNS 把 IP 给你了,它的活就干完了。
后面发生的事情跟它没关系:
连上目标 IP
↓
打通 443 端口
↓
建立 TCP 或 QUIC 连接
↓
完成 TLS 握手
↓
发出 HTTP 请求
每一步都可能失败。
所以你经常遇到这种情况:换了个 DNS 服务器,网站就好了。但也经常遇到另一种:换了八百个 DNS,该打不开还是打不开。
前者说明确实是 DNS 的锅。后者说明问题在更后面——再换 DNS 就是浪费时间。
TCP 和 UDP 的区别
两个都是传输协议,但性格完全不一样。
TCP 先打电话确认:"你在吗?那我开始传了啊。"传输过程中会处理丢包、重传、顺序,保证数据完整到达。可靠,但开销大。
UDP 直接往外发:"发出去了,收没收到我不管。"它自己不负责确认和重传,开销小。
但别急着给 UDP 贴"不可靠"的标签。HTTP/3 用的 QUIC 协议就是基于 UDP 的——自己在上面实现了可靠传输。
顺便一提:DNS 常用 UDP,但不是只能用 UDP。 超过 512 字节的 DNS 响应会自动切到 TCP。
HTTPS 又做了什么
HTTPS 可以粗暴理解成 HTTP 外面套了一层 TLS。
TLS 干三件事:
- 验证身份——确保你连的是真的服务器,不是山寨
- 加密内容——传输过程中别人看不到明文
- 防篡改——数据中途被改过能被发现
所以别人通常没办法直接看到你提交的表单内容。
但 HTTPS 不等于隐身——你在访问哪个网站、什么时候访问的、传了多少数据,这些信息一般还是能观察到的。加密的是内容,不是行为。
DNS 污染是怎么回事
DNS 污染,通俗说就是:
你问 DNS 某域名在哪,返回给你的答案是错的、假的、或者被人动过手脚的。
常见表现:
- 返回一个明显不相关的 IP
- 跟你说域名不存在
- 查询半天没反应
- 在不同网络下结果截然不同
- 返回的 IP 压根连不上
但有一条铁律:
解析结果不同 ≠ DNS 污染。
CDN 本来就给不同地区返回不同 IP,这是正常调度。也别一打不开网站就宣布 DNS 被污染——万一只是后面 TCP 或 TLS 失败了呢?
DNS 泄露又是什么
跟污染不是一回事。最简单的区分:
DNS 污染 → 返回的答案对不对
DNS 泄露 → 你的查询发给了谁
你本意是让 DNS 请求走某条指定路径,结果它实际发给了本地运营商的 DNS 服务器——这就是泄露。
泄露的问题在于:
- 查询记录暴露给了非预期的 DNS 服务商
- 可能拿到不同的解析结果
- CDN 可能给你分到更远的节点
但检测页面显示多个 DNS 也不一定就是泄露——关键看实际 DNS 路径是不是符合你原本的网络设计。
"被墙"到底是什么意思
"被墙"不是正经网络术语,就是个口头的说法。大致意思是:
某个网站在特定网络环境下长期打不开,但换个环境就能正常访问。
问题是这句话只描述了现象,没给原因。
打不开的实际原因可能是:
- DNS 解析异常
- IP 层面连接被阻断
- TCP 连接被 RST
- TLS 握手失败
- 路由到某个节点断了
- 网站限制特定地区访问
- CDN 节点挂了
- 服务器主动封了你的 IP
所以——
打不开 ≠ 被墙。
有时候真的只是服务器挂了。有时候是证书过期了。有时候甚至只有你一个人打不开。
先别急着分析国际网络形势,从自己这头查起。
怎么排查
按层来,别瞎猜:
① 域名能解析吗?
↓
② 返回的 IP 合理吗?
↓
③ 443 端口能连上吗?
↓
④ HTTPS 握手正常吗?
↓
⑤ HTTP 返回什么状态码?
↓
⑥ 换个网络环境再看看?
Windows:
nslookup example.com
Test-NetConnection example.com -Port 443
curl.exe -I https://example.com
Linux:
dig example.com
curl -I https://example.com
traceroute example.com
几条注意事项:
ping不通 ≠ 网站挂了(很多服务器直接禁 ICMP)- DNS 结果不同 ≠ 被污染(CDN 调度是正常的)
- 出现多个 DNS server ≠ 泄露(先看路径对不对)
- 能解析出 IP ≠ 网站一定能访问(后面还排着好几层呢)
最后
访问一个网站,背后要穿过的层级比你想的复杂:
DNS → IP → 端口 → TCP/QUIC → TLS → HTTP → 资源加载
任何一层出问题,浏览器给的结果都一样——打不开。
所以排障最值钱的技能不是猜,是分层往下查。先 DNS,再连接,再 HTTPS,再 HTTP。
找到问题在哪一层,事情基本就解决一半了。
还没有回应,欢迎写下第一封来信。