计算机网络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协议定义数据报格式及路由器处理方式;
- 包含多种路由协议决定路径。
- 链路层 Link Layer:
- 在相邻节点间传输帧;
- 支持以太网、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 连接。
HTTP1.0
持续连接:复用单个 TCP 连接发送多个请求。
HTTP1.1
同一个TCP连接可以重复使用,传输多个对象。
比如:HTML文件 + 多张图片可以通过同一个TCP连接发送,不需要重复建立连接。
2.2.5 Cookie

- 服务器通过 Set-Cookie 头设置 Cookie。
- 客户端在后续请求中携带 Cookie。
- 用于用户跟踪、个性化内容等。
2.2.6 Web 缓存(代理服务器)
- 缓存服务器保存副本,减少原始服务器负载。是一个网络实体,代替原始Web服务器处理HTTP请求。一旦配置了Web缓存,用户的所有HTTP请求会先发送到缓存服务器,而不是直接发送给原始服务器(Origin Server)。
- 减少响应时间,节省带宽。
- 使用 If-Modified-Since 验证缓存有效性。
内容分发网络(CDN)
- CDN公司(如 Akamai、Limelight、Google、Netflix)在全球部署缓存节点;
- 通过地理分布式缓存,把内容推送到离用户最近的缓存服务器;
- 缓解源站压力、提高访问速度、降低延迟和成本。
2.2.7 条件 GET
- 如果资源未修改,则返回 304 Not Modified。
- 减少不必要的数据传输。## 2.2 Web 与 HTTP
条件 GET 流程
- 缓存向服务器发送带 If-Modified-Since 的 GET 请求;
- 若对象未修改,服务器返回 304 Not Modified;
- 缓存继续使用本地副本;
- 若对象已修改,服务器返回新对象。
2.2.7 HTTP/2
HTTP1.1使用持久连接(即一个 TCP 连接可以传输多个请求/响应)。
但会遇到 队头阻塞(Head-of-Line Blocking) 问题。
假设一个网页包含:
- HTML 页面;
- 一个大型视频;
- 多个小图片。
如果使用一个 TCP 连接,视频会因为文件大而阻塞后面的小文件,导致页面渲染变慢。
HTTP/1.1 的方式:
- 一条高速公路(TCP连接)一次只能运送一个包裹(请求/响应);
- 下一个包裹必须等前一个完全送完;
- 解决办法是修建多条平行的高速公路(多个 TCP 连接)来并发运送。
HTTP/2 的多路复用方式:
- 在一条高速公路上划分多条车道;
- 每条车道运送不同的包裹(请求/响应),彼此不干扰;
- 包裹可以拆成小块,分时轮流走路段,然后在终点重新组合。
HTTP/2 的目标
- 减少感知延迟;
- 支持请求/响应多路复用;在一个通信通道(比如一条 TCP 连接)中,同时传输多个独立的数据流的一种技术。
- 提供请求优先级和服务器推送;
- 高效压缩头部字段。
HTTP/2 的核心技术
- 帧化(Framing):核心思想:每条 HTTP 消息被切分成 多个小的帧(frame),可以交错传输,不再按顺序排队。接收端重组帧后,恢复原始 HTTP 消息。
- 优先级(Prioritization):按权重优先传输重要对象;每个请求可以被赋予一个 权重(1~256);客户端还可以设置请求之间的 依赖关系;服务器根据这些信息,决定哪个响应优先发送。
- 服务器推送(Server Push):提前推送后续所需对象;服务器可在收到请求后主动推送其他资源服务器分析 HTML,提前将 JS、CSS、图片等资源发送过去;节省了等待客户端额外发起请求的时间,提高加载效率。
- 二进制编码:提升解析效率,减少帧大小。
HTTP/2 的优势
- 减少 TCP 连接数量;
- 避免 Head-of-Line(HOL)阻塞;
- 支持多路复用;
- 提升网页加载速度。
2.2.8 HTTP/3
HTTP/3 的基础
- HTTP/3 是基于 QUIC 协议的新一代 HTTP 协议,它比 HTTP/2 更快、更稳定,尤其在弱网或移动环境下表现更好。
- 提供多路复用、流控、快速连接建立等特性。
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 允许用户管理服务器上的邮件夹,支持移动、删除、标记等操作。IMAP / HTTP: 收邮件用(“拉”邮件);
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:
- 它通过系统调用(如
gethostbyname()
)请求 DNS。 - 你的电脑把请求交给本地的 本地 DNS 服务器(通常由你的运营商或学校提供)。
- 本地 DNS 服务器如果不知道答案,就会向互联网上其他 DNS 服务器组成的层级结构发出查询。
- 它通过系统调用(如
- 查询 www.amazon.com:
用户主机 cse.nyu.edu
向其本地 DNS 服务器(如
dns.nyu.edu
)发出请求;
本地服务器不知道,就向 根服务器 查询
.edu
;
根服务器返回:你去找 edu
的 TLD
服务器;
TLD 服务器说:你去找 umass.edu
的
权威服务器(如 dns.umass.edu
);
权威服务器再告诉你 gaia.cs.umass.edu
的 IP 地址。
2.4.3 DNS 缓存
DNS 服务器在收到一个查询的结果(即某个域名的 IP 地址)后,会临时把这个结果保存在本地内存中,以便下次快速回答同样的请求。
- 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 视频流传输中:
- 视频文件就像普通网页资源一样,被存储在服务器上,拥有一个固定的 URL。
- 用户想要观看视频时:
- 客户端通过 TCP 建立连接,向该 URL 发送一个 HTTP GET 请求。
- 服务器会把整个视频文件作为响应内容返回。
- 客户端接收数据后,会将字节缓存在 应用缓冲区 中。
- 一旦缓冲区里的数据超过某个播放阈值,客户端开始播放视频:
- 视频播放器定期从缓冲区中提取帧(frame),解码并显示。
- 这使得边接收边播放成为可能。
HTTP 流媒体问题:
- 所有客户端接收相同编码,无法适应带宽变化。
DASH(动态自适应流媒体):
将视频编码成多个不同版本:
- 每个版本对应一个不同的比特率(低画质、中画质、高画质)。
- 每个版本的视频被切分成多个小段(chunk),每段持续几秒钟。
客户端不再一次性请求整个视频,而是:
- 先获取一个 manifest 文件(描述不同版本的 URL 和码率信息)。
- 然后一个 chunk 一个 chunk 地用 HTTP GET 请求下载。
客户端在每次请求 chunk 时,根据当前带宽和缓冲状态来决定选择哪个版本(高码率 or 低码率)。
内容分发网络(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 思想启发。
传输层
3.1 引言与传输层服务
3.1.1 传输层与网络层的关系
- 传输层位于网络层之上,提供进程间的逻辑通信。
- 网络层负责主机之间的逻辑通信。
- 类比邮政系统:网络层负责房屋间通信,传输层负责屋内人员之间的信件传递。
- 传输协议运行在终端系统中,不涉及中间路由器。
- 多个传输协议可共存,如TCP和UDP。
3.1.2 Internet中的传输层概述
- Internet提供两种传输协议:UDP(不可靠、无连接)和TCP(可靠、面向连接)。
- UDP适用于实时应用(如语音通话),TCP适用于需可靠传输的应用(如网页浏览)。
- TCP通过流量控制、序列号、确认应答等机制实现可靠传输。
- UDP仅提供基本的多路复用/解复用和错误检测功能。
- IP是网络层协议,提供尽力而为的服务,不保证数据完整性或顺序。
- TCP/IP模型中,传输层扩展IP服务至进程级通信。
3.2 多路复用与解复用
传输层不会直接把数据给进程,而是先给一个中介“套接字”(socket)。
一台主机上可能有多个套接字,且每个套接字有唯一标识。
这个标识就是端口号(port number),用来区分不同的套接字。
3.2.1 基本概念
- 多路复用:将来自不同套接字的数据封装成段,并添加头部信息。
- 解复用:接收端根据段头字段将数据交付给正确的套接字。
- 每个套接字由端口号唯一标识。
- UDP和TCP使用源端口和目的端口字段进行解复用。
3.2.2 UDP多路复用与解复用
- UDP套接字由二元组(目标IP地址 + 目标端口号)标识。
- 不同源IP或端口但相同目标端口的UDP段被交付同一套接字。
- 源端口用于返回响应时作为目标端口。
3.2.3 TCP多路复用与解复用
- TCP套接字由四元组(源IP、源端口、目标IP、目标端口)标识。
- 不同连接即使目标端口相同,也会分配不同套接字。
- 服务器创建“欢迎套接字”监听连接请求,接受后生成新套接字处理每个连接。
3.2.4 安全相关:端口扫描
- 攻击者利用端口扫描探测开放端口以定位潜在漏洞。
- 工具nmap可用于TCP和UDP端口扫描。
- 典型案例:SQL Server在端口1434存在缓冲区溢出漏洞,Slammer蠕虫曾借此攻击。
3.3 无连接传输:UDP
3.3.1 UDP段结构
- 包含四个字段:源端口、目标端口、长度、校验和。
- 长度字段表示整个UDP段(包括头部)的字节数。
- 校验和用于错误检测。
3.3.2 UDP校验和
- 发送方计算所有16位字的反码和,并放入校验和字段。
- 接收方重新计算并验证是否全为1,若否,则说明有误。
- 即使链路层已做错误检测,UDP仍需校验和确保端到端可靠性。
3.3.3 使用UDP的原因
- 更细粒度的控制:应用可直接决定何时发送数据。
- 无需建立连接:避免延迟,适合DNS、流媒体等。
- 无连接状态:服务器可支持更多客户端。
- 小头部开销(8字节 vs TCP的20字节)。
3.3.4 应用场景
- DNS、SNMP、多媒体应用常使用UDP。
- QUIC基于UDP实现可靠性,在应用层实现拥塞控制等特性。
- 缺乏拥塞控制可能导致网络拥堵,需应用层自行实现。
3.4 可靠数据传输原理(RDT)
3.4.1 RDT基础
- 数据可能丢失、损坏或乱序,需设计可靠传输机制。
- 核心技术:确认应答(ACK)、重传、定时器、序列号。
3.4.2 逐步构建RDT方案
版本rdt1.0
- 假设底层通信信道完全可靠(不会丢包、不丢比特、不乱序),协议非常简单。
版本rdt2.0
- 现实中信道会有比特错误,传输的包可能被破坏.需要加入错误检测机制(例如校验和 checksum)来检测包是否被破坏
- 使用停等协议(Stop-and-Wait),接收方发送ACK或NAK。需要接收方反馈给发送方:
- ACK(肯定确认)表示包收到了且没错。
- NAK(否定确认)表示包出错,请求重传。
- 若NAK,发送方重传当前数据包。
版本rdt2.1
- 改进版本,使用ACK+序列号应对重复包问题。
- 发送方维护当前数据包副本,等待ACK后释放。
- 接收方通过序列号判断是否为重复包。
版本rdt2.2
- 仅使用ACK,用ACK携带期望下一次收到的序列号。当接收方收到损坏包或重复包时,不发送NAK,而是重发上一个正确包的ACK(也叫重复ACK)。
- 减少NAK的使用,提高效率。这种机制简化了协议设计。
版本rdt3.0
- 考虑丢包问题,引入超时重传机制。
- 发送方设置定时器,超时则重传未确认的数据包。
- 通过序列号识别重复包并丢弃。
3.5 面向连接的传输:TCP

3.5.1 TCP概述
- 提供可靠数据传输、流量控制、拥塞控制。
- 面向字节流,而非消息流。
- 每个TCP连接由四元组唯一标识。
3.5.2 TCP段结构
- 包含源端口、目标端口、序列号、确认号、首部长度、标志位、窗口大小、校验和、选项等字段。
- 序列号标识数据字节,而非段本身。
- 确认号表示期望收到的下一个字节编号。
3.5.3 RTT估计与超时
- 使用指数加权移动平均估算往返时间(RTT)。
- 超时时间 = EstimatedRTT + 4 * DevRTT。
3.5.4 可靠数据传输
问题: TCP连接的两端都会为连接预留一块接收缓冲区(receive buffer)。接收端接收到的数据正确且顺序到达后,会先存放到这个缓冲区中,等待应用程序读取。但应用程序读取数据的速度可能慢于数据到达的速度,导致缓冲区被写满,进而可能发生溢出。TCP通过流量控制机制防止发送方发送过快,导致接收方缓冲区溢出。换句话说,流量控制是一种速度匹配机制,使发送方的发送速度与接收方应用程序的读取速度相匹配。
流量控制的工作流程
接收方 Host B 会在它发送给发送方 Host A 的每个TCP段中,填入当前的
rwnd
值,告知发送方缓冲区还剩多少空间。发送方 Host A 维护两个变量:
LastByteSent
:发送的最后一个字节序号LastByteAcked
:已被确认(ACK)的最后一个字节序号
发送方控制未被确认的数据量不超过接收窗口大小: \[ \text{LastByteSent} - \text{LastByteAcked} \leq \text{rwnd} \] 这样确保发送的数据不会超过接收方缓冲区剩余空间,避免溢出。
特殊情况:接收窗口为零
- 当接收方缓冲区满了,
rwnd = 0
,它会告诉发送方当前没有空间了。 - 如果接收方此时没有数据要发送给发送方,它也不会主动发送带有新的窗口大小的TCP段。
- 结果就是发送方一直阻塞,无法知道缓冲区何时腾出空间。
- 解决办法:
TCP规定,发送方在接收到
rwnd = 0
后,仍应发送带有1字节数据的探测段(称为“窗口探测”),接收方确认后才会更新窗口大小,告诉发送方缓冲区已经有空间了。
3.5.6 连接管理

三次握手
- 客户端发送SYN段发起连接。
- 服务器回应SYN-ACK。
- 客户端发送ACK完成连接。
四次挥手

- 客户端发送FIN段关闭连接。
- 服务器回应ACK。
- 服务器发送FIN段关闭连接。
- 客户端回应ACK,进入TIME_WAIT状态。
3.6 拥塞控制原理
3.6.1 拥塞原因与影响
- 当发送速率超过网络承载能力时,导致队列溢出、丢包、延迟增加。
- 无控制的UDP流量可能加剧拥塞。
3.6.2 拥塞控制方法
端到端控制:依赖发送方调节速率(如TCP)。
- 在这种方法中,网络层不会向传输层提供任何有关拥塞状态的直接反馈信息。
- 端系统(即发送方和接收方)必须通过观测网络行为(如:丢包、延迟增加)间接判断是否发生了拥塞。
- TCP 就是采用这种方法。比如,如果发送方发现数据包丢失(比如发生超时或收到 3 个重复 ACK),就认为是网络发生了拥塞,会相应地降低发送速率(通过减小窗口)。
网络辅助控制:路由器反馈拥塞信号(如ECN)。
在这种方法中,路由器或网络设备会提供明确的拥塞反馈信息给发送方和/或接收方。
反馈方式可能是:
- 直接反馈:路由器发送一个阻塞包(choke packet)告知发送方“我这边拥塞了”。
- 间接反馈:路由器在数据包中标记拥塞信息,这个包到达接收方后,由接收方再通知发送方。
例如,在 ATM 网络中的 ABR(Available Bit Rate)机制,路由器会告诉主机它可以支持的最大发送速率。
虽然 IP 和 TCP 默认采用端到端控制方式,但也可以在一些新机制中使用网络辅助控制。
3.7 TCP拥塞控制
3.7.1 控制机制
TCP 使用一个变量 cwnd(congestion window,拥塞窗口) 来限制发送方的发送速率。发送方未被确认的数据量必须小于 cwnd(忽略接收端窗口限制 rwnd 时)。
- 发生丢包事件(loss event)表示可能发生了拥塞:
- 超时重传;
- 收到三个重复的 ACK(即 fast retransmit)。
TCP 把这类事件作为网络拥塞的指示,适当降低 cwnd
- 发生丢包事件(loss event)表示可能发生了拥塞:
初始慢启动阶段,cwnd呈指数增长。
达到阈值后进入拥塞避免阶段,线性增长。
收到3个重复ACK触发快速重传和快速恢复。
3.7.2 性能优化
- TCP Tahoe:超时后cwnd重置为1。
- 初始时 cwnd 设置为 1 MSS,发送一个分段等待 ACK。每收到一个 ACK,cwnd 增加 1 MSS。每个 RTT 内,发送速率 呈指数增长(1、2、4、8……)。
- TCP Reno:区分超时和重复ACK,提升性能。
3.8 QUIC协议简介
- 基于UDP实现可靠传输、拥塞控制和安全加密。
- 在应用层实现,减少连接建立延迟。
- 支持多路复用、前向纠错等功能。
- 广泛应用于现代Web浏览器(如Google Chrome)。## 3.4 可靠数据传输原理
3.4.1 构建可靠数据传输协议
可靠通道上的数据传输:rdt1.0
- 协议假设底层信道完全可靠。
- 发送方接收上层数据并创建包含数据的包。
- 接收方接收包,提取数据并传递给上层。
- 没有差错检测或反馈机制。
带比特错误的通道:rdt2.0
- 数据包可能被损坏,引入差错检测(校验和)。
- 使用确认(ACK)和否定确认(NAK)进行反馈。
- 出现错误时重传数据包。
- 存在ACK/NAK损坏问题,需要进一步改进。
序列号与重复包处理:rdt2.1
- 引入序列号解决重复包问题。
- 发送方维护当前发送的数据包副本。
- 接收方通过序列号判断是否为重复包。
- 改进版本使用ACK携带期望的下一个序列号(rdt2.2)。
丢包通道:rdt3.0
- 考虑数据包丢失问题,引入超时重传机制。
- 发送方设置定时器,超时则重传未确认数据包。
- 通过序列号识别并丢弃重复包。
- 称为“交替位协议”,序列号在0和1之间切换。
3.4.2 流水线式可靠数据传输协议
性能问题
- rdt3.0是停等协议,利用率极低。
- 在高带宽、长延迟网络中性能差。
- 示例:1 Gbps链路上传输1000字节数据包,利用率仅0.027%。
解决方案:流水线
- 允许多个未确认包同时在管道中传输。
- 提高发送端利用率,提升吞吐量。
- 需要更大的序列号空间和缓冲区。
3.4.3 回退N步(Go-Back-N, GBN)
协议机制
- 发送窗口大小为N,允许最多N个未确认包。
- 接收方只按序接收,丢弃乱序包。
- 累积确认机制,收到ACK表示之前所有包都已正确接收。
- 出现超时时,发送方重传所有未确认包。
发送方事件与动作
- 调用来自上层:检查窗口是否满,若不满则发送包并更新变量。
- 收到ACK:视为累积确认,移动窗口基值。
- 超时事件:重传所有未确认包,重启定时器。
接收方行为
- 正确按序接收:发送ACK并交付数据。
- 乱序接收:丢弃包并重新发送最近收到的ACK。
3.4.4 选择重传(Selective Repeat, SR)
协议机制
- 发送窗口和接收窗口大小均为N。
- 发送方只重传怀疑出错的包。
- 接收方缓存乱序包,直到缺失包到达后一并交付。
发送方事件与动作
- 上层数据到达:检查序列号是否在窗口内,若是则发送。
- 超时:每个包都有独立定时器,超时重传特定包。
- 收到ACK:标记该包已接收,若为窗口基值则前移窗口。
接收方事件与动作
- 正确接收且在窗口内:发送ACK,若为窗口基值则交付连续包。
- 正确接收但超出窗口:忽略或重新发送ACK。
- 其他情况:丢弃包。
序列号空间限制
- 若序列号范围过小,可能出现新旧包混淆。
- 窗口大小必须小于等于序列号空间的一半。## 3.5 面向连接的传输:TCP
3.5.1 TCP 连接
- TCP 是面向连接的协议,通信前需进行三次握手建立连接。
- 连接是逻辑连接,状态信息仅存在于两端系统中。
- 中间路由器不维护 TCP 连接状态。
- 提供全双工服务,支持点对点通信。
- 不支持多播(Multicast)。
3.5.2 TCP 段结构
- 包含源端口、目的端口、序列号、确认号、首部长度、标志位、窗口大小、校验和等字段。
- 序列号标识数据字节,而非段本身。
- 确认号表示期望收到的下一个字节编号。
- 标志位包括 ACK(确认)、SYN(同步)、FIN(结束)等。
3.5.3 RTT 估计与超时
- 使用指数加权移动平均估算往返时间(RTT):
- EstimatedRTT = 0.875 × EstimatedRTT + 0.125 × SampleRTT
- DevRTT 表示 RTT 波动:
- DevRTT = 0.75 × DevRTT + 0.25 × |SampleRTT – EstimatedRTT|
- 超时时间计算公式:
- TimeoutInterval = EstimatedRTT + 4 × DevRTT
- 初始超时时间为 1 秒,超时后翻倍以避免重复丢包。
3.5.4 可靠数据传输
- 基于 rdt 协议原理,使用确认应答、重传、定时器、序列号等机制实现可靠传输。
- 发送方事件包括:
- 数据接收自应用层;
- 定时器超时;
- 接收确认应答(ACK)。
- 支持快速重传机制:收到三个重复 ACK 触发重传,无需等待超时。
- TCP 实现了 GBN 和 SR 的混合机制。
3.5.5 流量控制
- 接收方通过接收窗口(rwnd)告知发送方可接收的数据量。
- 控制发送速率以防止接收缓冲区溢出。
- rwnd 动态更新:
- rwnd = RcvBuffer – (LastByteRcvd – LastByteRead)
- 若 rwnd = 0,发送方仍会发送小数据段以探测接收方缓冲区是否释放。
3.5.6 TCP 连接管理
三次握手(连接建立)
- 客户端发送 SYN 段(SYN=1,seq=x);
- 服务器响应 SYN-ACK 段(SYN=1,seq=y,ack=x+1);
- 客户端发送 ACK 段(SYN=0,seq=x+1,ack=y+1)。
四次挥手(连接关闭)
- 客户端发送 FIN 段(FIN=1);
- 服务器回应 ACK;
- 服务器发送 FIN 段;
- 客户端回应 ACK,进入 TIME_WAIT 状态;
- TIME_WAIT 状态持续约 30 秒至 2 分钟,确保最后一个 ACK 正确送达。
安全相关:SYN 泛洪攻击
- 攻击者发送大量 SYN 段而不完成握手,耗尽服务器资源。
- 防御方式:SYN Cookie 技术,使用哈希函数生成初始序列号,不分配资源直至收到 ACK。## 3.6 拥塞控制原理
3.6.1 拥塞的原因与代价
场景1:两个发送端,无限缓冲的路由器
- 主机A和B共享单跳链路。
- 当发送速率超过R/2时,吞吐量受限于链路容量。
- 接近链路容量时延迟显著增加。
- 虽然吞吐量高,但延迟大是拥塞的成本之一。
场景2:两个发送端,有限缓冲的路由器
- 路由器缓冲区有限,数据包可能丢失。
- 发送方需重传丢失的数据包。
- 重传导致网络资源浪费。
- 过早超时重传会导致不必要的转发。
场景3:四个发送端,多跳路径,有限缓冲
- 多跳路径中,中间路由器缓冲溢出导致丢包。
- 数据包在第一跳被转发后若在第二跳丢弃,则第一跳资源浪费。
- 高流量下,吞吐量随负载增加反而下降。
3.6.2 拥塞控制方法
端到端拥塞控制
- 网络层不提供反馈,传输层根据丢包或延迟推断拥塞。
- TCP采用此方式,通过超时或重复ACK判断拥塞并调整窗口大小。
网络辅助拥塞控制
- 路由器向发送端显式反馈拥塞状态。
- 可通过“拥塞位”或标记字段通知发送端。
- ATM ABR、DECnet等架构使用此方式。
3.7 TCP拥塞控制
3.7.1 经典TCP拥塞控制
拥塞窗口(cwnd)机制
- 发送速率受cwnd限制:
发送速率 ≈ cwnd / RTT
。 - 收到ACK表示网络正常,增加cwnd;发生丢包表示拥塞,减少cwnd。
慢启动(Slow Start)
- 初始cwnd较小,每收到一个ACK增加1 MSS。
- 吞吐量呈指数增长。
- 在以下情况结束:
- 超时 → cwnd重置为1,ssthresh设为原cwnd的一半。
- cwnd达到ssthresh → 进入拥塞避免阶段。
- 收到三个重复ACK → 进入快速恢复。
拥塞避免(Congestion Avoidance)
- 增长更保守,每RTT线性增加1 MSS。
- 收到三个重复ACK时,cwnd减半,ssthresh更新。
- 超时处理与慢启动相同。
快速恢复(Fast Recovery)
- 收到三个重复ACK后进入。
- 每个重复ACK使cwnd增加1 MSS。
- 收到新ACK后进入拥塞避免。
- 若再次超时,则回到慢启动。
AIMD行为与性能
- TCP Reno采用“加性增、乘性减”策略。
- 形成锯齿状吞吐量变化。
- 平均吞吐量约为
0.75 * W / RTT
,其中W为最大窗口大小。
3.7.2 网络辅助ECN与基于延迟的拥塞控制
显式拥塞通知(ECN)
- IP头部设置两比特用于拥塞指示。
- 路由器检测拥塞并在IP头中标记ECN位。
- 接收方通过ECE标志通知发送方拥塞。
- 发送方响应:将cwnd减半,并设置CWR标志。
基于延迟的拥塞控制
TCP Vegas
- 根据RTT测量判断是否拥塞。
- 如果实际吞吐率低于无拥塞理论值 → 减少发送速率。
- 目标:保持队列尽可能小以降低延迟。
BBR
- 基于带宽和延迟建模。
- 不依赖丢包作为拥塞信号。
- Google部署于其内部网络和公共服务器。
3.7.3 公平性问题
TCP公平性
- K个TCP连接共享带宽R时,每个连接应获得R/K带宽。
- AIMD机制收敛至公平分配。
- RTT较短的连接更快抢占带宽。
UDP与公平性
- UDP应用不响应拥塞控制,可能导致不公平。
- 视频会议、VoIP常使用UDP以维持恒定速率。
并行TCP连接
- 使用多个TCP连接可获得更多带宽。
- Web浏览器常开启多个连接提高下载速度。## 3.9 总结
- 传输层协议可以提供从无附加功能的多路复用/解复用到可靠数据传输、延迟和带宽保证等多种服务。
- 可靠数据传输可以通过确认、定时器、重传和序列号等机制实现,即使底层网络不可靠。
- TCP是面向连接的可靠传输协议,包含流量控制、往返时间估计和连接管理等功能。
- 拥塞控制对网络性能至关重要,TCP通过端到端机制进行拥塞控制,使用加性增加和乘性减少策略。
- QUIC协议在应用层实现了许多传输层功能,如可靠数据传输、拥塞控制和安全加密。
家庭作业问题与思考题
简答题 R1-R19
- R1:设计一个简单的传输层协议以将数据交付到目标进程;修改协议以提供返回地址。
- R2:类比邮政系统,描述一种协议以在家庭成员间传递信件。
- R3:TCP连接中,主机A发送至主机B的数据段源端口为x,目的端口为y,则反向通信中源端口为y,目的端口为x。
- R4:开发者选择UDP而非TCP的原因包括更低的开销、更细粒度的控制以及无需建立连接。
- R5:尽管UDP不提供拥塞控制,语音和视频仍常使用TCP,因其可避免因网络拥塞导致的丢包。
- R6:应用可在UDP之上自行实现可靠数据传输机制。
- R7:两个不同主机发送到同一UDP端口的数据会被导向同一个套接字,但可通过IP地址区分来源。
- R8:持久连接下,不同客户端请求会通过不同套接字处理,但所有套接字都绑定到端口80。
- R9:引入序列号是为了识别重复或乱序的数据段。
- R10:引入定时器是为了检测数据段丢失并触发重传。
- R11:即便往返延迟已知,仍需定时器以应对可能的数据段丢失。
- R12-R13:Go-Back-N与Selective Repeat模拟实验,展示其在丢包场景下的行为差异。
- R14:判断关于TCP特性的多个陈述是否正确。
- R15:计算TCP段中的数据长度及确认号。
- R16:Telnet示例中,在用户输入后发送的段数及其序列号与确认字段内容。
- R17:两个TCP连接共享瓶颈链路时,TCP公平分配带宽,每条连接获得R/2速率。
- R18:当定时器超时,ssthresh设置为原值的一半。
- R19:TCP分割响应时间约为4×RTTFE + RTTBE + 处理时间。
练习题 P1-P58
- P1:Telnet会话中,不同客户端与服务器之间的段使用的可能端口号。
- P2:图3.5中服务器返回客户端的数据段端口号及IP地址。
- P3-P5:关于UDP校验和的计算与验证。
- P6-P13:可靠数据传输协议的设计与分析,包括rdt2.1和rdt3.0的死锁、ACK无序列号等问题。
- P14-P16:NAK-only协议的优劣分析及提高通道利用率的方法。
- P17-P19:有限状态机(FSM)设计用于交替数据传输。
- P20-P21:错误控制协议设计,确保可靠传输与有序交付。
- P22-P24:GBN与SR协议中序列号窗口与ACK字段分析。
- P25-P26:UDP相比TCP的优势在于对发送数据和时机的更多控制。
- P27-P30:TCP序列号、确认号、流量控制与SYN Cookie机制分析。
- P31-P36:RTT估算、SampleRTT与EstimatedRTT的关系、TCP避免测量重传段的RTT原因。
- P37-P40:比较GBN、SR与TCP的行为,分析超时与快速重传机制。
- P41-P44:TCP拥塞控制算法(AIMD、AIAD)、窗口大小变化与吞吐量分析。
- P45-P58:TCP Reno与CUBIC拥塞控制演化、缓冲区大小设定、连接同步化影响、改进TCP拥塞控制机制。### 编程实验
可靠传输协议实现
- 实现传输层的发送与接收代码。
- 两个版本:回退N步(GBN)和交替比特协议。
- 在模拟环境运行,接口接近UNIX系统调用。
- 包括定时器启动、中断处理等机制。
Wireshark 实验:探索 TCP
- 使用浏览器访问服务器并捕获数据包。
- 分析客户端与服务器端的 TCP 行为。
- 研究流量控制、拥塞控制、重传、往返时间(RTT)估计等内容。
Wireshark 实验:探索 UDP
- 抓包分析使用 UDP 的应用(如 DNS 或 Skype)。
- 研究 UDP 段头部字段及校验和计算。
人物访谈:Van Jacobson
主要贡献
- 提出TCP拥塞控制机制,推动互联网扩展。
- 获得ACM SIGCOMM奖与IEEE Kobayashi奖。
- 当前任职于Google,曾任Packet Design首席科学家、Cisco首席科学家等职。
关于挑战与问题定义
- 强调“找到正确的问题”比寻找答案更重要。
- 在研究TCP拥塞问题时,通过提问“为何TCP能工作”找到了突破口。
- 发现了“确认时钟机制(ack clocking)”。
对网络未来的看法
- 网络应从“主机间对话”转向“信息传播”的更大视角。
- 当前网络技术在广播媒体、移动设备数据交换等方面效率低下。
- CDN和缓存是必要手段,但缺乏理论支持。
- 希望未来网络能融合Web背后的信息传播理念。
启发他的人
- 理查德·费曼(Richard Feynman)对其影响深远。
- 欣赏其将复杂理论简化的能力。
给学生的建议
- 计算机与网络对社会影响巨大。
- 网络本质是连接,学习网络有助于理解多领域知识。
- 举例说明自然现象(如蚂蚁觅食、蜜蜂舞蹈)与协议设计的关系。
- 鼓励学生广泛涉猎、追求影响力。
网络层:数据平面
4.1 网络层概述
4.1.1 转发与路由:数据平面与控制平面
- 转发(Forwarding)
- 路由器将输入链路上的数据包转发到合适的输出链路。
- 数据平面功能,硬件实现,时间尺度为纳秒级。
- 示例:根据数据包头字段查找转发表决定出口接口。
- 路由(Routing)
- 决定数据包从源主机到目的主机的路径。
- 控制平面功能,软件实现,时间尺度为秒级。
- 示例:使用路由算法计算最优路径。
转发表的作用
- 根据数据包头部信息索引转发表,确定输出接口。
- 示例:头部值为0110的数据包被转发至接口2。
控制平面的传统方式
- 每个路由器内部运行路由协议,与其他路由器通信以生成转发表。
- 需要路由协议交换路由信息。
SDN方式下的控制平面
- 控制器远程计算并下发转发表至各路由器。
- 路由器仅负责转发,控制器负责全局路由决策。
- 支持开放、可编程网络管理。
4.1.2 网络服务模型
- 网络层服务定义
- 定义发送主机和接收主机之间的端到端数据包传输特性。
- 可能提供的服务
- 保证交付
- 有界延迟的交付
- 顺序交付
- 最小带宽保障
- 网络层加密安全服务
- Internet的网络服务模型
- 尽力而为服务(Best-effort service)
- 不保证交付顺序、不保证交付本身、无延迟或带宽保障。
- 实际中通过DASH等自适应协议和足够带宽满足多种应用需求。
- 尽力而为服务(Best-effort service)
4.2 路由器内部结构
4.2.1 输入端口处理
- 执行物理层和链路层功能。
- 查找转发表决定输出接口。
- 使用高速互连总线进行数据包转发。
4.2.2 交换结构
- 三种常见交换机制
- 基于内存的交换
- 基于总线的交换
- 基于互联网络的交换(Crossbar Switch)
4.2.3 输出端口处理
- 缓存排队数据包。
- 调度机制决定转发顺序。
- 处理拥塞情况下的丢包策略。
4.2.4 分组调度
- 先进先出(FIFO)
- 优先级队列(Priority Queueing)
- 加权公平队列(WFQ)
4.3 传统IP转发
4.3.1 IP地址基础
- IPv4地址:32位标识符,通常用点分十进制表示。
- IPv6地址:128位标识符,通常用冒号十六进制表示。
4.3.2 子网划分
- 划分网络前缀和主机部分。
- CIDR(无类别域间路由)支持灵活子网划分。
4.3.3 转发表构建
- 路由聚合减少表项数量。
- 使用最长匹配原则选择下一跳。
4.3.4 IPv4协议
- 版本、首部长度、服务类型、总长度、标识、标志、片偏移、TTL、协议、首部校验和、源和目标IP地址等字段。
4.3.5 IPv6协议
- 更大地址空间、简化首部结构、支持扩展首部。
- 移除了IPv4中的选项字段,采用扩展首部实现灵活性。
4.4 通用转发
4.4.1 OpenFlow简介
- SDN核心技术,允许远程控制器定义转发规则。
- 支持基于多字段的转发决策(如源/目的IP、端口号、协议等)。
4.4.2 流表(Flow Table)
- 包含匹配字段、动作(转发、丢弃、修改)、计数器等。
- 数据包按流表规则进行处理。
4.4.3 转发行为扩展
- 支持数据包复制、重写、过滤等操作。
- 提高网络灵活性和安全性控制能力。
4.5 中间盒(Middleboxes)
4.5.1 功能分类
- 防火墙(Firewall)
- 过滤非法流量,保护网络安全。
- NAT设备
- 地址转换,实现私有网络访问公网。
- 负载均衡器
- 将请求分配到多个服务器,提高可用性和性能。
- 入侵检测系统(IDS)
- 监测异常流量,识别潜在攻击。
4.5.2 对网络架构的影响
- 增强网络安全性与服务质量。
- 增加部署复杂性,需协调转发逻辑。
本章概览
- 掌握网络层的基本组成:数据平面与控制平面。
- 理解转发与路由的区别与协作。
- 熟悉IPv4与IPv6协议结构及其地址分配机制。
- 了解SDN与OpenFlow如何改变传统网络控制方式。
- 理解中间盒在网络中的作用及影响。## 4.2 路由器内部结构
4.2.1 输入端口处理与基于目的的转发
- 路由器输入端口负责物理层和链路层功能。
- 核心功能是查找转发表,决定数据包应转发到哪个输出端口。
- 转发表基于最长前缀匹配规则(Longest Prefix Matching)选择输出接口。
- IPv4地址通常使用32位表示,转发表通过前缀压缩减少条目数量。
- TCAM(三态内容寻址存储器)常用于高速查找,实现恒定时间匹配。
4.2.2 交换结构
三种主要交换方式:
- 基于内存的交换
- 最早的路由器使用CPU控制交换。
- 性能受限于内存带宽,无法并行转发多个数据包。
- 基于总线的交换
- 输入端口直接通过共享总线将数据包发送到输出端口。
- 每次只能传输一个数据包,存在瓶颈。
- 基于互连网络的交换
- 使用交叉开关(Crossbar Switch)连接输入和输出端口。
- 支持多数据包并行转发,非阻塞设计。
- 更复杂的互连网络支持多阶段交换,提升吞吐能力。
4.2.3 输出端口处理
- 输出端口负责从内存中取出数据包并通过链路层和物理层发送。
- 包括调度机制、队列管理、链路封装等功能。
- 队列调度策略影响服务质量和延迟。
4.2.4 缓存与排队现象
排队发生在输入和输出端口:
- 输入端口排队(Input Queueing)
- 当交换结构速度低于输入链路速度时,数据包在输入端口排队。
- 存在头部阻塞(HOL Blocking),导致低效转发。
- 输出端口排队(Output Queueing)
- 多个输入端口同时向同一输出端口发送数据时,形成队列。
- 可能导致缓存耗尽,引发丢包。
- 缓冲区大小设计
- 传统建议:B = RTT × 带宽。
- 新研究认为:当TCP流数量大时,所需缓存减少。
- 过度缓存可能导致延迟增加,影响交互式应用体验(Bufferbloat问题)。
4.2.5 数据包调度策略
常见调度机制:
- 先进先出(FIFO)
- 简单公平,但无法区分优先级。
- 优先级队列(Priority Queuing)
- 不同优先级的数据包按优先顺序转发。
- 可用于区分语音、视频、普通流量等。
- 轮询调度(Round Robin)
- 各类数据包轮流发送,确保公平性。
- 加权公平队列(WFQ)
- 为每个类别分配权重,保证最低带宽。
- 支持差异化服务,适用于QoS场景。### 4.3 IPv4协议:IP地址、NAT与IPv6
4.3.2 IPv4地址配置
- 每个接口必须具有唯一的IP地址(除NAT后设备)。
- IP地址长度为32位,通常使用点分十进制表示(如193.32.216.9)。
- 子网划分基于共同的网络前缀(如223.1.1.xxx)。
- CIDR(无类别域间路由)允许灵活子网划分(如/24表示前24位为网络部分)。
- 组织内的多个子网共享相同的网络前缀。
4.3.3 网络地址转换(NAT)
- NAT允许多个内部设备共享一个公网IP地址。
- 使用私有地址空间(如10.0.0.0/24),避免公网地址耗尽。
- NAT路由器维护转换表,记录WAN和LAN侧的IP+端口映射。
- 实现方式:
- 内部设备发送数据包时,NAT替换源IP和端口。
- 外部响应返回时,NAT根据端口查找并还原目标地址。
- 缺点:
- 端口用于主机而非进程寻址,影响P2P连接。
- 违反路由器应仅处理网络层的原则。
- 防火墙与入侵检测系统(IDS)常与NAT结合使用增强安全。
4.3.4 IPv6协议
- 地址长度从32位扩展至128位,解决IPv4地址枯竭问题。
- 支持单播、多播和任播地址类型。
- 报头结构简化,固定长度为40字节。
- 移除了IPv4中的以下字段:
- 分片与重组(仅由源和目的处理)。
- 首部校验和(由传输层和链路层保障)。
- 选项字段(作为扩展首部实现)。
- 新增字段:
- 流标签(Flow Label)支持QoS或实时服务。
- 下一报头(Next Header)标识上层协议。
- IPv6过渡机制:
- 隧道技术:将IPv6数据包封装在IPv4中穿越IPv4网络。
- 不同于“flag day”方式,逐步部署更现实可行。
- 应用现状:
- 美国政府约三分之一二级域名已启用IPv6。
- Google统计显示约25%用户通过IPv6访问其服务。
- 3GPP等标准组织已指定IPv6为移动网络标准。
地址分配机制
- 组织获取地址块:
- 通过ISP获得连续地址块(如200.23.16.0/20)。
- ISP可进一步划分为多个子块分配给客户。
- 全球地址管理:
- 由ICANN负责全球IP地址分配。
- 区域互联网注册机构(如ARIN、RIPE)执行区域管理。
DHCP动态主机配置协议
- 自动分配IP地址,支持静态分配或临时分配。
- 四步交互流程:
- DHCP发现(Discover)广播寻找服务器。
- DHCP提供(Offer)服务器响应地址提议。
- DHCP请求(Request)客户端选择并确认。
- DHCP确认(ACK)服务器最终确认分配。
- 支持即插即用(Plug-and-Play)功能,广泛用于企业、家庭及无线网络。## 4.4 通用转发与SDN
4.4.1 匹配(Match)
OpenFlow 1.0中的匹配字段
- 支持12种头部字段和入端口号的匹配。
- 涉及链路层、网络层和传输层字段,如:
- 源/目的MAC地址
- 源/目的IP地址
- TCP/UDP源/目的端口
- VLAN ID、TOS字段等
- 支持通配符匹配(例如:
128.119.*.*
)。 - 多个匹配项时优先使用高优先级条目。
抽象设计原则
- 不支持对TTL或数据报长度字段进行匹配。
- 设计权衡:功能与复杂度之间的平衡。
- 接口应捕获抽象的最小本质,避免过度泛化。
4.4.2 动作(Action)
常见动作类型
- 转发:
- 发送到特定物理输出端口
- 广播或多播到多个端口
- 封装并发送给控制器
- 丢弃:
- 无动作表示丢弃匹配的数据包
- 修改字段:
- 可重写10个头部字段(除IP协议字段外)
- 包括链路层、网络层和传输层字段
动作执行顺序
- 按照列表中指定的顺序执行多个动作。
4.4.3 OpenFlow 实例应用
示例一:简单转发
- 数据包从h5/h6发往h3/h4,路径为s3→s1→s2,绕过s3与s2之间的链路。
- s1流表条目:
- 入端口=1;源IP=10.3..;目的IP=10.2..
- 动作:转发至端口4
- s3流表条目:
- 源IP=10.3..;目的IP=10.2..
- 动作:转发至端口3
- s2流表条目:
- 入端口=2;目的IP=10.2.0.3 → 转发至端口3
- 入端口=2;目的IP=10.2.0.4 → 转发至端口4
示例二:负载均衡
- h3发往10.1..走s2→s1;h4发往10.1..走s2→s3→s1。
- s2流表条目:
- 入端口=3;目的IP=10.1.. → 转发至端口2
- 入端口=4;目的IP=10.1.. → 转发至端口1
示例三:防火墙
- s2仅接收来自s3连接主机的流量。
- 流表条目:
- 源IP=10.3..;目的IP=10.2.0.3 → 转发至端口3
- 源IP=10.3..;目的IP=10.2.0.4 → 转发至端口4
灵活性与优势
- 支持虚拟网络、多租户隔离、QoS等功能。
- 可通过编程实现多种逻辑行为。
4.5 中间盒(Middleboxes)
中间盒分类
- NAT转换
- 私有地址映射为公网地址
- 重写IP地址和端口号
- 安全服务
- 防火墙:基于头部字段过滤流量
- IDS:检测异常模式并过滤数据包
- 应用层邮件过滤器:识别垃圾邮件、钓鱼攻击
- 性能增强
- 压缩、缓存内容、请求负载均衡(如HTTP请求分发到多个服务器)
NFV与云外包
- 网络功能虚拟化(NFV)
- 使用通用硬件+专用软件替代传统中间盒
- 类似于SDN架构
- 云外包
- 将中间盒功能迁移到云端处理
架构争议
- 违反“端到端原则” vs “满足实际需求”
- RFC 1958指出网络核心应保持简单,智能放在边缘
- 但中间盒在现实网络中广泛存在且不可或缺
IP沙漏模型(Hourglass Model)
- 网络层仅有IP协议,成为互联网架构的“窄腰”
- 所有设备必须实现IP协议
- 屏蔽底层差异,提供统一接口
- 促进互联网快速发展和异构网络互联
端到端论证(End-to-End Argument)
- 关键功能应在端点而非网络中实现
- 举例:可靠数据传输需由TCP完成,而非依赖链路层错误控制
- RFC 1958引用该原则作为互联网架构基础之一## 5.2 路由算法
5.2.1 链路状态(LS)路由算法
- 核心思想
- 基于Dijkstra算法,计算从源节点到所有其他节点的最短路径。
- 每个节点广播链路状态信息,构建完整的网络拓扑图。
- 关键步骤
- 初始化:设定初始距离和前驱节点。
- 迭代更新:每次选择最小距离节点加入已知集合,并更新其邻居的距离。
- 复杂度分析
- 时间复杂度为O(n²),n为节点数量。
- 可通过堆优化降低时间复杂度。
- 潜在问题
- 当链路成本依赖流量时可能出现震荡现象。
- 解决方案包括避免动态链路成本、异步执行算法等。
5.2.2 距离向量(DV)路由算法
- 基本原理
- 基于Bellman-Ford方程,每个节点维护到所有目标的距离向量。
- 异步、分布式迭代更新机制。
- 运行流程
- 每个节点定期或根据变化发送距离向量给邻居。
- 接收新向量后更新自身距离表,并传播变化。
- 收敛性
- 在所有节点持续交换信息的前提下,最终会收敛到实际最短路径。
- 应用场景
- 广泛用于RIP、BGP等协议。
- 问题与改进
- 计数到无穷问题(Count-to-Infinity)可能导致环路。
- 使用毒性逆转(Poisoned Reverse)缓解局部环路问题。
LS与DV算法对比
- 消息复杂度
- LS需O(|N|×|E|)消息量,DV依赖邻居间多次交换。
- 收敛速度
- LS较快且确定,DV可能慢且存在环路风险。
- 鲁棒性
- LS局部错误影响有限;DV错误可能扩散至全网。
5.3 Internet内部AS路由:OSPF
OSPF概述
- 协议特点
- 开放标准(RFC 2328),基于链路状态。
- 使用Dijkstra算法计算最短路径树。
- 链路权重设置
- 管理员可配置,支持最小跳数或按带宽调整。
- 权重影响流量工程策略,如最小化最大链路利用率。
核心功能
- 链路状态广播
- 定期更新(每30分钟)+ 实时通知链路变化。
- OSPF报文直接封装在IP中(协议号89)。
- 邻居发现
- HELLO协议检测链路可达性。
- 同步链路状态数据库。
安全与扩展性
- 认证机制
- 支持简单密码与MD5哈希认证,防止伪造路由信息。
- 多路径支持
- 支持等价多路径(ECMP)负载均衡。
- 组播支持
- MOSPF扩展支持组播路由。
- 区域划分
- 分层结构:骨干区域(Backbone Area)连接各子区域。
- 区域边界路由器(Area Border Router)负责跨区通信。
应用场景
- 适用于大规模自治系统内部路由。
- 支持灵活的网络分层管理。## 5.4 ISP之间的路由:BGP
5.4.1 BGP的作用
- 提供前缀可达性信息
- 每个子网通过BGP广播其存在,确保全网路由器知晓。
- 若无BGP,各子网将成为孤立“岛屿”。
- 确定最佳路径
- 路由器可能学习到多个路径,需选择最优路径。
- 路径选择基于策略和可达性信息。
5.4.2 BGP路由信息发布
示例网络结构
- 包含三个自治系统(AS):AS1、AS2、AS3。
- AS3包含前缀x的子网。
- 网络中每个路由器为网关路由器或内部路由器。
BGP连接类型
- 外部BGP(eBGP):跨AS的路由器之间建立的TCP连接(端口179)。
- 内部BGP(iBGP):同一AS内路由器之间的TCP连接。
路由传播过程
- AS3通过eBGP向AS2发送路由信息(如“AS3 x”)。
- AS2通过iBGP将该信息转发给AS2内其他路由器。
- AS2再通过eBGP向AS1发送更新路径(如“AS2 AS3 x”)。
- 最终所有AS1和AS2路由器都了解前缀x及其路径。
5.4.3 最佳路径选择
BGP属性与路由定义
- AS-PATH:记录路径经过的AS序列。
- NEXT-HOP:下一跳接口的IP地址。
- 路由 = (NEXT-HOP, AS-PATH, 目标前缀)
路由选择算法
- 本地偏好值(Local Preference)
- 值越高优先级越高,由本AS管理员设定。
- 最短AS路径
- 类似距离向量算法,使用AS跳数作为度量。
- 热土豆路由(Hot Potato Routing)
- 选择最近的下一跳路由器。
- 路由器标识符
- 若仍有多个路径,则使用路由器ID决定。
示例分析
- 在图5.10中,AS1到x有两条路径:“AS2 AS3 x”和“AS3 x”。
- 根据规则2,优先选择较短路径“AS3 x”。
5.4.4 IP任播(IP-Anycast)
- 实现方式
- CDN服务器配置相同IP地址。
- 通过BGP广播该IP,不同服务器发布相同前缀。
- 效果
- 用户访问时自动被导向“最近”的服务器。
- 应用场景
- DNS根服务器广泛使用IP Anycast。
5.4.5 路由策略
- 策略优先于技术指标
- 如拒绝某些AS路径,即使路径更短。
- 客户-提供商关系
- 提供商仅转发源/目的在客户网络中的流量。
- 对等连接(Peering)
- 两个骨干ISP间直接连接,不承担第三方流量。
5.4.6 构建互联网接入
- 获取互联网接入
- 与本地ISP签约,获得IP地址段(如/24)。
- 域名注册
- 与域名注册商签约,注册域名(如xanadu.com)。
- DNS部署
- 配置DNS服务器并将其IP注册至顶级域服务器。
- BGP广播
- ISP通过BGP广播你的前缀,使全球路由器识别你的网络。
5.5 SDN控制平面
5.5.1 SDN控制平面组成
SDN控制器架构
- 通信层
- 南向接口(Southbound API):控制器与交换机通信(如OpenFlow)。
- 状态管理层
- 维护网络拓扑、链路状态、主机信息、流表等全局状态。
- 北向接口
- 提供RESTful API供应用调用,支持同步查询与异步事件通知。
SDN网络控制应用
- 路由应用
- 实现Dijkstra算法计算最短路径。
- 访问控制
- 控制哪些数据包应被丢弃。
- 负载均衡
- 控制多路径转发以实现服务器负载分担。
5.5.2 OpenFlow协议
- 控制器到交换机消息
- 配置(Configuration):设置交换机参数。
- 修改状态(Modify-State):添加/删除/修改流表项。
- 读取状态(Read-State):获取统计信息。
- 发送数据包(Send-Packet):控制器主动发送数据包。
- 交换机到控制器消息
- 流表移除(Flow-Removed):流表项超时或被删除。
- 端口状态(Port-Status):端口变化通知。
- 数据包入(Packet-in):未匹配流表的数据包上报控制器。
5.5.3 数据与控制平面交互示例
场景:链路状态变更
- s1检测到链路故障
- 发送Port-Status消息通知控制器。
- 控制器更新链路状态数据库
- 通知链路状态管理模块。
- 路由应用收到链路状态变更通知
- 注册监听事件后触发。
- 应用重新计算最短路径
- 使用Dijkstra算法。
- 应用请求更新流表
- 流表管理模块生成更新指令。
- 控制器下发流表更新
- 通过OpenFlow协议更新s1、s4等受影响交换机。
5.5.4 SDN的发展历程与未来
- 起源
- 2004年提出控制与数据平面分离理念。
- Ethane项目演化为OpenFlow。
- 未来方向
- 向大规模广域网扩展(如Google B4网络)。
- 与NFV融合,替代专用中间盒设备。
- 推动跨AS的SDN架构发展。
5.6 ICMP:互联网控制报文协议
5.6.1 ICMP作用
- 错误报告机制
- 报告不可达、超时、参数问题等网络异常。
- 网络诊断工具支持
- Ping 和 Traceroute 基于ICMP实现。
5.6.2 ICMP报文格式
- 类型字段(Type)
- 标识报文类型(如回显请求、目标不可达)。
- 代码字段(Code)
- 进一步细化错误原因(如网络不可达、端口不可达)。
- 校验和字段
- 用于完整性校验。
5.6.3 ICMP常见应用
- Ping命令
- 发送ICMP Echo Request,接收Echo Reply验证连通性。
- Traceroute命令
- 利用TTL递减和ICMP Time Exceeded报文探测路径。
5.7 网络管理:SNMP
5.7.1 SNMP概述
- 网络管理模型
- 管理站(Manager)与代理(Agent)协作。
- 管理信息库(MIB)存储被管对象数据。
5.7.2 SNMP操作
- GetRequest
- 获取一个或多个变量值。
- SetRequest
- 设置变量值。
- GetNextRequest
- 获取下一个变量值,用于遍历MIB树。
- Trap
- 代理主动上报事件(如接口down)。
- InformRequest
- 可靠的Trap通知,要求确认响应。
5.7.3 MIB结构
- 对象标识符(OID)
- 分层命名结构,唯一标识每个可管理对象。
- 标准MIB
- system、interfaces、ip、tcp、udp等标准组别。
5.7.4 SNMP版本演进
- SNMPv1
- 基础功能,安全性差。
- SNMPv2c
- 支持批量操作,仍使用明文社区字符串。
- SNMPv3
- 引入认证与加密,提升安全性。## 5.6 ICMP:互联网控制报文协议
5.6.1 ICMP的基本功能
- ICMP用于主机和路由器之间在网络层交换控制信息。
- 主要用途是错误报告,例如“目标网络不可达”。
- ICMP消息封装在IP数据报中作为载荷传输。
- ICMP消息包含类型字段和代码字段,并附带引发错误的原始IP数据报头部及前8字节内容。
5.6.2 常见ICMP消息类型
- Echo Reply(类型0,代码0):响应Ping请求。
- 目标网络不可达(类型3,代码0)
- 目标主机不可达(类型3,代码1)
- 目标协议不可达(类型3,代码2)
- 目标端口不可达(类型3,代码3)
- TTL超时(类型11,代码0)
- IP头部错误(类型12,代码0)
- Echo Request(类型8,代码0):用于Ping程序。
5.6.3 Ping与Traceroute的实现
- Ping:发送ICMP Echo Request(类型8,代码0),接收方返回Echo Reply(类型0,代码0)。
- Traceroute:
- 发送一系列UDP数据报,TTL依次递增(1, 2, 3…)。
- 每个路由器在TTL减至0时发送ICMP TTL超时消息(类型11,代码0)。
- 最终目标主机返回“端口不可达”ICMP消息(类型3,代码3),表示路径探测完成。
5.6.4 IPv6中的ICMPv6
- ICMPv6为IPv6重新定义了消息类型。
- 新增类型包括:
- Packet Too Big(类型2)
- Unrecognized IPv6 Options(类型4)
5.7 网络管理与SNMP、NETCONF/YANG
5.7.1 网络管理框架概述
- 管理服务器(Managing Server)
- 网络管理中心,负责数据收集、分析与命令下发。
- 被管理设备(Managed Device)
- 包括主机、路由器、交换机等,设备具有可配置参数和运行状态。
- 设备数据(Device Data)
- 包括配置数据(如IP地址)、运行数据(如邻居列表)、统计信息(如丢包数)。
- 网络管理代理(Agent)
- 运行在被管理设备上的软件,与管理服务器通信并执行命令。
- 网络管理协议
- 提供管理服务器与代理之间的通信机制,用于查询状态、控制设备、接收异常通知。
5.7.2 简单网络管理协议(SNMP)与管理信息库(MIB)
SNMPv3协议概述
- 应用层协议,用于管理服务器与代理之间交换控制与状态信息。
- 采用请求-响应模式:
- GetRequest:获取一个或多个MIB对象值。
- GetNextRequest:获取MIB对象列表中的下一个值。
- GetBulkRequest:一次性获取大量数据。
- SetRequest:设置MIB对象值。
- Response:对请求的响应。
- Trap:代理主动发送的异常事件通知。
- 通常通过UDP传输,无可靠保证,需管理服务器自行处理重传。
管理信息库(MIB)
- MIB对象表示设备的配置与运行状态。
- 示例:
ipSystemStatsInDelivers
表示成功交付给上层协议的IP数据报数量。 - RFC定义了标准MIB模块,厂商也可定义私有MIB。
- 常见MIB模块:
- [RFC 4293]:IP与ICMP管理对象。
- [RFC 4022]:TCP管理对象。
- [RFC 4113]:UDP管理对象。
5.7.3 网络配置协议(NETCONF)与YANG
NETCONF协议功能
- 提供对设备配置的获取、修改、锁定、解锁等操作。
- 支持订阅设备事件通知。
- 使用XML格式的远程过程调用(RPC)进行通信。
- 基于安全连接(如TLS over TCP)。
NETCONF操作示例
<get>
:获取设备的运行与配置数据。<get-config>
:获取指定配置(如运行配置)。<edit-config>
:修改设备配置,如设置接口MTU。<lock> / <unlock>
:锁定配置数据库,防止并发修改。<create-subscription>
:订阅设备事件通知。
YANG数据建模语言
- 用于定义NETCONF使用的配置与状态数据结构。
- 支持内置数据类型与用户定义约束,确保配置一致性。
- 可生成描述设备能力的XML文档。
- 与SMI在SNMP中作用类似,但更强大灵活。
5.7.4 网络管理方式比较
- CLI命令行接口
- 直接操作设备,但易出错,难以自动化与大规模部署。
- SNMP/MIB
- 用于监控设备状态与统计信息,SetRequest用于配置但使用较少。
- 安全性不足,曾主要用于监控而非控制。
- NETCONF/YANG
- 强调配置管理,支持多设备原子操作。
- 更适合大规模、自动化网络管理。
- 是当前主流网络管理发展方向。## 5.8 总结
- 控制平面的两种构建方式:
- 基于每台路由器的控制
- 每个路由器独立运行路由算法。
- 路由器之间相互通信以交换路由信息。
- 基于逻辑集中式控制的SDN
- 控制器集中计算并分发转发表。
- 路由器仅负责数据转发。
- 基于每台路由器的控制
- 路由算法基础
- 两种核心算法:
- 链路状态路由(Link-State)
- 每个节点掌握全网拓扑信息。
- 使用Dijkstra算法计算最短路径。
- 距离向量路由(Distance-Vector)
- 每个节点维护到其他节点的距离向量。
- 通过邻居交换信息逐步更新路径。
- 链路状态路由(Link-State)
- 两种核心算法:
- 实际应用
- OSPF:基于链路状态的内部网关协议。
- BGP:基于距离向量的外部网关协议,用于自治系统间通信。
- SDN控制平面
- SDN控制器三层结构:
- 通信层:与设备通信。
- 网络状态管理层:维护网络状态。
- 网络控制应用层:实现策略与转发规则。
- OpenFlow协议:
- 定义控制器与设备之间的通信。
- 支持流表管理与数据包转发。
- SDN控制器三层结构:
- 网络管理
- ICMP协议:
- 用于网络诊断与错误报告。
- 如ping和traceroute。
- SNMP协议:
- 用于网络设备管理。
- 支持GetRequest、SetRequest和Trap消息。
- NETCONF/YANG:
- 提供更现代的配置管理接口。
- ICMP协议:
- 后续章节展望
- 下一章将进入链路层,研究如何在本地网络中传输数据包。
- 链路层任务虽然局部,但涉及多个关键技术如差错控制、介质访问控制等。
作业与思考题
复习题
5.1 节
- R1:基于每台路由器的控制平面是什么意思?“单体实现”指什么?
- R2:基于逻辑集中式控制的控制平面是什么意思?控制平面与数据平面是否在同一个设备中?
5.2 节
- R3:比较集中式与分布式路由算法,举例说明。
- R4:比较链路状态与距离向量路由算法。
- R5:距离向量路由中的“计数到无穷大”问题是什么?
- R6:是否每个自治系统都必须使用相同的内部路由算法?为什么?
5.3–5.4 节
- R7:为何Internet使用不同的内部和外部路由协议?
- R8:OSPF发送链路状态信息是否只发送给直接邻居?
- R9:OSPF中“区域”的概念及引入原因。
- R10:比较子网、前缀和BGP路由。
- R11:BGP中NEXT-HOP和AS-PATH属性的作用。
- R12:ISP如何通过BGP配置实现策略控制。
- R13:BGP接收路径后是否必须添加自身标识?
5.5 节
- R14:SDN控制器的通信层、状态管理层、应用层各自作用。
- R15:在SDN中实现新路由协议应在哪一层?
- R16:SDN控制器的北向和南向API传输哪些消息?
- R17:OpenFlow消息的类型及其作用(如Packet-In、Flow-Removed等)。
- R18:OpenDaylight中服务抽象层的作用。
5.6–5.7 节
- R19:四种ICMP消息类型。
- R20:Traceroute使用的两种ICMP消息。
- R21:SNMP中的管理服务器、被管设备、代理、MIB定义。
- R22:GetRequest和SetRequest消息的作用。
- R23:Trap消息的作用。
编程实验
ICMP Ping 实验
- 编写一个基于ICMP的Ping程序。
- 发送ICMP Echo Request,接收Echo Response。
- 计算RTT、丢包率、统计延迟(最小、平均、最大、标准差)。
- 使用Python实现,仅需编写客户端。
路由协议模拟实验
- 实现一个异步分布式距离向量路由协议。
- 每个节点维护距离表。
- 初始化函数rtinitX()设置初始距离。
- 更新函数rtupdateX()接收邻居信息并更新距离表。
- 当路径变化时,向邻居发送更新信息。
- 使用模拟环境调用tolayer2()发送路由更新包。
Wireshark 实验:ICMP
- 使用Wireshark抓包分析ICMP协议行为。
- 观察ICMP Echo Request/Reply。
- 分析Traceroute过程中的TTL超时和端口不可达消息。
- 理解ICMP报文结构和网络诊断机制。### Wireshark 实验:ICMP
- 实验内容涉及使用Wireshark分析ICMP协议在
ping
和traceroute
命令中的应用。 - 实验资源可在教材官网获取:www.pearsonhighered.com/cs-resources。
人物访谈:Jennifer Rexford
职业背景
- 普林斯顿大学计算机科学系教授。
- 1996–2004年任职于AT&T实验室,研究网络测量、流量工程与路由器配置。
- 曾获ACM Grace Murray Hopper奖、ACM Athena讲座奖、IEEE互联网奖等多项荣誉。
- 美国国家工程院院士(2014年入选)。
代表项目与挑战
- 设计了路由控制平台(RCP),实现对ISP骨干网的集中式路由管理。
- 在单台普通计算机上计算全网路由,并兼容传统路由器。
- 该项目为后续SDN技术的发展奠定了基础。
对SDN未来的看法
- SDN应提供更好的编程抽象,支持多个独立应用协同工作。
- 应简化底层细节(如流表项、包头格式等)。
- 分布式设备更新需有良好的抽象机制,便于管理员理解更新过程中数据包的行为变化。
- 强调跨学科研究:网络、分布式系统与编程语言的结合具有重要实践价值。
对网络与互联网未来的展望
- 网络技术持续演进,受智能手机、云计算、物联网等驱动。
- 未来网络应“隐形”地支持创新,不成为性能与部署的瓶颈。
- 需要从更高层次抽象网络设备与协议,关注用户整体目标。
受启发的人物
- Sally Floyd:国际计算机科学研究所研究员。
- 致力于解决互联网关键问题,推动研究成果进入标准与设备。
- 开发了广泛使用的网络模拟器ns-2与ns-3。
- 积极参与社区服务,影响深远。
给学生的建议
- 网络领域高度跨学科,涉及排队论、博弈论、控制理论、机器学习等多个方向。
- 建议学生掌握相关领域的知识或与专家合作,夯实网络研究基础。
- 注重系统设计与构建能力,通过操作系统、计算机体系结构等课程提升实践水平。
链路层与局域网
6.1 链路层概述
6.1.1 链路层的基本服务
- 链路层功能
- 在两个相邻节点之间传输数据报。
- 数据封装为帧(Frame),包含头部和数据部分。
- 支持多种链路协议,如以太网、WiFi、PPP等。
- 多路访问问题
- 多个节点共享广播信道时如何协调帧的发送?
- 链路层地址
- MAC地址用于标识本地网络中的设备。
6.1.2 链路层实现位置
- 硬件实现
- 网络适配器(NIC)负责帧封装、错误检测等。
- 软件实现
- 主机操作系统处理链路层配置、地址解析等。
6.2 错误检测与纠正技术
6.2.1 奇偶校验
- 单比特奇偶校验
- 添加一个比特使总“1”数为偶数或奇数。
- 只能检测奇数个错误,不能纠错。
- 二维奇偶校验
- 检测并纠正单比特错误。
- 支持双比特错误检测。
6.2.2 校验和方法
- Internet 校验和
- 将数据视为16位整数求和,取反码作为校验和。
- TCP/UDP中使用,适用于低出错率链路。
6.2.3 循环冗余校验(CRC)
- 基本原理
- 使用生成多项式G(x),计算余数R作为冗余位。
- 接收方通过除法判断是否出错。
- 特点
- 可检测所有长度小于r+1的突发错误。
- 广泛用于链路层,如Ethernet、PPP。
6.3 多路访问链路与协议
6.3.1 信道划分协议
时间划分(TDM)
- 每个节点分配固定时间槽。
- 无冲突,但效率低,无法动态适应流量变化。
频率划分(FDM)
- 将带宽划分为多个子频段。
- 类似TDM,资源固定分配。
码分多址(CDMA)
- 每个节点使用唯一编码传输。
- 支持同时传输,抗干扰能力强。
- 广泛用于无线通信。
6.3.2 随机访问协议
ALOHA 协议
- 纯ALOHA
- 节点随时发送,碰撞后随机延迟重传。
- 最大效率:1/(2e) ≈ 18%。
- 时隙ALOHA
- 所有节点同步发送,效率更高。
- 最大效率:1/e ≈ 37%。
CSMA(载波侦听多路访问)
- CSMA
- 发送前侦听信道是否空闲。
- CSMA/CD
- 检测到冲突立即停止发送。
- 用于以太网,效率随传播延迟增加而下降。
- 退避算法
- 使用二进制指数退避选择K值,避免持续冲突。
6.3.3 轮流协议
轮询协议
- 由主节点轮询各节点。
- 无冲突,但存在轮询延迟。
- 若主节点失效,整个系统瘫痪。
令牌传递协议
- 令牌在节点间循环。
- 无需主节点,但节点故障可能中断系统。
- 实例:IEEE 802.5 Token Ring。
6.3.4 DOCSIS协议(有线网络链路层)
- 下行与上行信道
- 使用FDM划分频率。
- 下行单一源(CMTS),无冲突。
- 上行多节点共享,需冲突控制。
- MAP帧与Mini-slot
- CMTS通过MAP消息分配发送时段。
- 请求帧采用随机接入方式,可能冲突。
- 冲突处理
- 未收到响应则认为冲突发生。
- 使用二进制指数退避机制重传。
6.4 交换式局域网
6.4.1 局域网寻址与ARP
- MAC地址
- 48位全球唯一地址,用于局域网内通信。
- 地址解析协议(ARP)
- 将IP地址映射为MAC地址。
- ARP缓存维护IP-MAC对应关系。
6.4.2 以太网技术
- 帧格式
- 包含目标MAC、源MAC、类型、数据、CRC。
- CSMA/CD机制
- 早期以太网使用,现代全双工环境下不再需要。
- 速率发展
- 从10Mbps → 100Mbps → 1Gbps → 10Gbps演进。
6.4.3 交换机工作原理
- 自学习能力
- 维护交换表(MAC地址→端口)。
- 转发决策
- 根据目的MAC查找端口转发。
- 广播与泛洪
- 未知MAC地址时广播帧。
6.4.4 VLAN虚拟局域网
- 逻辑隔离
- 同一物理网络中划分不同广播域。
- VLAN标签
- IEEE 802.1Q标准定义VLAN ID字段。
- 跨交换机通信
- Trunk链路携带多个VLAN信息。
6.4.5 数据中心网络
- 高性能需求
- 高带宽、低延迟、可扩展性。
- 结构设计
- Fat Tree、Clos架构支持大规模并行通信。
- SDN集成
- 控制平面集中化,提升灵活性与管理效率。## 6.4 交换式局域网
6.4.1 链路层寻址与ARP
MAC地址
- 每个网络接口(适配器)具有唯一的MAC地址,长度为6字节(48位),全球唯一。
- MAC地址结构扁平化,不随位置变化而改变。
- IEEE负责管理MAC地址空间,分配前24位给厂商,后24位由厂商自定义。
ARP协议
- 作用:将IP地址解析为对应的MAC地址。
- 工作原理:
- 主机维护ARP表,包含IP地址与MAC地址的映射关系及TTL(生存时间)。
- 若ARP表中没有目标IP对应的MAC地址,则发送ARP广播请求。
- 接收方回应其MAC地址,发送方更新ARP表并继续发送数据帧。
- 广播机制:
- ARP请求使用广播MAC地址 FF-FF-FF-FF-FF-FF 发送。
- 跨子网通信:
- 数据包需先发送到路由器接口,再由路由器转发至目标子网。
- 路由器通过ARP获取下一跳MAC地址。
6.4.2 以太网技术
以太网帧格式
- 字段说明:
- 目标MAC地址(6字节)
- 源MAC地址(6字节)
- 类型字段(2字节):指示上层协议(如IP、ARP等)
- 数据字段(46–1500字节)
- CRC校验码(4字节)
- 最大传输单元(MTU):1500字节,超过则需分片。
- 最小数据字段长度:46字节,不足时填充。
以太网发展
- 速率演进:
- 10 Mbps → 100 Mbps → 1 Gbps → 10 Gbps → 40 Gbps
- 物理介质支持:
- 双绞线(如100BASE-TX、10GBASE-T)
- 光纤(如1000BASE-LX)
- 拓扑结构演变:
- 总线型拓扑(早期)
- 集线器星型拓扑(Hub-based)
- 交换机星型拓扑(Switched Ethernet)
CSMA/CD机制
- 适用场景:共享总线或集线器连接的以太网。
- 冲突检测与退避:
- 发送过程中持续监听信道状态。
- 冲突发生时立即停止发送,并发出拥塞信号。
- 使用二进制指数退避算法重传。
6.4.3 链路层交换机工作原理
转发与过滤
- 交换机功能:
- 转发:确定数据帧应从哪个端口输出。
- 过滤:判断是否丢弃数据帧。
- 交换表(Switch Table):
- 包含MAC地址、对应端口、记录时间。
- 初始为空,通过自学习动态构建。
- 老化机制:若某MAC地址在设定时间内未出现,则删除该条目。
自学习机制
- 过程:
- 接收到数据帧后,记录源MAC地址与输入端口。
- 更新交换表。
- 查找目标MAC地址:
- 若存在,转发至指定端口。
- 若不存在,向除输入端口外的所有端口广播。
交换机优势
- 消除冲突:每个端口独立通信,无需竞争带宽。
- 异构链路支持:不同速率和介质可共存。
- 易管理性:
- 支持流量监控、统计信息收集。
- 可隔离故障设备(如异常发送大量帧的适配器)。
6.4.4 虚拟局域网(VLAN)
VLAN概念
- 目的:在同一物理网络中划分多个逻辑广播域。
- 实现方式:
- 基于端口的VLAN:交换机端口被分配到不同VLAN。
- 广播域隔离:仅同VLAN内的设备可接收到广播帧。
VLAN配置示例
- 单一交换机划分为EE(电气工程)与CS(计算机科学)两个VLAN。
- 端口2–8属于EE VLAN;端口9–15属于CS VLAN。
VLAN间通信
- 解决方案:
- 连接外部路由器,使不同VLAN之间通过路由器通信。
- 使用三层交换机(集成路由功能的交换机)。
VLAN Trunking(干线连接)
- 用途:连接多个支持VLAN的交换机。
- 机制:
- 使用Trunk端口承载多个VLAN的数据。
- 使用IEEE 802.1Q协议,在以太网帧中插入4字节的VLAN标签。
- 标签包括:TPID(固定值8100)、VLAN ID(12位)、优先级字段(3位)。
VLAN类型扩展
- 基于MAC地址的VLAN:根据设备MAC地址划分VLAN。
- 基于网络协议的VLAN:如IPv4、IPv6、AppleTalk等。
- 跨IP路由器的VLAN扩展:实现广域范围的虚拟局域网。## 6.6 数据中心网络
6.6.1 数据中心架构
- 数据中心的三大作用
- 提供内容(如网页、邮件、视频)
- 支持大规模并行计算(如搜索引擎索引)
- 提供云计算服务(如AWS、Azure)
- 成本构成
- 主机:45%
- 基础设施(UPS、冷却):25%
- 电力:15%
- 网络设备与带宽:15%
- 主机结构
- 使用标准化“刀片服务器”
- 每机架20–40个主机
- TOR交换机连接机架内主机与其他网络设备
- 主机通常具有40/100 Gbps以太网连接
- 拓扑结构
- 分层设计(接入路由器 → Tier-1交换机 → Tier-2交换机 → TOR交换机)
- 所有链路使用以太网协议(铜缆或光纤)
- 支持扩展至数十万主机
- 负载均衡器
- 接收外部请求并分发至合适主机
- 实现NAT功能,隐藏内部IP结构
- 又称“四层交换机”,基于IP+端口进行转发决策
- 冗余设计
- 所有关键设备和链路均支持冗余配置
- 每个TOR可连接多个Tier-2交换机
- 每个子网进一步划分为VLAN(每个包含数百台主机)
- 通信瓶颈问题
- 不同机架间通信受限于共享链路容量
- 例如:100G链路被40个流共享 → 每流仅2.5G
- 解决方案:
- 升级高速交换设备(成本高)
- 同构部署相关服务(灵活性差)
- 多路径互联(如图6.31)
- 多路径路由
- ECMP(等价多路径)实现流量随机分配
- 高级方案支持更细粒度负载均衡
- 个别方案支持包级多路径路由
6.6.2 数据中心网络发展趋势
- 层级化互连网络
- 采用Clos网络结构(源自电话交换理论)
- 支持任意主机间通信
- 多路径提高容量与可靠性
- SDN集中控制
- Google、Microsoft、Facebook等采用逻辑集中式控制
- 明确划分数据平面(简单交换设备)与控制平面(软件定义)
- 虚拟化支持
- VM迁移需保持网络连接一致性
- 数据中心统一为扁平二层网络
- 修改ARP机制为DNS式查询系统
- 物理约束优化
- 极低延迟环境(微秒级)
- TCP等拥塞控制协议难以适应
- 引入数据中心专用TCP变种、RDMA技术、调度理论优化
- 模块化与定制化
- 集装箱式模块数据中心(MDC)
- 支持快速部署与替换
- 核心网络设计挑战大
- 自研网络设备、协议、软件成为趋势
- 可用区(Availability Zone)
- Amazon提出的数据中心异地备份方案
- 多个数据中心位于附近建筑,实现数据同步与容错
6.7 回顾:一次网页请求的一生
6.7.1 初始阶段:DHCP、UDP、IP、以太网
- 获取IP地址
- 发送广播DHCP请求
- 路由器回复DHCP ACK
- 获取IP、默认网关、DNS服务器信息
- 封装过程
- DHCP消息 → UDP段 → IP数据报 → 以太网帧
- 学习交换机
- 第一次发送后交换机记录MAC地址位置
- 后续单播帧直接转发至目标端口
6.7.2 DNS与ARP
- 域名解析
- 浏览器发起HTTP请求前需通过DNS解析域名
- 创建DNS查询消息 → UDP段 → IP数据报 → 以太网帧
- 获取网关MAC地址
- 已知IP但未知MAC → 发送ARP请求
- 网关回应ARP应答 → 获取MAC地址
- 帧发送
- 帧目的MAC为网关
- 数据报目的IP为DNS服务器
6.7.3 域内路由至DNS服务器
- 路由转发
- 学校路由器根据转发表将DNS请求转发至Comcast网络
- Comcast内部路由器使用RIP/OSPF/IS-IS+BGP决定下一跳
- DNS响应返回
- DNS服务器查找缓存中的www.google.com记录
- 返回IP地址64.233.169.105
- 响应数据报经原路径返回Bob的电脑
6.7.4 Web客户端-服务器交互:TCP与HTTP
- 建立TCP连接
- 发送SYN段 → 目标端口80(HTTP)
- 经学校、Comcast、Google网络到达目标服务器
- 服务器响应SYNACK段 → 客户端完成三次握手
- 发送HTTP请求
- 浏览器创建GET请求 → 封装进TCP段 → IP数据报 → 以太网帧
- 请求最终送达www.google.com服务器
- 接收HTTP响应
- 服务器生成HTML响应内容 → 封装发送回客户端
- 客户端浏览器接收响应 → 解析HTML → 展示网页
- 涉及协议总结
- DHCP:动态获取IP
- DNS:域名解析
- ARP:IP→MAC映射
- TCP:可靠传输
- HTTP:应用层协议
- IP:路由寻址
- 以太网:链路层协议## 6.8 总结
- 链路层基本服务
- 将网络层数据报从一个节点传输到相邻节点。
- 数据封装为帧,包含头部和数据部分。
- 链路类型多样性
- 点对点链路:单发送者与单接收者。
- 多路访问链路:多个发送者与接收者共享信道。
- MPLS链路:逻辑“链路”可能本身是一个网络。
- 链路层关键技术
- 错误检测与纠正
- 奇偶校验、校验和、CRC(循环冗余校验)。
- 多路访问协议
- 信道划分(TDM、FDM)、随机访问(ALOHA、CSMA)、轮流机制(轮询、令牌传递)。
- 链路层地址
- MAC地址用于局域网内唯一标识设备。
- ARP协议实现IP地址到MAC地址的映射。
- 虚拟化技术
- VLAN(虚拟局域网)实现广播域逻辑隔离。
- 交换式网络构建
- 局域网扩展、数据中心网络设计。
- 错误检测与纠正
- 以太网的发展
- 从10Mbps逐步演进至10Gbps。
- 使用CSMA/CD机制(现代全双工环境下已不常用)。
- MPLS与数据中心网络
- MPLS提供链路层服务,支持流量工程。
- 数据中心网络采用高性能架构(如Fat Tree、Clos结构)并集成SDN技术。
- 协议栈学习总结
- 完成物理层、链路层、网络层、传输层、应用层的学习。
- 后续章节将探讨无线网络、网络安全和多媒体网络等跨层主题。### Wireshark实验:802.11与以太网
- 提供Wireshark实验用于分析IEEE 802.3以太网协议。
- 实验包括观察Wireshark中的帧格式。
- 另一个实验分析家庭网络环境下的数据包轨迹。
人物访谈:Albert Greenberg(微软Azure网络负责人)
职业背景
- 现任微软Azure网络副总裁。
- 负责微软数据中心与边缘网络、全球光纤与海底网络、FPGA与SmartNIC卸载、容器网络、CDN、边缘网络等。
- 曾发表VL2论文,推动云计算网络发展。
- 早年任职于贝尔实验室与AT&T实验室,是SDN架构先驱之一。
- 拥有达特茅斯学院数学学士与华盛顿大学计算机科学博士。
学术与荣誉
- 美国国家工程院院士、ACM会士。
- 获IEEE Koji Kobayashi计算机与通信奖、ACM Sigcomm奖、Test of Time论文奖。
为何选择网络领域
- 热爱解决实际问题并结合数学建模。
- 受Ed Lazowska(系统方向)与Richard Ladner、Martin Tompa(理论方向)影响。
对网络专业学生的建议
- 网络领域正变得更加多样化、包容和开放。
- 鼓励更多女性与技术少数群体加入。
- 技术背景多样化:架构、编程语言、光学、形式化方法、数据科学、AI、容错系统等。
- 开源系统如SONiC正在改变网络生态。
- 推崇SDN与硬件解耦(Disaggregation)带来的开放性。
职业生涯中最激动人心的项目
- 云计算是近年来最具挑战性的领域。
- 涉及操作系统、分布式系统、性能、安全、机器学习、数据科学、管理等全栈技术。
- SDN在构建大规模软件定义数据中心中起核心作用。
对未来网络的展望
- 云计算尚处于10%的发展阶段。
- 端到端系统中的计算与存储分配将变得更加关键。
- 边缘计算将推动“横向”扩展,形成更丰富的端到端生态系统。
- 5G将成为未来网络的重要组成部分。
职业生涯中的启发来源
- 来自客户与实际网络运维的反馈。
- 与工程师和研究人员的合作带来深刻洞察。
- 尤其赞赏那些精通系统全生命周期的技术人员。