这个系列写到第10篇计算机网络期末复习也到了冲刺阶段。前面几篇笔记分别梳理了物理层、数据链路层、IP协议与路由等内容这一篇把后半程几个最容易丢分的板块一次收拾干净传输层的可靠传输与连接管理、拥塞控制算法、应用层协议、网络安全基础外加一套我自己验证过两轮、亲测比闷头刷题更有效的复习方法。如果你正在准备期末这篇笔记可以直接当冲刺提纲用重点区域我都标了出题方式和易漏点照着查漏补缺比重新翻一遍课件实用得多。传输层、拥塞控制、TCP状态机、HTTP缓存、DNS解析、网络安全这些名词背后对应的题型其实都很有规律很多丢分不是因为不会而是因为“看着熟悉、答题时少写一步”。下面按我最开始踩坑的教训来写能救一分是一分。1. 传输层可靠传输与流量控制为什么这部分总在“推导题”里埋伏笔1.1 流量控制和拥塞控制期末第一道概念陷阱先解决一个最容易混的概念问题。流量控制解决的是接收方缓冲区放不下的问题。发送方发得太多太快接收方的应用程序来不及取走数据缓冲区就会溢出溢出之后的数据只能被丢弃。所以发送方的发送速度必须受接收方通告窗口的约束。拥塞控制解决的是另外一件事中间网络节点的问题。路由器缓存溢出、排队延迟变长、丢包率上升整个网络的负载已经超出承受能力发送方必须降速来帮网络“缓口气”。虽然最终表现都是发送方要降低发送速率但两者控制对象完全不同前者盯的是“端到端的接收方状态”后者盯的是“整条链路上的网络负载状态”。期末卷面上这道概念题几乎年年出现题干变体通常是“某服务器响应变慢客户端发送窗口不断缩小原因是网络拥塞”。只看“发送窗口缩小”就选拥塞很容易踩坑。正确思路是发送窗口反映的是接收方通告窗口既然接收方通告窗口在缩小说明接收方缓存处理压力大这是流量控制的信号。拥塞控制的窗口变化反映在拥塞窗口上而不是接收窗口上。为了把两条线索彻底分开我习惯列一张小表对比项流量控制拥塞控制控制对象接收方处理能力网络中间节点负载触发原因接收方缓冲区不足路由器排队溢出、丢包主要手段接收方通告窗口拥塞窗口与阈值调整控制范围端到端端到端但由中间网络状态驱动典型算法滑动窗口大小限制慢启动、拥塞避免、快速恢复表格背完还想再深一层就要理解为什么发送方实际能发送的数据量受限于接收通告窗口和拥塞窗口两者的最小值。接收方只能用缓存兜住这么多网络也只能扛住这么多两边的约束都不能突破所以取更紧的那个。复习时把这句话记牢计算题基本不会再错。1.2 滑动窗口与选择重传简答题常考的高频对比可靠传输的协议族里最容易被拎出来考对比的是回退N步与选择重传。两者都建立在滑动窗口之上但核心思想差异很大。回退N步协议里接收窗口大小为1接收方只能按序接收一旦出现乱序报文直接丢弃发送方要把从丢失点开始的所有未确认数据全部重传一遍。好处是实现简单坏处是信道一丢包重传量很大。选择重传协议把接收窗口调大接收方可以缓存乱序到达的报文发送方只需要重传真正丢失的那一个报文段信道利用率明显提升代价是接收方要有缓存空间发送方也要能单独管理每个报文的确认状态。期末简答题如果问“为什么选择重传比回退N步效率高”答题要点就两个一是接收方能够缓存乱序报文不用重复确认同一个序号二是发送方只重传丢失的那个报文不会把已经正确到达的数据再发一遍。复习时把这个逻辑想通比背两页协议描述靠谱得多。还有一个衍生点需要留意滑动窗口的大小如果等于1就等于停等协议。很多同学记不住这三者的关系只要记住“停等是窗口大小为1的特例选择重传是窗口较大的高级实现”就够了。1.3 三个高频计算题的完整推导过程第一个计算点是滑动窗口与“已发送未确认”的余量计算。题目通常会给出通告窗口W以及发送方已发送但未确认的数据量m问还能继续发送多少。不少人看到窗口就填W实际上正确答案是W减去m。发送窗口是一个区间概念只有落在窗口右沿以内并且尚未发出的数据才是真正可用的发送空间。如果m已经大于等于W正确答案不是负数而是0说明窗口已经溢出必须等确认号推进才能继续发。这个点很容易成为综合题的铺垫下一问经常是“发送窗口为0时TCP还能发数据吗”答案是可以发送零窗口探测报文来防止死锁但普通数据不能发。第二个计算点是超时重传时间与往返时间RTT的指数加权平均。题目给出一串RTT样本值和一个初始估计值按公式逐轮代入即可。真正丢分的地方是单位换算。有一道经典复习题样本单位是毫秒初始估计单位是秒很多人忽略换算直接代公式过程全对但结果差一个数量级。做这类题先做单位归一再代公式最后看清题目问的是“估计值”还是“偏差值”两者数值完全不同。第三个计算点是序号回绕与接收窗口的交互。TCP序号字段是32位最大序号约42.9亿字节长时间大流量传输时序号会绕回0。如果不理解回绕机制收到一个“新序号很小”的报文时明明它是新数据却可能因为序号落在当前窗口之外而被误判成旧报文。期末考试喜欢用“序号接近最大值时出现重复ACK”作为场景问发送方如何区分新数据和重传数据。标准答题路径是通过确认号加序号区间共同判断并借助时间戳选项辅助识别回绕。这是“32位序号不够用”带来的衍生问题理解了就记住了。2. TCP连接管理状态机图之外的几个易丢分细节2.1 三次握手服务端序号不是“自己说了算”三次握手的报文交换流程大家都背得滚熟但考试很少直接考“各阶段叫什么名字”而是考状态迁移里那些反直觉的瞬间。建立连接时客户端发送SYN随机生成一个初始序号比如1000。服务端收到后要回复SYN加ACK确认号填“客户端初始序号加1”这个大家都懂。问题在于服务端自己的初始序号它是另一个随机数可能是5000。这两个序号是相互独立的设计成独立的目的很明确防止攻击者通过简单的序号推断来猜测后续报文。卷面上有一种常见陷阱题只给客户端初始序号问“服务端回复的报文段中确认号是多少”。这个可以算确认号就是客户端初始序号加1。但如果题目问“服务端序号是多少”那就要看题干有没有额外信息了不能想当然从客户端初始序号推出来。这个看似废话的考点恰恰是栽人最多的地方因为很多人潜意识里觉得“握手的两个报文段是对称的序号应该有关联”实际上序号之间没有数学上的固定关系确认号才有。2.2 四次挥手TIME_WAIT为什么必须存在主动关闭的一方在发送最后一个ACK之后进入TIME_WAIT状态持续2倍最长报文段生存时间MSL。很多资料只给了值没给原因导致简答题只能拿一半分。这里补充两条必答原因。第一最后一个ACK可能丢失。被动方没收到最后一个ACK会重新发送FIN主动方必须保留连接信息足够长时间才能重新发送ACK。2MSL覆盖了“对方收不到ACK并重发FIN”的最坏往返时间。第二防止旧连接中的残留报文段进入新连接。如果主动方立刻关闭端口网络中可能还有旧连接延迟到达的报文万一被新连接误收就会造成数据混乱。等待2MSL足够让这些残留报文在网络上自然消亡。这里的MSL可以理解为IP报文头里TTL经过跳数衰减后对应的生存时间常见实现中通常设成30秒到2分钟不等所以TIME_WAIT持续时间可能从1分钟到4分钟。期末考过一道小计算题假设MSL为30秒问TIME_WAIT持续时间答案直接按2MSL代入也就是60秒。别看这个知识点小不少人简答题能说清楚“等2MSL”却说不清为什么导致扣一半分。现在把“补发ACK”和“防残留报文”这两条记住就稳了。2.3 半连接与RST重置两个“异常”场景怎么判读半连接指的是TCP连接只建立了一半就停住的状态典型场景是客户端发出SYN后一直没收到服务端响应。抓包观察时会看到客户端反复重传SYN重传次数到达上限后才放弃。从排查角度分析最可能的原因是中间网络存在丢包或拦截而不是服务端没开机。复习时记一句关键结论SYN报文由TCP自己负责重传应用层不需要干预所以应用卡住不能等同于系统没有反应。RST报文则用来强制拆除连接。收到RST之后连接直接关闭不需要进入TIME_WAIT也无需等待ACK确认。有一个选择题陷阱是“RST发送方必须等待接收方确认后才能关闭连接”这句话是错误的因为RST本身就是终止信号不参与确认机制。和FIN对比着记FIN表示“我没有数据要发了但还能接收”RST表示“这个连接我不要了立刻终止”。两者语义差得很远。把半连接、TIME_WAIT、RST这三个“非正常状态”串起来复习常见异常场景题基本就都能覆盖了。3. 拥塞控制曲线题唯一解法是亲手画几遍图3.1 慢启动与拥塞避免阈值是怎么一路变化的拥塞控制是期末计算题里的必考大题。复习建议只有一条不要只背算法文字一定拿出纸笔画拥塞窗口随时间变化的折线图。横轴设为往返次数或RTT序号纵轴设为以报文段为单位的拥塞窗口。画完之后四个算法的行为差异会清清楚楚比读十遍文字都有用。慢启动阶段从拥塞窗口为1开始每收到一个ACK窗口加1。注意这里的增长单位不是“每个RTT加1”而是“每个ACK加1”。因为一个RTT内可以收到多个ACK所以慢启动阶段窗口在一个RTT内实际上翻倍增长表现出来就是1、2、4、8这样的指数上升。这个细节一旦理解错画出来的曲线就会变成线性上升而不是指数上升整道题全错。当窗口达到慢启动阈值时切换到拥塞避免阶段窗口每个RTT加1表现为线性上升。如果发生超时当前阈值被设置为“当前窗口的一半”然后把窗口重置为1重新进入慢启动。这里最容易出错的是当前窗口到底取哪个时刻的值。有些题会故意写“窗口达到16后进入拥塞避免随后一个RTT内窗口从16升到17此时发生超时”那么当前窗口应为17阈值应设为8也就是17的一半取整。如果没把“增长过程中窗口已经变化”这件事算进去第一步就错后面的曲线全画歪。3.2 快速重传与快速恢复为什么有两种丢包响应如果丢包被检测到的方式是收到三个重复ACK说明网络还有能力继续转发数据只是某一段报文出了问题。所以发送端不用从头再来而是进入快速恢复拥塞窗口减半阈值也减半窗口随后线性增长。这样做的目的很明确既避免慢启动的指数增长给本就拥堵的网络再添压力也不至于因为窗口归零而白白浪费通道带宽。常见综合题会让考生比较“超时重传”和“快速重传”对发送速率的影响。我用一张小表对照考前只看表就够了丢包判定方式阈值变化拥塞窗口变化后续阶段超时定时器到期当前窗口的一半归1重新慢启动收到三个重复ACK当前窗口的一半减半且每收到一个重复ACK额外加1进入快速恢复举个例子。窗口为32时发生超时阈值变为16窗口变为1重新慢启动。如果同样窗口为32时收到三个重复ACK阈值变为16窗口也变为16然后每收到一个重复ACK窗口再临时增加一个报文段收到新ACK之后进入拥塞避免。两条路径的窗口数值差异很大阅卷时看的就是这些关键数值不能混。还有一个补充点快速恢复期间窗口为什么允许“临时增长”。因为每收到一个重复ACK都意味着有一个报文已经离开网络并到达接收方说明网络实际上腾出了点缓存可以多放一点新数据进管道。这个逻辑不是随意加戏而是符合“以ACK事件驱动窗口调整”的基本思想。把这个想明白别人问你“为什么快速恢复不是让窗口一直减半”时你也能答得上来。4. 应用层高频考点HTTP缓存和DNS解析怎么答才不会漏分4.1 HTTP演进时间线期末简答题的主干应用层协议里HTTP的复习价值最高因为简答题和选择题都爱出。复习时抓住一条时间线HTTP/1.0默认每请求一个资源就建立一次连接用完就关闭效率低HTTP/1.1默认持久连接同一连接上可以连续发送多个请求与响应还引入管线化、虚拟主机、分块传输和更丰富的缓存控制HTTP/2在连接上做多路复用多个流共享一个连接同时压缩头部HTTP/3换用基于无连接传输层协议的机制避免前面版本在传输层上的队头阻塞问题。答题时不要只写版本号把每个版本对应的关键词写全阅卷人按关键词给分。比如HTTP/1.1必须出现“默认持久连接”HTTP/2必须出现“多路复用”HTTP/3必须出现“队头阻塞缓解”或“基于无连接传输层协议”。这种结构化的答案看起来像在“讲机制”不是背概念。还有一个容易忽略的点HTTP/1.1的管线化虽然允许连续发送多个请求但响应仍需按序返回一旦前面的响应阻塞后面全部排队这就是队头阻塞的起源。把这个背景答进去简答题的深度会明显不一样。4.2 强缓存与协商缓存用“两次访问”的例子彻底分清缓存机制是应用层选择题和简答题的高频区。强缓存的意思是浏览器本地判断资源是否有效在有效期内根本不发请求。判断依据是响应头中的有效期字段只要缓存没过期第二次访问时直接使用本地副本。协商缓存则是浏览器带着资源的标识比如修改时间或唯一标签去问服务器“这个资源变了吗”。服务器判断没变返回304状态码不返回实体内容服务器判断变了返回200并携带新资源。考场题最常见的问法是第一次访问某网页后过了一段时间第二次访问这个网页浏览器会不会发HTTP请求。答案是分情况讨论。强缓存未失效时不发请求直接用本地缓存。强缓存失效但协商缓存条件满足会发一个条件请求服务器返回304。强缓存失效且服务器确认内容已变化返回200浏览器重新下载。答题时逐层写只写一句“看缓存”是拿不到过程分的。这里必须分清304和200的含义304不代表缓存失败恰恰代表缓存仍然可用只是需要服务器确认一下。如果碰到“服务器返回304说明资源内容已经修改”这种判断答案是错误因为304的语义是“资源未修改”。这个误区我见过不少人踩。4.3 DNS的递归与迭代再加三个平时没人提醒的细节DNS解析流程的简答题最稳妥的答法是画出从主机开始的完整链路。主机先查本地缓存和本地配置文件找不到再请求本地域名服务器。本地域名服务器没有缓存时就替主机去问根域名服务器这一层是递归请求根服务器会把顶级域名服务器的地址返回。本地服务器再问顶级域名服务器最后问权威域名服务器拿到IP后逐级返回。从这个过程看主机与本地域名服务器之间是递归查询本地域名服务器与各级域名服务器之间是迭代查询。考题如果没有明确说全程递归默认按这个经典链路答。三个容易被忽略的细节。第一是TTL缓存。域名解析结果有生命周期TTL由权威服务器指定过期后必须重新请求。第二是上游服务器选择。本地域名服务器通常配置了不止一台上游选择依据包括往返时间和健康状态一旦某个上游延迟升高查询会切到其他上游。第三是浏览器的多域名解析问题。一个页面内嵌很多第三方域名的资源时每个域名都需要独立解析解析次数多首屏加载就会变慢。这个点常用来考“为什么现在的网站要做域名收敛”也就是把静态资源合并到尽可能少的域名下减少DNS请求数量。5. 网络安全基础不把机制关系串起来简答题拿不满5.1 把机密性、完整性、不可否认性串成一个整体网络安全部分最忌讳孤立记忆“哪种算法是什么”期末卷面上这一块的分数常常来自一道综合简答题如何在一条不安全的网络里安全传输消息同时保证消息不被第三方解读、不被篡改、发送方无法抵赖。标准答题链路是混合加密加数字签名。先用对称加密算法加密完整内容因为对称加密在数据量大的场景下性能优势明显。对称密钥本身通过非对称加密算法加密后再传输这样既解决密钥分发难题又避免非对称加密在大数据量下性能差的问题。完整性靠哈希发送方对明文计算摘要接收方对收到的明文计算摘要两者一致说明内容没被改过。不可否认性靠数字签名发送方用私钥对摘要签名接收方用发送方的公钥验证签名。因为私钥只有发送方自己持有验证通过后发送方无法否认消息是自己发的。把这条链路写完整综合简答题基本就稳了。还有一个常考的反问只加密不签名可以吗。答案是能保证机密性但保证不了完整性和不可否认性。攻击者可以在不破解加密的情况下通过截获和重放密文来干扰通信接收方无法判断密文有没有被替换。反过来只签名不加密答案也能说得通消息内容直接暴露在传输路径上机密性不成立。把这两条逻辑串起来比背十个算法名有用多了。5.2 常见攻击场景与防御要点怎么从题干定位到考点攻击类题目通常给一个场景描述要求判断攻击类型并写防御思路。DoS攻击和DDoS攻击的核心区别在攻击源数量。单个来源对应的是拒绝服务攻击多个协调来源对应的是分布式拒绝服务攻击。防御思路可以写过滤异常流量、限制单连接频率、增加备用容量、部署专用流量清洗机制。中间人攻击的判断依据是通信双方本应直连但攻击者插在中间既能接收又能转发双方还以为自己在直接通信。防御核心是身份认证与报文完整性校验。数字证书的作用就是把公钥和身份绑定起来防止攻击者用自己的公钥冒充通信对方。另外一类常考内容是针对具体应用的安全威胁。SQL注入发生在服务端数据库查询环节防御核心是参数化查询和输入校验。跨站脚本发生在浏览器端脚本执行环节防御核心是输出编码和内容安全策略。两者的发生位置和防御核心完全不同我把这两个点在纸上列在一起反复默写考前只看这几个关键词效率很高。5.3 安全协议与防火墙的层级记忆法还有一类选择题会问安全协议工作在哪一层。我的记忆方法是把它放到数据流动路径里理解。数据从发送方应用层向下走到物理层再在接收方从下往上走安全机制可以加在不同的层。SSL/TLS是在传输层之上、应用层之下插入一个安全子层对应用数据整体做加密IPSec则是在网络层做保护能覆盖网络层之上的所有协议。做题时只要画出这根数据路径协议该放哪个位置很直观。防火墙类型也经常考包过滤防火墙工作在网络层状态检测防火墙能跟踪连接状态应用层代理防火墙则工作在应用层审查内容最全面但性能开销也最大。期末考得浅记住“层数越高检查越细开销越大”这个规律就能应付选项题。6. 期末冲刺把零散笔记转成答题能力的三个动作6.1 用“题型到考点到关键词”三层表复习到了复习后期最忌讳按课件顺序从头翻到尾。课件是按“知识点”组织的卷面是按“题型”组织的两者之间缺一座桥。我的做法是建一张三层表第一列写题型第二列写常考考点第三列写答题时必须出现的关键词。比如简答题对应“HTTP/1.1改进”关键词必须含“持久连接、管线化、缓存控制”计算题对应“拥塞控制曲线”关键词是“慢启动、阈值、快速恢复、窗口减半”。这张表做完之后后续复习只需要重复两件事看着第一列回忆第二列看着第二列回忆第三列。回忆正确率低于七成的地方就是需要重翻讲义的地方。这个方法不依赖任何具体材料任何人现在动手都能做。6.2 最后三天做一次“白板讲述”查漏我习惯在考前两三天对着白板把整门课讲一遍顺序不按课件而是按数据流动来说。从应用层HTTP、DNS讲起讲到传输层的连接管理与拥塞控制再往下到网络层的IP寻址与路由最后到链路层与物理层。每个机制讲三句话它解决什么问题它的核心机制是什么不这样做会怎样。完整讲一遍大约需要两三个小时中间卡壳的地方就是最值得回看的内容。这个方法看起来很笨但它能暴露“假会”的知识点。有的知识看着讲义能看懂做题时却死活想不起来本质上就是没有被组织成可输出的结构。讲一遍相当于强制把输入型记忆转成输出型记忆。我就在这个环节发现自己对快速恢复流程的记忆有误把“窗口减半”记成了“窗口归1”翻讲义纠正后以后这类题再没错过。6.3 错题本和公式卡考前一晚只看这些最后一天晚上不建议再刷新题把两个东西拿出来就够错题本和公式卡。错题本不需要抄整题只记“我错在哪一步”。比如“RTT单位忘了换算”“重复ACK阈值是当前窗口一半不是全窗口”“RST不需要等待确认”。每一条都对应一个坑考前看一遍相当于踩了一遍刹车。公式卡则分成两列左边是名词右边是公式或结论比如“3次重复ACK”对应“窗口减半进入快速恢复”“TIME_WAIT”对应“2MSL”。考前十分钟扫一遍公式卡进考场心里会踏实很多。复习笔记写到这里第10篇把传输层后半段、应用层、网络安全和冲刺方法都覆盖完了。这个系列还有一篇收尾我打算整理一张覆盖全课程的题型速查表把每章常考题型、易错点、答题关键词压缩成几页纸方便考前最后一遍过。你如果已经坚持看到这里现在就可以试试“白板讲述”把相邻两章的内容串起来讲一遍坚持半个小时后会发现很多原本模模糊糊的知识点都开始变得有结构了。
阅读完成 · 觉得有帮助?