计算机网络五层模型与必考计算题:从奈氏准则到TCP拥塞控制
简介《计算机网络》期末复习电子版资料谢希仁第8版面向高校计算机与网络相关课程学习者尤其适合期末冲刺阶段梳理知识框架、查漏补缺也可用于课堂同步复习与考前快速回忆。资源围绕教材第8版整理覆盖互联网组成与边缘/核心结构、性能指标计算、OSI与TCP/IP体系、物理层传输媒体与信道复用、数据链路层的PPP与CSMA/CD等高频考点并对香农公式、奈氏准则、时延带宽积等计算型内容作了归纳兼顾概念理解与公式应用。压缩包内共1个docx文档大小约1.36MB文档按章节组织、重点标注清晰便于打印或平板批注。已有19422人学习下载可作为章节复习提纲与考前自测的参考帮助读者快速定位重点概念、理顺计算思路并减少遗漏适合不同基础读者按需查阅。1. 网络知识地图五层模型与那一串必考计算题学计算机网络最容易走偏的一步是把五层体系背得滚瓜烂熟却在卷子第一道时延计算上卡住。谢希仁第8版的骨架其实很清楚概述给出一张“边缘—核心”的地图和三组性能指标物理层解决比特怎么变成信号数据链路层解决一段链路上帧怎么传网络层解决分组怎么跨网络走运输层解决进程之间的可靠交付应用层才是域名、邮件、网页这些看得见的东西。每一层都对应一个 PDU比特、帧、分组、报文段、报文考试里认错层后面的推导就没有意义。这张地图适合按层刷题的人也适合最后两周倒着回查的人——从应用层往下抛问题哪一层答不上来就翻回哪一层补。下面按“先物理、再链路、再网络、再运输”的顺序把每一层里真正会考的东西挑出来。2. 物理层与数据链路层比特、帧与四个必考计算这两层在课本上占的篇幅不算多但计算题密度极高。物理层三个公式奈氏、信噪比、香农几乎每年都出数据链路层则围绕 CRC、最小帧长、争用期做文章。把这两层放在一起梳理是因为它们共同回答一个问题一串比特怎么可靠地变成一段链路上的一帧。2.1 奈氏准则与香农公式先分清「码元」还是「比特」奈氏准则说的是理想低通信道下码元速率的极限带宽为 WHz时码元最高传输速率为 2W 码元/秒超过这个值就会出现严重码间串扰。注意它给的是码元速率不是比特率只有当每个码元携带 n 个比特时才能写成 2W·log2(V)。香农公式给的是信息传输速率的上限C W·log2(1 S/N)其中 W 是信道带宽HzS/N 是线性信噪比C 的单位是 bit/s。信噪比经常以分贝给出换算关系是 10·log10(S/N)所以 dB 值除以 10 再取 10 的幂才是代入香农公式的线性值。这一步在考场上出错率极高很多人直接把 30dB 当成 S/N 30 代进去结果差了几个数量级。import math def nyquist(bandwidth_hz: float) - float: 无噪声理想低通信道码元速率上限单位 码元/秒 return 2 * bandwidth_hz def shannon(bandwidth_hz: float, snr_db: float) - float: 有噪声信道信息传输速率上限单位 bit/s snr_linear 10 ** (snr_db / 10) # 分贝转线性比值别直接用 dB 值 return bandwidth_hz * math.log2(1 snr_linear) print(nyquist(3000)) # 6000 码元/秒注意单位是码元不是比特 print(shannon(3000, 20)) # 约 19.97 kbit/s上面这段代码的作用是把两个上限分开算清楚。参数上bandwidth_hz是信道带宽snr_db是以分贝表示的信噪比snr_linear是中间变量代表真正的 S/N。逻辑说明只有一句奈氏回答“理想无噪时码元能跑多快”香农回答“有噪时信息能跑多快”两者不能互相替代也不会同时出现在一道题的同一个问号里。2.2 传输媒体与四种信道复用FDM、TDM、STDM、CDM传输媒体分导引型和非导引型。导引型里双绞线最便宜分无屏蔽 UTP 和屏蔽 STP同轴电缆是早期有线电视的载体光缆带宽最高是现在长途干线的主力。非导引型里无线电波向所有方向传播、穿透力强微波向固定方向传播卫星通信就属于这一类优点是距离远、覆盖广、容量大缺点是受气候影响、传播时延长、误码率高、成本高红外线和激光同样要求方向固定。四种复用技术的区别用一张表对照最省事复用方式资源切分维度特点典型考点频分 FDM按频率切各路信号同一时间占用不同带宽与 TDM 的“时间/频率”互换时分 TDM按时间切所有用户不同时间占用同一频带时隙浪费统计时分 STDM按需分配时隙又称异步 TDM提高利用率与 TDM 的差别码分 CDM按码型切同一时间、同一频带靠正交码区分内积计算码分多址 CDMA 是计算题常客。规则只有三条码片序列里 0 写成 −1、1 写成 1接收端用本站码片与收到的序列做内积再除以码片长度结果为 1 表示发送比特 1−1 表示发送比特 00 表示没发送。# CDMA 内积判定结果 1 发 1-1 发 00 未发送 chip_s [1, -1, 1, -1, 1, -1, 1, -1] received [1, -1, 1, -1, 1, -1, 1, -1] product sum(a * b for a, b in zip(chip_s, received)) / len(chip_s) print(product) # 1.0说明该站这一拍发送的是比特 1这段代码的关键是最后的除法内积之和必须除以码片长度才是规范化后的结果否则得到的是 8 而不是 1。参数chip_s是某站的码片序列received是信道上一拍收到的叠加信号product就是判定依据。2.3 数据链路层三个基本问题与 CRC 计算数据链路层要解决三件事封装成帧、透明传输、差错检测。封装成帧是在网络层交下来的 IP 数据报前后加首部和尾部形成帧透明传输解决的是数据里恰好出现帧定界符的问题用字节填充转义字符处理差错检测只检错不纠错检出错就丢弃什么也不做。循环冗余检验 CRC 的步骤要背下来由生成多项式得到除数 P二进制n 位在待发送数据后面补 n−1 个 0做模 2 除法得到余数 RR 就是帧检验序列 FCS把它附加到数据后面一起发送。接收端把收到的数据除以 P余数为 0 就认定无差错。def crc_remainder(data_bits: str, poly_bits: str) - str: 模 2 除法求余数data_bits 需已补好 n-1 个 0 bits list(data_bits) n len(poly_bits) for i in range(len(bits) - n 1): if bits[i] 1: # 首位为 1 才做异或 for j in range(n): bits[i j] str(int(bits[i j]) ^ int(poly_bits[j])) return .join(bits[-(n - 1):]) # 末尾 n-1 位即 FCS print(crc_remainder(1101011011 0000, 10011)) # 输出 1110代码里poly_bits是生成多项式对应的二进制除数长度 ndata_bits必须是已经补好 n−1 个 0的待发送数据。函数返回末尾 n−1 位就是冗余码 FCS。逻辑上它模拟的是模 2 除法——不借位、只异或。提示如果题目给的是接收端收到的数据就不要再补 n−1 个 0 了直接除。这是最典型的失分点很多人算完才发现多补了 4 个 0整道题的余数全错。2.4 CSMA/CD 与以太网帧16 字口诀背后的四个数CSMA/CD 的十六字总结是“先听后发边听边发冲突停止延迟重发”。展开来说多点接入说明它是总线型网络载波监听指发送前和发送中都要不停监听信道碰撞检测指发送过程中一旦发现其他站也在发立即中断本站发送然后按退避算法延迟重发。围绕它要记四个数。争用期是 2τ10Mbit/s 以太网取 51.2μs也就是 512 比特时间。最小帧长 2τ × 数据率10Mbit/s 下就是 64 字节。帧间最小间隔是 9.6μs相当于 96 比特时间。100BASE-T 快速以太网把这三个数都缩到原来的十分之一争用期 5.12μs、帧间间隔 0.96μs但最短帧长仍然是 64 字节不变。使用 CSMA/CD 的以太网只能半双工通信因为一个站不可能同时发送和接收但必须边发边听。这一点和后面交换机的工作方式正好相反以太网交换机工作在数据链路层以全双工方式工作没有碰撞问题也不使用 CSMA/CD 协议它之所以还叫以太网只是因为它仍然采用以太网帧结构。MAC 帧发往物理层时前面还要再加 8 字节首部前同步码加帧开始定界符。IEEE 802.3 规定出现下列情况之一就是无效的 MAC 帧帧长度不是整数个字节用收到的 FCS 查出有错数据字段不在 461500 字节之间。这三个条件经常被拆成选择题的四个选项。3. 网络层IP 编址、分片与路由协议三件套网络层是整本书的重心也是计算量最大的一层。它要解决的是“分组怎么从一个网络走到另一个网络”具体落到三件事上地址怎么编、分组太长怎么切、路由表怎么建。3.1 分类 IP 地址与三类特殊地址分类编址是理解 CIDR 的基础五类地址的划分必须张口就来类别开头位第一字节范围网络号长度最大主机数A 类单播011261 字节2^24 − 2B 类单播101281912 字节2^16 − 2C 类单播1101922233 字节2^8 − 2D 类多播1110224239无无最大主机数里减掉的 2是主机号全 0 的网络地址和全 1 的广播地址。另外还有两类要单独记住127 开头且主机号不全为 0、不全为 1 的地址是环回测试地址专用地址只能用于机构内部通信不能与互联网主机直接通信三个地址块分别是 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。3.2 子网掩码与 CIDR斜线记法怎么换算无分类编址 CIDR 把网络号改叫网络前缀用斜线记法表示前缀位数网络前缀相同的连续 IP 地址组成一个 CIDR 地址块。地址掩码的规则是网络前缀全为 1、主机号全为 0把 IP 地址与掩码按位与就得到网络地址。这里有一条容易记反的性质网络前缀越短地址块越大包含的地址数越多网络前缀越长地址块越小这条路由就越具体。最长前缀匹配就是靠这条性质工作的——路由表里有多条都能匹配时选前缀最长的那条因为它最具体。路由聚合构造超网则反过来把几条前缀连续的短路由合并成一条更短前缀的路由减小路由表规模。3.3 IP 数据报分片三个字段的三把尺子IP 数据报首部里有三个字段最容易混它们的单位各不相同字段长度单位要点首部长度4 位4 字节最小 0101即 20 字节必须是 4 的整数倍总长度16 位1 字节首部 数据部分之和分片后每片要重算片偏移13 位8 字节该片在原分组中的相对位置除最后一片外长度须为 8 的整数倍分片时还要看两个标志位MF 1 表示后面还有分片MF 0 表示这是最后一片DF 1 表示不能分片DF 0 表示可以分片。回忆数据链路层的要求——MAC 帧的数据部分不能超过 MTU而 MTU 指的就是 IP 数据报的总长度不含帧头帧尾一旦总长度超过 MTU 就必须分片。MTU 1500 # 以太网最大传送单元单位字节 header 20 # IP 首部固定长度 total 4000 # 原始数据报总长度 payload total - header # 3980 字节数据 max_data (MTU - header) // 8 * 8 # 每片数据取 8 的整数倍得 1480 offset 0 while payload 0: size min(max_data, payload) print(f片偏移{offset // 8}数据长度{size}MF{1 if payload size else 0}) payload - size offset size这段代码演示的是分片的核心约束每片的数据长度必须是 8 的整数倍所以max_data要先整除 8 再乘回 8片偏移记录的是相对位置除以 8 的商最后一片的 MF 置 0其余置 1。参数MTU是链路能承载的最大帧数据量header是首部长度total是原始总长度三者定了分几片、每片多长、偏移多少就都定了。3.4 RIP、OSPF、BGP三种路由协议的判断与算法路由选择协议分两大类内部网关协议 IGP 在一个自治系统内部使用代表是 RIP 和 OSPF外部网关协议 EGP 在自治系统之间使用代表是 BGP。自治系统 AS 指在单一技术管理下的许多网络、IP 地址和路由器它对其他 AS 表现出单一且一致的路由选择策略。协议类型算法思想交换内容承载方式适用范围RIP内部距离向量整张路由表UDP 数据报小型互联网OSPF内部链路状态相邻路由器的链路状态直接封装进 IP 数据报较大自治系统BGP外部路径向量网络可达性信息TCP 报文AS 之间RIP 的特点是只和相邻路由器交换信息按固定时间交换整张路由表并且“好消息传得快坏消息传得慢”。距离向量算法的更新步骤是固定的三步先把相邻路由器 B 发来的路由表里距离那一列每项加 1下一跳全改成 B再和自己表里逐项比较如果自己没有这个网络就直接插入如果有且下一跳也是 B 就直接替换如果有但下一跳不是 B 就比较距离更小才替换否则不动。OSPF 最主要的特征是使用链路状态协议用洪泛法向本自治系统内所有路由器发送信息发送的是本路由器相邻的所有路由器的链路状态并且只有链路发生变化时才重新发送。BGP-4 有四种报文OPEN、UPDATE、KEEPALIVE、NOTIFICATION。4. 运输层与应用层TCP 拥塞控制与端口那些事运输层是很多人第一遍学不明白的地方原因是它和网络层的分工总被记混网络层为主机之间的通信提供服务运输层则在网络层的基础上为应用进程之间的通信提供服务。一句话网络层管到主机运输层管到进程。4.1 UDP 与 TCP八个维度的取舍维度UDPTCP连接无连接面向连接可靠性尽最大努力交付可靠交付不丢不重数据形式面向报文面向字节流通信方式一对一、一对多均可点对点全双工不涉及支持拥塞控制没有有首部长度8 字节20 字节起适用场景实时音视频、DNS 查询文件传输、网页浏览UDP 首部只有 8 字节四个字段各 2 字节源端口、目的端口、长度、检验和。TCP 首部固定部分 20 字节选项字段最长可扩到 40 字节所以首部最长 60 字节。4.2 端口号与套接字进程之间的地址软件端口是应用层各种协议进程与运输实体进行层间交互的地点。端口号分两大类服务器端使用的端口号包括熟知端口号 01023这部分表要背和登记端口号 102449151客户端使用的端口号是 4915265535又叫短暂端口号。IP 地址加端口号构成套接字它是运输层通信的端点。考试里经常出“某个服务默认用哪个端口”的选择题DNS 是 53、HTTP 是 80、FTP 是 21、SMTP 是 25、POP3 是 110这几个必须张口就来。4.3 TCP 拥塞控制四个算法连成一条窗口曲线拥塞控制和流量控制不是一回事。流量控制是让发送方别发太快要让接收方来得及接收属于端到端拥塞控制是防止过多数据注入网络导致网络性能变差是全局性的过程产生条件是“对资源的需求大于可用资源”。四个算法要连起来看慢开始阶段拥塞窗口按 2 倍增长到达慢开始门限后进入拥塞避免阶段每轮加 1收到三个重复确认时执行快重传并进入快恢复拥塞窗口降为当前的一半然后继续线性增长超时的情况最严重拥塞窗口直接降到 1重新慢开始。cwnd 1 ssthresh 16 for r in range(1, 13): print(f第 {r} 轮cwnd {cwnd}) if cwnd ssthresh: cwnd * 2 # 慢开始每轮翻倍 else: cwnd 1 # 拥塞避免每轮加 1这段模拟只覆盖了增长阶段参数cwnd是拥塞窗口ssthresh是慢开始门限。实际考题会叠加“超时”和“三个重复确认”两个事件前者把cwnd重置为 1、ssthresh减半后者把cwnd和ssthresh都减半后进入快恢复。窗口曲线题的套路是把每轮的 cwnd 值列成一行画出来和标准图对照哪一轮拐弯不对就是哪一步算错了。4.4 三次握手与四次挥手序号和确认号的对应关系三次握手的报文顺序是 SYN、SYNACK、ACK四次挥手是 FIN、ACK、FIN、ACK。记住一句口诀三次握手、四次分手。确认号的含义要单独强调ack 是我对你的期望即我希望你下一个传来的序号。所以对方下一个发来的 seq 必须等于这个 ack不等就要重传。把这句话想明白了握手和挥手那两张图就不用死记画的时候自然知道箭头该指向哪。4.5 应用层域名解析的递归与迭代应用层知识点比较碎但 DNS 解析方式几乎是必考。域名服务器分四类根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。解析方式有两种一句话区分递归查询靠别人迭代查询靠自己。递归查询时主机只发一次请求剩下的活由本地域名服务器替它跑完迭代查询时本地域名服务器每次收到的都是“下一步去问谁”的答复自己一站一站问下去。做题时先看是谁在发请求、谁在返回答案再看返回的到底是最终结果还是下一跳地址。还有一个经常被问到的过程题一个报文从应用层到物理层要经过哪些封装。应用层数据交给运输层加 TCP 或 UDP 首部成为报文段交给网络层加 IP 首部成为数据报交给数据链路层加帧头和帧尾成为帧最后到物理层变成比特流发出去。每一层封装的位置和加的首部长度都可以和前面几章的数字对上。5. 易错易漏点期末最容易翻车的五个地方这一章是把前面零散提到的坑集中列一遍。每条按“易漏点是什么、为什么会漏、怎么补”来写对照自己的错题本看中一条就补一条。5.1 三个计算类易漏点第一CRC 计算时给的是接收端数据却多补了 n−1 个 0。漏的原因是平时练习都是从发送端算起形成肌肉记忆看到二进制串就条件反射补零。补的办法是在草稿纸最上面先写一行“发送/接收”圈出来再动笔如果是接收端直接除除完看余数是否为零一步就能判对错。第二IP 分片里三个字段的单位混着用。首部长度按 4 字节算总长度按 1 字节算片偏移按 8 字节算三个尺子同时在手最容易在“首部长度是 160bit 等于多少字节”这一步绕晕。补的办法是固定换算顺序先把 bit 换算成字节再用首部长度字段的值乘以 4 验证最后确认每片数据长度是不是 8 的整数倍。分片题只要这三个数对了后面就是机械填空。第三信道利用率和时延带宽积的分子分母拿错。信道利用率是发送帧所需时间除以发送帧所需时间 端到端传播时延时延带宽积是传播时延乘以带宽两个公式长得像用错一个整题白算。补的办法是记单位时延带宽积的单位是比特是“链路能装多少比特”信道利用率没有单位是一个比值永远小于 1。拿不准时先看单位比背公式可靠。5.2 两个概念类易错点第四以为用了交换机就没有冲突又以为交换机还在跑 CSMA/CD。漏的原因是课本上“以太网”三个字反复出现让人误以为所有以太网都一个样。实际是集线器工作在物理层所有端口共享带宽、共享冲突域交换机工作在数据链路层全双工工作每个端口独享带宽没有碰撞问题也不使用 CSMA/CD只是沿用了以太网帧结构。补的办法是拿那道“10 个站共享 10Mbit 与 10 个站每站 10Mbit”的选择题反复做做到能一眼判断拓扑类型。第五递归查询和迭代查询的角色搞反。漏的原因是两张图长得太像都是箭头来回飞。补的办法是抓住“谁在干活”递归是本地域名服务器替主机跑完全程主机只问一次迭代是本地域名服务器每问一次就拿到下一站地址自己接着问。判断时先看第一条请求是谁发给谁的再看返回的是最终 IP 还是下一跳地址两个特征对上就不会错。6. 复习清单与查漏补缺考前一周怎么把分数捡回来复习到这一章知识点应该已经过了一遍。剩下的问题不是“还有多少没看”而是“哪一块看了但不会用”。我用一张按层拆开的自查表把每层的必会项和自测方式列出来你可以直接照着打勾。层次必会项自测方式打勾概述四种时延、时延带宽积、RTT、信道利用率随便给一组带宽和距离五分钟内算完□物理层奈氏、信噪比换算、香农、CDMA 内积不看书写出三个公式并各做一题□数据链路层CRC、最小帧长、争用期、无效 MAC 帧三条件手算一次 CRC写出 64 字节的来历□网络层分类地址、CIDR、掩码、分片、RIP 更新独立完成一次分片和一次距离向量更新□运输层UDP/TCP 对比、端口分类、四算法、握手挥手画出 cwnd 曲线标出每次拐点原因□应用层DNS 两种查询、各协议默认端口口述一次完整解析过程□查漏补缺的顺序建议从下往上先物理层的公式再链路层的计算再网络层的编址与分片最后运输层的窗口曲线。原因是上层题目经常调用下层结论比如分片题要用 MTUMTU 又来自链路层拥塞控制的窗口变化又要结合 RTT 理解。下层不牢上层的题做对了也是碰巧。时间分配上计算题占的复习比重应该高于概念题。概念题靠一张对照表就能覆盖计算题必须动手算而且要在纸上算——眼睛看一遍觉得会了落笔就露馅这是血泪经验。每一类计算题至少独立做三遍第一遍对着答案第二遍合上书第三遍限时。最后留一个习惯每次做错一道计算题不要只抄正确答案而是把错的那一步单独写在一张便签上比如“接收端多补了 4 个 0”“片偏移忘了除以 8”贴在书桌前。考前那一周不看新题只看这些便签翻一遍就知道自己会在哪里翻车。从那以后我每次复习这类偏计算的科目都强制走一遍“公式默写—独立计算—错步归档”的流程不再靠反复看书来获得“我好像会了”的错觉。希望帮到你。本文还有配套的精品资源点击获取