计算机网络A Top Down Approach
计算机网络与因特网
1.1 因特网是什么?
1.1.1 组成结构描述
- 因特网连接了全球数十亿计算设备,包括传统计算机、服务器、智能手机、平板电脑和物联网设备。
- 所有设备统称为“主机”或“终端系统”,2017年约有180亿设备接入,预计2022年达到285亿。
- 网络通过通信链路和分组交换机将终端系统互联。
- 数据传输时被分割为数据包,并添加头部信息。
- 分组交换机主要包括路由器和链路层交换机,分别用于核心网络和接入网络。
- 数据包在网络中经过的路径称为路由或路径。
- Cisco预测到2022年全球IP流量将达到每年近5泽字节(Zettabytes)。
- 网络服务提供商(ISP)提供多种接入方式,如宽带、局域网、移动无线等。
- ISP之间通过国家和国际层级的上层ISP互连。
- 因特网运行协议控制信息发送和接收,其中TCP和IP是最重要的两个协议。
- 因特网标准由IETF制定,文档称为RFC(请求评论),定义了TCP、IP、HTTP、SMTP等协议。
- IEEE 802委员会制定了以太网和WiFi等链路标准。
1.1.2 服务视角描述
- 因特网可看作一个为分布式应用提供服务的基础设施。
- 常见应用包括电子邮件、网页浏览、移动应用、实时交通地图、音乐/视频流、社交媒体、视频会议、多人游戏、基于位置的推荐系统等。
- 应用程序运行在终端系统上,而非网络核心的分组交换机中。
- 程序间的数据交换依赖于网络提供的服务接口——套接字(Socket)接口。
- 类比邮政服务:程序需遵循特定规则(如封装数据、指定目标地址)才能让因特网正确传输数据。
- 因特网提供多种服务供不同应用选择。
1.1.3 协议是什么?

- 协议定义了多个实体之间消息的格式、顺序及发送/接收消息时采取的动作。
- 类比人类交流中的礼仪:问候语→回应→进一步沟通。
- 如果通信双方使用不同协议,则无法正常交互。
- 网络协议由硬件或软件组件实现,例如:
- 物理链路上的比特流控制协议;
- 拥塞控制协议;
- 路由器中的路径选择协议。
- 示例:访问Web服务器时的协议流程:
- 客户端发送连接请求;
- 服务器响应连接;
- 客户端发送GET请求获取页面;
- 服务器返回页面内容。
- 协议的核心要素:消息格式、顺序、处理动作。
1.2 网络边缘
1.2.1 接入网络
家庭接入方式
- DSL:
- 使用电话线进行数据传输;
- 下行速率可达52 Mbps,上行16 Mbps;
- 采用频分复用技术分离语音和数据信号;
- 受距离限制,通常不超过5~10英里。
- 电缆接入(Cable):
- 利用有线电视网络基础设施;
- 采用混合光纤同轴(HFC)架构;
- 下行速率可达1.2 Gbps,上行100 Mbps;
- 是共享广播介质,用户并发下载会影响实际速率;
- 需要多路访问协议协调上传数据传输。
- 光纤到户(FTTH):
- 提供高达Gbps级别的接入速度;
- 包括主动光网络(AON)和被动光网络(PON)两种架构;
- PON示例:Verizon FiOS;
- 使用ONT(光网络终端)和OLT(光线路终端)完成光电转换。
- 5G固定无线接入:
- 不需要铺设物理线路;
- 使用波束成形技术从基站向家庭发送数据;
- 提供高速住宅接入;
- 与WiFi路由器集成使用。
企业与家庭LAN接入
- 以太网:
- 最常见的局域网技术;
- 用户通过双绞铜线连接至以太网交换机;
- 传输速率可达100 Mbps至10 Gbps。
- WiFi(IEEE 802.11):
- 无线局域网技术;
- 支持高达100 Mbps以上的共享传输速率;
- 广泛应用于大学、办公室、咖啡馆、家庭等场景;
- 用户需靠近接入点(通常几十米范围内)。
移动广域无线接入
- 3G / 4G LTE / 5G:
- 用于移动设备的数据通信;
- 支持消息、照片分享、移动支付、视频流等功能;
- 覆盖范围远大于WiFi(可达数十公里);
- 5G提供更高带宽和更低延迟;
- 第4代(4G)下载速率最高可达60 Mbps;
- 第5代(5G)正在部署中,支持更高速率和大规模物联网接入。
1.2.2 物理媒体
引导型介质
- 双绞线铜缆(Twisted Pair):
- 成本最低、最常用的引导型传输介质;
- 用于电话网络和以太网接入;
- 支持10 Mbps至10 Gbps速率(取决于线径和距离);
- Cat6a类电缆可在百米内实现10 Gbps。
- 同轴电缆(Coaxial Cable):
- 用于有线电视系统和互联网接入;
- 支持高数据传输速率;
- 可作为共享介质,多个终端系统共用一条电缆;
- DOCSIS标准支持下行1.2 Gbps、上行100 Mbps。
- 光纤(Fiber Optics):
- 传输光脉冲表示比特;
- 支持数十甚至数百Gbps的传输速率;
- 抗电磁干扰、低信号衰减(可达100 km);
- 适合长距离传输,广泛用于长途电话网和因特网骨干;
- OC标准速率从51.8 Mbps至39.8 Gbps(OC-1至OC-768);
- 成本较高,主要用于骨干网络和数据中心。
非引导型介质(无线)
- 地面无线电频道:
- 无需物理布线;
- 可穿透墙壁、支持移动接入;
- 根据覆盖范围分为短距(几米)、局域(十至几百米)、广域(数十公里);
- 存在路径损耗、阴影衰落、多径衰落和干扰问题;
- 应用于蓝牙、WiFi、蜂窝网络等。
- 卫星无线电频道:
- 通信卫星连接地球站;
- 接收信号后通过转发器再生并重新发射;
- 两类卫星:
- 地球同步卫星(Geostationary):位于36,000 km高空,存在约280 ms传播延迟;
- 低轨卫星(LEO):轨道高度较低,绕地运行,需多颗卫星实现连续覆盖;
- 卫星链路常用于无DSL或有线接入的偏远地区;
- LEO卫星未来可能用于互联网接入。## 1.3 网络核心
1.3.1 分组交换Packet Switching
路由器 必须接收到整个数据包之后,才能开始将它发送到下一个链路。也就是说,不能“边收边发”。
存储转发传输

- 数据包在发送前必须被完整接收。
- 发送时间计算公式为 L/R(L 为数据包大小,R 为链路速率)。
- 示例:源发送 3 个数据包时,总延迟为 4L/R。
解释
源主机有 3 个数据包,每个数据包大小为 L bits
每条链路的传输速率为 R bps (bits per second)
不考虑传播延迟(propagation delay)或排队、处理时间
使用存储转发(store-and-forward)方式进行传输
- 源开始发送数据包 1(大小为 L 位)
- 经过时间
L/R
秒后,源完成发送,路由器完全收到整个数据包 - 路由器这时才开始发送数据包 1
- 再经过
L/R
秒,目的主机收到这个数据包
👉 所以,总延迟为: \[ \text{总延迟} = \frac{L}{R} + \frac{L}{R} = \frac{2L}{R} \]
📦 多个数据包的流水传输(以 3 个为例)
- 第 1 个数据包到达目的地的时间是
2L/R
- 第 2 个数据包到达目的地的时间是
3L/R
- 第 3 个数据包到达目的地的时间是
4L/R
为什么不是每个都 2L/R?因为数据包之间是流水线式重叠发送。
- 当路由器转发第 1 个数据包时,源可以开始发送第 2 个
- 这种流水线效应减少了整体延迟
4L/R
排队延迟与丢包

输出缓冲区存储等待传输的数据包。
延迟取决于网络拥塞程度。分组在缓冲区中等着被发送,这个等待时间是不确定且可变的,取决于网络的拥塞程度。
缓冲区满时会导致数据包丢失。
类比银行排队或收费站等待。排队等候服务的顾客就像在缓冲区中的分组
如果银行空间满了,新来的人就只能被拒绝(丢包)
转发表与路由协议
当一个 分组(packet) 到达路由器时,它并不知道接下来应该去哪个方向。这就像人在路口迷路一样,不知道该往哪个出口走。
🧠 解决办法:每个路由器都有一张“转发表(forwarding table)”来查路!
- 每个终端系统有 IP 地址,路由器根据地址查找转发表。
- 转发表映射目的地址到输出链路。是一个查找表,记录着:目标地址(或部分地址) → 哪条出链路(outbound link)
- 问题:转发表是怎么设置的?路由器通过路由协议自动设置转发表。
- 路由协议的作用是:
- 交换网络中的路由信息
- 计算从每个路由器到每个目的地的最佳路径
- 然后自动设置好各个路由器的转发表
- 路由协议决定最短路径并配置转发表。
1.3.2 电路交换
在网络中,有两种主要方式来传输数据:
方式 | 特点 |
---|---|
电路交换(Circuit Switching) | 在通信开始前建立连接并预留资源 |
分组交换(Packet Switching) | 按需使用资源,无需事先预留 |
基本概念
在通信会话期间预留资源(缓存、链路带宽)。
区别于分组交换,资源不按需使用。
类比餐厅预订:提前预留桌位 vs 到达后可能需要等待。
餐厅类型 类比什么网络? 特点 需要提前预订的餐厅 电路交换 虽然要提前打电话预约,但到了直接入座 不需要预约的餐厅 分组交换 省事,但可能到了现场要排队等位
多路复用技术
- 频分多路复用 (FDM):
- 频率谱划分为多个频段。
- 每个连接独占一个频段。
- 时分多路复用 (TDM):
- 时间划分为帧,每帧包含多个时隙。
- 每个连接占用固定时隙。
- 传输速率为帧率 × 每时隙比特数。
分组交换 vs 电路交换
- 分组交换优势:
- 更高效共享传输容量。
- 实现更简单、成本更低。
- 支持突发流量。
- 电路交换优势:
- 提供可预测的端到端延迟。
- 适合实时服务(如电话、视频会议)。
- 示例分析表明分组交换在统计上优于电路交换。
1.3.3 网络的网络结构
网络结构演进
- 结构 1:所有接入 ISP 连接单一全球骨干 ISP。
- 结构 2:多个全球骨干 ISP 竞争。
- 结构 3:引入区域 ISP 和 Tier-1 ISP。
- 结构 4:增加 PoP、多宿主、对等互联和 IXP。
- 结构 5:加入内容提供商网络(如 Google)。
对等互联与 IXPs
- 同级 ISP 可直接对等互联以减少费用。
- 对等通常免结算费用。
- 第三方建立 IXP 提供多个 ISP 的对等平台。
- 全球已有超过 600 个 IXP。
内容提供商网络
- 如 Google 自建私有网络,连接至较低层级 ISP。
- 减少向高层 ISP 支付费用。
- 更好控制服务交付质量。
- 仍需连接至 Tier-1 ISP 以覆盖更多用户。
1.4 分组交换网络中的延迟、丢包与吞吐量
1.4.1 分组交换网络中的延迟概述
延迟类型

- 处理延迟 (dproc):
- 检查数据包头部、错误检测。
- 高速路由器中通常为微秒级。
- 排队延迟 (dqueue):
- 等待传输的时间。
- 依赖流量强度和到达模式。
- 传输延迟 (dtrans):
- 将数据包推入链路所需时间。
- 计算公式为 L/R。
- 传播延迟 (dprop):
- 比特从一个路由器传播到下一个的时间。
- 与距离成正比,速度约为光速的 2/3。
总节点延迟公式
- dnodal = dproc + dqueue + dtrans + dprop
类比理解
- 高速公路类比:
- 路程 = 传播延迟。
- 收费站处理 = 传输延迟。
- 车辆车队 = 数据包序列。
1.4.2 排队延迟与丢包
排队延迟特性
- 随流量强度 La/R 变化。
- 当 La/R > 1 时,队列无限增长,延迟趋近无穷。
- 平均排队延迟随流量强度接近 1 而迅速上升。
丢包机制
- 队列容量有限,满时丢弃新到达的数据包。
- 用户视角表现为数据包进入网络但未到达目的地。
- 丢包概率随流量强度增加而上升。
1.4.3 端到端延迟
总延迟计算
- dend-end = N × (dproc + dtrans + dprop)
- 扩展公式考虑异构延迟和平均排队延迟。
Traceroute 工具
- 测量路径及各跳延迟。
- 示例输出显示 14 个中间路由器及其往返延迟。
- 可观察跨大西洋光纤链路带来的显著传播延迟。
1.4.4 网络吞吐量
定义与计算
- 瞬时吞吐量:接收端每秒接收比特数。
- 平均吞吐量:文件大小 F / 总传输时间 T。
- 影响因素包括瓶颈链路速率、并发流量等。
示例分析
- 两链路网络:吞吐量 = min{Rs, Rc}
- N 条链路网络:吞吐量 = min{R1, R2, …, RN}
- 核心网过载:若共享链路 R 为瓶颈,吞吐量 = R / 下载数量。
现实网络影响因素
- 核心网通常高带宽,瓶颈常在接入网。
- 多用户下载时共享链路可能导致吞吐下降。## 1.5 协议层次及其服务模型
1.5.1 分层架构
航空系统的类比
- 将航空系统功能划分为多个层级,如购票、行李托运、登机口、起飞降落、航线调度等。
- 每一层通过本层操作和下层服务实现特定功能,例如登机层使用跑道到跑道的运输服务完成乘客上下飞机。
网络协议的分层
- 网络协议也采用分层结构,每层提供特定服务并依赖下层服务。
- 分层优势:模块化设计便于更新与维护;改变某层实现不影响其他部分。
- 缺点:可能重复实现底层功能(如链路层与端到端错误恢复);跨层信息需求破坏分层隔离。
1.5.2 因特网协议栈
五层模型
- 应用层:
- 包含HTTP、SMTP、FTP等协议;
- 提供Web请求、电子邮件、文件传输等功能;
- DNS用于域名解析为IP地址。
- 传输层:
- 使用TCP或UDP协议;
- TCP提供可靠连接、流量控制、拥塞控制;
- UDP提供无连接、不可靠传输。
- 网络层(IP层):
- 负责将数据报从源主机传送到目的主机;
- IP协议定义数据报格式及路由器处理方式;
- 包含多种路由协议决定路径。
- 链路层:
- 在相邻节点间传输帧;
- 支持以太网、WiFi、DOCSIS等协议;
- 不同链路可能使用不同链路层协议。
- 物理层:
- 传输比特流;
- 依赖具体传输介质(双绞线、光纤等);
- Ethernet有多种物理层标准适配不同介质。
1.5.3 封装过程
- 数据在发送端逐层封装,添加各层头部信息。
- 应用层消息 → 传输层添加Ht生成段 → 网络层添加Hn生成数据报 → 链路层添加Hl生成帧。
- 接收端逐层剥离头部,还原原始数据。
- 类比:公司内部备忘录通过多层信封封装邮寄,接收方逐步拆封。
1.6 网络攻击
常见安全威胁
恶意软件感染
- 网络上传输的数据可能包含病毒、蠕虫、木马等恶意程序;
- 感染后可能导致文件删除、隐私窃取、加入僵尸网络;
- 自我复制机制使传播速度呈指数级增长。
拒绝服务攻击(DoS/DDoS)
- 漏洞攻击:向目标发送精心构造的数据包导致崩溃。
- 带宽洪水攻击:发送大量数据包阻塞目标访问链路。
- 连接洪水攻击:建立大量虚假TCP连接耗尽资源。
- DDoS利用僵尸网络发起分布式攻击,更难检测与防御。
数据包嗅探
- 在无线或广播环境中被动监听所有传输数据;
- Wireshark等工具可轻松捕获敏感信息;
- 加密是主要防御手段。
欺骗攻击
- 构造虚假源地址的数据包进行伪装;
- 可能误导路由器修改转发表;
- 需要端到端身份验证机制防范。
1.7 计算机网络与因特网的发展历史
1.7.1 分组交换技术的诞生(1961–1972)
- Leonard Kleinrock提出排队理论支持分组交换;
- Paul Baran(Rand Institute)与Donald Davies(NPL)独立研究分组交换;
- ARPAnet于1969年部署首个节点,成为因特网前身;
- 1972年推出首个主机间通信协议NCP;
- Ray Tomlinson发明电子邮件系统。
1.7.2 专用网络与互联网络(1972–1980)
- 出现ALOHANet、Telenet、Cyclades等私有网络;
- Cerf与Kahn提出互联网架构,开发TCP/IP协议;
- TCP早期版本整合可靠传输与转发功能;
- 后期分离出IP与UDP协议;
- ALOHA协议启发以太网发展;
- Metcalfe与Boggs开发以太网奠定局域网基础。
1.7.3 网络大爆发(1980–1990)
- ARPAnet连接约200台主机,1990年全球因特网主机达10万;
- BITNET、CSNET、NSFNET推动大学互联;
- NSFNET主干速率从56kbps提升至1.5Mbps;
- 1983年ARPAnet全面切换至TCP/IP;
- Jacobson提出基于主机的拥塞控制机制;
- DNS系统研发成功,实现域名到IP的映射;
- 法国Minitel项目推广家庭数据网络,早于互联网普及。
1.7.4 因特网爆炸性发展(1990年代)
- NSFNET解除商业用途限制,商业化进程开启;
- WWW由Tim Berners-Lee在CERN发明,结合HTML、HTTP、浏览器、服务器四大要素;
- Mosaic/Netscape浏览器推动Web普及;
- 微软加入引发浏览器大战;
- 电子商务、即时通讯、P2P文件共享成为“杀手级应用”;
- 互联网泡沫破裂后,Google、Amazon、eBay等企业崛起。
1.7.5 新世纪的发展(2000年至今)
- 宽带接入普及(DSL、FTTH、5G固定无线);
- 视频流媒体(YouTube、Netflix)、视频会议(Skype、FaceTime)兴起;
- 无线设备数量超过有线设备,智能手机推动移动互联网;
- 社交网络(Facebook、Twitter、微信)构建人与人之间的大规模连接;
- 大型云服务商(Google、Microsoft、阿里云)建设私有骨干网优化性能;
- 云计算平台(AWS、Azure)提供弹性计算与存储服务。## 1.8 小结
网络组成与结构
- 因特网是由硬件和软件组成的复杂网络系统。
- 从网络边缘开始,介绍了终端系统(主机)、应用程序以及传输层提供的服务。
- 接入网络中常见的链路层技术和物理媒体被详细探讨。
- 深入到网络核心,分析了分组交换与电路交换两种基本数据传输方式,并比较了它们的优缺点。
- 因特网是“网络的网络”,其层级结构由不同级别的ISP构成,这种结构支持因特网扩展至数千个网络。
核心网络概念
- 分析了分组交换网络中的延迟、吞吐量和丢包原因。
- 建立了传输延迟、传播延迟、排队延迟及吞吐量的定量模型。
- 协议分层和服务模型是网络架构的关键原则。
- 调查了当前因特网中普遍的安全攻击问题。
- 简要回顾了计算机网络的发展历史。
学习路径与章节安排
本书路线图
- 第2章至第6章为核心内容,围绕五层因特网协议栈的上四层展开:
- 第2章:应用层
- 第3章:传输层
- 第4章:网络层(数据平面)
- 第5章:网络层(控制平面)
- 第6章:链路层与局域网
- 第7章和第8章聚焦现代网络中的两个重要主题:
- 第7章:无线与移动网络(包括WiFi、蓝牙、蜂窝网络等)
- 第8章:网络安全(加密基础与安全应用)
教学方法说明
- 采用自顶向下的教学方式,先学习应用层以理解所需网络服务,再向下探索其实现方式。
- 提前讲解应用层有助于激发后续学习的兴趣与动机。
思维导图节点补充
作业与练习题概览
第1.1节
- 主机与终端系统的定义与区别
- 协议在外交关系中的类比解释
- 协议标准化的重要性
第1.2节
- 四种接入技术及其分类(家庭、企业、广域无线)
- HFC的共享特性与冲突可能性
- 不同地区的住宅接入技术比较
第1.3节
- 分组交换网络中的端到端延迟计算
- 电路交换与分组交换的优劣对比
- ISP对等与IXP盈利机制
- 内容提供商自建网络的原因(如Google)
第1.4节
- 延迟组件分析(传输、传播、处理、排队)
- 数据包传播时间与传输速率的关系
- 吞吐量计算与文件传输时间估算
第1.5节
- 协议分层任务分配与职责划分
- 分层中可能存在的重复功能
- 路由器、链路层交换机和主机处理的层次
第1.6节
- 自我复制型恶意软件的概念
- 僵尸网络构建与DDoS攻击原理
- 中间人攻击(Trudy)可能造成的危害
问题与练习摘要
应用层协议设计
- 设计ATM与银行主机之间的协议流程,包括验证、查询余额和取款操作。
延迟与吞吐量分析
- 计算多个链路下的端到端延迟
- 分析数据包在不同链路条件下的传播与传输行为
- 探索实时语音传输(VoIP)的时间延迟因素
分组交换与电路交换比较
- 用户共享链路时的并发使用概率计算
- 使用二项分布模型分析同时传输用户数的概率分布
网络性能评估
- 利用Little公式计算平均数据包到达率
- Traceroute实验分析路由路径与延迟变化
- Metcalfe定律验证:网络价值与用户数量平方关系
数据传输方式选择
- 大文件传输场景下,比较通过高速链路传输与使用快递服务(如FedEx)的效率
卫星通信与带宽延迟积
- 计算地球同步卫星链路的传播延迟与带宽延迟积
- 探讨连续传输所需的最小图像大小
消息分段与网络性能优化
- 比较有无消息分段时的数据传输时间
- 分析消息分段的优势与潜在缺点
- 寻找最优分段大小以最小化传输延迟
实际应用案例
- Skype如何实现PC到普通电话的通话(结合因特网与电话网络)### Wireshark 实验
网络协议观察工具
- Wireshark 是一种免费的网络封包嗅探器,可在 Windows、Linux/Unix 和 Mac 系统上运行。
- 它可以捕获和显示计算机发送和接收的消息内容,包括各协议字段的详细信息。
- 用户可通过图形界面查看捕获的数据包列表、选中数据包的头部细节以及其十六进制和 ASCII 内容。
实验目的与方法
- 通过实际操作加深对网络协议的理解。
- 观察两个协议实体之间交换消息的顺序,深入研究协议运作机制。
- 在真实网络环境中(如因特网)运行应用程序并分析其使用的网络协议。
- 学生将作为实验的一部分,亲自参与协议行为的触发与观察。
实验内容示例
- 下载并安装 Wireshark 工具。
- 使用浏览器访问网站并捕获浏览器与服务器之间的通信过程。
- 深入了解 HTTP 协议交互流程。
访谈:Leonard Kleinrock 的互联网愿景
职业背景
- Leonard Kleinrock 是加州大学洛杉矶分校(UCLA)的计算机科学教授。
- 1961 年提出分组交换数学理论,成为互联网核心技术基础。
- 1969 年 UCLA 的计算机成为首个互联网节点。
对互联网诞生的回忆
- 第一条主机间消息为“Log”,但“g”导致斯坦福主机崩溃,最终消息变为“Lo!”。
- 当时未意识到这一事件的历史意义,仅用于远程登录测试。
- 早前曾预言未来可通过家庭或办公室设备轻松接入计算资源,如今已实现。
未来网络愿景
- 基础设施方面:
- 无线和移动设备将在智能空间中广泛应用,形成“隐形互联网”。
- 环境中的各种物体(桌椅、墙壁、穿戴设备等)将具备感知、处理和通信能力。
- 房间能识别用户进入,环境可自然响应语音、手势甚至脑机接口指令。
- 技术组件方面:
- 部署定制化智能软件代理,动态挖掘和处理数据。
- 区块链技术提供不可篡改的分布式账本和信誉系统。
- 自组织系统管理高速网络流量。
- 应用与服务方面:
- 应用往往出人意料地快速涌现,如电子邮件、社交网络、短视频分享等。
- 未来仍将持续出现“突如其来”的创新服务。
对学生的建议
- 互联网是一个充满挑战与机遇的新领域。
- 不要被现有技术所限制,应大胆想象并推动技术进步。
应用层
2.1 网络应用原理
2.1.1 网络应用架构

客户端-服务器架构
- 服务器始终在线,为多个客户端提供服务。
- 客户端不直接通信,通过服务器中转。
- 服务器具有固定、已知的IP地址。
- 常见应用:Web、FTP、Telnet、电子邮件。
对等网络(P2P)架构
每个节点既可以作为客户端,也可以作为服务器. 也可以在一个通信会话中明确谁是 client、谁是 server:谁发起连接就是 client。
- 最少或无依赖中心服务器。
- 直接在对等主机之间通信。
- 用户设备作为节点,自行上传和下载数据。
- 自扩展性强,资源利用率高。
- 成本低但面临安全与稳定性挑战。
- 示例:BitTorrent 文件共享。
2.1.2 进程通信
在网络中运行的其实不是“程序”,而是“进程(process)”在相互通信:
- 进程:在一个终端系统中运行的程序的实例(运行态的程序)。
情况 | 通信方式 |
---|---|
两个进程在同一个主机上 | 使用 操作系统提供的进程间通信机制(如管道、消息队列、共享内存等) |
两个进程在不同主机上 | 必须通过 计算机网络进行通信,也就是我们重点要学习的内容 |
进程与套接字

- 套接字就像进程用来收发消息的“门”。每个进程通过
socket 和网络打交道:
- 要发消息:把消息通过 socket 发出去
- 要收消息:通过 socket 接收
- 网络应用由多台终端上的进程组成。
- 进程间通过交换消息通信。
- 消息通过“套接字”进出网络。在五层协议栈中,socket 位于应用层和传输层之间
- 类比房屋与门:进程是房屋,套接字是门。
客户端与服务器进程定义
- 发起通信的进程为客户端。
- 等待连接的进程为服务器。
- 在特定会话中,一个进程可以同时是客户端和服务器。
地址标识
- 主机通过IP地址唯一标识。
- 进程通过端口号识别。
- 常见端口:
- Web服务器:80;
- 邮件服务器(SMTP):25;
- 列表可在 iana.org 查看。
2.1.3 应用可获得的传输服务
可靠数据传输
- 数据包可能在网络中丢失或损坏。
- 重要应用(如邮件、文件传输)需要可靠传输。
- TCP 提供可靠数据传输服务。
- 多媒体应用容忍一定数据丢失。
吞吐量
- 吞吐量指发送方到接收方的数据传输速率。
- 传输协议可提供保证吞吐量的服务。
- 实时语音/视频应用需最低吞吐量保障。
- 弹性应用(如邮件)适应不同吞吐量。
时间延迟
- 传输延迟影响实时应用体验。
- 实时通信、多人游戏等要求严格时间控制。
- 非实时应用偏好低延迟但无硬性限制。
安全性
- 传输层可提供加密、完整性验证、身份认证。
- TLS 是 TCP 的增强版,提供加密与安全服务。
- UDP 不提供安全性,需上层实现。
2.1.4 Internet 提供的传输服务
TCP 特性
- 面向连接:握手建立连接,全双工通信。
- 可靠传输:确保数据完整有序到达。
- 流量控制:防止接收方缓冲区溢出。
- 拥塞控制:调节发送速率以避免网络拥塞。
UDP 特性
- 无连接:无需握手,直接发送数据。
- 不可靠传输:不保证数据送达或顺序。
- 适用于实时应用(如语音通话、游戏)。
- 缺乏拥塞控制,可能导致网络拥堵。
不提供的服务
- 不保证吞吐量与时延。
- 实时应用需自身设计机制应对不确定性。
2.1.5 应用层协议
- 定义进程间消息格式、语义、交互规则。
- 公共协议如 HTTP、SMTP、FTP。
- 私有协议如 Skype 使用自有协议。
- 协议是网络应用的重要组成部分,但非全部。
2.1.6 本书涵盖的应用
- Web:HTTP 协议为核心。
- 电子邮件:使用 SMTP、POP、IMAP。
- DNS:域名解析服务。
- 视频流:基于 DASH 或其他协议。
- P2P 文件共享:如 BitTorrent。
2.2 Web 与 HTTP
2.2.1 HTTP 概述
- HTTP 是 Web 的应用层协议。
- 客户端(浏览器)与服务器交互获取网页。
- 使用 TCP 作为传输协议。
- 无状态协议:每次请求独立处理。
2.2.2 HTTP 请求方法
- GET:请求文档。
- POST:提交数据。
- HEAD、PUT、DELETE 等用于其他用途。
2.2.3 HTTP 响应状态码
- 2xx:成功(如 200 OK)。
- 3xx:重定向。
- 4xx:客户端错误(如 404 Not Found)。
- 5xx:服务器错误(如 500 Internal Server Error)。
2.2.4 非持续与持续连接
- 非持续连接:每个请求单独建立 TCP 连接。
- 持续连接:复用单个 TCP 连接发送多个请求。
2.2.5 Cookie
- 服务器通过 Set-Cookie 头设置 Cookie。
- 客户端在后续请求中携带 Cookie。
- 用于用户跟踪、个性化内容等。
2.2.6 Web 缓存(代理服务器)
- 缓存服务器保存副本,减少原始服务器负载。
- 减少响应时间,节省带宽。
- 使用 If-Modified-Since 验证缓存有效性。
2.2.7 条件 GET
- 如果资源未修改,则返回 304 Not Modified。
- 减少不必要的数据传输。## 2.2 Web 与 HTTP
2.2.1 HTTP 概述
Web 的发展背景
- 1990年代前,互联网主要用于科研和学术交流。
- 1990年代初,万维网(World Wide Web)出现,成为首个面向大众的互联网应用。
- Web 的核心协议是 HTTP,定义在 RFC 1945、RFC 7230 和 RFC 7540 中。
- Web 改变了人们的工作和生活方式,成为互联网的核心平台。
Web 页面与对象
- Web 页面由多个对象组成,如 HTML 文件、图片、视频等。
- 每个对象通过 URL 定位,包含主机名和路径名。
- 例如:
http://www.someSchool.edu/someDepartment/picture.gif
- 浏览器实现 HTTP 客户端,服务器实现 HTTP 服务端。
HTTP 的工作方式
- 使用 TCP 作为传输协议。
- 客户端发起 TCP 连接,发送 HTTP 请求。
- 服务器响应请求,返回 HTTP 响应。
- HTTP 是无状态协议,服务器不保存客户端状态信息。
2.2.2 非持续连接与持续连接
非持续连接(HTTP/1.0)
- 每个对象请求后关闭 TCP 连接。
- 每次请求需建立新连接,造成延迟。
- 示例:请求包含 1 个 HTML 和 10 张图片的页面需建立 11 个 TCP 连接。
- 总响应时间 ≈ 2 RTT + 传输时间。
持续连接(HTTP/1.1)
- 服务器在发送响应后保持 TCP 连接。
- 同一连接可传输多个请求/响应。
- 支持流水线(pipelining),请求连续发送。
- 默认使用持续连接,性能更优。
2.2.3 HTTP 消息格式
HTTP 请求消息
- 包含请求行、头部行、空行和实体体。
- 请求行包含方法(GET、POST 等)、URL 和 HTTP 版本。
- 常见头部:
- Host:请求主机;
- Connection: close 表示非持续连接;
- User-Agent:浏览器类型;
- Accept-Language:语言偏好。
HTTP 响应消息
- 包含状态行、头部行、空行和实体体。
- 状态行包含 HTTP 版本、状态码和状态消息。
- 常见状态码:
- 200 OK:请求成功;
- 301 Moved Permanently:对象永久移动;
- 400 Bad Request:请求格式错误;
- 404 Not Found:对象不存在;
- 505 HTTP Version Not Supported:协议版本不支持。
- 常见头部:
- Connection: close 表示关闭连接;
- Date:响应生成时间;
- Server:服务器类型;
- Last-Modified:对象最后修改时间;
- Content-Length:对象大小;
- Content-Type:对象类型。
2.2.4 用户-服务器交互:Cookie
Cookie 的组成
- HTTP 响应中的 Set-Cookie 头部;
- HTTP 请求中的 Cookie 头部;
- 浏览器管理的 Cookie 文件;
- 网站的后端数据库。
Cookie 的工作流程
- 用户首次访问网站,服务器生成唯一 ID;
- 浏览器将 ID 存入 Cookie 文件;
- 后续请求自动携带 Cookie ID;
- 服务器通过 ID 识别用户,提供个性化服务。
Cookie 的应用场景
- 购物车管理;
- 用户身份识别;
- 个性化推荐;
- 登录状态保持。
隐私问题
- 可能被用于用户行为追踪;
- 存在隐私泄露风险。
2.2.5 Web 缓存(代理服务器)
Web 缓存的工作原理
- 代理服务器存储常用对象副本;
- 用户请求首先发送到代理服务器;
- 若缓存命中,直接返回对象;
- 若未命中,代理服务器向源服务器请求并缓存。
Web 缓存的优势
- 减少响应时间;
- 降低网络带宽需求;
- 减轻源服务器负载;
- 提高整体网络性能。
缓存示例
- 机构网络通过缓存降低对外带宽压力;
- CDN(内容分发网络)广泛使用缓存技术;
- 共享 CDN(如 Akamai)和专用 CDN(如 Google、Netflix)。
2.2.6 条件 GET
缓存对象更新机制
- 缓存对象可能过期;
- HTTP 提供条件 GET 机制验证对象是否更新;
- 使用 If-Modified-Since 头部进行验证。
条件 GET 流程
- 缓存向服务器发送带 If-Modified-Since 的 GET 请求;
- 若对象未修改,服务器返回 304 Not Modified;
- 缓存继续使用本地副本;
- 若对象已修改,服务器返回新对象。
2.2.7 HTTP/2
HTTP/2 的目标
- 减少感知延迟;
- 支持请求/响应多路复用;
- 提供请求优先级和服务器推送;
- 高效压缩头部字段。
HTTP/2 的核心技术
- 帧化(Framing):将消息拆分为小帧,交错传输;
- 优先级(Prioritization):按权重优先传输重要对象;
- 服务器推送(Server Push):提前推送后续所需对象;
- 二进制编码:提升解析效率,减少帧大小。
HTTP/2 的优势
- 减少 TCP 连接数量;
- 避免 Head-of-Line(HOL)阻塞;
- 支持多路复用;
- 提升网页加载速度。
2.2.8 HTTP/3
HTTP/3 的基础
- 基于 QUIC 协议(应用层协议,运行于 UDP);
- 提供多路复用、流控、快速连接建立等特性。
HTTP/3 的特点
- 许多 HTTP/2 功能由 QUIC 实现;
- 设计更简洁高效;
- 正在标准化中(截至 2020 年)。## 2.3 因特网中的电子邮件
2.3.1 SMTP
- SMTP 是因特网电子邮件的核心协议,用于从发送方邮件服务器向接收方邮件服务器传输邮件。
- 使用 TCP 提供的可靠数据传输服务。
- 邮件内容限制为 7 位 ASCII 编码,需对多媒体内容进行编码。
- SMTP 客户端与服务器在发送邮件时直接通信,不使用中间邮件服务器。
- 示例流程:
- Alice 使用用户代理编写邮件并发送;
- 邮件进入 Alice 邮件服务器的队列;
- SMTP 客户端连接 Bob 邮件服务器并发送邮件;
- Bob 邮件服务器接收邮件并存入其邮箱;
- Bob 使用用户代理读取邮件。
- SMTP 会话示例包含命令:HELO、MAIL FROM、RCPT TO、DATA、QUIT。
- SMTP 使用持久连接,可复用 TCP 连接发送多个邮件。
2.3.2 邮件消息格式
- 邮件消息由头部和正文组成,RFC 5322 定义了邮件格式。
- 头部信息包括:
- From: 发件人地址;
- To: 收件人地址;
- Subject: 邮件主题;
- 头部与正文之间以空行分隔(CRLF.CRLF)。
- 头部字段为可读文本格式,关键字后跟冒号和值。
- 邮件正文为 ASCII 文本。
2.3.3 邮件访问协议
- SMTP 用于邮件从发送方服务器到接收方服务器的传输。
- 接收方使用 IMAP 或 HTTP 从邮件服务器获取邮件。
- 用户代理无法使用 SMTP 拉取邮件,因为 SMTP 是推送协议。
- Web 邮件或移动应用使用 HTTP 获取邮件。
- 邮件客户端(如 Outlook)使用 IMAP 协议(RFC 3501)访问邮件。
- IMAP 允许用户管理服务器上的邮件夹,支持移动、删除、标记等操作。
2.4 DNS — 因特网的目录服务
2.4.1 DNS 提供的服务
- 主要任务:将主机名解析为 IP 地址。
- DNS 是一个分布式数据库,采用客户端-服务器架构。
- DNS 协议运行在 UDP 上,使用端口 53。
- 应用层协议如 HTTP、SMTP 依赖 DNS 进行域名解析。
- 其他服务包括:
- 主机别名:提供更易记的主机名;
- 邮件服务器别名:使邮件地址更易记;
- 负载均衡:通过 DNS 轮换 IP 地址实现服务器负载分担。
2.4.2 DNS 工作原理概述
- DNS 采用分布式、分层数据库结构。
- 包括三类服务器:
- 根 DNS 服务器:全球分布的 13 组服务器;
- 顶级域(TLD)服务器:如 .com、.org、.edu;
- 权威 DNS 服务器:为特定域名提供解析;
- 本地 DNS 服务器(Local DNS Server):
- 不属于 DNS 层级结构,但对 DNS 架构至关重要;
- 通常由 ISP 提供;
- 执行 DNS 查询代理功能;
- DNS 查询流程示例:
- 查询 www.amazon.com:
- 客户联系根服务器获取 .com TLD 地址;
- 联系 TLD 服务器获取 amazon.com 权威服务器地址;
- 联系权威服务器获取 www.amazon.com 的 IP 地址。
- 查询 www.amazon.com:
2.4.3 DNS 缓存
- DNS 缓存用于提升性能、减少网络流量。
- DNS 服务器缓存查询结果,设定 TTL(生存时间)后删除。
- 本地 DNS 服务器缓存 TLD 地址后可跳过根服务器。
- 大多数 DNS 查询通过缓存完成,根服务器仅处理极小部分请求。
2.4.4 DNS 记录与消息
DNS 记录类型
- A 记录:主机名到 IPv4 地址映射;
- AAAA 记录:主机名到 IPv6 地址映射;
- NS 记录:域名到权威 DNS 服务器主机名;
- CNAME 记录:别名主机名到规范主机名;
- MX 记录:邮件服务器别名到规范主机名;
- 示例:
- (relay1.bar.foo.com, 145.37.93.126, A)
- (foo.com, dns.foo.com, NS)
- (foo.com, relay1.bar.foo.com, CNAME)
- (foo.com, mail.bar.foo.com, MX)
DNS 消息格式
- DNS 查询与响应消息格式相同:
- 头部(12 字节):
- 标识符(16 位):匹配请求与响应;
- 标志位:查询/响应、权威、递归请求等;
- 四个数量字段:问题数、答案记录数、授权记录数、附加信息数;
- 问题部分:
- 查询名称与类型(如 A、MX);
- 答案部分:
- 返回的资源记录(如 A、NS、CNAME、MX);
- 授权部分:
- 其他权威服务器记录;
- 附加信息部分:
- 辅助信息(如 MX 响应中包含邮件服务器的 A 记录);
- 头部(12 字节):
2.4.5 向 DNS 数据库插入记录
- 域名注册时需提供权威 DNS 服务器名称与 IP 地址;
- 注册商将 NS 与 A 记录插入 TLD 服务器;
- 示例:
- 注册 networkutopia.com;
- 插入 NS 记录:(networkutopia.com, dns1.networkutopia.com, NS);
- 插入 A 记录:(dns1.networkutopia.com, 212.212.212.1, A);
- 需在权威 DNS 服务器中配置 Web 服务器(A)与邮件服务器(MX)记录;
- DNS 动态更新协议(RFC 2136、RFC 3007)允许动态修改 DNS 记录。
2.4.6 DNS 安全漏洞
- DDoS 攻击:如 2002 年攻击根服务器、2016 年攻击 Dyn;
- 中间人攻击:伪造 DNS 响应;
- DNS 缓存投毒:欺骗 DNS 服务器缓存虚假记录;
- DNSSEC:提供安全扩展,防止伪造与篡改;
- DNSSEC 正在逐步部署,提升 DNS 安全性。## 2.5 对等文件分发
P2P 架构的可扩展性
客户端-服务器架构与 P2P 架构对比
- 客户端-服务器架构的分布时间:
- 服务器需为每个对等方传输一个文件副本,总传输量为
N × F
。 - 分布时间下限:
Dcs = max(NF/us, F/dmin)
。 - 随着对等方数量增加,分布时间线性增长。
- 服务器需为每个对等方传输一个文件副本,总传输量为
- P2P 架构的分布时间:
- 每个对等方可重新分配已接收的数据。
- 下限公式:
DP2P = max(F/us, F/dmin, NF/(us + u1 + ... + uN))
。 - 网络整体上传能力提升,分布时间更短。
- 自我扩展性强,适合大规模文件分发。
BitTorrent 协议
- 基本机制:
- 文件被分割为 256KB 的块。
- 用户加入“种子”后逐步下载并上传数据块。
- 可选择继续共享或离开网络。
- 追踪器(Tracker)的作用:
- 维护当前参与的对等方列表。
- 新用户加入时随机选取部分对等方提供连接信息。
- 邻居节点管理:
- 建立 TCP 连接后定期更新可用数据块信息。
- 使用“稀有优先”策略请求数据块,提高整体传播效率。
- 流量激励机制(Tit-for-Tat):
- 优先向上传速率高的邻居发送数据。
- 每 30 秒随机选择新节点进行测试,促进公平交换。
2.6 视频流与内容分发网络
互联网视频基础
- 视频特性:
- 数据率高,压缩后仍可达 100kbps 至 4Mbps。
- 多版本编码支持不同带宽环境。
- 性能指标:
- 平均端到端吞吐量是关键。
- 必须满足视频码率需求以保证流畅播放。
HTTP 流媒体与 DASH
- HTTP 流媒体问题:
- 所有客户端接收相同编码,无法适应带宽变化。
- DASH(动态自适应流媒体):
- 支持多码率版本。
- 客户端根据带宽选择合适片段。
- 实现自适应质量切换,优化观看体验。
内容分发网络(CDN)
- 传统单数据中心方案的问题:
- 跨洲际链路可能成为瓶颈。
- 同一内容重复传输浪费带宽。
- 单点故障风险高。
- CDN 设计理念:
- 全球部署多个服务器集群。
- 缓存热门内容减少回源压力。
- 根据地理位置和网络状况选择最佳 CDN 节点。
- 两种部署策略:
- Enter Deep(深入接入网):
- Akamai 方案,在 ISP 内部部署大量小型集群。
- 更接近终端用户,降低延迟。
- 管理复杂度高。
- Bring Home(集中式):
- Limelight 方案,在少量 IXP 地点部署大型集群。
- 管理成本低但可能牺牲部分性能。
- Enter Deep(深入接入网):
- CDN 内容复制机制:
- 不强制推送所有内容。
- 使用拉取策略,按需缓存热门内容。
- 存储满时淘汰不常访问的内容。
2.7 套接字编程:创建网络应用
UDP 套接字编程
- 客户端流程:
- 创建 UDP 套接字。
- 输入文本并发送至服务器。
- 接收处理后的响应并显示。
- 关闭套接字。
- 服务器流程:
- 创建绑定端口的 UDP 套接字。
- 接收客户端请求。
- 将文本转为大写后返回。
- 循环等待下一个请求。
- 代码示例:
UDPClient.py
:发送请求、接收响应。UDPServer.py
:监听端口、处理请求。
TCP 套接字编程
- TCP 特性:
- 面向连接,确保数据有序可靠传输。
- 客户端主动发起连接(三次握手)。
- 服务器使用欢迎套接字接受连接,并创建专用连接套接字。
- 客户端流程:
- 创建 TCP 套接字并连接服务器。
- 发送文本请求。
- 接收响应并关闭连接。
- 服务器流程:
- 创建监听套接字并绑定端口。
- 接受连接并创建专用套接字。
- 处理请求后关闭连接套接字。
- 代码示例:
TCPClient.py
:建立连接、发送/接收数据。TCPServer.py
:监听、接受连接、处理请求。
2.8 总结
- P2P 架构优势:
- 自我扩展性强,适合大规模文件分发。
- BitTorrent 采用稀有优先与 Tit-for-Tat 机制实现高效协作。
- 视频流技术发展:
- DASH 支持自适应码率切换,提升用户体验。
- CDN 通过全球部署优化内容分发效率。
- 套接字编程基础:
- UDP 提供无连接通信,适用于实时场景。
- TCP 提供可靠连接,适用于需要数据完整性的应用。
- Python 示例展示了基本的客户端-服务器交互模型。## 2.8 总结与回顾
本章核心内容回顾
网络应用架构
- 客户端-服务器架构:
- 被多数互联网应用采用。
- 服务器始终在线,拥有固定IP地址。
- 应用于HTTP、SMTP、DNS等协议。
- P2P架构:
- 减少对中心服务器的依赖。
- 对等节点之间直接通信。
- 高扩展性,但存在安全和稳定性挑战。
- 示例:BitTorrent 文件共享。
应用层协议
- HTTP:
- Web的核心协议。
- 使用TCP传输,无状态。
- 支持GET、POST等请求方法及缓存机制(如条件GET)。
- SMTP/POP/IMAP:
- 电子邮件相关协议。
- SMTP用于邮件发送,POP/IMAP用于接收。
- DNS:
- 域名解析服务。
- 将域名转换为IP地址。
- CDN与视频流:
- CDN提升视频分发效率。
- DASH支持自适应码率流媒体。
Socket编程
- TCP套接字:
- 面向连接,可靠数据传输。
- 服务器需监听并接受连接,每个连接使用独立套接字。
- UDP套接字:
- 无连接,不保证可靠性。
- 更低延迟,适用于实时应用。
协议理解深化
- 协议不仅定义消息格式和顺序,还包括行为逻辑。
- TCP提供可靠传输、流量控制和拥塞控制。
- UDP简单高效,适合对时延敏感的应用。
- TLS在TCP基础上提供加密和安全性。
后续章节展望
- 下一章将深入研究传输层协议(TCP/UDP)的工作原理。
- 探讨如何实现可靠传输、流量控制和拥塞控制等机制。### Socket 编程实验
实验一:Web 服务器
- 开发一个简单的 Web 服务器,能处理单个 HTTP 请求。
- 创建连接套接字、接收请求、解析文件名、获取文件内容。
- 构建 HTTP 响应并发送给客户端。
- 若文件不存在,返回“404 Not Found”。
- 提供骨架代码,需自行完成并测试。
实验二:UDP Pinger
- 编写 UDP 客户端,向服务器发送 10 次 ping 请求。
- 计算往返时延 RTT。
- 设置超时为 1 秒,若未收到响应则认为丢失。
- 服务器代码已提供,需编写客户端代码。
实验三:邮件客户端
- 使用 SMTP 协议与邮件服务器建立 TCP 连接。
- 发送电子邮件,并关闭连接。
- 提供骨架代码,需自行完成并测试(如使用 Google 或学校邮箱服务器)。
实验四:Web 代理
- 开发支持缓存的 Web 代理服务器。
- 接收浏览器请求,向原始服务器转发。
- 获取响应后返回给客户端。
- 提供骨架代码,需完成并测试。
Wireshark 实验
Wireshark Lab: HTTP
- 分析 HTTP GET/响应交互过程。
- 观察消息格式、大文件传输、嵌入 URL 文件下载。
- 研究持续连接与非持续连接差异。
- 包含身份验证和安全性相关内容。
- 完整实验说明请访问 www.pearsonhighered.com/cs-resources。
Wireshark Lab: DNS
- 观察 DNS 客户端行为。
- 发送域名查询请求,接收 IP 地址响应。
- 理解 DNS 层级结构背后的递归与迭代查询机制。
- 客户端仅与本地 DNS 服务器交互。
- 完整实验说明请访问 www.pearsonhighered.com/cs-resources。
人物访谈:Tim Berners-Lee
背景介绍
- 万维网发明者,提出 HTTP 协议原型。
- 2016 年图灵奖获得者。
- 现任牛津大学和 MIT 教授。
网络与物理的关系
- 类似于从微观规则推导宏观世界,网络设计也是构建规则以实现大规模系统目标。
- 一个是分析,一个是设计,但思维方式相似。
为何选择网络方向
- 微处理器兴起时期,通信行业正转向基于微处理器的系统。
- 电信领域充满创新机会。
工作中的挑战
- 在不同意见之间找到共识,推动标准统一。
- 需要深入理解各方立场,消除误解。
启发他的人
- 父母早期参与计算机工作,激发兴趣。
- CERN 的 Mike Sendall 和 Peggie Rimmer 给予指导和支持。
- 受 Vanevar Bush、Doug Englebart、Ted Nelson 思想启发。
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.