1计算机网络:自顶向下方法(原书第8版)

计算机网络和因特网

什么是因特网?什么是协议?

因特网组成协议层次网络边缘网络核心分组交换电路交换

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

第1章:计算机网络和因特网(Computer Networks and the Internet)

一、导读

1.1 本章学习目标

第1章是整本《计算机网络:自顶向下方法》的开篇之作,它回答了两个最基本的问题:什么是因特网?和什么是协议?。通过本章的学习,你将建立起计算机网络的全局视图,理解网络协议栈的分层模型,以及分组交换与电路交换的本质差异。

本章的核心学习目标包括:

  • 理解因特网的两种视角:作为组成部分(硬件+软件)和作为服务(基础设施)
  • 掌握协议层次模型:应用层→传输层→网络层→链路层→物理层
  • 理解网络边缘与网络核心的区别:主机运行应用程序,路由器转发分组
  • 掌握分组交换与电路交换的对比:统计复用 vs 预留资源
  • 了解 ISP 的层次结构:Tier-1、Tier-2、接入ISP 的关系
  • 理解性能指标:带宽、时延、丢包率、吞吐量

1.2 为什么第一章如此重要

很多初学者觉得第一章"太泛",急于跳到具体的协议细节。这种想法是错误的。正如建筑设计师需要理解整栋建筑的结构蓝图,网络工程师也需要理解网络的完整图景。没有全局观,后续学习就容易陷入"只见树木,不见森林"的困境。

Kurose 和 Ross 反复强调一个观点:网络是一个分层的协议栈,每一层都为上层提供服务。第一章正是这种视角的集中体现——它用一个简单的 Web 请求串联起了 HTTP、TCP、IP、以太网等几乎所有核心协议。

1.3 核心问题引导

在阅读本章时,请带着以下问题思考:

当你在浏览器输入 URL 并按下回车时,到底发生了什么?

一个 HTTP 请求是如何从你的电脑到达 Google 服务器的?

为什么分组交换比电路交换更适合互联网?

路由器在网络中扮演什么角色?

ISP 之间是如何互联的?

带宽和时延有什么区别?为什么两者都重要?


二、核心概念详解

2.1 什么是因特网

因特网可以从两个角度来描述:

2.1.1 组成视角(硬件+软件)

从组成部分来看,因特网是一个全球性的计算机网络,由以下要素组成:

  • 网络边缘:连接在因特网上的所有主机(end systems/hosts),包括PC、服务器、智能手机、IoT设备等
  • 网络核心:由路由器(router)和链路(link)组成的网状结构,负责将分组从源转发到目的
  • 接入网络:将主机连接到网络核心的物理介质,包括WiFi、光纤、蜂窝网络等
[主机]          [主机]
           \            /
        [路由器]----[路由器]
           |            |
        [路由器]----[路由器]
           /            \
        [主机]          [主机]

网络边缘的主机通常被称为端系统(end system),它们运行着各种网络应用程序,如 Web 浏览器、电子邮件客户端、视频流媒体播放器等。端系统通过接入网络(access network)连接到网络边缘的路由器。接入网络有多种类型:住宅接入(如 DSL、光纤到户 FTTH)、企业接入(如以太网)、无线接入(如 WiFi、4G/5G 蜂窝网络)等。

2.1.2 服务视角(基础设施)

从服务角度来看,因特网是一个为分布式应用提供通信服务的基础设施。它向上层应用提供两种服务:

  • 可靠传输服务:基于 TCP,保证数据无差错、按序、不丢失、不重复地送达
  • 尽最大努力传输服务:基于 UDP,不保证任何服务质量,但延迟更低

这两种服务对应了两种不同的应用需求。Web 浏览、文件传输、电子邮件等应用需要可靠传输;而实时视频通话、在线游戏等应用则更看重低延迟,可以容忍少量丢包。

2.2 协议层次模型

协议(protocol)定义了通信实体之间消息的格式和规则。因特网采用五层协议栈:

层次功能核心协议数据单元
应用层支持网络应用HTTP, SMTP, DNS, FTP报文(Message)
传输层端到端数据传输TCP, UDP报文段(Segment)
网络层路由和寻址IP, OSPF, BGP数据报(Datagram)
链路层相邻节点传输以太网, WiFi, PPP帧(Frame)
物理层比特传输光纤, 铜缆, 无线电波比特(Bit)

每一层都向上一层提供"服务",同时利用下一层提供的服务。这种分层设计使得每一层可以独立演进,而不影响其他层。

值得注意的是,OSI 七层模型虽然在教学和研究中被广泛引用,但因特网实际使用的是五层模型(不包含表示层和会话层)。此外,还有一种常见的四层模型(将物理层和数据链路层合并),在实际工程中也很常见。

2.3 分组交换 vs 电路交换

2.3.1 电路交换(Circuit Switching)

电路交换在通信前需要预留端到端的资源(带宽、时隙),类似于传统电话网络:

  • 优点:保证带宽,延迟可预测
  • 缺点:资源利用率低,建立连接慢
A ──── 预留 ──── B
│    (独占链路)    │
└── 资源被浪费 ──┘

电路交换的典型例子是传统的 PSTN(公共交换电话网络)。在通话建立时,交换机在通信双方之间建立一条专用的物理通路,通话期间这条通路被独占,即使双方都不说话,资源也不会释放。这种方式虽然保证了通话质量,但资源利用率极低。统计表明,一次典型的电话通话中,实际的通话时间仅占总时长的约 10%,其余 90% 的时间资源都被浪费了。

2.3.2 分组交换(Packet Switching)

分组交换将数据分成小块(分组),每个分组独立传输,共享链路资源:

  • 优点:统计复用,资源利用率高
  • 缺点:可能产生拥塞和丢包,延迟不确定
A → [分组1] → [分组2] → [分组3] → B
      ↓         ↓         ↓
   路由器1    路由器2    路由器3

因特网采用分组交换,这是它成功的关键设计决策之一。分组交换的核心思想是统计复用(statistical multiplexing):多个通信流共享同一条链路,只有在发生拥塞时才需要排队等待。这与电路交换的"预留资源"形成鲜明对比。

分组交换还有一个重要的特点:存储转发(store-and-forward)。路由器必须接收到整个分组后,才能开始向下一条链路转发。这意味着分组在每一跳都会经历一定的处理时延。

2.4 网络中的时延、丢包和吞吐量

分组在网络中经历四种时延:

节点处理时延(d_proc):检查比特、决定输出链路

排队时延(d_queue):等待输出链路空闲

传输时延(d_trans):将分组推送到链路上,= L/R(L=分组长度,R=链路带宽)

传播时延(d_prop):比特在链路上传播,= d/s(d=链路长度,s=传播速度)

总时延 = d_proc + d_queue + d_trans + d_prop

总时延 = d_proc + d_queue + d_trans + d_prop
              ↓          ↓          ↓          ↓
           微秒级      可变       毫秒级      毫秒级

在这四种时延中,排队时延是最值得关注的。它是唯一具有随机性的时延,取决于网络流量的到达模式。当流量强度(La/R,其中 L 是分组长度,a 是分组到达速率,R 是链路带宽)接近 1 时,排队时延会急剧增加,这就是网络拥塞的本质。

吞吐量(throughput)是另一个重要指标,表示接收方实际收到数据的速率。吞吐量受限于瓶颈链路(bottleneck link)——路径上带宽最小的那段链路。


三、深入分析

3.1 ISP 的层次结构与网络互联

因特网不是由单一组织运营的,而是由多个 ISP(Internet Service Provider)互联而成:

  • Tier-1 ISP:全球性骨干网(AT&T, Sprint, Level3),彼此对等互联
  • Tier-2 ISP:区域性网络,连接到 Tier-1 并为其提供接入
  • Tier-3 ISP / 接入 ISP:直接连接终端用户(如家庭宽带、校园网)

IXP(Internet Exchange Point)是 ISP 之间交换流量的物理位置。近年来,内容提供商(如 Google、Netflix、Facebook)也建设了自己的专用网络,直接与 Tier-1 ISP 对等互联,以减少对用户访问的延迟。

3.2 协议分层的设计哲学

协议分层的核心思想是模块化:

  • 每一层只关心自己的功能,不关心其他层的实现
  • 层与层之间通过明确定义的接口交互
  • 任何一层的变化不影响其他层

这种设计使得因特网能够持续演进。例如,从 IPv4 到 IPv6 的过渡可以在网络层独立完成,而不需要修改应用层协议。但分层也有缺点:某一层的功能可能需要在多层中重复实现,降低了效率。

3.3 网络安全威胁概览

因特网面临多种安全威胁:

  • 恶意软件:病毒、蠕虫、木马
  • DoS/DDoS 攻击:洪水攻击、放大攻击
  • 分组嗅探:在共享介质上截获数据
  • IP 欺骗:伪造源地址发送分组

这些威胁在第一章只是概览性介绍,后续第9章将深入讲解安全机制和防御方法。


四、实践案例

4.1 案例一:使用 traceroute 观察路由路径

bash
# Linux/Mac
traceroute www.google.com

# Windows
tracert www.google.com

traceroute 会显示分组从源到目的经过的所有路由器,以及每一跳的时延。通过观察这些时延,可以大致判断分组经过了哪些地理区域,以及是否存在异常延迟的路由节点。traceroute 的原理是利用 IP 数据报的 TTL 字段:第一次发送 TTL=1 的探测包,第一跳路由器将 TTL 减为 0 后丢弃并返回 ICMP Time Exceeded;第二次发送 TTL=2 的探测包,第二跳路由器返回 ICMP Time Exceeded,依此类推。

4.2 案例二:使用 ping 和 Wireshark 分析网络性能

bash
# 使用 ping 测量 RTT
ping -c 10 www.google.com

# 使用 Wireshark 抓包
sudo wireshark

ping 测量的是往返时延(RTT),包括传输时延、传播时延和处理时延。Wireshark 是最常用的网络抓包工具,可以观察网络中传输的所有分组。通过结合使用这两个工具,可以深入理解分组在网络中的传输过程。


五、常见误区

5.1 误区一:"因特网就是万维网"

因特网(Internet)是基础设施,万维网(WWW)是运行在因特网上的一个应用。因特网还支持电子邮件、文件传输、即时通讯等多种应用。

5.2 误区二:"带宽越大,速度越快"

带宽(bandwidth)是链路的最大传输速率(bps),但实际传输速度还受时延、丢包、拥塞等因素影响。高带宽低时延的链路才是真正"快"的链路。例如,一条 1Gbps 但延迟 500ms 的卫星链路,其实际传输体验可能不如一条 100Mbps 但延迟 5ms 的光纤链路。

5.3 误区三:"分组交换总是优于电路交换"

分组交换在资源利用率上确实优于电路交换,但在某些场景下电路交换更合适。例如,对于需要恒定带宽的实时语音通信,电路交换能保证质量,而分组交换可能因拥塞导致语音中断。

5.4 难点:理解排队时延

排队时延是四种时延中最不可预测的,它取决于到达流量和链路容量的比值。当流量接近链路容量时,排队时延会急剧增加,这就是拥塞的本质。


六、本章小结

第1章建立了计算机网络的全局视图:

因特网是一个由主机、路由器和链路组成的全球性网络

协议栈分为五层:应用层、传输层、网络层、链路层、物理层

分组交换是因特网的核心设计,通过统计复用提高资源利用率

时延和丢包是网络性能的关键指标,受排队和拥塞影响

ISP 层次结构使得全球数十亿设备能够互联互通

后续章节将自顶向下逐层深入:第2章讲解应用层协议,第3章讲解传输层的 TCP/UDP,第4-5章讲解网络层的数据平面和控制平面,第6章讲解链路层的以太网和 WiFi。


七、思考题

假设你有两个应用,每个应用在通信过程中需要传输大量数据。两个应用同时通信,且网络中只有这两个应用。在这种情况下,分组交换和电路交换哪个更合适?为什么?

在分组交换网络中,如果所有主机都使用 TCP 发送数据,那么拥塞控制是由谁负责的?网络本身是否参与拥塞控制?

考虑一个场景:主机 A 通过一条 10Mbps 的链路向主机 B 发送数据,中间经过一个路由器。主机 A 到路由器的链路带宽为 100Mbps,路由器到主机 B 的链路带宽为 10Mbps。请问这条路径的吞吐量是多少?瓶颈链路在哪里?

为什么说协议分层是一种"模块化"设计?这种设计有什么优点和缺点?请举例说明。

假设你正在开发一个实时视频通话应用,你会选择 TCP 还是 UDP 作为传输层协议?请从时延、丢包、可靠性等角度分析你的选择。


1/9计算机网
0%