1Computer Networks: A Systems Approach(第6版)

基础概念

网络入门

网络架构协议分层性能指标互联网模型

🎯 AI 时代的学习建议:不要只读理论。理解这一章的设计动机(为什么需要这个概念?)和边界条件(什么情况下会失效?)。当 AI 生成的代码涉及这些概念时,你能判断它是否用对了场景。AI 能帮你总结内容,但无法替代你亲手阅读、思考、建立直觉的过程。

第1章:基础概念(Foundations)

一、导读

1.1 本章学习目标

第1章从系统设计的角度建立计算机网络的整体框架。不同于传统的自顶向下或自底向上方法,Peterson 和 Davie 以互联网的实际架构为线索,讲解每一层的设计决策和工程权衡。

本章核心学习目标:

  • 理解网络架构的分层模型:OSI 参考模型 vs TCP/IP 模型
  • 掌握网络性能的基本度量:带宽、延迟、带宽延迟积、吞吐量
  • 理解协议分层的设计哲学:为什么需要分层?每层解决什么问题?
  • 掌握电路交换 vs 分组交换:统计复用的优势与代价
  • 了解互联网的组织结构:ISP 层次、IXP、内容分发网络

1.2 为什么本章如此重要

Peterson 的书强调"为什么这样设计"而非仅仅"是什么"。理解设计决策背后的工程权衡,是网络工程师和系统架构师的核心能力。

1.3 核心问题引导

为什么互联网选择了分组交换而非电路交换?

协议分层模型的"违反层次"操作(如 TCP 的 Nagle 算法)为什么有时是必要的?

带宽延迟积如何影响协议设计?


二、核心概念详解

2.1 网络的性能度量

带宽 (Bandwidth):
- 数据速率: bits per second (bps)
- 现代网络: 1 Gbps (以太网), 10 Gbps, 100 Gbps

延迟 (Latency):
- 传播延迟: distance / speed_of_light ≈ 5 μs/km (光纤)
- 传输延迟: packet_size / bandwidth
- 排队延迟: 取决于网络负载
- 处理延迟: 路由查找、校验和计算

带宽延迟积 (BDP):
BDP = bandwidth × RTT
例: 1 Gbps × 100 ms = 100 Mbit = 12.5 MB
含义: 管道中可以同时存在的数据量
影响: TCP 窗口大小必须 ≥ BDP 才能充分利用带宽

吞吐量 (Throughput):
- 实际数据传输速率
- 通常 < 带宽(因为丢包、拥塞、协议开销)

丢包率 (Packet Loss Rate):
- 典型: < 0.01% (有线), 1-10% (无线)
- 影响 TCP 性能(触发拥塞控制)

2.2 分组交换 vs 电路交换

电路交换:
- 建立连接时预留带宽
- 数据传输时独占资源
- 优势: 保证延迟和带宽
- 劣势: 资源利用率低(突发流量时浪费)
- 代表: 传统电话网络

分组交换:
- 数据被分割为分组,每个分组独立路由
- 统计复用: 多个流共享链路
- 优势: 资源利用率高
- 劣势: 延迟不确定(排队延迟变化)
- 代表: 互联网

统计复用的数学:
n 个用户,每个需要带宽 b,链路总带宽 B
电路交换: n ≤ B/b
分组交换: n 可以 > B/b(因为用户不会同时发送)
但需要保证: P(活跃用户 > B/b) < ε

2.3 协议分层

TCP/IP 四层模型:
┌─────────────────────────┐
│    应用层 (HTTP, DNS)    │  ← 端到端:进程到进程
├─────────────────────────┤
│   传输层 (TCP, UDP)     │  ← 端到端:主机到主机
├─────────────────────────┤
│   网络层 (IP)           │  ← 逐跳:路由选择
├─────────────────────────┤
│   链路层 (Ethernet)     │  ← 逐跳:相邻节点
└─────────────────────────┘

每层的核心功能:
- 应用层: 定义应用协议(HTTP 的请求/响应格式)
- 传输层: 提供端到端的可靠传输(TCP)或尽力传输(UDP)
- 网络层: 将分组从源路由到目的(IP 寻址和路由)
- 链路层: 在相邻节点间传输帧(以太网、WiFi)

端到端原则 (End-to-End Principle):
功能应该在通信端点实现,而非在网络中间节点
例: 可靠性由 TCP 在端点保证,IP 层不保证

三、实战案例

3.1 案例一:计算带宽延迟积

python
def calculate_bdp(bandwidth_gbps, rtt_ms):
    """计算带宽延迟积"""
    bandwidth_bps = bandwidth_gbps * 1e9
    rtt_sec = rtt_ms / 1000
    bdp_bits = bandwidth_bps * rtt_sec
    bdp_bytes = bdp_bits / 8
    return bdp_bytes

# 不同场景的 BDP
scenarios = [
    ("数据中心内", 25, 0.01),      # 25 Gbps, 0.01 ms RTT
    ("同城跨机房", 10, 1),         # 10 Gbps, 1 ms RTT
    ("跨洋海底光缆", 100, 150),    # 100 Gbps, 150 ms RTT
    ("卫星链路", 50, 600),         # 50 Gbps, 600 ms RTT
]

for name, bw, rtt in scenarios:
    bdp = calculate_bdp(bw, rtt)
    print(f"{name}: BDP = {bdp/1024/1024:.1f} MB")

# 输出:
# 数据中心内: BDP = 3.1 MB
# 同城跨机房: BDP = 1.2 MB
# 跨洋海底光缆: BDP = 1862.6 MB
# 卫星链路: BDP = 3725.3 MB

# TCP 窗口大小建议:
# 数据中心: 默认 256 KB 足够
# 跨洋: 需要设置 net.core.rmem_max = 4 MB 以上

四、本章小结

分组交换通过统计复用提高资源利用率,但引入了不确定的延迟

带宽延迟积决定了充分利用链路所需的缓冲区大小

协议分层简化了设计,但端到端原则提醒我们功能应放在正确的位置


五、思考与练习

思考题

为什么 VoIP 选择 UDP 而非 TCP?

带宽延迟积大的网络中,TCP 的默认窗口大小为什么不够?

编程练习

实现一个简单的分组交换模拟器,统计不同负载下的延迟和丢包率。

计算在给定 BDP 下,TCP 需要的最小窗口大小。


1/7基础概念
0%