ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

计算机网络第五章运输层复习:TCP/UDP、滑动窗口与拥塞控制全攻略

计算机网络第五章运输层复习:TCP/UDP、滑动窗口与拥塞控制全攻略 简介计算机网络第五章传输层课后习题答案面向高校计算机专业学生、考研备考生及自学网络基础的学习者针对“传输层”章节普遍缺乏详解答案的痛点提供一份可直接对照的解题参考。资源包含1个doc文件压缩包整体约51KB文档排版清晰可在Word中打开、编辑或打印便于按题号逐步查阅。内容覆盖运输层地位与作用、UDP和TCP的特性差异、端口与伪首部机制、停止等待协议、IP数据报分片计算等核心知识点对5-01至5-20等题目逐一给出解题思路和最终答案部分题目还涉及画图和证明能够帮助读者厘清传输层与网络层的区别理解可靠传输的实现原理。目前已有2398人学习/下载适合在课程复习、期末考试或考研刷题时作为补充资料使用。1. 一份第五章答案文档能帮你攻克的其实是“运输层”这道坎期末复习群的群文件里出现《计算机网络课后习题答案(第五章).doc》时很多人的第一反应是下载、打开、直接背。其实这份文档真正对应的内容是计算机网络课程里的运输层也就是以 UDP 和 TCP 为主的端到端传输机制。无论你用谢希仁主编的《计算机网络》第八版还是把《计算机网络自顶向下方法》当补充运输层大多都被安置在第五章前后。它能解决的核心问题是课后习题的标准推导该写到什么程度。风险也很突出浏览答案不等于建立推导能力期末和 408 都爱在这一章出计算题。下面我按自己复习时验证过的顺序把这份答案文档拆成实际可用的学习方法再把运输层最容易翻车的几个细节单独拎出来。适合正在做期末总复习或刚开始转计算机网络方向的人。2. 运输层的底层逻辑端口、UDP 与 TCP为什么第五章是期末与考研的兵家必争之地运输层解决的是应用进程之间的数据交付。网络层能把数据送到某台主机却不知道这台主机上的浏览器、邮件客户端、即时通讯软件到底谁来接收运输层用端口号补齐了这最后一公里。因此第五章的题目分量很重因为它是继网络层之后第一次把状态机、编号机制和窗口机制集中在一起三次握手、四次挥手、滑动窗口、拥塞控制全部在这一章爆发。如果只背结论而不串机制后面无论面对期末简答题还是考研 408 的选择题都会吃亏。2.1 端口到底在分什么从 IP 到进程的最后一公里先建立一个心智模型IP 地址负责跨网络找到主机端口号负责在主机内部找到进程。端口号是 16 位的整数范围 0 到 65535其中 0 到 1023 为熟知端口比如 HTTP 的 80、HTTPS 的 443、DNS 的 53。课后题如果问“端口的作用是什么”不要只写“区分不同应用”更完整的答案应当补上五元组概念源 IP 地址、源端口、目的 IP 地址、目的端口、协议类型。只有这五个元素都匹配TCP 或 UDP 才能唯一确定一条连接或一次通信会话。考试里还有一类题会故意给你两组参数问它们能否同时存在于同一个服务器监听端口。判断的关键是监听端口可以同时承载大量连接但每条连接必须由完整的五元组区分。只要源 IP 或源端口有任何一处不同就是两条不同的连接。这个结论在 UDP 场景下同样成立因为 UDP 的通信会话同样靠五元组标识。另一个容易被忽略但频繁出现在选择题里的知识点是复用与分用。发送端多个应用进程可以同时通过同一个出口发送数据这叫复用接收端根据端口号把数据分给不同进程这叫分用。回答“为什么需要端口复用”时至少包含两层一是网络层只交付到主机不感知应用二是端口让多路复用有了分配依据避免多个进程抢占同一出口时无法区分数据归属。提示我一般会把五元组横着写在草稿上再对照抓包工具里的协议行核对两次端口相关的小题基本就不会再错了。2.2 UDP 的“无连接”不是缺陷而是有意的取舍第五章的课后题里UDP 看似简单实际考得很细。它只在 IP 数据报服务上增加了复用分用和差错检测这两个最低限度功能不需要建立连接不维护连接状态首部只有 8 字节也没有拥塞控制。很多人把这一点解读成“能力不行”更客观地说这是面对实时性要求时做出的取舍。如果遇到“UDP 适用于哪些场景”这类提问不要只举一个例子就结束。我一般按三个特征去对应场景无连接意味着首延迟低适用于 DNS 查询、DHCP 这类一次请求一次响应的短交互不维护状态意味着两端不需要维护复杂连接上下文适用于音视频通话这类能容忍少量丢包、但绝不容忍长时间卡顿的应用没有拥塞控制意味着不会被 TCP 的排队机制拖住适用于实时流媒体。最直接的例子是直播偶尔丢几帧画面人眼看不出来如果改用 TCP 重传延迟反而会明显变大。关于 UDP 首部至少要能说出四个字段源端口、目的端口、长度、校验和。校验和如果检测出错UDP 通常会直接丢弃报文不会要求重传。这个细节在选择题里经常被设计成干扰项不要写成“UDP 会重传出错的报文”。对比型的简答题也是期末热门。建议自己整理一张对照表而不是只看文档里现成的结论UDP无连接、尽最大努力交付、面向报文、首部 8 字节、无流量控制、无拥塞控制、延迟较低、适合 DNS/音视频/广播 TCP面向连接、可靠交付、面向字节流、首部至少 20 字节、有流量控制、有拥塞控制、可能因重传产生延迟波动、适合 HTTP/文件传输/邮件对比表列完之后再补一句“选择协议的依据不是哪个更好而是业务能否容忍丢包和延迟”这一句在简答题里很加分。2.3 TCP 的可靠传输序号、确认与重传之间的三角关系TCP 的可靠传输是第五章的重头戏。很多人首先会记反序号的含义TCP 序号不是给报文编号而是给字节流编号。假设发送端发出一个数据段起始序号是 100携带 100 字节数据那么这个段的序号是 100下一个段的序号就是 200而不是 101。确认号的含义也容易记反。确认号表示“下一个期望收到的字节序号”不是“最后收到的字节序号”。如果收到确认号 300意思是序号到 299 之前的字节都已经正确接收发送端应该从 300 开始继续发送。课后题里的计算答案如果对不上问题多半出在这个偏移上。TCP 首部里最容易考的四个字段是序号、确认号、窗口、数据偏移。数据偏移不是网络传输的偏移它表示 TCP 首部占多少个 32 位字本质是在告诉接收端首部有多长。窗口字段表示接收端当前还能接收多少字节也就是 rwnd 的体现。考试如果给出一段 TCP 首部字节流要求解析这些字段先把这四列对号入座再谈后面的算法。往下深入可靠传输的实现有一个从简到繁的演进停止等待 ARQ 和连续 ARQ。停止等待协议要等到确认才发下一个信道利用率太低所以教材会引出流水线传输。连续 ARQ 里又分回退 N 帧和选择重传两种思想回退 N 帧实现简单但一旦出错要重传从丢失位置开始的后续所有帧选择重传只重传缺失的段代价是接收端要缓存乱序数据。TCP 最终的做法是字节序号加滑动窗口加累计确认可以理解成回退 N 帧与选择确认思想的混合体。把序号、确认号、重传三者放在一起就能理解超时重传和快重传为什么同时存在。超时重传依赖一个合理的超时值快重传则是在收到三个重复 ACK 后立即重传应对不同场景下的丢失。这部分只要推导通了后面做拥塞控制图表题就会顺手很多。3. 吃透第五章习题从“背答案”到“会解题”的 5 类题型拆解与其对着答案一句一句背不如先把第五章课后题拆成五个类型握手挥手、窗口计算、拥塞控制、RTO 计算、概念辨析。每一类都有固定的推导路径先把路径写一遍再打开答案文档做校验效率会高很多。3.1 三次握手与四次挥手画图、数状态、算序号课后题大概率会要求画出 TCP 连接建立和释放的时序图。不要只背图要在草稿上把它还原成一张带标志位和编号的记录表1 客户端到服务端 SYN1, seqx 2 服务端到客户端 SYN1, ACK1, seqy, ackx1 3 客户端到服务端 ACK1, seqx1, acky1连接释放则看成两组交互主动关闭方发送 FIN对方回复 ACK随后对方再发送 FIN主动关闭方再回复 ACK。这两组不能合并成一次是因为 TCP 支持半关闭另一端可能还有数据要发。序号计算有一个关键记忆点SYN 和 FIN 本身都要占一个序号。建立连接时客户端发的 SYN 消耗了序号 x所以确认号必须是 x1释放连接时客户端发的 FIN 同样消耗一个序号确认号也要在 FIN 序号的基础上加 1。很多学生做错就是漏掉了 FIN 占序号这条规则。状态迁移是和时序图绑定在一起的考点。客户端从 CLOSED 到 SYN_SENT再到 ESTABLISHED释放时经过 FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT服务端从 LISTEN 到 SYN_RCVD再到 ESTABLISHED、CLOSE_WAIT、LAST_ACK。复习时先合上文档自己按时间顺序默写状态名再打开答案对照。回答“为什么需要三次握手”的标准思路是防止已过期的连接请求突然又到达服务器导致服务器建立一条无效连接三次握手让双方都确认自己和对方的收发能力正常。3.2 滑动窗口与流量控制给一道题能写出完整推导滑动窗口类计算题非常值得拿分因为它有明确的运算顺序。课后题通常会给出接收窗口和发送方已发送但未确认的字节数让你判断还能发送多少数据。我习惯按四步走。第一步先明确确认号确认号代表已经正确接收的最后一个字节的下一位是整个计算的起点。第二步统计发送方当前已经发送且未收到确认的字节数记为已占用窗口。第三步用窗口值减去已占用窗口差值就是还能继续发送的字节数。第四步如果题目问的是还能发几个报文段再按 MSS 向下取整。做题前还要统一单位。TCP 窗口的单位是字节但一些简化的课后题会把单位写成“个报文段”。如果答案和标准对不上先检查是不是两类单位被混用了。我写这类题时会在草稿上画一条数轴左侧标注已确认位置中间标注已发送未确认区域右侧标注窗口边界然后逐个把发送端当前状态填进去。答案文档里的图再详细也不如自己画一遍可靠。还有一个容易被文档简化掉的点接收窗口为 0 时发送方不能继续发业务数据但会启动持续计时器发送 1 字节的窗口探测报文。窗口探测不是重传业务数据而是试探接收窗口是否已经重新打开。期末选择或填空如果考到这个细节只背答案不看机制的人很容易翻车。提示验证滑动窗口题是否做对可以套用一个简单原则流量控制层面的有效发送窗口是接收窗口拥塞控制层面的有效发送窗口是拥塞窗口最终真正发送窗口取两者较小值。3.3 拥塞控制慢开始、拥塞避免、快重传、快恢复串成一个流程拥塞控制的图表题是第五章的大题主力。核心变量是 cwnd 和 ssthresh。最经典题型是初始 cwnd 为 1 个 MSSssthresh 为 16 个 MSS经历若干轮传输后发生超时要求画出窗口变化过程。先把“传输轮次”理解为“一个 RTT 内发送完一整轮数据”再按慢开始规则每经过一个轮次 cwnd 翻倍。可以自己建一张表传输轮次1cwnd 从 1 变为 2处于慢开始 传输轮次2cwnd 从 2 变为 4处于慢开始 传输轮次3cwnd 从 4 变为 8处于慢开始 传输轮次4cwnd 从 8 变为 16到达门限 传输轮次5cwnd 从 16 变为 17进入拥塞避免 传输轮次6cwnd 从 17 变为 18拥塞避免阶段每轮加 1这张表在草稿上多推演几行再对照答案文档的曲线通常一眼就能发现自己错在哪。接下来要掌握两类触发事件。如果发生超时说明网络拥塞严重ssthresh 被更新为当前 cwnd 的一半cwnd 重置为 1重新进入慢开始如果只是收到三个重复 ACK则触发快重传ssthresh 同样减半但 cwnd 先设置为新 ssthresh 加 3进入快恢复随后每多收到一个重复 ACK 再增加 1 个 MSS直到收到新数据的确认后再把 cwnd 降到新的 ssthresh。记忆点可以压缩成一句话超时是重病窗口清零重来重复 ACK 是轻病减半之后快速恢复。计算题如果询问收到三个重复 ACK 后的 cwnd直接用新 ssthresh 加 3不要和超时后的清零逻辑混在一起。我在批自己作业时发现这恰恰是看过答案文档后错误率仍然最高的位置。3.4 超时重传时间与往返时间RTT 与 RTO 的换算习惯RTO 计算题在第五章里占比不如前面几类高但期末卷的选择和填空经常照顾到。它主要考两个点RTT 样本如何进入平滑值平滑值如何换算成 RTO。经典教材里的简化计算是RTT_S (1 - α) × RTT_S α × RTT_Newα 通常在 1/8 附近RTO RTT_S 4 × RTT_D。较新的教材或 408 相关题目则会参考 RFC 6298 的思路SRTT (1 - α) × SRTT α × RTTRTTVAR (1 - β) × RTTVAR β × |RTT - SRTT|RTO SRTT max(G, 4 × RTTVAR)其中 α 取 1/8β 取 1/4。做题时如果题目没有明示权重我默认 α1/8、β1/4结果保留到小数点后两到三位再和答案核对。要注意一个隐藏前置算 RTO 之前必须先更新 RTT_S用新平滑值去算不能拿旧值套新样本。另一种情况是题目给出重传报文的 RTT 样本要求计算 RTO这里涉及 Karn 算法发生重传后重传报文的 RTT 样本不参与平滑 RTT 的更新避免歧义。答案文档如果因此跳过某个样本不要觉得奇怪这是有意为之。3.5 课后题的“超纲”选项哪些要深挖哪些可以直接放一份完整的课后答案文档里并不是所有题都值得同等投入。Nagle 算法、延迟确认、选择确认 SACK 这些话题名义上出现在第五章但在多数期末考卷里不会作为大题出现它们更多出现在考研 408 的拔高题和面试八股文里。如果复习时间有限我会把它们往后放先确保基础题正确率。相反看起来特别简单的概念比如复用分用、端口分类、UDP 首部字段、TCP 首部字段含义却值得多花时间。这些是选择题和填空题反复出现的内容也是被当成“背一背就行”的高发地带。判断方法很简单凡是答案文档里只用一两句话回答的题大概率是概念填充凡是要求画图或列计算步骤的题才是需要反推和演算的核心题型。把这两类分开复习节奏会舒服很多。4. 计算机网络第 5 章的 4 个坑排查与避坑指南这一章里的坑来自我做课后题和看答案文档时反复遇到的真实问题。每条都按现象、原因、解决对策来写可以直接对照。4.1 握手图画得顺一问状态就卡壳状态迁移才是考点核心现象打开答案文档能把三次握手和四次挥手的箭头图画得很标准但试卷突然问“服务端在收到最初的 SYN 后处于什么状态”一下答不上来或者把 SYN_RCVD 和 ESTABLISHED 的顺序搞反。原因把时序图当成两条线之间的箭头来背没有同步记忆客户端和服务端各自的状态变量。TCP 连接管理在考题里的呈现方式往往是状态而不是箭头。解决在时序图旁边分两列写状态。客户端一侧从 CLOSED 到 SYN_SENT再到 ESTABLISHED释放时经过 FIN_WAIT_1、FIN_WAIT_2、TIME_WAIT服务端一侧从 LISTEN 到 SYN_RCVD再到 ESTABLISHED、CLOSE_WAIT、LAST_ACK。每画一步箭头就同步更新状态列把状态和箭头绑定选择题问状态时才不会发懵。4.2 拥塞窗口题总差一步混淆“传输轮次”与“时间单位”现象自己按答案文档算拥塞窗口数字总是差一轮或者把连续几个 RTT 的结果算成了连续若干毫秒的递增结果导致窗口增长过快曲线明显比标准答案陡。原因拥塞控制里说的“每轮”是按一个 RTT 更新一次不是按毫秒或秒更新。慢开始是每经过一个 RTTcwnd 翻倍如果误认为每隔固定时间翻倍图形自然就不对。解决做题时把横轴明确写成“传输轮次(RTT)”而不是“时间”。如果题目给了 RTT 数值比如一个 RTT 为 200ms就先按轮次画出窗口变化表最后再换算成时间刻度。这样检查一遍误差出在哪个轴上一目了然。答案文档里的曲线如果横轴是时间也要先在脑子里把它翻译成轮次编号。4.3 快重传是“收到 3 个重复 ACK”别记成 2 个或 4 个现象判断快重传触发条件的选择题里有人选 2 个重复 ACK有人选 4 个重复 ACK还有人把原始 ACK 也算进重复数量于是总数写成 4。原因教材通常写成“收到三个重复的确认”“重复”二字容易被忽略。有些讲义会说“连续收到 4 个 ACK”实际指的是原始 ACK 加三个重复 ACK但学生一旦听岔就记成了 4。解决把条件记成一句话发送方收到三个重复 ACK立即重传尚未确认的报文段。原始 ACK 不计入重复数量。计算 cwnd 变化时也按这条线走快重传后进入快恢复ssthresh 减半cwnd 设为新 ssthresh 加 3之后的变化方式与超时场景完全不同。把几种表述统一成 Reno 算法的标准描述就不会再混。4.4 看答案文档做题一对照就觉得懂了合上答案再做一遍现象复习时一边看答案一边点头感觉每个推导都能看懂。可考试时遇到同类型题步骤却在某个中间状态突然中断算法推不下去。原因看答案属于被动识别大脑会把“认识”误判成“会用”。尤其对拥塞控制这类多阶段过程被动阅读不产生输出能力考场上换一个初始值就断片。解决把答案文档当成遮罩练习工具。打印出来或在平板里使用时先用白纸遮住解答自己完整写推导再平移遮罩逐行对照。中途卡住的位置用红笔标记当天或次日只重做带标记的题。我对自己有一个硬性要求三次握手、四次挥手、滑动窗口、拥塞控制这四类题每周在无参考状态下各完整默写一遍能写出来才算真正过关。5. 用一份答案文档把第五章变成考前加分项验证方法与进阶用法基础推导建立之后这份答案文档还能用来做更高阶的自测。5.1 自己出题给答案文档“换参数、翻方向”最简单的验证方式是把原题条件替换一遍。比如原题问“初始 cwnd 为 1ssthresh 为 16求超时后的过程”我就改成“初始 cwnd 为 4ssthresh 为 12过程中收到三个重复 ACK求传输轮次表”。换方向也值得做把正向计算改成反向推理例如只给出超时后第 4 轮的 cwnd 结果反推初始 ssthresh。自己出题并不需要创造新题型只要把文档里的数值和触发事件互换就能获得一组新练习一题多练的效果远好过再看一遍答案。5.2 拿“八股面试题”做迁移验证把背答案变成能讲题计算机网络八股文里最常抽到的几道题恰好就是第五章的内容为什么 TCP 建立连接需要三次握手释放连接却要四次流量控制和拥塞控制有什么区别TIME_WAIT 的作用是什么如果能在不看文档的情况下用不超过三分钟把这些问题讲给同学听并且对方能听懂才算把知识点内化。我在期末复习时常用这个办法讲不下去的地方就回到对应章节再做一次白纸默写。5.3 回到真题与教辅用期末卷和考研资料做交叉验证最后一步是把答案文档放回真题环境。期末复习先做近两年学校期末卷标出涉及运输层的题再与答案文档里的题型对比。如果目标是 408就用王道计算机网络对应章节的真题操练遇到与答案文档不一致的地方去找湖科大教书匠这类讲解视频做交叉验证。注意不是用一份材料的答案去压另一份材料而是看哪个解释更贴近当前考卷的评分习惯。我自己就吃过亏当年期末前一天还在背某一种 RTO 简化公式结果试卷用的是另一种权重风格当场算错。从那以后我总结出一个习惯先摸清考卷风格再决定以哪份答案作为最终口径。这套顺序后来一直延用到备考 408帮我少踩了不少坑。希望帮到你。本文还有配套的精品资源点击获取
返回列表