互联网(Internet)是全球互联的计算机网络,通过 TCP/IP 协议族将世界各地的设备连接在一起,提供万维网、电子邮件、即时通信、流媒体、云计算等服务。它是信息时代的基础设施。
1969 ARPANET 诞生:美国国防部高级研究计划局(DARPA)建立
1974 温顿·瑟夫与罗伯特·卡恩提出 TCP/IP 协议
1983 ARPANET 全面采用 TCP/IP,互联网元年
1989 蒂姆·伯纳斯-李发明万维网(WWW)
1991 CERN 开放万维网,互联网进入大众时代
1994 中国全功能接入互联网
2000s 搜索引擎、电子商务、社交网络兴起
2007 iPhone 发布,移动互联网时代开启
2010s 云计算、移动支付、共享经济爆发
2020s 5G、AI、物联网让万物互联成为现实
| 思想 | 说明 |
| 分组交换 | 数据拆成小包独立传输,动态选路 |
| 端到端原则 | 智能放在终端,网络保持简单 |
| 分层协议 | 各层各司其职,解耦替换 |
| 开放标准 | RFC 公开,人人可参与 |
| 尽力而为 | 网络尽力传输,可靠性由上层保证 |
OSI 七层 TCP/IP 四层
┌────────────────┐ ┌──────────────┐
│ 7 应用层 │ │ 应用层 │ HTTP/FTP/DNS
│ 6 表示层 │ ────────> │ │
│ 5 会话层 │ │ │
├────────────────┤ ├──────────────┤
│ 4 传输层 │ ────────> │ 传输层 │ TCP/UDP
├────────────────┤ ├──────────────┤
│ 3 网络层 │ ────────> │ 网际层 │ IP/ICMP
├────────────────┤ ├──────────────┤
│ 2 数据链路层 │ ────────> │ 网络接口层 │ 以太网/Wi-Fi
│ 1 物理层 │ │ │
└────────────────┘ └──────────────┘
| 层 | 职责 | 代表协议/设备 |
| 应用层 | 为用户提供网络应用 | HTTP、HTTPS、DNS、SMTP、FTP |
| 传输层 | 端到端可靠/不可靠传输 | TCP、UDP |
| 网际层 | 寻址与路由 | IP、ICMP、路由器 |
| 网络接口层 | 物理传输与帧封装 | 以太网、Wi-Fi、交换机 |
上卷已详细讲过编码与字节,网络各层的数据就是这些字节在不同层之间不断“打包“与“解包“的过程。
| 维度 | IPv4 | IPv6 |
| 长度 | 32 位 | 128 位 |
| 表示 | 点分十进制 192.168.1.1 | 冒号十六进制 2001:db8::1 |
| 地址数量 | 约 43 亿 | 约 3.4 × 10³⁸ |
| 现状 | 已耗尽,靠 NAT 缓解 | 逐步普及 |
| 地址段 | 用途 |
127.0.0.0/8 | 回环地址(localhost) |
10.0.0.0/8、172.16.0.0/12、192.168.0.0/16 | 私有地址(NAT 内部使用) |
0.0.0.0/8 | 本机(未指定地址) |
255.255.255.255 | 广播地址 |
IP 地址: 192.168.1.10
子网掩码: 255.255.255.0 (/24)
网络号: 192.168.1.0
主机号: 0.0.0.10
| CIDR | 子网掩码 | 可用主机数 |
| /24 | 255.255.255.0 | 254 |
| /16 | 255.255.0.0 | 65534 |
| /8 | 255.0.0.0 | 约 1677 万 |
www.example.com.
│ │ │ └─ 根域名(. 省略)
│ │ └─ 顶级域名(com)
│ └─ 二级域名(example)
└─ 主机名(www)
用户输入 www.example.com
│
▼
本地缓存 / 递归解析器(运营商 DNS)
│
▼
根域名服务器 → 顶级域名服务器(.com)→ 权威服务器
│
▼
返回 IP 地址 → 浏览器发起 HTTP 请求
| 类型 | 说明 |
| A | 域名 → IPv4 地址 |
| AAAA | 域名 → IPv6 地址 |
| CNAME | 域名 → 另一个域名(别名) |
| MX | 邮件服务器 |
| NS | 权威域名服务器 |
| TXT | 任意文本(SPF、DKIM 验证等) |
请求:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
响应:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>...</html>
| 分类 | 含义 | 示例 |
| 1xx | 信息 | 100 Continue |
| 2xx | 成功 | 200 OK、204 No Content |
| 3xx | 重定向 | 301 永久、302 临时、304 未修改 |
| 4xx | 客户端错误 | 400 坏请求、401 未认证、403 禁止、404 未找到 |
| 5xx | 服务器错误 | 500 内部错误、502 网关错误、503 服务不可用 |
| 方法 | 语义 | 幂等 |
| GET | 获取资源 | 是 |
| POST | 创建资源/提交处理 | 否 |
| PUT | 整体替换资源 | 是 |
| PATCH | 部分修改资源 | 否 |
| DELETE | 删除资源 | 是 |
| HEAD | 只取响应头 | 是 |
| 版本 | 特点 |
| HTTP/1.1 | 持久连接、管线化(有限) |
| HTTP/2 | 多路复用、头部压缩(HPACK)、二进制分帧 |
| HTTP/3 | 基于 QUIC(UDP),解决队头阻塞,低延迟 |
三次握手(建立连接):
客户端 ──SYN──> 服务器
客户端 <─SYN+ACK─ 服务器
客户端 ──ACK──> 服务器
四次挥手(断开连接):
客户端 ──FIN──> 服务器
客户端 <─ACK─── 服务器
客户端 <─FIN─── 服务器
客户端 ──ACK──> 服务器
| 维度 | TCP | UDP |
| 连接 | 面向连接 | 无连接 |
| 可靠性 | 可靠(确认、重传、排序) | 不可靠(尽力而为) |
| 速度 | 慢(开销大) | 快(开销小) |
| 应用 | HTTP、FTP、邮件 | 视频会议、DNS、游戏 |
| 端口 | 服务 |
| 20/21 | FTP |
| 22 | SSH |
| 25 | SMTP |
| 53 | DNS |
| 80 | HTTP |
| 443 | HTTPS |
| 3306 | MySQL |
| 6379 | Redis |
| 风险 | 说明 |
| 窃听 | 数据在网络上明文传输,可被截获 |
| 篡改 | 中间人可修改传输内容 |
| 伪装 | 攻击者可冒充服务器或客户端 |
HTTP 明文 ──加 TLS 层──> HTTPS 加密
① 握手:协商加密套件、交换证书(第 49、50 章详述)
② 传输:对称加密保护数据 + MAC 保证完整性
③ 验证:数字证书证明服务器身份
| 攻击 | 说明 |
| DDoS | 海量请求淹没服务器 |
| 中间人攻击 | 拦截并篡改通信 |
| DNS 劫持 | 篡改域名解析结果 |
| SQL 注入 | 恶意 SQL 拼接入查询 |
/*
[dependencies]
tokio = { version = "1", features = ["full"] }
*/
use axum::{routing::get, Router};
async fn hello() -> &'static str {
"Hello, Internet!"
}
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(hello));
let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap();
println!("服务器运行在 http://localhost:3000");
axum::serve(listener, app).await.unwrap();
}
#![allow(unused)]
fn main() {
use std::io::{Read, Write};
use std::net::TcpStream;
fn tcp_client() {
let mut stream = TcpStream::connect("127.0.0.1:3000").unwrap();
stream.write_all(b"GET / HTTP/1.1\r\nHost: localhost\r\n\r\n").unwrap();
let mut buf = String::new();
stream.read_to_string(&mut buf).unwrap();
println!("{buf}");
}
}
| 应用 | 协议/技术 | 说明 |
| 万维网 | HTTP/HTTPS | 网页浏览 |
| 电子邮件 | SMTP/POP3/IMAP | 邮件收发 |
| 文件传输 | FTP/SFTP | 文件上传下载 |
| 域名解析 | DNS | 域名转 IP |
| 即时通信 | WebSocket/XMPP | 实时聊天 |
| 流媒体 | HLS/WebRTC | 视频直播点播 |
| 远程登录 | SSH/RDP | 远程控制 |
| 物联网 | MQTT/CoAP | 设备通信 |
HTTP: 请求 ──> 响应(一问一答)
WebSocket: 连接建立后双向实时推送
应用: 在线聊天、股票行情、协同编辑、游戏
用户 → 最近的 CDN 边缘节点(缓存)→ 源站
│
└ 未命中时才回源,命中直接返回
作用: 降低延迟、减轻源站压力、抗 DDoS
| 知识点 | 要点 |
| 互联网核心 | 分组交换、端到端、分层协议 |
| 网络分层 | OSI 七层 vs TCP/IP 四层 |
| IP 地址 | IPv4/IPv6、子网掩码、CIDR |
| DNS | 域名层级、解析过程、记录类型 |
| HTTP | 请求响应、状态码、方法、HTTP/2/3 |
| TCP/UDP | 三次握手、可靠传输 vs 尽力而为 |
| HTTPS | TLS 加密、证书、防窃听篡改 |
| Rust 网络编程 | tokio、axum、reqwest |
| 互联网应用 | 邮件、WebSocket、CDN、物联网 |
- TCP 聊天室:用 Rust 的
std::net::TcpListener 实现一个多客户端聊天室,处理并发连接。
- HTTP 服务器:用 axum 实现一个 REST API(如待办事项增删改查),并区分 GET/POST/PUT/DELETE 的语义。
- DNS 观察:用
nslookup 或 dig 解析一个域名的 A 记录、MX 记录,理解解析过程。
- 抓包分析:用 Wireshark 抓取一次 HTTP 请求,观察 TCP 三次握手和 HTTP 报文结构。
- HTTPS 对比:用 curl 分别访问一个 HTTP 和一个 HTTPS 网站,对比响应头,说明 TLS 带来的差异。
- WebSocket 应用:用 tokio-tungstenite 实现一个 WebSocket 服务器,做一个浏览器端实时聊天页面。