网络协议 —— 互联网世界的"交通规则",没有它们谁也连不上谁
一、先说两句
你在浏览器里输入 `baidu.com`,回车——几秒钟后,百度的首页出现在你面前。
这个"理所当然"的过程背后,**有成百上千条规则在同时运转。** 这些规则就叫"协议"(Protocol)。
```bash
协议就是"约定"——大家都遵守同一套规则,才能互相通信:
人类通信的"协议":
中国人见面说"你好"
日本人见面鞠躬
英国人见面聊天气
→ 不遵守协议的人:别人听不懂、看不懂
计算机网络通信也一样:
你的电脑和百度服务器通信:
→ 先通过 TCP 协议建立连接(三次握手)
→ 通过 DNS 协议查到百度的 IP 地址
→ 通过 HTTP/HTTPS 协议请求网页
→ 通过 IP 协议把数据包路由到正确的服务器
→ 通过 ARP 协议找到邻居路由器
→ 通过 DHCP 协议拿到你的 IP 地址
→ ……
任何一个环节出问题 → 网页打不开
```
很多人觉得网络协议是"理论课上学了考试就忘的东西"。但理解几个核心协议的工作原理,能帮你**真正理解网络问题出在哪**,以及为什么有时候"重启路由器"就解决了。
这篇文章不讲七层模型(OSI),也不让你背各种协议的标准编号。只讲你**最常遇到、最该知道的几个协议。**
二、IP 协议 —— 数据包的"地址和路线"
IP 协议(Internet Protocol)是整个互联网的基石。它的工作很简单:
**把数据包从源地址送到目标地址。**
```bash
数据包在网络上传输的过程:
你发一条消息给朋友
→ 消息被切成一个个"数据包"(通常 1500 字节一个)
→ 每个数据包写上:从哪里来(源 IP)→ 到哪里去(目标 IP)
→ 丢到网络里
→ 经过 N 个路由器,每个路由器看目标 IP 决定往哪个方向转发
→ 最终到达目标设备
→ 目标设备把数据包按顺序拼回完整的消息
```
IP 协议只负责"送",不负责"到了没有":
```bash
IP 协议的核心理念:"尽力而为(Best Effort)"
→ 它尽力把你的数据包送到目的地
→ 但如果中途丢了——它不管
→ 如果顺序乱了——它不管
→ 如果重复了——它也不管
那谁管?TCP 协议管(后面会说)
IP 负责"送",TCP 负责"送好"
```
**IPv4 和 IPv6 的区别:**
```bash
IPv4(32位)→ 约 42 亿个地址
- 长得像:192.168.1.1
- 早就用完了
- 但通过 NAT 技术(一个公网 IP 分给多台设备),还能撑
IPv6(128位)→ 多到数不清
- 长得像:2001:0db8:85a3:0000:0000:8a2e:0370:7334
- 每个设备都可以有全球唯一的公网 IP
- 不需要 NAT——设备之间可以直接通信
- 国内运营商正在推进,但还没完全普及
```
三、TCP 和 UDP —— 送的"两种姿势"
**TCP(传输控制协议)—— 可靠但慢**
TCP 是为 IP 协议打补丁的——IP 只管送不管好,TCP 来保证送好:
```bash
TCP 保证的三件事:
1. 不丢包 → 如果没收到确认,自动重发
2. 按顺序 → 即使后发的包先到了,也按原顺序排好再交给应用
3. 不重复 → 同一个包收到了两次,只保留一个
TCP 连接建立(三次握手):
A → B: 嘿,能听到吗?(SYN)
B → A: 能听到,你呢?(SYN + ACK)
A → B: 我也能听到,开始传吧(ACK)
这个过程增加了延迟——每次建立连接都要"寒暄"一下。
所以 TCP 比 UDP 慢。
TCP 连接的"优雅分手"(四次挥手):
A → B: 我说完了(FIN)
B → A: 收到,但我还有话要说(ACK)
B → A: 我也说完了(FIN)
A → B: 收到,再见(ACK)
```
**UDP(用户数据报协议)—— 快但不可靠**
```bash
UDP 做的事情:
不管对方在不在
不管对方收没收到
不管顺序对不对
把数据扔出去就完了
UDP 没有"三次握手"、没有"重发"、没有"顺序保证"
→ 它就是一个"扔纸飞机"的协议
→ 轻量、快速、低延迟
什么时候用 UDP?
视频直播 → 丢几帧没关系,但卡了就很明显
语音通话 → 断一句话还能猜,延迟高了就没法聊
在线游戏 → 你按了键就要立刻送出去,不等确认
DNS 查询 → 一个请求一个响应,丢了重发就是
```
**区分 TCP 和 UDP 最直观的方式:**
```bash
TCP = 挂号信
有回执、有编号、丢了重寄
慢,但可靠
UDP = 明信片
写了地址就丢邮筒
丢了就丢了
快,但可能到不了
用 TCP 的:网页(HTTP)、邮件(SMTP)、文件传输(FTP)
用 UDP 的:视频直播、语音通话、在线游戏、DNS
```
四、DNS 协议 —— 互联网的"电话本"
这是人们"天天用但对它最不了解"的协议。
```bash
你记不住 IP 地址:
你要访问百度——记不住 39.156.66.10
你要访问谷歌——记不住 142.250.80.46
所以 DNS(域名系统)出现了:
你把 baidu.com 给 DNS 服务器
DNS 服务器返回 39.156.66.10
你的浏览器再用这个 IP 去访问百度
DNS 查询的完整路径:
你在浏览器输入 www.baidu.com
1. 先查本地缓存(之前查过没?)
2. 没有 → 问路由器(路由器可能也有缓存)
3. 没有 → 问运营商 DNS 服务器
4. 运营商 DNS 不知道 → 问根域名服务器
根服务器告诉你:.com 的服务器在哪
5. 问 .com 服务器:baidu.com 的服务器在哪
6. 问 baidu.com 的权威 DNS:www 的 IP 是多少
7. IP 返回给你→ 浏览器拿着 IP 去请求百度
整个过程:几十到几百毫秒
```
**为什么有时候网页打不开但微信能用?**
```bash
大概率是 DNS 被污染或劫持:
- 运营商 DNS 返回了错误的 IP
- 或者 DNS 查询被干扰了
症状:微信/QQ 能用(它们不用域名,用 IP)
但浏览器打不开网页(要用域名,依赖 DNS)
解决:
手动把电脑/路由器的 DNS 改成 223.5.5.5(阿里)或 1.1.1.1
这应该解决 80% 的"网页打不开但微信能用"问题
```
常见的公共 DNS 地址,各家有各家的优势——阿里和腾讯的在国内速度快,Cloudflare 的隐私保护好,Google 的全球覆盖好。
五、DHCP 协议 —— 你的设备怎么"自动上网"
你有没有想过一个问题:**为什么你的手机连上 Wi-Fi 就能上网,不需要手动配置 IP 地址?**
答案是 DHCP(动态主机配置协议)。
```bash
你的手机连接 Wi-Fi 时:
1. 手机广播:有人能给我一个 IP 地址吗?
2. 路由器里的 DHCP 服务器回应:给你!你的 IP 是 192.168.1.101
3. 通知你:网关(路由器)是 192.168.1.1
4. 告诉你:DNS 服务器是 8.8.8.8
5. 设置一个租期(比如 24 小时)
→ 你的手机就"自动"连上网了
整个过程:不到 1 秒
```
**DHCP 租期:**
```bash
IP 地址不是永久分配的,是"租"给你的:
- 租期到了:设备如果还在线,自动续租
- 设备离线:租期到了就回收 IP,给其他设备用
租期长短的影响:
短租期(30 分钟)→ 适合咖啡馆、机场(人员流动性大)
长租期(24 小时+)→ 适合家庭(设备固定)
问题场景:
路由器的 DHCP 池里有 254 个地址
但你有 30 台设备,每台都永久占着
→ 新的设备来了分配不到 IP → "无法加入网络"
→ 重启路由器 → 所有 IP 释放 → 问题暂时解决
```
**DHCP 也解释了为什么"重启路由器"能解决很多网络问题:**
路由器重启 → DHCP 服务重启 → 所有设备重新获取 IP → 原来的一些冲突和缓存问题自动消失。
六、HTTP/HTTPS —— 你每天打开网页都在用
HTTP(超文本传输协议)是**浏览器和服务器之间对话的语言。**
```bash
你打开一个网页时真正发生的事:
你的浏览器说(HTTP 请求):
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Chrome/120.0
Accept: text/html
→
服务器回应(HTTP 响应):
←
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 12345
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>
网络协议 —— 互联网世界的"交通规则"
文章评论 0 条
U
👍
👎
@
K
Kevin
2 小时前
Rust 的 async 生态终于要完善了!Async Iterator 和 async closure 这两块一直是我觉得最欠缺的。期待今年的进展!
👀 12
💬 回复
S
Sarah
5 小时前
编译速度优化这块太重要了,我们项目从 5 分钟降到 2 分钟就是巨大的效率提升。期待并行前端解析的上线。
👀 8
💬 回复
查看更多评论 →