ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

谢希仁课件精读:分组交换原理、存储转发时延与电路交换对比

2026/10/5 1:36:01 拓冰建站 浏览量
谢希仁课件精读:分组交换原理、存储转发时延与电路交换对比 简介本资源为《高级计算机网络》第一章「计算机网络与Internet」的配套课件PDF面向高校计算机、通信工程等专业学生及考研复习者用于梳理计算机网络起源与核心交换技术的基础脉络。内容围绕分组交换的产生背景展开涵盖ARPA网络研究动因、电路交换的建立连接—通信—释放连接三阶段、分组交换的存储转发原理、首部地址与控制信息的作用以及结点与节点译名辨析等易混淆知识点并配有示意图辅助理解。资源包共1个PDF文件大小约12.63MB页面以讲义排版为主适合课堂同步学习或考前快速回顾。目前已有52人学习下载。读者可借此建立从电路交换到分组交换的演进认知掌握报文分段、分组转发与接收端还原的完整流程为后续学习网络体系结构打下基础。1. 从一份谢希仁课件说起为什么分组交换值得你花两小时啃透如果你正在准备计算机网络期末复习或者刚入职做 DevOps 需要补网络底层大概率会刷到谢希仁老师这套《高级计算机网络》课件。第一章 1-2 节这份 PDF 讲的是计算机网络与 Internet 的起源核心就一件事分组交换是怎么取代电路交换的。别小看这一节后面 IP 层、路由转发、拥塞控制的所有设计动机全都埋在这里。我带过几个新人凡是这一节没吃透的后面讲「存储转发」「首部开销」「结点交换机多端口」时基本靠背一追问就露馅。这份课件的好处是它把「为什么」讲得比教材正文还细坏处是排版是 PPT 转 PDF公式和示意图有错位直接读容易漏掉关键推导。下面我按「先立原理、再动手算、最后避坑」的顺序把这份资源拆成能复现的笔记。2. 电路交换的数学账N 部电话为什么必须上交换机2.1 从两两相连到平方级开销课件里有一组很朴素的推导但很多人扫一眼就过了。两部电话机用一对电线就能互通这是全连接的最简形态。到了 5 部电话机两两相连需要 10 对电线。推广到 N 部需要的电线对数是 N(N-1)/2。这个式子是组合数 C(N,2)本质是「每两个端点之间都要有一条独占链路」。关键在于它的增长量级。N5 时是 10 对N100 时是 4950 对N1000 时接近 50 万对。也就是说连接数随电话机数量的平方增长而每部电话能贡献的线路资源是线性的。这个剪刀差就是交换机出现的根本原因——不是技术炫技是成本逼的。我一般会让人动手算一遍而不是只看结论。下面这段 Python 把「全连接线对数」和「上交换机后的端口数」放在一起对比你能直观看到拐点在哪。# 对比全连接与交换机方案的线路开销 def full_mesh_pairs(n): N 部电话两两相连所需的电线对数 return n * (n - 1) // 2 def switch_ports(n): 每部电话接到交换机交换机侧需要的端口数近似 return n for n in [5, 10, 50, 100, 500, 1000]: pairs full_mesh_pairs(n) ports switch_ports(n) # 交换机方案下用户侧每部电话仍占一对线但核心侧收敛到 n 个端口 print(fN{n:5} | 全连接线对{pairs:8} | 交换机端口{ports:5} | 比值{pairs/ports:8.1f})逻辑说明full_mesh_pairs用的是组合数公式switch_ports近似认为交换机侧端口数与用户数同阶。参数上N 取 5 到 1000 是为了覆盖从「小办公室」到「城市级」的量级。跑完你会看到N1000 时全连接方案是交换机方案的 499.5 倍这个比值就是「交换」二字的含金量。2.2 交换的本质是动态分配传输线路资源课件对「交换」给了两层定义一层是转接把一条电话线接到另一条让它们连通另一层是从通信资源分配角度看按某种方式动态分配传输线路资源。第二层定义才是重点它把「交换」从物理动作提升成了资源调度问题。电路交换的调度方式是「独占」建立连接阶段沿途每一段链路都为你预留一条通道通信阶段这条通道只归你用释放阶段再还回去。三个阶段——建立连接、通信、释放连接——缺一不可而且它必定是面向连接的。课件里举了 A 和 B 通话经过四个交换机、C 和 D 只经过一个本地交换机的例子说明路径长短不影响「独占」这个本质。这里有个容易被忽略的细节电路交换的「独占」是按频率或时隙切分的不是按需分配。你打电话时即使不说话那条通道也占着别人用不了。这对语音业务无所谓因为人说话本来就是连续的但对计算机数据就是灾难因为数据是突发的。2.3 计算机数据的突发性为什么判了电路交换死刑课件用一句话点破计算机数据具有突发性这导致通信线路的利用率很低。什么叫突发性你敲一个回车可能瞬间产生几 KB 的请求然后几分钟没有流量下载一个文件带宽跑满几十秒然后归于平静。如果为这种流量建一条独占电路大部分时间线路是空的但别人又用不了。我常用一个类比电路交换像包场看电影不管你来几个人场子都给你留着分组交换像拼车谁有需求谁上车座位按需分配。数据业务的突发性决定了它更适合拼车模式。这也是为什么 Internet 的前身 ARPA 网从一开始就瞄准「计算机之间的数据传送而不是为了打电话」。3. 分组交换的拆装流水线从报文到分组的五步3.1 报文切段、加首部、存储转发课件把分组交换原理拆成五步我按可复现的顺序重排一下。第一步发送端把较长的报文划分成较短的、固定长度的数据段。注意课件里写的是「固定长度」这是早期分组交换的设计现代 IP 分组长度是可变的但「切段」这个思想没变。第二步每个数据段前面添加上首部构成分组。首部里装的是地址等控制信息。第三步分组交换网以「分组」作为数据传输单元依次把各分组发送到接收端。第四步结点交换机根据分组首部中的地址信息把分组转发到下一个结点交换机用的是存储转发方式。第五步接收端收到分组后剥去首部还原成报文。这五步里第三步和第四步是灵魂。课件特意强调「现在左边是前面」因为 PPT 排版容易让人搞混首部和数据的相对位置。首部在前数据在后这是所有网络协议的通用约定后面你抓包看 IP 头、TCP 头都是这个布局。3.2 首部为什么是分组的「导航仪」课件有一页专门讲分组首部的重要性每一个分组的首部都含有地址等控制信息结点交换机根据首部中的地址信息把分组转发到下一个结点交换机。这句话翻译成工程语言就是首部是分组的元数据交换机只读首部不关心数据内容。这带来一个关键设计自由数据部分可以是任意格式网络层不需要理解它。这就是「尽力而为」的雏形——网络只负责把分组送到不保证顺序、不保证不丢。课件里那张分组交换网示意图标注了「注意分组路径的变化」H1 向 H5 发送分组、H2 向 H6 发送分组路径可以不同。这种灵活性正是生存性的来源某条链路断了后续分组可以走另一条。3.3 用一段模拟代码看清存储转发的时延构成光看示意图不够我一般会写一段简化模拟把「存储转发」的时延拆开。下面这段代码模拟三个分组经过两个结点交换机的过程每个结点必须收完整个分组才能开始转发。# 简化存储转发时延模拟 def store_and_forward(packet_size_bits, link_rate_bps, num_hops): packet_size_bits: 单个分组的比特数 link_rate_bps: 链路速率比特/秒 num_hops: 经过的链路数结点交换机数 1 transmission_delay packet_size_bits / link_rate_bps # 单跳发送时延 # 存储转发每个中间结点都要完整收完再发总时延 num_hops * 发送时延 total num_hops * transmission_delay return transmission_delay, total # 参数1500 字节分组1 Mbps 链路经过 2 个交换机3 跳 pkt 1500 * 8 rate 1_000_000 hops 3 per_hop, total store_and_forward(pkt, rate, hops) print(f单跳发送时延: {per_hop*1000:.2f} ms) print(f存储转发总时延: {total*1000:.2f} ms)逻辑说明transmission_delay是「把分组所有比特推上链路」的时间等于分组大小除以链路速率。存储转发的关键假设是每个中间结点必须收完整个分组才能开始转发所以总时延是跳数乘以单跳发送时延。参数上1500 字节是经典以太网 MTU1 Mbps 是老式链路速率你可以把 rate 改成 100_000_000 看时延怎么降。这个模型忽略了传播时延和排队时延但足以说明「跳数越多、分组越大存储转发越吃亏」。3.4 结点还是节点一个被课件专门纠正的译名课件里有一页「请注意名词结点」专门区分 node 的两种译法。天线上的驻波节点像竹竿上的「节」所以译「节点」而网络中的 node 标准译名是「结点」不是「节点」。这个细节看着吹毛求疵但在写论文、做技术文档时是硬性规范。我审过一些稿子把「结点交换机」写成「节点交换机」懂行的评审一眼就看出没读过经典教材。顺带说一句热搜里常出现「删除所有值为 x 的结点」那是数据结构链表的题和这里的网络结点不是一回事别混。网络结点的核心特征是「同等重要」——课件明确写了「所有的网络结点都同等重要因而大大提高网络的生存性」。没有中心控制结点任何结点被毁其余结点仍能通过冗余路由通信。4. 避坑与排查读这份课件时最容易翻车的五个点4.1 把「固定长度数据段」当成现代 IP 分组的规则现象有人读完课件后认为 IP 分组长度是固定的抓包看到不同长度的包就怀疑自己理解错了。原因课件讲的是分组交换的早期原理用「固定长度」简化说明而现代 IP 分组长度可变由 MTU 和分片机制决定。解决把课件的「固定长度」理解为教学简化实际工程中以 MTU常见 1500 字节为上限超长报文靠 IP 分片处理。4.2 混淆「面向连接」和「可靠传输」现象以为电路交换面向连接就等于可靠分组交换无连接就等于不可靠。原因面向连接描述的是「通信前是否建立通道」可靠描述的是「是否保证送达和不丢」。解决电路交换面向连接但不一定可靠链路被炸就断分组交换无连接但可以通过上层协议做到可靠比如 TCP。这两组概念正交别绑死。4.3 忽略首部开销对有效吞吐的影响现象算吞吐量时只算数据部分忘了首部占的比特。原因课件强调首部含地址等控制信息但没展开算开销。解决每个分组的总比特数 首部 数据有效吞吐 数据比特 / 总比特 × 链路速率。首部越大有效吞吐越低这也是为什么 IPv6 要精简首部。4.4 把「结点」写成「节点」导致文档不规范现象技术文档里「结点交换机」写成「节点交换机」被评审退回。原因没注意课件专门纠正的译名规范。解决网络语境统一用「结点」只有描述驻波、树结构时才用「节点」。这个坑不致命但很影响专业形象。4.5 用电路交换的思维理解分组交换的路径现象认为一个报文的所有分组必须走同一条路径。原因受电路交换「建立一条通道」的思维惯性影响。解决分组交换网中每个分组独立选路课件示意图明确标注「注意分组路径的变化」。这也解释了为什么分组可能乱序到达需要上层协议重排。5. 把课件变成可验证的笔记三个进阶技巧5.1 用 Wireshark 抓一次真实的分组首部课件讲首部是抽象的抓一次包就具体了。打开 Wireshark随便访问一个网页过滤ip点开任意一个包你会看到 IP 首部里源地址、目的地址、TTL、协议号等字段。对照课件说的「首部含有地址等控制信息」你会发现课件没骗你只是它用示意图代替了真实字节。我一般会让学生数一下 IP 首部固定部分占 20 字节再算一下 1500 字节 MTU 下有效载荷占比体感就来了。5.2 用 ping 的 TTL 观察存储转发的跳数ping返回的 TTL 值可以反推经过的跳数。Linux 默认初始 TTL 是 64Windows 是 128你收到的 TTL 是初始值减去经过的路由器数。比如收到 TTL57说明经过了 7 跳。这正好对应课件里「结点交换机根据首部地址转发到下一个结点交换机」的存储转发过程。多 ping 几个不同地域的地址跳数差异会让你对「路径变化」有直观感受。5.3 用表格把三种交换方式钉死在脑子里课件只重点讲了电路交换和分组交换但期末复习常考报文交换。我整理了一张对比表参数维度来自课件原文和常见考点。维度电路交换报文交换分组交换是否面向连接是否否传输单元比特流整个报文分组资源分配独占存储转发存储转发时延特性建立时延大传输时延小转发时延大转发时延小可能乱序线路利用率低中高典型场景传统电话早期电报Internet这张表我建议手抄一遍考试时三种交换的对比题基本跑不出这些维度。课件里「电路交换传送计算机数据效率低」的结论对照表格里「线路利用率低」那一行就理解了。5.4 一个我踩过的坑刚学这一节时我以为「分组交换一定比电路交换好」后来做实时语音项目才发现分组交换的时延抖动对实时业务不友好电路交换的独占反而保证了稳定时延。所以没有绝对优劣只有场景匹配。从那以后我每次评估交换方案都强制走一遍「业务流量特征 → 时延要求 → 资源成本」三步不再凭直觉下结论。这份谢希仁课件最大的价值不是给你一个标准答案而是把「为什么这么设计」的推理链完整摆出来让你有能力自己判断。希望帮到你。本文还有配套的精品资源点击获取