Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

第六十四 互联网

互联网(Internet)是全球互联的计算机网络,通过 TCP/IP 协议族将世界各地的设备连接在一起,提供万维网、电子邮件、即时通信、流媒体、云计算等服务。它是信息时代的基础设施。


一、互联网概述

1.1 互联网发展简史

1969   ARPANET 诞生:美国国防部高级研究计划局(DARPA)建立
1974   温顿·瑟夫与罗伯特·卡恩提出 TCP/IP 协议
1983   ARPANET 全面采用 TCP/IP,互联网元年
1989   蒂姆·伯纳斯-李发明万维网(WWW)
1991   CERN 开放万维网,互联网进入大众时代
1994   中国全功能接入互联网
2000s  搜索引擎、电子商务、社交网络兴起
2007   iPhone 发布,移动互联网时代开启
2010s  云计算、移动支付、共享经济爆发
2020s  5G、AI、物联网让万物互联成为现实

1.2 互联网的核心思想

思想说明
分组交换数据拆成小包独立传输,动态选路
端到端原则智能放在终端,网络保持简单
分层协议各层各司其职,解耦替换
开放标准RFC 公开,人人可参与
尽力而为网络尽力传输,可靠性由上层保证

二、OSI 七层模型与 TCP/IP 四层模型

2.1 两种模型的对应

OSI 七层                       TCP/IP 四层
┌────────────────┐            ┌──────────────┐
│ 7 应用层        │            │ 应用层        │ HTTP/FTP/DNS
│ 6 表示层        │ ────────>  │              │
│ 5 会话层        │            │              │
├────────────────┤            ├──────────────┤
│ 4 传输层        │ ────────>  │ 传输层        │ TCP/UDP
├────────────────┤            ├──────────────┤
│ 3 网络层        │ ────────>  │ 网际层        │ IP/ICMP
├────────────────┤            ├──────────────┤
│ 2 数据链路层    │ ────────>  │ 网络接口层    │ 以太网/Wi-Fi
│ 1 物理层        │            │              │
└────────────────┘            └──────────────┘

2.2 各层职责

层职责代表协议/设备
应用层为用户提供网络应用HTTP、HTTPS、DNS、SMTP、FTP
传输层端到端可靠/不可靠传输TCP、UDP
网际层寻址与路由IP、ICMP、路由器
网络接口层物理传输与帧封装以太网、Wi-Fi、交换机

上卷已详细讲过编码与字节,网络各层的数据就是这些字节在不同层之间不断“打包“与“解包“的过程。


三、IP 地址

3.1 IPv4 与 IPv6

维度IPv4IPv6
长度32 位128 位
表示点分十进制 192.168.1.1冒号十六进制 2001:db8::1
地址数量约 43 亿约 3.4 × 10³⁸
现状已耗尽,靠 NAT 缓解逐步普及

3.2 特殊 IP 地址

地址段用途
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广播地址

3.3 子网掩码与 CIDR

IP 地址:  192.168.1.10
子网掩码: 255.255.255.0  (/24)
网络号:   192.168.1.0
主机号:   0.0.0.10
CIDR子网掩码可用主机数
/24255.255.255.0254
/16255.255.0.065534
/8255.0.0.0约 1677 万

四、DNS 域名系统

4.1 域名层级

www.example.com.
│  │   │     └─ 根域名(. 省略)
│  │   └─ 顶级域名(com)
│  └─ 二级域名(example)
└─ 主机名(www)

4.2 DNS 解析过程

用户输入 www.example.com
      │
      ▼
本地缓存 / 递归解析器(运营商 DNS)
      │
      ▼
根域名服务器 → 顶级域名服务器(.com)→ 权威服务器
      │
      ▼
返回 IP 地址 → 浏览器发起 HTTP 请求

4.3 DNS 记录类型

类型说明
A域名 → IPv4 地址
AAAA域名 → IPv6 地址
CNAME域名 → 另一个域名(别名)
MX邮件服务器
NS权威域名服务器
TXT任意文本(SPF、DKIM 验证等)

五、HTTP 协议

5.1 HTTP 请求与响应

请求:
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>

5.2 HTTP 状态码

分类含义示例
1xx信息100 Continue
2xx成功200 OK、204 No Content
3xx重定向301 永久、302 临时、304 未修改
4xx客户端错误400 坏请求、401 未认证、403 禁止、404 未找到
5xx服务器错误500 内部错误、502 网关错误、503 服务不可用

5.3 HTTP 方法

方法语义幂等
GET获取资源是
POST创建资源/提交处理否
PUT整体替换资源是
PATCH部分修改资源否
DELETE删除资源是
HEAD只取响应头是

5.4 HTTP/1.1 与 HTTP/2、HTTP/3

版本特点
HTTP/1.1持久连接、管线化(有限)
HTTP/2多路复用、头部压缩(HPACK)、二进制分帧
HTTP/3基于 QUIC(UDP),解决队头阻塞,低延迟

六、TCP 与 UDP

6.1 TCP 三次握手与四次挥手

三次握手(建立连接):
客户端 ──SYN──> 服务器
客户端 <─SYN+ACK─ 服务器
客户端 ──ACK──> 服务器

四次挥手(断开连接):
客户端 ──FIN──> 服务器
客户端 <─ACK─── 服务器
客户端 <─FIN─── 服务器
客户端 ──ACK──> 服务器

6.2 TCP vs UDP

维度TCPUDP
连接面向连接无连接
可靠性可靠(确认、重传、排序)不可靠(尽力而为)
速度慢(开销大)快(开销小)
应用HTTP、FTP、邮件视频会议、DNS、游戏

6.3 端口号

端口服务
20/21FTP
22SSH
25SMTP
53DNS
80HTTP
443HTTPS
3306MySQL
6379Redis

七、网络安全与 HTTPS

7.1 明文 HTTP 的风险

风险说明
窃听数据在网络上明文传输,可被截获
篡改中间人可修改传输内容
伪装攻击者可冒充服务器或客户端

7.2 HTTPS = HTTP + TLS

HTTP 明文 ──加 TLS 层──> HTTPS 加密

① 握手:协商加密套件、交换证书(第 49、50 章详述)
② 传输:对称加密保护数据 + MAC 保证完整性
③ 验证:数字证书证明服务器身份

7.3 常见攻击(详见第 59、60 章)

攻击说明
DDoS海量请求淹没服务器
中间人攻击拦截并篡改通信
DNS 劫持篡改域名解析结果
SQL 注入恶意 SQL 拼接入查询

八、Rust 网络编程

8.1 Rust 网络生态

Crate用途
std::netTCP/UDP 基础
tokio异步网络运行时
reqwestHTTP 客户端
axum异步 Web 框架
hyperHTTP 底层库
tonicgRPC 框架
trust-dnsDNS 解析

8.2 简单的 HTTP 服务器

/*
[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();
}

8.3 TCP 客户端

#![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}");
}
}

九、互联网应用

9.1 典型应用协议

应用协议/技术说明
万维网HTTP/HTTPS网页浏览
电子邮件SMTP/POP3/IMAP邮件收发
文件传输FTP/SFTP文件上传下载
域名解析DNS域名转 IP
即时通信WebSocket/XMPP实时聊天
流媒体HLS/WebRTC视频直播点播
远程登录SSH/RDP远程控制
物联网MQTT/CoAP设备通信

9.2 WebSocket 全双工通信

HTTP:  请求 ──> 响应(一问一答)
WebSocket: 连接建立后双向实时推送

应用: 在线聊天、股票行情、协同编辑、游戏

9.3 CDN 内容分发网络

用户 → 最近的 CDN 边缘节点(缓存)→ 源站
        │
        └ 未命中时才回源,命中直接返回

作用: 降低延迟、减轻源站压力、抗 DDoS

十、总结与练习

本章小结

知识点要点
互联网核心分组交换、端到端、分层协议
网络分层OSI 七层 vs TCP/IP 四层
IP 地址IPv4/IPv6、子网掩码、CIDR
DNS域名层级、解析过程、记录类型
HTTP请求响应、状态码、方法、HTTP/2/3
TCP/UDP三次握手、可靠传输 vs 尽力而为
HTTPSTLS 加密、证书、防窃听篡改
Rust 网络编程tokio、axum、reqwest
互联网应用邮件、WebSocket、CDN、物联网

练习建议

  1. TCP 聊天室:用 Rust 的 std::net::TcpListener 实现一个多客户端聊天室,处理并发连接。
  2. HTTP 服务器:用 axum 实现一个 REST API(如待办事项增删改查),并区分 GET/POST/PUT/DELETE 的语义。
  3. DNS 观察:用 nslookup 或 dig 解析一个域名的 A 记录、MX 记录,理解解析过程。
  4. 抓包分析:用 Wireshark 抓取一次 HTTP 请求,观察 TCP 三次握手和 HTTP 报文结构。
  5. HTTPS 对比:用 curl 分别访问一个 HTTP 和一个 HTTPS 网站,对比响应头,说明 TLS 带来的差异。
  6. WebSocket 应用:用 tokio-tungstenite 实现一个 WebSocket 服务器,做一个浏览器端实时聊天页面。