期末复习最怕什么?最怕翻开课本的时候发现第五章已经只剩一个标题,脑子里全是上课时似懂非懂的名词。计算机网络这门课有个特点:前几章物理层、数据链路层讲的是“链路级”的东西,到第五章一上来就是端到端的传输层,视角一下子从“一条网线怎么传比特”跳到“两个进程之间怎么传数据”,很多人就是在这里开始跟不上的。如果你的教材是常见的结构,第五章大概率就是传输层。这一章在期末考试里分量很重,TCP、UDP、三次握手、四次挥手、可靠传输、流量控制、拥塞控制,随便哪个拎出来都能出选择、填空、简答甚至大题。这篇复习笔记就是围绕第五章展开的,把最核心的框架、易错点、计算题套路一次性捋清楚,适合期末突击的同学,也适合想把这章彻底搞明白的人。1. 第五章到底复习什么:先搞清楚教材在讲哪一块1.1 为什么多数教材把第五章放在传输层计算机网络教材的章节安排虽然五花八门,但主流结构基本沿用了“物理层、数据链路层、网络层、传输层、应用层”这个顺序。物理层关注比特怎么在介质上传输,数据链路层关注相邻节点怎么把帧送出去,网络层解决的是“分组怎么跨网络到达目的主机”,而传输层解决的是“到达主机之后,数据怎么交给正确的应用程序”。到了第五章,你的视角要从“主机到主机”切换到“进程到进程”。网络层的IP地址负责找到那台主机,但主机上同时跑着浏览器、聊天软件、视频客户端,数据到底该交给哪个进程?这个“交接”动作就是传输层的核心任务。教材把传输层放在中间位置,正好形成了一个承上启下的结构:上面有应用层的HTTP、DNS、FTP,下面有网络层的IP协议,传输层卡在中间做适配。复习第五章第一件事就是先认清楚:你复习的到底是哪一版的第五章。如果是按TCP/IP体系为主线,第五章会把TCP和UDP各分一节讲;如果是按OSI七层模型展开,传输层可能会拆成面向连接的传输和面向无连接的传输两块。无论哪种编排,核心考点都不会跑出下面这张表。1.2 复习前先搭好一张协议栈定位图很多同学一上来就背TCP报文段格式,这是效率最低的方式。正确的做法是先画一张协议栈走向图,明确每一层在做什么,数据经过各层时要加什么头。从发送端看,数据从应用层产生,交给传输层加上传输层头部,再交给网络层加IP头部,然后到数据链路层加帧头和帧尾,最后通过物理介质发出去。接收端的顺序正好反过来,逐层剥掉头部,最后传输层根据端口号把数据交给对应的进程。这张图画出来,第五章的位置就非常清晰了。考试时如果出现“某个报文在传输层的开销是多少”或者“哪些字段是传输层加的”这类题,只需要对照这张图就能秒答。传输层加的头部里包含源端口、目的端口,TCP还会加序号、确认号、窗口大小等字段,这些字段是传输层区别于网络层的标志。建议你在A4纸上用五分钟默写一遍这张图,写不出来的地方就是你复习的重点。我自己复习的时候习惯把每一层的PDU叫法也写上去:物理层是比特,数据链路层是帧,网络层是分组或数据报,传输层是报文段或用户数据报,应用层是报文。这个细节经常在选择题里出现,但很多人直到考试都没搞清。1.3 第五章在考试中的权重根据我接触过的期末试卷,第五章的出题比重通常能占到20%到30%。选择、填空、简答、计算四类题型都会涉及,综合分析题也喜欢以TCP拥塞控制为骨架来出。具体来说:选择题:UDP特点、TCP特点、端口号范围、常见协议使用的传输层协议。填空题:TCP报文段字段名称、三次握手状态、拥塞算法名称。简答题:为什么需要三次握手、TIME_WAIT的作用、TCP如何实现可靠传输。计算题:拥塞窗口变化过程、序号与确认号计算、超时重传时间与RTT估算。把这些考点列出来,复习目标就明确了。这一章不追求把所有细节背下来,但要保证“核心机制能讲清楚、关键计算能写对步骤”。下面就从传输层最基础的端口概念开始,一层层往上搭。2. 传输层核心概念:端口、多路复用与解复用2.1 端口寻址与套接字:传输层独有的“门牌系统”传输层和其他层最大的区别在于引入了端口号。如果把IP地址比作一栋楼的地址,端口号就是楼里的房间号。数据到了楼下之后,必须知道要送到哪个房间,否则快递员只能干瞪眼。端口号是一个16位二进制整数,范围从0到65535。其中0到1023是熟知端口号,也叫周知端口,由协议固定分配,比如HTTP的80、HTTPS的443、FTP的21、DNS的53。1024到49151是注册端口号,供应用程序或服务使用。49152到65535是动态或私有端口号,客户端进程通常由操作系统随机分配这些端口来发起连接。这里要重点区分一个概念:端口是传输层的地址,但光有端口号还不够。TCP或UDP报文到达主机时,真正标识一个连接或会话的是“IP地址 + 端口号”的组合,即套接字。例如客户端IP是192.168.1.10、端口56789,服务器IP是10.0.0.1、端口80,那么这个连接的套接字就是(192.168.1.10, 56789)和(10.0.0.1, 80)这一对。考试中常出现的“四元组”概念,指源IP、源端口、目的IP、目的端口四个字段,很多网络故障排查工具也是依据这个四元组来区分连接的。复习端口这一节时,我建议大家不要死背端口号的范围,而是去理解“为什么需要端口号”:网络层只需要把分组送到主机就完成任务了,主机上那么多进程怎么分配数据?端口号解决了这个问题。理解了这个逻辑,考试里无论怎么变换问法都能应对。2.2 多路复用与多路分解:信道复用的经济学多路复用和多路分解是传输层的一对基本功能,名字听着拗口,其实很好理解。多路复用发生在发送端:多个应用程序进程各自产生数据,传输层把这些数据封装成报文段,合并交给下面的网络层发送。多路分解发生在接收端:网络层送上来的报文段到达传输层后,传输层检查报文段的目的端口号,把数据分发到对应的套接字上,再由套接字交给进程。这两个名词在考试里通常以概念选择出现。你需要区分清楚:复用是从多个源到一条通路,分解是从一条通路到多个目的地。因为TCP是面向连接的,它的多路分解除了依赖目的端口号,还要看源端口号和IP地址来区分连接;而UDP是无连接的,多路分解只看目的端口号。举个例子来理解:宿舍楼下有一个收发室,所有快递先送到收发室,再按房间号分发给各寝室。这里“所有快递集中到收发室”就是多路复用,“按房间号分发”就是多路分解。房间号对应端口号,楼号对应IP地址,这个例子几乎能套进所有相关题目。2.3 传输层服务的三种典型模式从服务的角度看,传输层协议主要分为三类:面向连接的可靠传输服务、无连接的尽力而为传输服务、介于两者之间的特殊服务。面向连接的可靠传输服务以TCP为代表,提供建立连接、可靠传输、流量控制、拥塞控制、全双工通信等能力。无连接的尽力而为服务以UDP为代表,只做最小限度的封装和分发,不保证数据一定到达、不保证顺序、不保证不重复。除这两种之外,一些教材会补充SCTP这种流控制传输协议,或者提到QUIC这类基于UDP的可靠传输方案。期末复习阶段不需要深入,只需要知道“TCP不是唯一的可靠传输协议”“UDP也可以在应用层实现可靠性”这两点,以免考试中遇到超纲选项时发懵。选服务模式有一个朴素的判断逻辑:对数据完整性要求高、允许延迟但不允许丢失的场景用TCP;对实时性要求高、能容忍少量丢失但不能容忍重传延迟的场景用UDP。比如文件传输用TCP,实时语音和视频通话用UDP。这个判断逻辑在选择题中比死记协议清单好用得多。3. UDP与TCP基础对比:别只会背表格3.1 UDP报文段结构与适用场景UDP报文段结构非常精简,固定只有8字节的首部,包括4个字段:源端口、目的端口、长度、校验和。每项占16位。长度字段的值是“UDP报文段总长度 = 首部8字节 + 数据部分字节数”,最小值为8,表示只有首部没有数据。校验和字段用于检测传输过程中数据链路层或者IP层是否发生了比特错误。UDP校验和的计算会涉及一个“伪首部”,它包括源IP地址、目的IP地址、协议号以及UDP长度,目的是让传输层能够检测出IP地址是否正确。这个细节容易考填空,也更适合出选择题。UDP的优点就藏在它的精简里:没有连接建立过程,发送数据前不需要握手,因此延迟低;没有状态维护,协议开销小;报文头部很短,额外带宽占用少。这些特性让UDP特别适合DNS查询、DHCP、SNMP、流媒体直播、在线游戏等应用。复习UDP时记住一句话:UDP只是把IP层的能力“搬运”到了传输层,它不承诺可靠,不保证顺序,也不做拥塞控制。如果题目问“UDP提供什么样的服务”,参考答案就是“尽力而为的、无连接的、不可靠的数据报服务”。3.2 TCP报文段结构、序号与确认号TCP报文段的首部比UDP复杂得多,固定部分至少20字节,UDP只有8字节。TCP首部关键字段包括源端口、目的端口、序号、确认号、数据偏移、保留位、URG/ACK/PSH/RST/SYN/FIN六个标志位、接收窗口、校验和、紧急指针,以及可选字段。最需要重点关注的是序号和确认号,这两个字段是理解可靠传输的关键。序号表示本报文段所携带数据的第一个字节在整个字节流中的编号。比如一个TCP连接中,发送方要发送长度为1000字节的数据,第一个字节编号为0,那么第一个报文段携带0到999字节,序号字段填0;第二个报文段携带1000到1999字节,序号字段就填1000。确认号的含义是“期望收到对方下一个报文段数据的第一个字节的编号”。也就是说,如果接收方收到的数据字节号到编号299为止,那么它回复的确认号就是300,表示300之前的字节都收齐了,下一个请从300开始发。这里有个让新人很困惑的点:确认号不是“已经确认到的最大序号”,而是“下一个期望收到的序号”。六个标志位中,SYN用于建立连接时同步序号,FIN用于释放连接,ACK表示确认号字段有效,RST用于异常重置连接,PSH表示尽快交付应用层,URG配合紧急指针使用。期末考试经常考的标志位就是SYN、FIN和ACK,答题时可以重点围绕这三个展开。3.3 期末常考的协议选择判断题关于TCP和UDP的对比,期末几乎每年都会出一道选择题或简答题。关键对比项包括:是否面向连接:TCP是,UDP否。是否可靠传输:TCP是,UDP否。是否提供流量控制:TCP是,UDP否。是否提供拥塞控制:TCP是,UDP否。首部开销:TCP固定20字节,UDP固定8字节。数据传输单位:TCP是报文段,UDP是用户数据报。通信方式:TCP全双工,UDP支持一对一、一对多、多对多。“UDP是否提供拥塞控制”这个知识点迷惑性很大。TCP有拥塞控制机制,UDP没有,但由于UDP没有拥塞控制,它可以在网络拥塞时持续向网络注入流量,这反而可能加剧拥塞。有些同学会把“UDP没有拥塞控制”误记成“UDP可以避免拥塞”,方向完全反了。协议选择的典型题目我见过好几种变体:问“浏览网页用的是什么协议”要选TCP,因为HTTP基于TCP;问“DNS查询使用什么协议”要选UDP,虽然DNS也支持部分TCP场景,但常规查询默认走UDP;问“视频直播用TCP还是UDP”通常优先选UDP。这类题不能只背结论,而是要把上面的判断逻辑用上,才能应对题目里换场景的情况。4. TCP可靠传输机制:每天都考的重点4.1 停止等待协议与超时重传TCP实现可靠传输的基础是确认和重传。最简单的模型是停止等待协议:发送方发送一个报文段后就停下来等确认,收到确认才发下一个。如果等待时间超过超时计时器,就重传同一个报文段。这个模型讲课必提,因为它是理解可靠性的起点,但TCP实战中并不会用这种“发一个等一个”的低效方式。停止等待协议的问题很好理解:如果往返时间RTT是100毫秒,链路带宽再大,平均每100毫秒只能发一个报文段,吞吐量被卡死了。期末考停止等待协议时,最常见的题目是画一个时间图,标出前一个报文段丢失、确认丢失、确认迟到三种情况的处理过程。前一个报文段丢失时,发送方超时重传。确认丢失时,发送方没有收到确认,超时后重传,但接收方第二次收到同样的序号时直接丢弃重复报文段,同时再回复一次确认。确认迟到时,发送方已经重传过了,后续才收到旧确认,此时需要跳过这个确认,继续正常发送。这三种情况理解后,滑动窗口模型就容易多了。4.2 连续ARQ、滑动窗口与累计确认停止等待协议效率太低,于是有了连续ARQ协议。连续ARQ允许发送方在收到确认之前连续发送多个报文段,同时维护一个发送窗口。窗口内的报文段都可以发出去,窗口外的必须等确认后窗口滑动才能继续发送。滑动窗口有两个维度值得区分:发送窗口和接收窗口。发送窗口的大小由接收方通告的接收窗口和网络拥塞情况共同决定,接收窗口大小则代表接收方当前还能接收多少字节数据。接收方通过TCP首部的窗口字段告诉发送方“我还能收多少”,这就是流量控制的雏形。TCP使用累计确认机制:接收方不一定要对每个报文段立即确认,它可以回复一个确认号,表示该序号之前的所有数据都已正确收到。比如发送方连续发送了序号1到500的报文段,如果接收方都收到了,可以只在最后一个报文段到达后回复一个确认号501,告诉发送方“500之前的都收到了”。累计确认带来了一个好处:即使某个确认丢失,后续到达的更高序号的确认也能覆盖前一个确认的作用,不需要重传已经收到确认的数据。考试里经常会出现“确认丢失了怎么办”这样的简答题,答题要点就是依靠累计确认机制,后续确认可以弥补。4.3 常见考点:流水线模型和窗口计算理解了滑动窗口之后,需要会做两类题目。第一类是计算在给定窗口大小和RTT下的最大吞吐量。公式本质是:吞吐量约等于窗口大小除以往返时间。比如窗口大小为64KB,RTT为200毫秒,那么理想吞吐量大约是64KB除以0.2秒,即320KB/s。这类题考察的是“流水线”和停止等待的效率对比,计算本身不难,难在单位换算。要特别注意窗口单位是字节还是比特,RTT单位是毫秒还是秒。第二类是判断发送方在某个时刻能够发送哪些报文段。题目会给出发送窗口的起始序号、窗口大小和已经收到的确认号,要求你说出下一个可发送的序号范围。这类题画一个窗口图就能解决:确认号左边的是已发送且被确认的,确认号到确认号加窗口大小减1之间的是可以发送的。建议考试时不要在脑子里算,直接在草稿纸上画格子,又快又稳。5. 流量控制与拥塞控制:几乎必考的计算与策略5.1 流量控制:接收窗口与是否持久关闭流量控制和拥塞控制名称很像,但服务对象完全不同。流量控制解决的是“发送方发送太快,接收方来不及接收”的问题,由接收方主导。拥塞控制解决的是“太多数据进入网络,网络中间节点处理不过来”的问题,由网络状态主导。TCP实现流量控制的手段就是接收窗口。接收方在TCP首部的窗口字段中告诉发送方自己的缓存还有多少剩余空间,发送方发送的总字节数不能超过这个窗口的大小。如果接收方的缓存快满了,它会通告一个很小的窗口甚至0窗口,发送方收到0窗口后必须停止发送。这里有一个很实用的考点:当接收方通告0窗口后,发送方停止发送,但为了防止接收方的窗口更新通告丢失导致双方死等,发送方会启动一个持续计时器,周期性发送一个1字节的探测报文段,询问接收方窗口是否恢复。这个机制的名字叫“持续计时器”,考试常考它的作用。流量控制的题目往往配合滑动窗口计算一起出,本质就是反复应用“发送数据不能超过接收窗口”这个约束。做题时先标出接收窗口大小,再看发送窗口大小,取两者较小值作为实际可发送范围,思路就清楚了。5.2 拥塞控制核心算法:慢开始、拥塞避免、快重传、快恢复拥塞控制是第五章的绝对重点,几乎是期末大题的第一候选。TCP拥塞控制依靠发送方维护一个拥塞窗口cwnd,接收窗口rwnd是接收方的限制,拥塞窗口是发送方自己对网络状况的估计,实际发送窗口大小等于min(cwnd, rwnd)。四个核心算法要按顺序掌握:慢开始的思路不是一开始就全速发送,而是从小窗口开始试探。初始cwnd通常设为1个最大报文段长度MSS,每经过一个RTT,cwnd翻倍。这个阶段是“指数增长”,因为1变2、2变4、4变8的速度非常快。慢的开始并不是指速度慢,而是指“从小慢慢试探”,实际指数增长一点也不慢。拥塞避免在cwnd达到慢开始门限ssthresh后启动,每经过一个RTT,cwnd增加1个MSS。这个阶段是“线性增长”,增长到一定程度后要防止网络过载。快重传是为了避免等待超时太久。如果发送方连续收到3个重复的ACK,说明某个报文段丢了,不用等超时计时器,立即重传丢失的报文段。快恢复配合快重传使用:发生快重传时,把ssthresh减为当前cwnd的一半,并把cwnd置为减半后的值,然后执行拥塞避免线性增长。如果是超时导致的丢包,处理方式不同:ssthresh减半,cwnd重置为1,重新执行慢开始。这四个算法的识别特征可以帮助记忆:超时是“凄惨重启”,cwnd直接降到1;快重传是“快速补货”,不降回1而是降到阈值水平。考试画cwnd变化曲线时,只要看到某个位置cwnd出现断崖式下跌、之后从1开始的,就是超时;如果cwnd减半后继续缓步增长,就对应快恢复。5.3 拥塞窗口计算题实战:逐步推演一张对照表拥塞窗口计算是期末最容易拿分也最容易失分的题。失分原因通常不是不懂算法,而是“走到一半不知道当前该用慢开始还是拥塞避免”。我拿一个典型题目示范推演。假设初始ssthresh=16,初始cwnd=1,传输轮次按RTT计数:轮次1:cwnd=1,未达到16,执行慢开始。 轮次2:cwnd=2。 轮次3:cwnd=4。 轮次4:cwnd=8。 轮次5:cwnd=16,此时cwnd等于ssthresh,下一轮进入拥塞避免。 轮次6:cwnd=17。 轮次7:cwnd=18。如果第7轮出现超时,那么ssthresh更新为18的一半,也就是9,cwnd重置为1。之后的路径是慢开始到9:轮次8变成2,轮次9变成4,轮次10变成8,轮次11变成9,轮次12开始进入拥塞避免,每次加1。如果出现的不是超时而是3个重复ACK,则执行快重传和快恢复:ssthresh变为9,cwnd也置为9,之后从9开始线性增长。做这类题的建议是:在草稿纸上画成两列表格,左边是RTT轮次,右边是当前cwnd,同时单独一列写当前ssthresh。每次发生拥塞事件时先更新ssthresh,再决定cwnd走向。绝大多数错误都出在“超时后忘了降到1”或者“快重传后直接执行慢开始”,把这两个容易出错的动作单独标记一遍,能避开大部分坑。6. TCP连接管理:三次握手与四次挥手6.1 三次握手细节与状态变化TCP建立连接需要三次握手,目的是让通信双方都确认自己发送能力、接收能力正常,并且同步初始序号。第一次握手:客户端发送一个SYN报文段,SYN标志位置1,随机取一个初始序号client_isn,客户端进入SYN_SENT状态。第二次握手:服务器收到SYN后,回复一个SYN+ACK报文段,自己的初始序号为server_isn,确认号为client_isn+1,服务器进入SYN_RCVD状态。第三次握手:客户端收到SYN+ACK后,回复一个ACK报文段,确认号为server_isn+1,然后客户端进入ESTABLISHED状态。服务器收到这个ACK后也进入ESTABLISHED状态。三次握手为什么不能用两次,这是最经典的简答题。核心原因有两点:第一,两次握手只能确保服务器的接收和发送能力得到确认,但服务器不知道客户端是否已经收到自己的SYN+ACK,如果客户端没有收到,会重复发起连接;第二,防止已失效的连接请求突然到达服务器。假设客户端第一个SYN在网络中滞留了很久,超时后客户端重新发送了SYN并完成连接释放,这时原来的SYN才到达服务器。如果只有两次握手,服务器会误以为客户端要建立新连接,白白分配资源。三次握手通过客户端的第三次ACK让服务器确认真正建立了新连接,避免这种“悬空连接”。答题时要把“确认双方收发能力”和“防止失效连接请求”两点都答上,只答一点会扣分。6.2 四次挥手及TIME_WAIT为什么存在TCP释放连接需要四次挥手,因为TCP连接是全双工的,两个方向的数据传送要分别关闭。第一次挥手:客户端发送FIN报文段,表示客户端的数据已经发送完毕,进入FIN_WAIT_1状态。第二次挥手:服务器收到FIN后,回复ACK,客户端进入FIN_WAIT_2状态。服务器此时可能还有数据要发送,所以不会立刻关闭。第三次挥手:服务器数据发送完毕,发送FIN报文段,进入LAST_ACK状态。第四次挥手:客户端收到FIN后,回复ACK,进入TIME_WAIT状态;服务器收到ACK后进入CLOSED。TIME_WAIT是最爱考的状态。为什么客户端在收到服务器的FIN后不能直接关闭,而要等待2MSL?原因有两个:第一,保证最后一次ACK能到达服务器。如果这个ACK丢失,服务器会超时重传FIN,客户端如果已经关闭就无法回复新的ACK;等待2MSL可以让客户端有机会收到重传的FIN并再次确认。第二,让本连接产生的所有报文段在网络中自然消失,避免旧连接的延迟报文段干扰新连接。2MSL是一个最大报文段生存时间的两倍,足够让一个报文段在网络中从出现到消失。这里有个细节容易混淆:主动关闭方进入TIME_WAIT,不是被动关闭方。大多数场景下客户端先发起关闭,所以客户端会进入TIME_WAIT。如果服务器主动先关,那么服务器也会进入TIME_WAIT。6.3 FIN_WAIT、CLOSE_WAIT等异常状态排查思路期末复习对状态机不要求完全背下来,但几个典型状态的含义必须清楚。FIN_WAIT_1表示主动关闭方发送了FIN,还没收到对方的ACK。FIN_WAIT_2表示已经收到ACK,等待对方发送FIN。CLOSE_WAIT是被动关闭方收到FIN后、自己还没关闭时所在的状态,表示对方已经关了发送方向,但自己还有数据要发。LAST_ACK是被动关闭方发送FIN后,等待最后ACK的状态。异常状态最常见的两个问题:一是大量连接卡在CLOSE_WAIT,说明应用程序没有正确关闭socket;二是大量连接卡在TIME_WAIT,说明主动关闭方太多或者服务端用短连接频繁关闭。排查思路上,CLOSE_WAIT要检查应用层是否处理了连接关闭事件,TIME_WAIT则要结合业务设计看是否需要调整连接复用策略。考试不会让你去排查生产环境,但会以选择或简答形式问“TIME_WAIT出现在哪个阶段”“CLOSE_WAIT代表什么”。把每个状态和挥手步骤对应起来,比死记状态名更牢靠。7. 期末速记与常见题目分析7.1 选择题高频陷阱总结我把往年选择题里出现频率最高的陷阱整理成了一张速查表,复习时可以逐条对一遍。陷阱一:把“UDP没有拥塞控制”记成“UDP有拥塞控制”。UDP根本没有拥塞控制机制,不会根据网络状况调节发送速率。陷阱二:认为“TCP建立连接是三次握手,释放连接也是三次”。释放连接是四次,因为服务器收到FIN后要先回ACK,等自己把数据发完再发FIN,是两个独立步骤。陷阱三:混淆序号和确认号的含义。序号是“本报文数据第一个字节的编号”,确认号是“期望收到的下一个字节编号”。陷阱四:认为TCP首部固定是20字节,忽略选项字段。20字节是固定部分,加上选项后可能更长。陷阱五:把端口号范围和用途张冠李戴。DNS是53,HTTP是80,HTTPS是443,FTP控制连接是21,SSH是22。陷阱六:认为慢开始就是慢速发送。慢开始只是初始cwnd小,增长方式是指数增长,很快就能达到较大值。陷阱七:快重传和快恢复被当成一回事。快重传是收到3个重复ACK后立即重传,快恢复是紧接着调整cwnd的动作,两者是连续但有区别的概念。这些陷阱靠背表格记不牢,我的建议是把每个陷阱当成一道“改错题”来做,自己说出为什么错,效果比重复读好几遍强。7.2 计算题常见题型梳理第五章计算题的类型很固定,可以说是“有限题库”。第一类是端口与报文段长度的计算。给定UDP数据部分长度,求UDP报文段总长度。注意UDP首部固定8字节,总长度是8加数据长度。第二类是TCP序号和确认号的计算。给出连接初始序号和发送数据长度,求下一个报文段的序号以及对方回复的确认号。这类题的关键是记住“确认号等于期望收到的下一个字节序号”,别多算少算。第三类是吞吐量计算。给定窗口和RTT,估算最大发送速率。基本公式是窗口除以RTT,单位换算要细致。第四类是拥塞窗口计算。给出一张时间表和若干拥塞事件,画出cwnd的变化并计算特定时刻的窗口值。这类题按照5.3的表格法最稳妥。第五类是等待时间类。给定初始RTT或者抽样RTT,结合超时重传时间调整计算。期末考试若出这类题,通常会给出简化公式,直接套用即可。计算题拿分的核心是步骤完整。哪怕最后结果错了,只要中间画出窗口图、写出变化轨迹,阅卷时也能拿到大部分过程分。反过来,只写一个最终答案,蒙对了高兴,蒙错了就血本无归。7.3 复习节奏与答题顺序建议如果还剩一周时间,我的建议是分三个阶段安排第五章。第一阶段花两天通读教材的第五章,边读边把“三次握手”“四次挥手”“拥塞控制曲线”三个图手画三遍。手画的过程就是记忆的过程,比只看不画的效果好得多。第二阶段用一天时间集中做选择和填空题,目的是查漏补缺。做题时对错都要写出理由,不能只记正确答案。第三阶段专门练简答题和计算题,重点背“为什么需要三次握手”“TCP如何实现可靠传输”“慢开始和拥塞避免的区别”这几个高频简答题的答题框架。答题框架不用很长,但要把核心关键词踩准,例如提到序号、确认、重传、窗口、累计确认这些词,分数就有了基本保障。考试答题顺序上,我建议先做计算题,因为刚开考时思路清晰,公式和步骤还记得牢。简答题放在中间写,选择题优先排除明显错误项。第五章作为重点章节,优先保证正确率。8. 关于第五章我的一些体会每次给同学答疑第五章,我都会说同一句话:这一章不是靠背的,是靠画的。你可以不背TCP报文段每个字段的位置,但你必须能在纸上画出三次握手的箭头、画出cwnd的变化曲线、画出滑动窗口的边界。画出来一遍,比默念十遍都管用。我个人复习时还有一个习惯,就是给每一个协议机制找一个生活中的类比。端口号是宿舍房间号,滑动窗口是食堂窗口一次能打几份饭,拥塞控制是早晚高峰地铁的限流闸机,TIME_WAIT是散场后让观众慢慢离场、避免拥堵和踩踏。这些类比可能不严谨,但能让你在考场上快速回忆起机制的大方向,再往大方向上补细节,答案就不会跑偏。最后想说,第五章的题目虽然花样多,但本质上都是在回答同一个问题:TCP和UDP到底是怎么在复杂网络里完成可靠交付的?把这个问题理解透了,不管期末试卷怎么变,你都能稳住。
期末复习最怕什么?最怕翻开课本的时候发现第五章已经只剩一个标题,脑子里全是上课时似懂非懂的名词。计算机网络这门课有个特点:前几章物理层、数据链路层讲的是“链路级”的东西,到第五章一上来就是端到端的传输层,视角一下子从“一条网线怎么传比特”跳到“两个进程之间怎么传数据”,很多人就是在这里开始跟不上的。如果你的教材是常见的结构,第五章大概率就是传输层。这一章在期末考试里分量很重,TCP、UDP、三次握手、四次挥手、可靠传输、流量控制、拥塞控制,随便哪个拎出来都能出选择、填空、简答甚至大题。这篇复习笔记就是围绕第五章展开的,把最核心的框架、易错点、计算题套路一次性捋清楚,适合期末突击的同学,也适合想把这章彻底搞明白的人。1. 第五章到底复习什么:先搞清楚教材在讲哪一块1.1 为什么多数教材把第五章放在传输层计算机网络教材的章节安排虽然五花八门,但主流结构基本沿用了“物理层、数据链路层、网络层、传输层、应用层”这个顺序。物理层关注比特怎么在介质上传输,数据链路层关注相邻节点怎么把帧送出去,网络层解决的是“分组怎么跨网络到达目的主机”,而传输层解决的是“到达主机之后,数据怎么交给正确的应用程序”。到了第五章,你的视角要从“主机到主机”切换到“进程到进程”。网络层的IP地址负责找到那台主机,但主机上同时跑着浏览器、聊天软件、视频客户端,数据到底该交给哪个进程?这个“交接”动作就是传输层的核心任务。教材把传输层放在中间位置,正好形成了一个承上启下的结构:上面有应用层的HTTP、DNS、FTP,下面有网络层的IP协议,传输层卡在中间做适配。复习第五章第一件事就是先认清楚:你复习的到底是哪一版的第五章。如果是按TCP/IP体系为主线,第五章会把TCP和UDP各分一节讲;如果是按OSI七层模型展开,传输层可能会拆成面向连接的传输和面向无连接的传输两块。无论哪种编排,核心考点都不会跑出下面这张表。1.2 复习前先搭好一张协议栈定位图很多同学一上来就背TCP报文段格式,这是效率最低的方式。正确的做法是先画一张协议栈走向图,明确每一层在做什么,数据经过各层时要加什么头。从发送端看,数据从应用层产生,交给传输层加上传输层头部,再交给网络层加IP头部,然后到数据链路层加帧头和帧尾,最后通过物理介质发出去。接收端的顺序正好反过来,逐层剥掉头部,最后传输层根据端口号把数据交给对应的进程。这张图画出来,第五章的位置就非常清晰了。考试时如果出现“某个报文在传输层的开销是多少”或者“哪些字段是传输层加的”这类题,只需要对照这张图就能秒答。传输层加的头部里包含源端口、目的端口,TCP还会加序号、确认号、窗口大小等字段,这些字段是传输层区别于网络层的标志。建议你在A4纸上用五分钟默写一遍这张图,写不出来的地方就是你复习的重点。我自己复习的时候习惯把每一层的PDU叫法也写上去:物理层是比特,数据链路层是帧,网络层是分组或数据报,传输层是报文段或用户数据报,应用层是报文。这个细节经常在选择题里出现,但很多人直到考试都没搞清。1.3 第五章在考试中的权重根据我接触过的期末试卷,第五章的出题比重通常能占到20%到30%。选择、填空、简答、计算四类题型都会涉及,综合分析题也喜欢以TCP拥塞控制为骨架来出。具体来说:选择题:UDP特点、TCP特点、端口号范围、常见协议使用的传输层协议。填空题:TCP报文段字段名称、三次握手状态、拥塞算法名称。简答题:为什么需要三次握手、TIME_WAIT的作用、TCP如何实现可靠传输。计算题:拥塞窗口变化过程、序号与确认号计算、超时重传时间与RTT估算。把这些考点列出来,复习目标就明确了。这一章不追求把所有细节背下来,但要保证“核心机制能讲清楚、关键计算能写对步骤”。下面就从传输层最基础的端口概念开始,一层层往上搭。2. 传输层核心概念:端口、多路复用与解复用2.1 端口寻址与套接字:传输层独有的“门牌系统”传输层和其他层最大的区别在于引入了端口号。如果把IP地址比作一栋楼的地址,端口号就是楼里的房间号。数据到了楼下之后,必须知道要送到哪个房间,否则快递员只能干瞪眼。端口号是一个16位二进制整数,范围从0到65535。其中0到1023是熟知端口号,也叫周知端口,由协议固定分配,比如HTTP的80、HTTPS的443、FTP的21、DNS的53。1024到49151是注册端口号,供应用程序或服务使用。49152到65535是动态或私有端口号,客户端进程通常由操作系统随机分配这些端口来发起连接。这里要重点区分一个概念:端口是传输层的地址,但光有端口号还不够。TCP或UDP报文到达主机时,真正标识一个连接或会话的是“IP地址 + 端口号”的组合,即套接字。例如客户端IP是192.168.1.10、端口56789,服务器IP是10.0.0.1、端口80,那么这个连接的套接字就是(192.168.1.10, 56789)和(10.0.0.1, 80)这一对。考试中常出现的“四元组”概念,指源IP、源端口、目的IP、目的端口四个字段,很多网络故障排查工具也是依据这个四元组来区分连接的。复习端口这一节时,我建议大家不要死背端口号的范围,而是去理解“为什么需要端口号”:网络层只需要把分组送到主机就完成任务了,主机上那么多进程怎么分配数据?端口号解决了这个问题。理解了这个逻辑,考试里无论怎么变换问法都能应对。2.2 多路复用与多路分解:信道复用的经济学多路复用和多路分解是传输层的一对基本功能,名字听着拗口,其实很好理解。多路复用发生在发送端:多个应用程序进程各自产生数据,传输层把这些数据封装成报文段,合并交给下面的网络层发送。多路分解发生在接收端:网络层送上来的报文段到达传输层后,传输层检查报文段的目的端口号,把数据分发到对应的套接字上,再由套接字交给进程。这两个名词在考试里通常以概念选择出现。你需要区分清楚:复用是从多个源到一条通路,分解是从一条通路到多个目的地。因为TCP是面向连接的,它的多路分解除了依赖目的端口号,还要看源端口号和IP地址来区分连接;而UDP是无连接的,多路分解只看目的端口号。举个例子来理解:宿舍楼下有一个收发室,所有快递先送到收发室,再按房间号分发给各寝室。这里“所有快递集中到收发室”就是多路复用,“按房间号分发”就是多路分解。房间号对应端口号,楼号对应IP地址,这个例子几乎能套进所有相关题目。2.3 传输层服务的三种典型模式从服务的角度看,传输层协议主要分为三类:面向连接的可靠传输服务、无连接的尽力而为传输服务、介于两者之间的特殊服务。面向连接的可靠传输服务以TCP为代表,提供建立连接、可靠传输、流量控制、拥塞控制、全双工通信等能力。无连接的尽力而为服务以UDP为代表,只做最小限度的封装和分发,不保证数据一定到达、不保证顺序、不保证不重复。除这两种之外,一些教材会补充SCTP这种流控制传输协议,或者提到QUIC这类基于UDP的可靠传输方案。期末复习阶段不需要深入,只需要知道“TCP不是唯一的可靠传输协议”“UDP也可以在应用层实现可靠性”这两点,以免考试中遇到超纲选项时发懵。选服务模式有一个朴素的判断逻辑:对数据完整性要求高、允许延迟但不允许丢失的场景用TCP;对实时性要求高、能容忍少量丢失但不能容忍重传延迟的场景用UDP。比如文件传输用TCP,实时语音和视频通话用UDP。这个判断逻辑在选择题中比死记协议清单好用得多。3. UDP与TCP基础对比:别只会背表格3.1 UDP报文段结构与适用场景UDP报文段结构非常精简,固定只有8字节的首部,包括4个字段:源端口、目的端口、长度、校验和。每项占16位。长度字段的值是“UDP报文段总长度 = 首部8字节 + 数据部分字节数”,最小值为8,表示只有首部没有数据。校验和字段用于检测传输过程中数据链路层或者IP层是否发生了比特错误。UDP校验和的计算会涉及一个“伪首部”,它包括源IP地址、目的IP地址、协议号以及UDP长度,目的是让传输层能够检测出IP地址是否正确。这个细节容易考填空,也更适合出选择题。UDP的优点就藏在它的精简里:没有连接建立过程,发送数据前不需要握手,因此延迟低;没有状态维护,协议开销小;报文头部很短,额外带宽占用少。这些特性让UDP特别适合DNS查询、DHCP、SNMP、流媒体直播、在线游戏等应用。复习UDP时记住一句话:UDP只是把IP层的能力“搬运”到了传输层,它不承诺可靠,不保证顺序,也不做拥塞控制。如果题目问“UDP提供什么样的服务”,参考答案就是“尽力而为的、无连接的、不可靠的数据报服务”。3.2 TCP报文段结构、序号与确认号TCP报文段的首部比UDP复杂得多,固定部分至少20字节,UDP只有8字节。TCP首部关键字段包括源端口、目的端口、序号、确认号、数据偏移、保留位、URG/ACK/PSH/RST/SYN/FIN六个标志位、接收窗口、校验和、紧急指针,以及可选字段。最需要重点关注的是序号和确认号,这两个字段是理解可靠传输的关键。序号表示本报文段所携带数据的第一个字节在整个字节流中的编号。比如一个TCP连接中,发送方要发送长度为1000字节的数据,第一个字节编号为0,那么第一个报文段携带0到999字节,序号字段填0;第二个报文段携带1000到1999字节,序号字段就填1000。确认号的含义是“期望收到对方下一个报文段数据的第一个字节的编号”。也就是说,如果接收方收到的数据字节号到编号299为止,那么它回复的确认号就是300,表示300之前的字节都收齐了,下一个请从300开始发。这里有个让新人很困惑的点:确认号不是“已经确认到的最大序号”,而是“下一个期望收到的序号”。六个标志位中,SYN用于建立连接时同步序号,FIN用于释放连接,ACK表示确认号字段有效,RST用于异常重置连接,PSH表示尽快交付应用层,URG配合紧急指针使用。期末考试经常考的标志位就是SYN、FIN和ACK,答题时可以重点围绕这三个展开。3.3 期末常考的协议选择判断题关于TCP和UDP的对比,期末几乎每年都会出一道选择题或简答题。关键对比项包括:是否面向连接:TCP是,UDP否。是否可靠传输:TCP是,UDP否。是否提供流量控制:TCP是,UDP否。是否提供拥塞控制:TCP是,UDP否。首部开销:TCP固定20字节,UDP固定8字节。数据传输单位:TCP是报文段,UDP是用户数据报。通信方式:TCP全双工,UDP支持一对一、一对多、多对多。“UDP是否提供拥塞控制”这个知识点迷惑性很大。TCP有拥塞控制机制,UDP没有,但由于UDP没有拥塞控制,它可以在网络拥塞时持续向网络注入流量,这反而可能加剧拥塞。有些同学会把“UDP没有拥塞控制”误记成“UDP可以避免拥塞”,方向完全反了。协议选择的典型题目我见过好几种变体:问“浏览网页用的是什么协议”要选TCP,因为HTTP基于TCP;问“DNS查询使用什么协议”要选UDP,虽然DNS也支持部分TCP场景,但常规查询默认走UDP;问“视频直播用TCP还是UDP”通常优先选UDP。这类题不能只背结论,而是要把上面的判断逻辑用上,才能应对题目里换场景的情况。4. TCP可靠传输机制:每天都考的重点4.1 停止等待协议与超时重传TCP实现可靠传输的基础是确认和重传。最简单的模型是停止等待协议:发送方发送一个报文段后就停下来等确认,收到确认才发下一个。如果等待时间超过超时计时器,就重传同一个报文段。这个模型讲课必提,因为它是理解可靠性的起点,但TCP实战中并不会用这种“发一个等一个”的低效方式。停止等待协议的问题很好理解:如果往返时间RTT是100毫秒,链路带宽再大,平均每100毫秒只能发一个报文段,吞吐量被卡死了。期末考停止等待协议时,最常见的题目是画一个时间图,标出前一个报文段丢失、确认丢失、确认迟到三种情况的处理过程。前一个报文段丢失时,发送方超时重传。确认丢失时,发送方没有收到确认,超时后重传,但接收方第二次收到同样的序号时直接丢弃重复报文段,同时再回复一次确认。确认迟到时,发送方已经重传过了,后续才收到旧确认,此时需要跳过这个确认,继续正常发送。这三种情况理解后,滑动窗口模型就容易多了。4.2 连续ARQ、滑动窗口与累计确认停止等待协议效率太低,于是有了连续ARQ协议。连续ARQ允许发送方在收到确认之前连续发送多个报文段,同时维护一个发送窗口。窗口内的报文段都可以发出去,窗口外的必须等确认后窗口滑动才能继续发送。滑动窗口有两个维度值得区分:发送窗口和接收窗口。发送窗口的大小由接收方通告的接收窗口和网络拥塞情况共同决定,接收窗口大小则代表接收方当前还能接收多少字节数据。接收方通过TCP首部的窗口字段告诉发送方“我还能收多少”,这就是流量控制的雏形。TCP使用累计确认机制:接收方不一定要对每个报文段立即确认,它可以回复一个确认号,表示该序号之前的所有数据都已正确收到。比如发送方连续发送了序号1到500的报文段,如果接收方都收到了,可以只在最后一个报文段到达后回复一个确认号501,告诉发送方“500之前的都收到了”。累计确认带来了一个好处:即使某个确认丢失,后续到达的更高序号的确认也能覆盖前一个确认的作用,不需要重传已经收到确认的数据。考试里经常会出现“确认丢失了怎么办”这样的简答题,答题要点就是依靠累计确认机制,后续确认可以弥补。4.3 常见考点:流水线模型和窗口计算理解了滑动窗口之后,需要会做两类题目。第一类是计算在给定窗口大小和RTT下的最大吞吐量。公式本质是:吞吐量约等于窗口大小除以往返时间。比如窗口大小为64KB,RTT为200毫秒,那么理想吞吐量大约是64KB除以0.2秒,即320KB/s。这类题考察的是“流水线”和停止等待的效率对比,计算本身不难,难在单位换算。要特别注意窗口单位是字节还是比特,RTT单位是毫秒还是秒。第二类是判断发送方在某个时刻能够发送哪些报文段。题目会给出发送窗口的起始序号、窗口大小和已经收到的确认号,要求你说出下一个可发送的序号范围。这类题画一个窗口图就能解决:确认号左边的是已发送且被确认的,确认号到确认号加窗口大小减1之间的是可以发送的。建议考试时不要在脑子里算,直接在草稿纸上画格子,又快又稳。5. 流量控制与拥塞控制:几乎必考的计算与策略5.1 流量控制:接收窗口与是否持久关闭流量控制和拥塞控制名称很像,但服务对象完全不同。流量控制解决的是“发送方发送太快,接收方来不及接收”的问题,由接收方主导。拥塞控制解决的是“太多数据进入网络,网络中间节点处理不过来”的问题,由网络状态主导。TCP实现流量控制的手段就是接收窗口。接收方在TCP首部的窗口字段中告诉发送方自己的缓存还有多少剩余空间,发送方发送的总字节数不能超过这个窗口的大小。如果接收方的缓存快满了,它会通告一个很小的窗口甚至0窗口,发送方收到0窗口后必须停止发送。这里有一个很实用的考点:当接收方通告0窗口后,发送方停止发送,但为了防止接收方的窗口更新通告丢失导致双方死等,发送方会启动一个持续计时器,周期性发送一个1字节的探测报文段,询问接收方窗口是否恢复。这个机制的名字叫“持续计时器”,考试常考它的作用。流量控制的题目往往配合滑动窗口计算一起出,本质就是反复应用“发送数据不能超过接收窗口”这个约束。做题时先标出接收窗口大小,再看发送窗口大小,取两者较小值作为实际可发送范围,思路就清楚了。5.2 拥塞控制核心算法:慢开始、拥塞避免、快重传、快恢复拥塞控制是第五章的绝对重点,几乎是期末大题的第一候选。TCP拥塞控制依靠发送方维护一个拥塞窗口cwnd,接收窗口rwnd是接收方的限制,拥塞窗口是发送方自己对网络状况的估计,实际发送窗口大小等于min(cwnd, rwnd)。四个核心算法要按顺序掌握:慢开始的思路不是一开始就全速发送,而是从小窗口开始试探。初始cwnd通常设为1个最大报文段长度MSS,每经过一个RTT,cwnd翻倍。这个阶段是“指数增长”,因为1变2、2变4、4变8的速度非常快。慢的开始并不是指速度慢,而是指“从小慢慢试探”,实际指数增长一点也不慢。拥塞避免在cwnd达到慢开始门限ssthresh后启动,每经过一个RTT,cwnd增加1个MSS。这个阶段是“线性增长”,增长到一定程度后要防止网络过载。快重传是为了避免等待超时太久。如果发送方连续收到3个重复的ACK,说明某个报文段丢了,不用等超时计时器,立即重传丢失的报文段。快恢复配合快重传使用:发生快重传时,把ssthresh减为当前cwnd的一半,并把cwnd置为减半后的值,然后执行拥塞避免线性增长。如果是超时导致的丢包,处理方式不同:ssthresh减半,cwnd重置为1,重新执行慢开始。这四个算法的识别特征可以帮助记忆:超时是“凄惨重启”,cwnd直接降到1;快重传是“快速补货”,不降回1而是降到阈值水平。考试画cwnd变化曲线时,只要看到某个位置cwnd出现断崖式下跌、之后从1开始的,就是超时;如果cwnd减半后继续缓步增长,就对应快恢复。5.3 拥塞窗口计算题实战:逐步推演一张对照表拥塞窗口计算是期末最容易拿分也最容易失分的题。失分原因通常不是不懂算法,而是“走到一半不知道当前该用慢开始还是拥塞避免”。我拿一个典型题目示范推演。假设初始ssthresh=16,初始cwnd=1,传输轮次按RTT计数:轮次1:cwnd=1,未达到16,执行慢开始。 轮次2:cwnd=2。 轮次3:cwnd=4。 轮次4:cwnd=8。 轮次5:cwnd=16,此时cwnd等于ssthresh,下一轮进入拥塞避免。 轮次6:cwnd=17。 轮次7:cwnd=18。如果第7轮出现超时,那么ssthresh更新为18的一半,也就是9,cwnd重置为1。之后的路径是慢开始到9:轮次8变成2,轮次9变成4,轮次10变成8,轮次11变成9,轮次12开始进入拥塞避免,每次加1。如果出现的不是超时而是3个重复ACK,则执行快重传和快恢复:ssthresh变为9,cwnd也置为9,之后从9开始线性增长。做这类题的建议是:在草稿纸上画成两列表格,左边是RTT轮次,右边是当前cwnd,同时单独一列写当前ssthresh。每次发生拥塞事件时先更新ssthresh,再决定cwnd走向。绝大多数错误都出在“超时后忘了降到1”或者“快重传后直接执行慢开始”,把这两个容易出错的动作单独标记一遍,能避开大部分坑。6. TCP连接管理:三次握手与四次挥手6.1 三次握手细节与状态变化TCP建立连接需要三次握手,目的是让通信双方都确认自己发送能力、接收能力正常,并且同步初始序号。第一次握手:客户端发送一个SYN报文段,SYN标志位置1,随机取一个初始序号client_isn,客户端进入SYN_SENT状态。第二次握手:服务器收到SYN后,回复一个SYN+ACK报文段,自己的初始序号为server_isn,确认号为client_isn+1,服务器进入SYN_RCVD状态。第三次握手:客户端收到SYN+ACK后,回复一个ACK报文段,确认号为server_isn+1,然后客户端进入ESTABLISHED状态。服务器收到这个ACK后也进入ESTABLISHED状态。三次握手为什么不能用两次,这是最经典的简答题。核心原因有两点:第一,两次握手只能确保服务器的接收和发送能力得到确认,但服务器不知道客户端是否已经收到自己的SYN+ACK,如果客户端没有收到,会重复发起连接;第二,防止已失效的连接请求突然到达服务器。假设客户端第一个SYN在网络中滞留了很久,超时后客户端重新发送了SYN并完成连接释放,这时原来的SYN才到达服务器。如果只有两次握手,服务器会误以为客户端要建立新连接,白白分配资源。三次握手通过客户端的第三次ACK让服务器确认真正建立了新连接,避免这种“悬空连接”。答题时要把“确认双方收发能力”和“防止失效连接请求”两点都答上,只答一点会扣分。6.2 四次挥手及TIME_WAIT为什么存在TCP释放连接需要四次挥手,因为TCP连接是全双工的,两个方向的数据传送要分别关闭。第一次挥手:客户端发送FIN报文段,表示客户端的数据已经发送完毕,进入FIN_WAIT_1状态。第二次挥手:服务器收到FIN后,回复ACK,客户端进入FIN_WAIT_2状态。服务器此时可能还有数据要发送,所以不会立刻关闭。第三次挥手:服务器数据发送完毕,发送FIN报文段,进入LAST_ACK状态。第四次挥手:客户端收到FIN后,回复ACK,进入TIME_WAIT状态;服务器收到ACK后进入CLOSED。TIME_WAIT是最爱考的状态。为什么客户端在收到服务器的FIN后不能直接关闭,而要等待2MSL?原因有两个:第一,保证最后一次ACK能到达服务器。如果这个ACK丢失,服务器会超时重传FIN,客户端如果已经关闭就无法回复新的ACK;等待2MSL可以让客户端有机会收到重传的FIN并再次确认。第二,让本连接产生的所有报文段在网络中自然消失,避免旧连接的延迟报文段干扰新连接。2MSL是一个最大报文段生存时间的两倍,足够让一个报文段在网络中从出现到消失。这里有个细节容易混淆:主动关闭方进入TIME_WAIT,不是被动关闭方。大多数场景下客户端先发起关闭,所以客户端会进入TIME_WAIT。如果服务器主动先关,那么服务器也会进入TIME_WAIT。6.3 FIN_WAIT、CLOSE_WAIT等异常状态排查思路期末复习对状态机不要求完全背下来,但几个典型状态的含义必须清楚。FIN_WAIT_1表示主动关闭方发送了FIN,还没收到对方的ACK。FIN_WAIT_2表示已经收到ACK,等待对方发送FIN。CLOSE_WAIT是被动关闭方收到FIN后、自己还没关闭时所在的状态,表示对方已经关了发送方向,但自己还有数据要发。LAST_ACK是被动关闭方发送FIN后,等待最后ACK的状态。异常状态最常见的两个问题:一是大量连接卡在CLOSE_WAIT,说明应用程序没有正确关闭socket;二是大量连接卡在TIME_WAIT,说明主动关闭方太多或者服务端用短连接频繁关闭。排查思路上,CLOSE_WAIT要检查应用层是否处理了连接关闭事件,TIME_WAIT则要结合业务设计看是否需要调整连接复用策略。考试不会让你去排查生产环境,但会以选择或简答形式问“TIME_WAIT出现在哪个阶段”“CLOSE_WAIT代表什么”。把每个状态和挥手步骤对应起来,比死记状态名更牢靠。7. 期末速记与常见题目分析7.1 选择题高频陷阱总结我把往年选择题里出现频率最高的陷阱整理成了一张速查表,复习时可以逐条对一遍。陷阱一:把“UDP没有拥塞控制”记成“UDP有拥塞控制”。UDP根本没有拥塞控制机制,不会根据网络状况调节发送速率。陷阱二:认为“TCP建立连接是三次握手,释放连接也是三次”。释放连接是四次,因为服务器收到FIN后要先回ACK,等自己把数据发完再发FIN,是两个独立步骤。陷阱三:混淆序号和确认号的含义。序号是“本报文数据第一个字节的编号”,确认号是“期望收到的下一个字节编号”。陷阱四:认为TCP首部固定是20字节,忽略选项字段。20字节是固定部分,加上选项后可能更长。陷阱五:把端口号范围和用途张冠李戴。DNS是53,HTTP是80,HTTPS是443,FTP控制连接是21,SSH是22。陷阱六:认为慢开始就是慢速发送。慢开始只是初始cwnd小,增长方式是指数增长,很快就能达到较大值。陷阱七:快重传和快恢复被当成一回事。快重传是收到3个重复ACK后立即重传,快恢复是紧接着调整cwnd的动作,两者是连续但有区别的概念。这些陷阱靠背表格记不牢,我的建议是把每个陷阱当成一道“改错题”来做,自己说出为什么错,效果比重复读好几遍强。7.2 计算题常见题型梳理第五章计算题的类型很固定,可以说是“有限题库”。第一类是端口与报文段长度的计算。给定UDP数据部分长度,求UDP报文段总长度。注意UDP首部固定8字节,总长度是8加数据长度。第二类是TCP序号和确认号的计算。给出连接初始序号和发送数据长度,求下一个报文段的序号以及对方回复的确认号。这类题的关键是记住“确认号等于期望收到的下一个字节序号”,别多算少算。第三类是吞吐量计算。给定窗口和RTT,估算最大发送速率。基本公式是窗口除以RTT,单位换算要细致。第四类是拥塞窗口计算。给出一张时间表和若干拥塞事件,画出cwnd的变化并计算特定时刻的窗口值。这类题按照5.3的表格法最稳妥。第五类是等待时间类。给定初始RTT或者抽样RTT,结合超时重传时间调整计算。期末考试若出这类题,通常会给出简化公式,直接套用即可。计算题拿分的核心是步骤完整。哪怕最后结果错了,只要中间画出窗口图、写出变化轨迹,阅卷时也能拿到大部分过程分。反过来,只写一个最终答案,蒙对了高兴,蒙错了就血本无归。7.3 复习节奏与答题顺序建议如果还剩一周时间,我的建议是分三个阶段安排第五章。第一阶段花两天通读教材的第五章,边读边把“三次握手”“四次挥手”“拥塞控制曲线”三个图手画三遍。手画的过程就是记忆的过程,比只看不画的效果好得多。第二阶段用一天时间集中做选择和填空题,目的是查漏补缺。做题时对错都要写出理由,不能只记正确答案。第三阶段专门练简答题和计算题,重点背“为什么需要三次握手”“TCP如何实现可靠传输”“慢开始和拥塞避免的区别”这几个高频简答题的答题框架。答题框架不用很长,但要把核心关键词踩准,例如提到序号、确认、重传、窗口、累计确认这些词,分数就有了基本保障。考试答题顺序上,我建议先做计算题,因为刚开考时思路清晰,公式和步骤还记得牢。简答题放在中间写,选择题优先排除明显错误项。第五章作为重点章节,优先保证正确率。8. 关于第五章我的一些体会每次给同学答疑第五章,我都会说同一句话:这一章不是靠背的,是靠画的。你可以不背TCP报文段每个字段的位置,但你必须能在纸上画出三次握手的箭头、画出cwnd的变化曲线、画出滑动窗口的边界。画出来一遍,比默念十遍都管用。我个人复习时还有一个习惯,就是给每一个协议机制找一个生活中的类比。端口号是宿舍房间号,滑动窗口是食堂窗口一次能打几份饭,拥塞控制是早晚高峰地铁的限流闸机,TIME_WAIT是散场后让观众慢慢离场、避免拥堵和踩踏。这些类比可能不严谨,但能让你在考场上快速回忆起机制的大方向,再往大方向上补细节,答案就不会跑偏。最后想说,第五章的题目虽然花样多,但本质上都是在回答同一个问题:TCP和UDP到底是怎么在复杂网络里完成可靠交付的?把这个问题理解透了,不管期末试卷怎么变,你都能稳住。