第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 观察路由路径
# Linux/Mac
traceroute www.google.com
# Windows
tracert www.google.comtraceroute 会显示分组从源到目的经过的所有路由器,以及每一跳的时延。通过观察这些时延,可以大致判断分组经过了哪些地理区域,以及是否存在异常延迟的路由节点。traceroute 的原理是利用 IP 数据报的 TTL 字段:第一次发送 TTL=1 的探测包,第一跳路由器将 TTL 减为 0 后丢弃并返回 ICMP Time Exceeded;第二次发送 TTL=2 的探测包,第二跳路由器返回 ICMP Time Exceeded,依此类推。
4.2 案例二:使用 ping 和 Wireshark 分析网络性能
# 使用 ping 测量 RTT
ping -c 10 www.google.com
# 使用 Wireshark 抓包
sudo wiresharkping 测量的是往返时延(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 作为传输层协议?请从时延、丢包、可靠性等角度分析你的选择。