普通视图

发现新文章,点击刷新页面。
昨天以前首页

为什么敲几个字母就能访问网站?DNS原理大揭秘

作者 牛奶
2026年3月15日 15:33

你有没有想过一个问题:为什么输入"baidu.com"就能打开百度?

今天,我用查字典的故事,来讲讲DNS到底在做什么。


原文地址

墨渊书肆/为什么敲几个字母就能访问网站?DNS原理大揭秘


DNS是干嘛的?

想象一下,你想知道某个同学的电话号码。

有两种方式:

  1. 直接记住:你把全班同学的电话号码都背下来
  2. 查通讯录:你不知道,但你可以查学校的通讯录

显然,第二种更现实。

互联网也是一样的:

  • IP地址:就像电话号码,比如112.80.248.76
  • 域名:就像人名,比如baidu.com

你不可能记住所有网站的IP地址,但你可以记住域名。

DNS(Domain Name System,域名系统)就是互联网的"通讯录"——它负责把域名翻译成IP地址。


域名是怎么组成的?

先来看看www.baidu.com这个域名:

www.baidu.com
  │     │    │
  │     │    └──── .com 是顶级域名
  │     └───────── baidu 是二级域名
  └─────────────── www 是三级域名

域名层级

  • 根域名.(那个隐藏的点)
  • 顶级域名.com.cn.org.edu
  • 二级域名baidutaobaogoogle
  • 三级域名wwwmailblog

就像地址一样:

中国 → 北京市 → 海淀区 → 中关村大街1号
.     →   .cn  →  .beijing →  .zhongguancun

DNS是怎么工作的?

你输入baidu.com,浏览器是怎么找到服务器的?

让我用查字典的故事来解释:

想象一下查字典

你想查"百度"这个词的意思:

  1. 先翻记忆(浏览器缓存):上次好像在哪儿见过?
  2. 翻家里的小本子(操作系统hosts):上次记在笔记本上了
  3. 问老师(本地DNS服务器):我们学校有本字典能查
  4. 老师问校长(根DNS服务器):这个词太长了,得分头查
  5. 校长查索引(顶级域名服务器):.com开头的词都归.com部门管
  6. 最后查到(权威DNS服务器):找到了!这个词的意思是"IP 112.80.248.76"

这就是DNS查询的全过程!

更直观的流程图

你输入 baidu.com
        │
        ▼
┌───────────────────┐
│  1. 浏览器缓存    │ 有?直接用
└─────────┬─────────┘
          │ 没有
          ▼
┌───────────────────┐
│  2. 操作系统缓存   │ 有?直接用
└─────────┬─────────┘
          │ 没有
          ▼
┌───────────────────┐
│  3. 本地DNS服务器  │
│   (114.114.114.114)│
└─────────┬─────────┘
          │
          ▼
    一级一级往下问
          │
    ┌─────┴─────┐
    ▼           ▼
 根DNS      .com DNS
    │           │
    │           ▼
    │     baidu.com DNS
    │           │
    └─────┬─────┘
          │
          ▼
┌───────────────────┐
│  返回IP: 112.80.248.76 │
└───────────────────┘
          │
          ▼
   浏览器访问这个IP

每个步骤具体做什么?

步骤 谁在做 做了什么
1 浏览器 检查最近访问过的域名缓存
2 操作系统 检查hosts文件
3 本地DNS 运营商的DNS服务器,帮你递归查询
4 根DNS服务器 负责.和顶级域名(.com.cn
5 权威DNS 域名所有者自己的DNS(百度公司)

整个过程可能只需要几十毫秒,你根本感觉不到!


DNS缓存:不用每次都问

上面的流程看起来很复杂,但因为DNS缓存无处不在,实际上很少走完完整流程:

  • 浏览器缓存:几分钟到几小时
  • 操作系统缓存:Windows、macOS会缓存更久
  • 路由器缓存:你家路由器也可能缓存
  • 运营商缓存:运营商的DNS服务器会缓存

所以第一次访问baidu.com可能慢一点,之后就快了。


DNS记录类型:不止A记录

DNS不只是存IP地址,还有很多类型:

类型 作用 例子
A记录 域名 → IPv4 baidu.com112.80.248.76
AAAA记录 域名 → IPv6 baidu.com240e:ff:e020:9e::100
CNAME 域名 → 另一个域名 www.baidu.comwww.a.shifen.com
MX记录 域名 → 邮件服务器 @baidu.commx.baidu.com
TXT记录 存放文本信息 用来验证域名所有权
NS记录 指定域名由哪个DNS服务器解析 baidu.comdns.baidu.com

CNAME的好处

www.baidu.com其实指向了www.a.shifen.com

这就是CNAME——别名。

百度可以随时把www.baidu.com指向新的IP,只需要改一下CNAME,用户不需要记住新IP,体验不变。


DNS有什么问题?

DNS很棒,但不是完美的。

1. DNS污染

有些运营商或防火墙会篡改DNS结果。你输入google.com,返回了错误的IP——你访问不了Google,或者访问了假网站。

这叫DNS污染(DNS Spoofing)。

2. DNS劫持

黑客黑掉你的路由器或DNS服务器,故意返回错误的IP——你以为是访问银行,实际上是钓鱼网站。

这叫DNS劫持(DNS Hijacking)。

3. 隐私问题

DNS查询是明文的,你的运营商知道你访问了哪些网站。


怎么解决?——DNS over HTTPS

既然DNS有问题,那就加密!

DoH(DNS over HTTPS)

把DNS查询伪装成HTTPS请求,就像普通的网页请求一样。

别人看到了HTTPS请求,但不知道你在查DNS。

DoT(DNS over TLS)

用TLS加密DNS查询,更加安全。

公共DNS

除了运营商的DNS,还有一些公共DNS

  • Google DNS8.8.8.88.8.4.4
  • Cloudflare DNS1.1.1.11.0.0.1

这些公共DNS通常更快、更安全、不劫持。


总结:DNS做了什么?

步骤 做了什么
1. 输入域名 baidu.com
2. 查缓存 浏览器、操作系统、路由器有没有记录?
3. 递归查询 根服务器 → .com服务器 → baidu.com DNS
4. 返回IP 112.80.248.76
5. 访问服务器 浏览器向这个IP发起HTTP请求

写在最后

现在你应该懂了:

  • DNS = 互联网的"通讯录",把域名翻译成IP
  • A记录 = 域名→IP的对应关系
  • CNAME = 别名,让换IP更容易
  • DNS缓存 = 各地都有小本本,不用每次都查
  • DoH/DoT = 加密查询,更安全

下次你输入baidu.com的时候,记得——这背后有一群DNS服务器在帮你"查号"呢。

HTTP裸奔,HTTPS穿盔甲——它们有什么区别?

作者 牛奶
2026年3月15日 15:27

你有没有想过一个问题:为什么有的网站显示"不安全",有的显示"安全"?同样是HTTP,加了个"S"到底有什么区别?

今天,我用写信的故事,来讲讲HTTPS到底在加密什么。


原文地址

墨渊书肆/HTTP裸奔,HTTPS穿盔甲——它们有什么区别?


HTTP是怎么"裸奔"的?

想象一下,你给朋友寄信。

如果用HTTP,相当于你把信写在明信片上,直接塞进邮筒。

邮递员、门卫、邻居——谁都能看到信里的内容。

你写的「我爱你」「我的密码是123456」——所有人都一览无余。

这就是HTTP的现状:数据是明文传输的,谁都能偷看。

HTTP会被谁偷看?

  • 隔壁老王连上了同一个WiFi
  • 运营商能查到你在访问什么网站
  • 某些"中间人"专门拦截网络流量

所以在HTTP上输密码、填银行卡——跟裸奔没什么区别。


HTTPS是怎么"穿盔甲"的?

现在换一种方式。

你把信放进一个带锁的盒子里,只有你和朋友有钥匙。

邮递员拿到了盒子?没关系,他打不开。

这就是HTTPS:数据是加密传输的,别人看到了也看不懂。

HTTPS怎么做到加密?

这就涉及到两种加密方式:对称加密非对称加密


对称加密:一把钥匙(代表:AES)

对称加密就像一把钥匙,能开锁也能锁门。

  • 加密用这把钥匙
  • 解密也用这把钥匙

AES(Advanced Encryption Standard,高级加密标准)就是最典型的对称加密算法。

  • 优点:速度快,加密1G数据可能只需要几毫秒
  • 缺点:密钥传输问题——怎么把这把钥匙安全地交给对方?

现实中的问题

你想给朋友寄一把钥匙过去,但邮递员能看到啊!他拿到钥匙之后,不就能打开你的盒子了吗?

这就是对称加密的困境:钥匙送不到对方手里。

AES到底有多强?

AES是现在最常用的对称加密算法,被美国政府采用,取代了之前的DES。

它有多安全?

  • AES-128:密钥长度128位,暴力破解需要上万亿年
  • AES-256:更安全,连量子计算机都很难破解

所以AES本身是非常安全的,关键是怎么安全地把密钥送到对方手里。


非对称加密:两把钥匙(代表:RSA)

后来密码学家发明了非对称加密,像是一把神奇的锁。

它配两把钥匙

  • 公钥(Public Key):锁,可以复制多份分发出去
  • 私钥(Private Key):钥匙,只有自己手里有

RSA就是最著名的非对称加密算法,由三位数学家Rivest、Shamir、Adleman的名字命名。

RSA是怎么工作的?

  1. 你生成一对密钥:公钥私钥
  2. 公钥(锁)公开,谁都可以拿到
  3. 别人用你的公钥加密信息
  4. 只有你手里的私钥能解密

怎么用?

  1. 你把公钥(锁)寄给朋友
  2. 朋友把信放进盒子里,用锁锁好
  3. 只有你手里的私钥(钥匙)能打开

这样一来,公钥寄出去没关系,反正只能用来"锁",不能用来"开"。

RSA的缺点

  • 非常:比对称加密慢几百甚至上千倍
  • 只能加密少量数据:一般用来加密"密钥",而不是大量内容

这就是为什么不能全程用RSA加密。


HTTPS是怎么结合两者的?

HTTPS很聪明,它把两者结合起来用:

  1. 用RSA等非对称加密,把一把"对话密钥"(会话密钥)安全地传给对方
  2. 之后双方都用"对话密钥"做AES对称加密,速度就快了

这就跟做生意一样:

  • 见面谈判(慢,但安全)→ 确立合作方式,交换暗语
  • 之后用暗语交流(快)→ 正式合作

HTTPS也是这个道理:先"握手"一次确定加密方式(用RSA),之后就快(用AES)了。

具体流程

第一次访问(握手):
1. 浏览器:你好,我想访问 example.com
2. 服务器:你好,这是我的证书(包含RSA公钥)
3. 浏览器:(验证证书)OK,我生成一个随机数作为会话密钥
4. 浏览器:用服务器的RSA公钥加密会话密钥,发给服务器
5. 服务器:用RSA私钥解密,得到会话密钥

后续通信:
6. 浏览器 & 服务器:用会话密钥 + AES算法,加密/解密所有数据

证书:怎么证明"你是你"?

等等!上面的方案有个漏洞。

如果有个坏人假冒服务器呢?

比如他拦截了你的公钥请求,然后把自己的公钥寄给你——这叫"中间人攻击"。

你以为是跟朋友通信,实际上是跟坏人通信!

怎么办?

你需要证明身份

HTTPS引入了证书机制,就像身份证一样。

证书是怎么工作的?

  1. 网站去CA机构(Certificate Authority,证书颁发机构)申请一个证书
  2. CA机构核实网站身份,用自己的私钥给证书"签名"
  3. 证书里包含:网站域名、网站的RSA公钥、CA的签名
  4. 浏览器访问网站时,先验证证书

浏览器内置了一些可信的CA机构(比如DigiCert、Let's Encrypt、GlobalSign),就像公安局一样。

如果证书是假的,或者域名对不上——浏览器会显示"不安全"。

证书链:验证过程

你可能会想:CA机构 themselves 谁来证明?

这就是证书链

  • 根证书:浏览器内置,最可信
  • 中间证书:CA机构颁发
  • 服务器证书:你申请的

浏览器会一级一级验证上去。


TLS握手:到底发生了什么?

你访问一个HTTPS网站时,背后会发生这些事情:

1. 浏览器:你好,我想访问 example.com(用的是HTTPS)
2. 服务器:你好,这是我的证书(包含RSA公钥)
3. 浏览器:(验证证书)OK,这是合法的网站
4. 浏览器:我生成一个随机数(会话密钥),用你的公钥加密后发给你
5. 服务器:用我的私钥解密,得到会话密钥
6. 浏览器 & 服务器:好的,用这个会话密钥 + AES算法,开始加密通信

这就是著名的TLS握手(HTTPS = HTTP + TLS)。

握手完成之后,后续的数据传输就都是加密的、很快的。


SSL/TLS/HTTPS到底是什么关系?

  • SSL(Secure Sockets Layer):最早的安全协议,1994年由Netscape发明
  • TLS(Transport Layer Security):SSL的升级版,1999年发布,SSL的继任者
  • HTTPS:HTTP + TLS,简单说就是"穿上TLS盔甲的HTTP"

现在基本都用TLS,但很多人还是习惯叫HTTPS为SSL。


HTTPS有什么缺点?

虽然HTTPS很好,但不是完美的。

1. 慢一点

TLS握手需要时间,首次访问会慢一些。

但现在有TLS 1.3,0-RTT握手,几乎没影响。

2. 要花钱

HTTPS需要证书,以前很贵。

现在有Let's Encrypt等免费CA,证书基本不要钱。

3. 不是100%安全

HTTPS只加密传输过程,但如果:

  • 服务器被黑客攻破
  • 用户中了木马
  • 用了弱密码

——一样完蛋。

HTTPS不是万能的,但它让"偷看"变得几乎不可能。


总结:HTTP vs HTTPS

\ HTTP HTTPS
传输方式 明文 加密
加密算法 RSA + AES
速度 稍慢
安全性 裸奔 穿盔甲
证书 不需要 需要CA颁发
端口 80 443
用途 不涉及隐私的页面 登录、支付、敏感操作

写在最后

现在你应该懂了:

  • HTTP = 明信片,谁都能看
  • HTTPS = 带锁的盒子,只有你能开
  • RSA = 一把锁配两把钥匙,用来安全地送"钥匙"
  • AES = 用"钥匙"快速加密大量数据
  • 证书 = 身份证,证明"服务器是服务器"

下次看到浏览器显示"不安全",就别在上边输密码了。

看到"安全",也不是100%安全——但至少,不会"裸奔"了。

❌
❌