首页 / 资讯中心 / 文章详情

计网计算题全攻略:从CRC校验到TCP拥塞控制,期末考研突击必备

计网计算题全攻略:从CRC校验到TCP拥塞控制,期末考研突击必备 ★ FEATURED ARTICLE
计网这门课里要论“看着简单却容易丢分”的东西计算题一定排得上号。平时上课听概念都懂一到考试把链路层、网络层、传输层的大题放在一起很多人就懵了。这份整理是我计科-计网系列的第8篇专门把计网里最常考的那几类计算题捞出来从CRC校验、最小帧长到子网划分、IP分片再到滑动窗口效率和TCP拥塞控制套路和手算过程都会过一遍。期末突击、考研复习、自考刷题都可以直接拿过去用。1. 计网计算题到底在考什么1.1 为什么计网计算题总丢分我见过太多同学在计网计算题上翻车但说实话这类题目的难度并不高原因是它不像高数那样绕反而更像“协议流程 单位换算”的组合题。丢分往往丢在三个地方第一知识点太散每一层都有属于自己的一两个计算题你学到后面忘了前面第二单位混乱带宽用Mbps、帧长用字节、传播速率用m/s混在一起不统一结果差好几个数量级第三流程性题目不会动态推演比如TCP拥塞控制算法本身两条规则就讲完了难的是“第几个RTT超时”“阈值以谁为基准”“重传后cwnd到底从几开始”。我的建议是拿到一个计算题先判断它考的是哪一层。CRC和最小帧长属于链路层子网划分和IP分片属于网络层滑动窗口和拥塞控制属于传输层。判断完层级你脑子里就有对应的公式和操作流程而不是看到数字就硬套。把“在做什么”搞清楚计算题才不会成为玄学。还有一个很常见的现象不少同学公式背得滚瓜烂熟但不会用。比如最小帧长公式里的τ到底取单程还是往返停止等待协议的信道利用率分母到底是发时延加单程还是加往返这些细节一含糊结果就全错了。所以我不建议纯背公式而是每道题都先问自己一句这个公式的分子分母分别代表什么时间这样不管题目怎么换皮你都能反应过来。1.2 高频考点一览计网计算题虽然分布在各层但期末和考研真正反复出现的翻来覆去就是下面这些考点常考形式核心公式 / 关键点CRC循环冗余校验给信息位和生成多项式求发送序列模2除法余数位数等于最高次数发送序列信息位余数CSMA/CD最小帧长给距离、传播速率、数据率求最短帧长最短帧长 ≥ 2τ×Rτ是单程传播时延子网划分给IP和子网数求掩码、主机数、合法范围借k位满足2^k≥子网数主机数2^(32-新掩码)-2CIDR路由聚合多个子网合并成一个转二进制找最长公共前缀IP分片给总长度和MTU求分片数、片偏移、MF每片数据部分除最后一片必须是8字节整数倍停止等待/滑动窗口效率给帧长、带宽、RTT求信道利用率发送时延/(发送时延RTT)可乘窗口数但不超过1TCP拥塞控制给ssthresh和RTT推cwnd变化过程慢启动×2拥塞避免1超时ssthreshcwnd/2、cwnd1这七类基本就是计算题的“全部弹药”。把这表看明白后面就是熟练度问题。下面我会按链路层、网络层、传输层的顺序把每类题的完整手算流程拆开讲。2. 链路层必考CRC校验与最小帧长计算2.1 CRC手算完整流程CRC循环冗余校验在数据链路层做检错本质是模2除法。所谓模2除法和普通除法最大的区别是每一位都是按位异或没有进位也没有借位。生成多项式写成二进制时只看系数比如 G(x)x^3x1从高次项到低次项系数分别是1、0、1、1所以除数就是1011。这里的最高次数r3意味着要在信息位后面补3个0再拿补完的序列去除以多项式对应的二进制数。举个例子信息位M1011001生成多项式G(x)x^3x1。先写出被除数M后面补3个0得到1011001000。然后用1011逐步做异或除法最终余数是011。发送方发出的完整帧就是“信息位 余数”也就是 1011001 011。接收方拿到整个帧后用同一个1011去除余数为0就认为没有出错。注意余数是3位如果算出来只有2位前面必须补0凑满r位这一点特别容易丢分。做这道题最容易翻车的有三处一是多项式写成二进制时漏常数项比如x^3x1写成1010后面计算全错二是余数前置0被省略导致发送序列长度不对三是把“信息位余数”的顺序写反。CRC在硬件里是用移位寄存器实现的考试只要求手算但原理一样你可以把它理解成一条固定规则的位操作流水线按位往下扫最后剩下r位余数。每次做题都把异或过程写清楚宁可写慢一点也别凭感觉跳步。2.2 以太网最小帧长与冲突检测CSMA/CD的计算题几乎只考一个点最短帧长。要理解它必须先理解冲突检测窗口。以太网是边发边听的站点在发送过程中同时检测总线上是否有冲突。信号从总线一端传到另一端需要单程传播时延τ如果刚好在帧快要发完的时候出现冲突发送端可能已经发完了冲突信号回来时它已经处于不监听状态就会漏判。所以规定一个帧的发送时间必须大于等于2τ也就是冲突信号一来一回的时间这就是“争用期”。于是最短帧长数据发送速率×争用期速率×2τ。题目一般这么出某以太网连接长度1km电磁波在介质中的传播速度为2×10^8 m/s数据率为100Mbps求最小帧长。先算单程传播时延τ1000/(2×10^8)5×10^-6 s。再算争用期2τ10^-5 s。最后最小帧长10^-5×100×10^61000bit也就是125字节。如果算出来不是整数要向上取整到字节因为帧长必须按字节发送。这里有几个坑要提醒。公式里的“带宽”是数据发送速率不是信道带宽题目给“100Mbps”就直接用这个数。另外τ是单程传播时延如果题目直接给RTT往返时延那就不需要再乘2因为2τ就是RTT。很多同学背了“最短帧长2τ×速率”看到RTT又下意识再乘2结果多了一倍。考试还会反过来问“最远能传多远”那就用标准帧长反推允许的2τ再除以传播速率注意要除以2才是距离。2.3 实操心得单位换算与常数别死记链路层这两题我真的建议你把所有单位统一成“bit”和“秒”再算。长度用米时间用秒速率用bit/s帧长用bit。题目给字节就先乘以8给km就先化成米给Mbps就写成×10^6。我曾经见过一个学弟把1km直接代入公式忘了化成1000m结果算出来的最小帧长只有0.125字节整个题毁在第一步单位换算上。还有一个小经验常数别死记。考试时如果忘了电磁波在介质中的传播速度可以大致认为等于2×10^8 m/s约是光速的三分之二但更稳妥的是认真看题因为题目几乎都会给。至于标准以太网最小帧长64字节那是规定值不是推导出来的“唯一答案”做题时不要把64字节这一条当成公式。链路层的计算题是计网里最“良心”的题公式短、变量少只要你单位换算过关基本就是送分题。3. IP网络层计算子网、聚合与分片3.1 子网划分三步走子网划分是网络层最经典的计算题套路非常固定。第一步看原来的掩码和需要的子网数确定借用几位主机位。比如192.168.10.0/24是一个C类地址要划分成4个子网。因为2^24所以从主机位借2位新掩码从/24变成/26。第二步算每个子网的地址块大小2^(32-26)64也就是说每个子网有64个IP地址。第三步从0开始按块大小递推写出每个子网的网络地址和合法主机范围。具体到这个例子四个子网分别是192.168.10.0/26、192.168.10.64/26、192.168.10.128/26、192.168.10.192/26。合法主机范围分别是1~62、65~126、129~190、193~254。每个子网的广播地址就是下一个子网网络地址减1比如第一个子网广播地址是192.168.10.63。为什么主机数要减2因为网络地址和广播地址不能分配给主机用它们是固定的一个是“本子网”一个是“全体广播”。做这类题最纠结的是“全0和全1子网到底能不能用”。CIDR出现以后全0子网和全1子网默认可用所以子网数就是2^k但如果题目明确说“按老教材”“不允许全0/全1子网”那可用子网数是2^k-2。我给你的建议是审题以题目倾向为准不要在考场上自作主张。还有一个易错点题目问“每个子网能容纳多少台主机”答案不是64而是62别在最后一步忘了减2。3.2 路由聚合找最长公共前缀路由聚合和子网划分是互逆操作。子网划分是把一个大块切成小块路由聚合是把小块合并成大块。计算的核心方法是把IP地址的对应字节转成二进制从最高位往低位数看前面多少位完全一致一致的位数就是聚合后的掩码长度。举个例子10.1.0.0/24、10.1.1.0/24、10.1.2.0/24、10.1.3.0/24这四个子网要聚合。前两个字节10和1完全一样不用管关键看第三字节0是000000001是000000012是000000103是00000011。这四个数前6位都是000000只有最后2位在变所以公共前缀是原来的16位6位22位聚合结果就是10.1.0.0/22。这个聚合后的地址块包含2^(32-22)1024个IP地址刚好是4个/24的总和用这个反推可以验证是否算错。这里必须强调一个前提聚合不是“看到几个子网就拼在一起”。必须满足两个条件子网地址块连续而且数量是2的幂。比如10.1.0.0/24和10.1.2.0/24中间缺了10.1.1.0/24就不能直接合并成10.1.0.0/22因为聚合出来的地址块会包含不存在的子网。做题时别盯着十进制差异看一定要转二进制找公共前缀这才是路由聚合的本质。3.3 IP分片计算三个容易错的地方IP分片是网络层计算题里最容易绕晕的一道因为它涉及总长度、片偏移、MF、DF四个字段而且片偏移单位非常反直觉。你需要死记三点第一总长度和MTU都以字节为单位但片偏移字段以8字节为一个单位第二除了最后一个分片每个分片的数据部分长度必须是8的整数倍这样才能用整数表示偏移第三每一片都要单独加20字节IP首部所以分片后的“总长度”不是简单把原始数据切割。看一个经典题原始IP数据报总长度4000字节其中包含20字节首部要经过MTU1500字节的链路问分成几片、每片的长度和片偏移。原始数据部分4000-203980字节。每片最大总长度是1500所以每片数据最多1500-201480字节而1480÷8185正好是8的整数倍。于是分3片片1数据1480总长度1500片偏移0MF置1片2数据1480总长度1500片偏移185MF置1片3数据1020总长度1040片偏移370MF置0。片偏移370是怎么来的前两片数据共2960字节2960÷8370。这个题有三个隐藏考点。第一如果MTU给的是2000字节最大数据部分理论上是1980字节但1980不是8的整数倍需要向下取整到1976。这是考试常挖的坑看到不能整除不要直接往下算先调整。第二MF字段表示“后面还有分片”除最后一片外都必须置1DF字段表示“是否允许分片”DF1时这个数据报不能分片如果超过MTU就直接丢弃。第三接收方重组时把片偏移×8就能得到该片数据在原报文中的起始位置所以片偏移是一个相对量不是绝对长度。4. 传输层效率停止等待协议与滑动窗口计算4.1 信道利用率到底怎么算传输层计算题集中在可靠传输机制停止等待协议的信道利用率是最常见的开场题。要理解公式先理解“一个完整的发送周期”。发送端发出一个帧要先花一段时间把帧推上线这叫发送时延之后信号在链路上飞行到达接收端接收端处理并返回确认确认再飞回发送端。从发送端角度看这个周期除了发送时延之外剩下的都是“等确认”的时间。所以停止等待协议的信道利用率发送时延/(发送时延RTT)。如果题目给的是单程传播时延τ那RTT就写2τ公式变成发送时延/(发送时延2τ)。举个例子数据帧长1000bit链路速率1MbpsRTT10ms。发送时延1000/10^61ms利用率1/(110)9.1%。这个数字很直观地说明了停止等待的缺点信道大部分时间空着效率很低。确认帧的发送时延通常忽略但如果题目专门给了确认帧长度那分母就要加上确认发送时延。“周期里到底有几段时间”是核心想明白这个公式不用背。滑动窗口协议的利用率等于在一个周期内实际能连续发送多个帧的时间占总周期的比例。如果发送窗口大小为N利用率可以写成 N×发送时延/(发送时延RTT)。但这个值有个上限不能超过100%。当N大到能把整个周期填满时再增加窗口也不会让单条连接跑得更快因为物理带宽已经封顶了。做题时记得加一个取min的判断别算出150%还往上写。4.2 发送窗口大小的限制接收窗口和带宽时延积滑动窗口协议里有一道高频题在高速长距离链路上发送窗口至少多大才能让信道利用率接近100%这里用到的概念是“带宽时延积”。所谓带宽时延积就是链路上同时能容纳的比特数等于带宽×RTT。它描述的是“这根管道里最多能塞多少数据”。如果你把链路想成一根水管带宽是水龙头流速RTT是水从这头流到那头再回来的时间带宽时延积就是这一刻正泡在水管里的水量。比如链路速率1GbpsRTT20ms帧长1000字节。带宽时延积1×10^9×0.022×10^7bit帧长1000×88000bit那么需要的发送窗口至少是2×10^7/80002500帧。如果考序号位数GBN协议最大发送窗口是2^n-1满足2^n-1≥2500的最小n是12像SR这种选择重传协议最大发送窗口是2^(n-1)满足条件的最小n是13。差异来自协议窗口上限的不同别混。这类题真正想考的是“为什么滑块窗口不能无限大”。序号空间是有限的如果发送窗口太大新旧序号就会重叠接收方分不清收到的到底是新包还是重传的旧包。因此窗口大小受两个约束一是接收窗口的流量控制二是序号空间的协议限制。做题时把这两个约束都列出来答案就完整了。4.3 一个完整例题停止等待的“死等”与流水线对比把上面公式串起来看一个完整例子。假设数据帧长2000字节链路速率10MbpsRTT4ms。发送时延2000×8/(10×10^6)1.6ms。停止等待协议下一个周期发送时延RTT1.645.6ms信道利用率1.6/5.6≈28.6%。如果改用滑动窗口且窗口N3利用率3×1.6/5.6≈85.7%。当N4时4×1.6/5.6≈114%但实际上限是100%所以取N4就刚好填满周期。为什么N4就够了因为4个帧连续发送需要4×1.66.4ms比一个周期5.6ms更长发送端在这个周期里不会再出现空等。如果窗口继续增大超出接收窗口限制会被卡住超出序号空间限制会乱套而单条连接的利用率已经到顶。所以考试里如果问“最小窗口是多少”就解 N×发送时延 ≥ 发送时延RTT取最小整数不要无脑觉得窗口越大越好。停止等待和滑动窗口对比着看你会发现所有公式都在描述同一件事一个周期里信道到底有多少时间在真的传数据。5. 拥塞控制计算慢启动、阈值与超时后的变化5.1 三个参数的“剧情”怎么发展TCP拥塞控制计算题公式很少考的是“剧情”推演。你必须记牢几条规则慢启动阶段每经过一个RTT拥塞窗口cwnd翻倍当cwnd达到或超过慢开始门限ssthresh时进入拥塞避免阶段之后每经过一个RTTcwnd只加1个MSS。如果发生超时ssthresh变成当前cwnd的一半同时cwnd归1重新走慢启动。如果收到3个重复ACK触发快速重传ssthresh也变成当前cwnd的一半但cwnd不是归1而是变成ssthresh3×MSS然后进入快速恢复阶段。最大的坑在“当前cwnd”这四个字。阈值减半减的是超时那一刻已经增长出来的cwnd不是最开始的ssthresh。比如初始ssthresh16cwnd涨到17时超时那ssthresh⌊17/2⌋8cwnd1。很多人顺手写16/28只是碰巧结果一样换个数就会错。所以做这类题我要求自己每一步都先写上“当前cwnd、当前ssthresh”再继续推下一个RTT。把变量标清楚流程就不会乱。还有一个要注意的地方拥塞控制和流量控制是两回事。拥塞控制是发送端根据网络状态调整cwnd流量控制是接收端根据自身处理能力告诉对方接收窗口。实际发送窗口min(cwnd, 接收窗口)。题目如果同时给接收窗口一定要把这个min加上否则算出来的窗口可能超过接收方许可显然是错的。5.2 例题从1MSS开始画时间轴设初始ssthresh16MSScwnd从1MSS开始增长这里的“轮”按一个RTT计算。慢启动阶段第1轮结束cwnd2第2轮结束4第3轮结束8第4轮结束16。到达阈值后第5轮进入拥塞避免cwnd从16变成17。所以如果题目问“第几个RTT后进入拥塞避免”答案是第5个RTT。从第5轮开始cwnd不再是翻倍式增长而是每个RTT只加1。假设第5轮结束、cwnd17时发生超时。于是ssthresh17/2向下取整8cwnd1。之后重新慢启动第1轮结束2第2轮结束4第3轮结束8此时cwnd重新碰到ssthresh第4轮进入拥塞避免cwnd9。如果题目在第6轮又来一次3个重复ACK那又要按快速重传处理ssthresh8/24cwnd437之后每轮加1。这种题只要画一个时间轴横轴写RTT编号纵轴写cwnd数值再把ssthresh线画出来基本不会错。画时间轴时有一个细节要留意题目说“在第几轮发生超时”可能指发送阶段中途超时也可能指这一轮结束后才发现。这两种说法会影响cwnd的取值时点。我考场上比较笨但很稳的做法是在图上标出每一个“事件发生点”然后问自己这个节点的cwnd是事件前还是事件后的值按这个顺序写步骤即使最终数字出了小差错老师也能看到你的流程是对的。5.3 常见坑阈值、重复ACK、拥塞窗口单位总结一下拥塞控制题的常见错误几乎可以列成一张避坑清单。第一单位混淆。题目说MSS1000字节cwnd8MSS问发送窗口是否受接收窗口限制时要把8MSS换算成8000字节再和接收窗口比较。第二快速重传的“3”不是随便加的它代表已经收到3个重复ACK说明接收端缓存里有3个报文段等待排序发送窗口要放这部分空间。第三ssthresh减半后如果小于2有些教材规定最小为2防止窗口太小完全卡死。第四超时和快速重传不要混在一起超时后cwnd1快速重传后cwnd≠1两个是完全不同的剧本。我自己的做题流程是先用中文写一遍剧情——“慢启动到第几轮、碰到阈值、进入拥塞避免、发生超时、阈值减半、重新慢启动”然后才动笔填数字。这个过程相当于先替自己整理逻辑把错误在草稿阶段就拦下来。TCP拥塞控制是所有计网计算题里最像“时间轴游戏”的题目只要把握了每个事件发生时cwnd和ssthresh的取值满分不难。6. 综合题实战从读题到写答案的完整流程6.1 设计一道“一条龙”综合题把前面几个考点串成综合题最能看出你掌握得扎不扎实。我常拿下面这题给学弟练手主机A向B传文件RTT40msTCP初始ssthresh8MSSMSS1000字节接收窗口为10000字节。第一问慢启动阶段几个RTT后进入拥塞避免cwnd从1开始第1轮结束2第2轮结束4第3轮结束8等于阈值所以第4轮进入拥塞避免cwnd变为9。第二问若此时发生超时ssthresh和cwnd分别变为多少ssthresh4cwnd1。第三问之后第2轮结束时cwnd是多少从cwnd1重新慢启动第1轮结束2第2轮结束4第三轮才会进入拥塞避免变5所以答案是第2轮结束为4。这道题里有好几个“隐藏数字”要注意。接收窗口10000字节10MSS当接收窗口限制存在时实际发送窗口不能超过10MSS所以无论拥塞窗口怎么增长cwnd到10就封顶了。很多同学忽略这一点算出超过10的值还不知道错在哪。回答综合题时先把已知量列出来RTT40ms、ssthresh8MSS、接收窗口10MSS、MSS1000字节。然后每个小问都单独写公式和当前状态即使某一步错了步骤分也能保住一大半。6.2 考场答题顺序与公式速查考场上做计网计算题我建议按这个顺序走。第一步用笔圈出题目所有数值和单位顺手统一成bit、s、字节第二步判断题型所属层级链路层、网络层还是传输层第三步先写公式再代数字单位不要省第四步流程推演题先画RTT时间轴再填数字。这个流程听起来简单但能避免大部分低级失误。下面这张速查表是我自己考前默写的版本可以抄走发送时延 帧长 ÷ 发送速率传播时延 距离 ÷ 传播速率RTT 2 × 单程传播时延如果直接给RTT不要再多乘2最小帧长 ≥ 2τ × 速率子网可用主机数 2^(32-掩码位数) - 2片偏移 该片数据首字节编号 ÷ 8停止等待信道利用率 发送时延 ÷ (发送时延 RTT)滑动窗口信道利用率 min(N×发送时延 ÷ (发送时延RTT), 1)慢启动cwnd每RTT × 2拥塞避免cwnd每RTT 1TCP超时ssthresh cwnd/2cwnd 1快速重传ssthresh cwnd/2cwnd ssthresh 3×MSS这些公式不需要考前临时背建议平时做题时反复默写做到闭着眼都能写出来。考场上一旦卡壳就回到“这个公式的分子、分母分别代表什么”这个原点一般都能想起来。6.3 复盘我当年刷计算题踩过的坑整理这套笔记的时候我正在给准备期末的学弟答疑发现自己当年也犯过一样的错误拿到题习惯性先找公式套数字完全不看题型背景结果CRC把多项式写成十进制的值子网划分忘了减2IP分片把片偏移单位当成字节拥塞控制里超时和快速重传分不清。踩过几次坑之后我改成了“先讲流程再动笔”的习惯。每道计算题我都会问自己一句这个数字背后协议到底在做什么CRC在算余数子网划分在借主机位分片在切数据段滑动窗口在决定同时发多少个帧拥塞控制在根据网络状态调整发送量。公式只是把这些动作量化理解了动作公式就变成了“顺理成章”而不是“死记硬背”。这份整理是计算题专题后面如果再遇到让你头疼的计网题型我还是建议用这个思路去拆先想清楚协议流程再统一单位最后写公式。计网计算题不是数学考试是“协议流程单位换算”的组合拳把流程画顺分数自然到手。
阅读完成 · 觉得有帮助?
咨询建站