408 · COMPUTER NETWORK · 谢希仁 完整版
28 节课,从五层模型起步:物理层编码、链路层 CRC 计算、IP 与子网划分、TCP 三次握手 + 滑动窗口 + 拥塞控制、DNS / HTTP 完整解析,每一项都给出算例和代码。
// agenda
01 · 体系结构
每下一层 → 加自己的 header;每上一层 → 剥掉。同层对等通信,实际数据沿栈"折跃"。
| 层 | 设备 | 转发依据 |
|---|---|---|
| 物理 | 中继器 / 集线器 | 仅放大信号 |
| 链路 | 网桥 / 交换机 | MAC 地址表 |
| 网络 | 路由器 | IP 路由表 |
| 传输+ | 网关 / 防火墙 | 协议转换 / 端口 |
02 · 物理层
带宽 3kHz、S/N = 30 dB(千倍):
香农容量 = 3000 × log₂(1001) ≈ 30 kbps
02 · 多路复用
| 类型 | 原理 | 例 |
|---|---|---|
| FDM 频分 | 不同频段同时传 | 调频广播、ADSL |
| TDM 时分 | 不同时隙轮流 | 电话、E1 |
| WDM 波分 | 光纤不同波长 | 骨干光纤 |
| CDM 码分 | 正交码区分 | CDMA 移动通信 |
同步 TDM:每个用户固定时隙,空闲也不分配 → 浪费。
统计 TDM:按需分配(信元 / 数据包)→ 高效,但需排队。
| 介质 | 带宽 | 距离 / 用途 |
|---|---|---|
| 双绞线 UTP | 100 Mbps - 10 Gbps | 百 m / 局域网 |
| 同轴电缆 | 类似 | CATV、早期以太 |
| 单模光纤 | 40 Gbps+ | 数十 km / 长距 |
| 多模光纤 | 10 Gbps | 2 km / 短距 |
| 无线 Wi-Fi | 54 Mbps - 9 Gbps | 百 m / 室内 |
| 微波 / 卫星 | 多种 | 跨海 / 偏远 |
5e/6 类双绞线是局域网默认;单模光纤适合干线。
03 · 数据链路
M(x) · 2^r = Q(x) · G(x) + R(x)
发送 = (M · 2^r) XOR R
收方用 G(x) 除整帧,余数 = 0 → 无错
数据 M = 101001(6 位),G = 1101(r=3 位余数)
M · 2³ = 101001 000
101001000 ÷ 1101 =
1101
────
11110
1101
────
0111
0
────
1110
1101
────
0110
0
────
1100
1101
────
0001 ← R = 001
发送 = 101001 001 (帧)
接收 = 101001 001 ÷ 1101 → 余数 0 → OK
CRC 只能检错,不能纠错。多项式越长检错能力越强。
03 · 可靠传输
发一帧 → 等 ACK → 再发下一帧。超时则重传。简单但信道利用率低。
U = T_d / (T_d + RTT)
U = W·T_d / (T_d + RTT)
U ≤ 1 → W ≥ (T_d + RTT)/T_d
// 窗口够大才能填满"飞行中"
03 · MAC
纯 ALOHA:想发就发,冲突后随机退避。利用率最高 18.4%。
分槽 ALOHA:只在固定时隙发,利用率 36.8%。
04 · 局域网
10 Mbps 以太网:双向传播延迟 51.2μs → 512 bit = 64 B。
发送时间 ≥ 2×τ 才能"听到"冲突。
0A:1B:2C:3D:4E:5F
└── 前 3 字节 OUI ── 厂商分配
后 3 字节 ── 厂商内部唯一
最低字节最低 2 位:
bit 0: 单播 0 / 多播 1
bit 1: 全球 0 / 本地 1
特殊:
FF:FF:FF:FF:FF:FF 广播
01:00:5E:xx:xx:xx 多播
IPv6 多播: 33:33:xx:xx:xx:xx
04 · 局域网设备
| 集线器 | 交换机 | |
|---|---|---|
| 层次 | 物理 | 链路 |
| 转发 | 广播 | 按 MAC 表精确 |
| 冲突域 | 所有端口共一个 | 每端口独立 |
| 广播域 | 所有端口共一个 | 所有端口共一个 |
| 带宽 | 共享 | 独享 |
把一台物理交换机划分成多个逻辑广播域。同 VLAN 才能直接通信,跨 VLAN 必须经过三层设备(路由器或三层交换机)。
DST | SRC | 802.1Q Tag | Type | Data | FCS Tag (4B): TPID 16b = 0x8100 // 标识为 VLAN 帧 PRI 3b // 优先级 0-7 CFI 1b VID 12b // VLAN ID 0-4095
交换机之间若有冗余链路会形成环,广播帧无限循环。STP 通过选根 / 阻塞冗余端口构造无环生成树。
04 · WLAN
A、C 在 B 的覆盖内,但 A、C 之间被障碍隔开。A、C 同时发,都在 B 处冲突,自己却"听不见"对方 → CSMA 失效。
暴露终端:A 听到 B 在发,于是不发,但其实自己的目标方向是 D,本可同时进行。
含 4 个地址字段(源 / 目 / 发送 AP / 接收 AP)。
序号字段用于排重。
a/b/g/n/ac/ax;速率从 11 Mbps → 9.6 Gbps(Wi-Fi 6)。
05 · 网络层
原 IP 数据报:3800 B 数据 + 20 B 首部;途经 MTU = 1500 的链路。
最大数据 / 片 = (1500 − 20) = 1480 B 分片偏移单位 = 8 B → 1480/8 = 185 3800 → 三片: 片1: 1480 B offset=0 MF=1 片2: 1480 B offset=185 MF=1 片3: 840 B offset=370 MF=0 每片都有完整 20 B 首部 Identifier 相同; Total Length 各异
重组由目的主机完成,路由器不重组。
设置定时器:超时 → 丢弃整个数据报。
05 · IP 地址
| 类 | 首位 | 网络号 | 范围 | 主机数 |
|---|---|---|---|---|
| A | 0 | 8 位 | 1-126 | 2²⁴-2 |
| B | 10 | 16 位 | 128-191 | 2¹⁶-2 |
| C | 110 | 24 位 | 192-223 | 2⁸-2 |
| D | 1110 | — | 224-239 | 多播 |
| E | 1111 | — | 240-247 | 保留 |
主机数 −2:去掉网络号本身(全 0)和广播地址(全 1)。
| 地址 | 含义 |
|---|---|
| 0.0.0.0 | 本网络上的本主机(初始 DHCP) |
| 0.0.0.0/0 | 默认路由 |
| 255.255.255.255 | 本网广播(路由器不转发) |
| net.255.255.255 | 定向广播(指定网络的所有主机) |
| 127.0.0.0/8 | 本机环回 |
| 169.254/16 | APIPA 链路本地 |
05 · 子网
原: 192.168.10.0/24 (C 类)
要划分 6 个子网
需借 ⌈log₂6⌉ = 3 位
新掩码: /27 = 255.255.255.224
每子网容主机 = 2⁵ − 2 = 30
子网 0: 192.168.10.0 范围 .0 – .31
广播 .31, 可用 .1–.30
子网 1: 192.168.10.32 .32–.63
子网 2: 192.168.10.64
子网 3: 192.168.10.96
子网 4: 192.168.10.128
子网 5: 192.168.10.160
(可用 6 个, 实际划出 8 个)
不同子网用不同长度掩码,按需分配。例:A 部门要 60 主机 → /26;B 部门要 30 → /27;C 部门要 14 → /28。
IP 与掩码按位与 → 子网号。
IP = 192.168.10.130 Mask = 255.255.255.192 (/26) AND = 192.168.10.128 子网号 子网范围: .128 – .191 广播: .191 可用主机: .129 – .190 共 62 台
把多个连续 C 类合并:192.168.0.0/22 = 4 个 C → 一条路由项。
路由聚合 → 减少路由表大小。
05 · 转发
| 目的网络 | 掩码 | 下一跳 |
|---|---|---|
| 0.0.0.0 | 0.0.0.0 | R1 (默认) |
| 192.168.0.0 | 255.255.0.0 | R2 |
| 192.168.1.0 | 255.255.255.0 | R3 |
| 192.168.1.128 | 255.255.255.192 | R4 |
收到 IP = 192.168.1.150:
同子网的目的 → 直接 ARP 拿对方 MAC;不同子网 → ARP 拿网关 MAC,由网关转发。
0.0.0.0/0 表示"匹配所有"。当无具体路由时使用。
05 · 地址扩展
出口路由器把"私网 IP + 端口"映射到"公网 IP + 不同端口",记录在 NAT 表中。
优点:解决 IPv4 不够用;缺点:破坏端到端,P2P 难穿透。
2001:0DB8:0000:0000:0000:FF00:0042:8329 简化: 连续 0 段用 :: 一次 → 2001:DB8::FF00:42:8329 特殊: ::1 / 128 本机环回 ::/0 默认路由 FE80::/10 链路本地 FF00::/8 多播 2000::/3 全球单播
06 · 路由协议
| RIP | OSPF | BGP | |
|---|---|---|---|
| 算法 | 距离向量 | 链路状态 | 路径向量 |
| 度量 | 跳数 ≤ 15 | 带宽 cost | 策略 |
| 范围 | 小型内网 | 大型 AS 内 | AS 之间 |
| 更新方式 | 30s 全表 | 有变化才发 | 有变化才发 |
| 消息 | UDP 520 | IP 89 | TCP 179 |
最大跳数 15 → 16 不可达。"计数到无穷"问题(环路时跳数无限增大)。
解决:水平分割、毒性反转、抑制定时器。
支持多区域划分(area 0 是骨干),减少 LSA 范围。
06 · 网络层辅助
解决"IP → MAC"映射。
免费 ARP:广播自己的 IP/MAC,检测 IP 冲突。
RARP:反向 ARP,由 MAC 求 IP(早期无盘工作站)。
报告错误 / 查询。
不会发对:广播包、ICMP 差错本身、片偏移非 0 的片。
动态分配 IP + 网关 + DNS。
基于 UDP;客户 68,服务器 67。
租约到期前 1/2 / 7/8 续约。
ARP / ICMP 在网络层(ARP 帧的 Type=0x0806,ICMP 协议号 1);DHCP 在应用层(基于 UDP)。
易错:ARP 不是链路层。
07 · 传输层
源 IP (4B) | 目的 IP (4B) 0 (1B) | 协议=17 (1B) | UDP 长度 (2B) + UDP 首部 + 数据 计算校验和时拼上, 发送时不实际传 作用: 检测 IP 是否传错收件人
复用:多进程共享一个 UDP/IP 出去;分用:靠 (协议, 端口) 派发到对应进程。
07 · TCP
| 位 | 意义 |
|---|---|
| URG | 紧急数据上交 |
| ACK | Ack Number 字段有效 |
| PSH | 立即上交应用 |
| RST | 异常 → 复位连接 |
| SYN | 建立连接请求 |
| FIN | 终止连接 |
08 · 连接
为什么三次?
SYN 攻击:发大量 SYN 不完成握手,耗光服务器资源。
解决:SYN Cookie。
为什么四次?TCP 全双工,每方关一个方向(自己发完 FIN)。中间被动方可能还有数据要传,所以 FIN/ACK 分两组。
08 · 11 个状态
`netstat -ant` 显示当前所有 TCP 连接状态;大量 TIME_WAIT 通常没问题,CLOSE_WAIT 多 → 应用层没正确 close()。
09 · 流量控制
接收方在 ACK 中通告 rwnd(剩余空间),发送方维护"发送窗口 ≤ rwnd",发完就等 ACK。
接收方通告 rwnd=0 后,再恢复时若那个 ACK 丢失 → 双方僵持。
解决:持续计时器,发送方每隔一段时间发 1 字节探测包,强制接收方重新通告 rwnd。
问题:接收方刚腾出一点空间就通告小 rwnd → 发送方发小包 → 效率低。
解决:
发送窗口 swnd = min(cwnd, rwnd)
// 流量 vs 拥塞,取小者
流量控制保护接收方不被淹没;拥塞控制保护网络不被淹没。
09 · 拥塞
10 · 应用层
. (根) ├── com │ ├── google │ │ ├── www │ │ └── mail │ └── microsoft ├── cn │ └── edu │ └── tsinghua └── org 完整域名 www.google.com. 从右到左由大到小
用户 → 本地 DNS (递归)
本地 DNS → 根 DNS (迭代)
根 → 返回 .com 服务器
本地 DNS → .com 服务器
→ 返回 google.com 权威 NS
本地 DNS → google.com 权威
→ 返回 IP
返回过程沿原路返回, 缓存逐级
UDP 53 端口;查询包小于 512 B 时用 UDP,否则用 TCP(区域传送也走 TCP)。
DNS 缓存有 TTL,过期才重新查询。
10 · HTTP
// 请求 GET /index.html HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 Accept: text/html Cookie: SESSID=abc123 <空行> // 响应 HTTP/1.1 200 OK Date: Mon, 23 May 2026 ... Server: nginx Content-Type: text/html Content-Length: 1234 <空行> <!DOCTYPE html>...
| 类 | 含义 | 例 |
|---|---|---|
| 1xx | 信息 | 100 Continue |
| 2xx | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | 重定向 | 301 永久, 302 临时, 304 Not Modified |
| 4xx | 客户错 | 400 Bad, 401 未授权, 403 禁止, 404 NotFound |
| 5xx | 服务器错 | 500 内部错, 502 网关, 503 不可用 |
HTTP + TLS(443 端口)。TLS 握手协商对称密钥,后续数据加密 + 完整性 + 服务器身份认证。
10 · 其他应用
| 协议 | 端口 | 方向 / 用途 |
|---|---|---|
| SMTP | 25 / 587 | 发送(推送到邮件服务器) |
| POP3 | 110 | 下载到本地后默认从服务器删除 |
| IMAP | 143 | 服务器留存 + 多设备同步 |
| MIME | — | 对邮件内容的扩展(附件 / 多语言) |
发件方 → SMTP → 发件方 ISP 邮件服务器 → SMTP → 收件方 ISP 邮件服务器 ← POP3/IMAP ← 收件方读取
USER username PASS password LIST (目录列表) RETR file (下载) STOR file (上传) QUIT
// summary
| 应用 | 进程交互;HTTP/DNS/SMTP/FTP;端口 |
| 传输 | 端到端可靠;TCP/UDP;流量+拥塞 |
| 网络 | 主机到主机路由;IP/ICMP/ARP |
| 链路 | 相邻节点;以太网/MAC;CRC |
| 物理 | 比特;编码/复用 |
奈奎斯特: C = 2W log₂V
香农: C = W log₂(1+S/N)
停-等: U = T_d / (T_d + RTT)