目录
常见网络协议一览:IP、TCP、UDP、DNS、HTTP、TLS、QUIC
一篇讲清上网最常用的七个协议:各自在哪一层、负责什么,配三张时序图——TCP 连接的一生、DNS 如何逐级查询、QUIC 为什么比 TCP + TLS 快。
网络原理系列:① 打开一个网页时发生了什么 → ② 网络分层模型 → ③ 常见网络协议 → ④ 代理是什么 → ⑤ 加密隧道是什么 → ⑥ 加密隧道与代理的区别 → ⑦ HTTPS 加密了什么 → ⑧ 系统代理与 TUN 模式 → ⑨ 分流是什么 → ⑩ DNS 污染与泄漏 → ⑪ 晚高峰为什么变慢 → ⑫ 延迟、丢包与带宽
协议就是通信双方事先约定好的「规矩」:消息长什么样、先说什么后说什么、出了错怎么办。上网最常打交道的有七个:IP 负责把数据送到正确的设备,TCP 和 UDP 负责交给正确的程序(一个可靠、一个快),DNS 把域名翻译成 IP,HTTP 用来取网页,TLS 负责加密,QUIC 则是把传输和加密合在一起的新一代协议。本文逐个介绍,并用三张时序图展示它们实际是怎么一步步工作的。
- ① TCP:编号每段数据带序号,按顺序送达
- ② TCP:签收接收方回复确认(ACK)
- ③ TCP:重传丢了的数据段会重新发送
- ④ UDP:只管发不握手、不等确认,延迟更低
- ⑤ UDP:丢了就丢了不重传,适合视频通话、游戏
一张表看懂
| 协议 | 所在层(TCP/IP) | 负责什么 | 一句话比喻 |
|---|---|---|---|
| IP | 网络层 | 给设备编地址,把数据包一站站转发到目的地 | 门牌号 + 快递分拣 |
| TCP | 传输层 | 可靠、按顺序地传输,丢了会重传 | 挂号信,每件都要签收 |
| UDP | 传输层 | 只管发,不保证送达和顺序,延迟低 | 撒传单 |
| DNS | 应用层 | 把域名翻译成 IP 地址 | 电话簿 |
| HTTP / HTTPS | 应用层 | 浏览器和网站之间请求、返回网页 | 点菜和上菜 |
| TLS | 应用层(TCP 之上) | 加密传输内容,并验证网站身份 | 装进上锁的信封 |
| QUIC | 传输层(基于 UDP) | 自带加密的可靠传输,HTTP/3 的基础 | 更快的挂号信 |
IP:给每台设备一个地址
IP(Internet Protocol) 是整个互联网的地基。每个数据包都带着源 IP 地址和目标 IP 地址,沿途的路由器只看目标地址,一站一站往前转发,直到送达。
- IPv4:32 位,写成四段十进制数字,总共约 43 亿个地址,早在多年前就分配完了;
- IPv6:128 位,写成八组十六进制数字,地址多到几乎用不完,正在逐步普及;
- 私有地址与 NAT:家里的手机、电脑用的是只在局域网内有效的私有地址(常见的如以 192.168 开头的地址),出门上网时由路由器统一换成运营商分配的公网地址,这个过程叫 NAT(网络地址转换)。
IP 只负责「尽力送到」,不保证一定送到、也不保证顺序。这些问题交给上一层去解决。
TCP 与 UDP:可靠和速度二选一
传输层有两个主角,它们都用端口号区分同一台设备上的不同程序,但性格完全不同:
| TCP | UDP | |
|---|---|---|
| 连接 | 先握手建立连接 | 不需要,直接发 |
| 可靠性 | 每个数据段编号、对方确认,丢了重传 | 不确认、不重传,丢了就丢了 |
| 顺序 | 保证按发送顺序交给程序 | 不保证 |
| 速度 | 握手和等待确认会带来额外延迟 | 开销小、延迟低 |
| 典型用途 | 网页、文件下载、邮件 | 视频通话、在线游戏、直播、DNS 查询 |
TCP 的可靠是怎么做到的?看一条 TCP 连接从建立到关闭的全过程:
| 阶段 | 步骤 | 在做什么 |
|---|---|---|
| 三次握手 | ①–③ | 双方确认彼此都能收发,并交换各自的起始序号 |
| 传输数据 | ④–⑤ | 每段数据都有编号;接收方回复 ACK,告诉对方「这个编号之前的我都收到了」 |
| 丢包重传 | ⑥–⑨ | 数据段 2 在路上丢了,发送方一直等不到它的确认,超时后自动重传;收到后接收方再确认 |
| 四次挥手 | ⑩–⑬ | 双方各自说「我发完了」并得到对方确认,连接才彻底关闭。之所以是四次而不是三次,是因为一方发完时,另一方可能还有数据没发完 |
这套机制让 TCP 非常可靠,但代价是:一旦丢包,后面的数据都要等它重传完才能交给程序,网络质量差时就会明显卡顿。
DNS:把域名翻译成 IP 地址
DNS 是一个分布在全世界的「分级电话簿」,没有哪一台服务器知道所有域名的 IP,而是按层级分工:
- 根服务器:知道
.com、.org、.cn等顶级域归谁管; - 顶级域服务器:例如
.com的服务器,知道example.com归哪台服务器管; - 权威服务器:由域名的主人设置,掌握这个域名真正的 IP 地址。
你的设备并不会自己挨个去问,而是把问题交给一台递归 DNS 服务器(通常是运营商或路由器提供的),由它代劳:
| 步骤 | 在做什么 |
|---|---|
| ① | 你的设备向递归 DNS 发出一次查询,然后等结果 |
| ② | 递归 DNS 先查自己的缓存;有就直接跳到 ⑩,没有才往下问 |
| ③–④ | 问根服务器,根服务器不知道具体答案,但告诉它「去问 .com 的服务器」 |
| ⑤–⑥ | 问 .com 服务器,得到「去问 example.com 的权威服务器」 |
| ⑦–⑧ | 问权威服务器,拿到真正的 IP 地址 |
| ⑨ | 按网站设置的 TTL(存活时间)把结果缓存起来,之后别人再问就不用重新查 |
| ⑩ | 把 IP 地址返回给你的设备 |
DNS 查询默认用 UDP、不加密,所以沿途的网络能看到你查了哪些域名,甚至可能返回错误的结果。这也是加密 DNS(DoH、DoT)出现的原因。
HTTP / HTTPS:取网页用的协议
HTTP 规定了浏览器怎么「点菜」、网站怎么「上菜」:请求里写明方法(GET 取、POST 提交)和地址,响应里带上状态码和内容。HTTPS 就是「HTTP + TLS」,在加密的通道里跑 HTTP。
| 版本 | 跑在什么上面 | 主要改进 |
|---|---|---|
| HTTP/1.1 | TCP | 一条连接同一时间只能处理一个请求,网页资源多时要排队或开多条连接 |
| HTTP/2 | TCP | 一条连接里可以同时传多个请求(多路复用),报头压缩 |
| HTTP/3 | QUIC(UDP) | 解决 TCP 丢包时「一个卡住全部等」的问题,连接建立更快 |
TLS:给通信加密,并证明「你是你」
TLS 位于 TCP 之上、HTTP 之下,做两件事:
- 身份验证:网站出示由可信机构签发的证书,浏览器核对证书上的域名、有效期和签名,防止你连到冒充的网站;
- 加密:双方通过密钥交换算出一把只有彼此知道的会话密钥,之后的内容都用它加密。
TLS 握手的每一步在 打开一个网页时发生了什么 里有完整的时序图,这里不再重复。
QUIC:把传输和加密合二为一
QUIC 最初由 Google 设计,现在是 HTTP/3 的基础。它跑在 UDP 之上,自己实现了可靠传输,并且把 TLS 1.3 直接内置进来。最直观的好处是建立连接更快:
| 发出第一个 HTTP 请求之前 | 原因 | |
|---|---|---|
| TCP + TLS 1.3 | 需要 2 次往返(①–④) | 先做 TCP 三次握手,再做 TLS 握手,两件事前后排队 |
| QUIC | 只需要 1 次往返(⑥–⑦) | 连接和加密的握手合并在同一组消息里完成 |
在延迟 200 毫秒的跨境线路上,少一次往返就是少等 0.2 秒。QUIC 还有两个优点:
- 一个请求丢包不会卡住其他请求:每个请求在 QUIC 里是独立的「流」,不像 TCP 那样一个丢包所有数据都得等;
- 换网络不断线:手机从 Wi-Fi 切到移动数据,IP 地址变了,TCP 连接会断开,而 QUIC 用连接 ID 识别连接,可以无缝接上。
相关阅读
常见问题
打游戏、视频通话为什么多用 UDP?
这些场景更怕「慢」而不是「丢」。TCP 遇到丢包会停下来等重传,画面和声音就会卡住;UDP 不等,丢了一两个包最多是一瞬间的画质下降或杂音,整体更流畅。
IPv6 和 IPv4 有什么区别?
最主要的区别是地址长度:IPv4 是 32 位,总共约 43 亿个地址,早已不够用;IPv6 是 128 位,地址数量几乎用不完。现在两者并存,很多网络同时支持。
网站用了 HTTP/3,我需要做什么吗?
不需要。主流浏览器会自动和支持 HTTP/3 的网站协商使用,不支持时自动退回 HTTP/2 或 HTTP/1.1。