很多人复习计算机网络都有一个共同体验:书看完了,MAC 地址、三次握手、子网掩码这些名词好像都认识,但别人一问"从浏览器输入网址到页面显示出来,中间经历了什么",又讲不完整。这篇总结不是我临时翻书整理的,而是这些年为了期末、408、面试还有平时排查网络问题,反复沉淀下来的一套核心知识框架。它不追求把教材每句话都抄进来,而是把最常考、最常用、最容易混淆的考点串起来,适合期末复习、考研 408、软件测试面试这些场景,也希望帮你建立一张能随时调用的知识网。
我习惯先把整体框架搭出来,再往里面填协议细节,最后用一套问题清单来检验自己。下面按这个思路展开。
1. 先搭框架:分层模型与数据封装是后面所有内容的地基
1.1 OSI 七层和 TCP/IP 四层/五层:不要死背,要理解设计逻辑
教材里最常见的就是 OSI 七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。很多学生背顺序背得滚瓜烂熟,但真问他"为什么网络层要存在"就答不上来。我的建议是,不要把分层当成要背的七条,而是当成一封快递信件的处理流程:应用层是写信的人,传输层是决定用普通快递还是航空件,网络层是快递分拣中心在规划运输路线,数据链路层是同一辆货车在相邻两个站点之间交接,物理层是高速公路本身。
实际生产中用的 TCP/IP 模型更贴近现实,通常要么是四层(应用层、传输层、网络层、网络接口层),要么按教材拆成五层(应用层、传输层、网络层、数据链路层、物理层)。不管是哪个分层法,你只需要抓住一个核心逻辑:每一层只解决自己那一层的问题,同时为上层提供接口,和下层的具体实现解耦。应用层不用关心底层是光纤还是 WiFi,网络层也不用关心上层是 HTTP 还是 FTP,这就是分层带来的好处。
OSI 里的会话层和表示层在 TCP/IP 里没有单独成层,是因为实际工程中这两层职责被应用层自己消化了,比如 TLS 握手里协商加密参数的工作,严格说接近表示层,但我们习惯把它看作应用层的一部分。复习时不要纠结于分了多少层,而要能说清"每一层解决什么问题、典型协议有哪些"。
1.2 数据封装与解封装:从 HTTP 到比特流的旅程
一次完整的通信,数据每往下一层走,就会多一个头部(有些协议还会加尾部)。以访问一个网页为例:应用层生成 HTTP 请求报文,传输层把它装进 TCP 报文段,加上了源端口、目的端口和序号;网络层把 TCP 报文段放进 IP 数据报,加上源 IP、目的 IP;数据链路层再把 IP 数据报放进帧里,加上 MAC 地址和帧校验序列;最后物理层把帧变成比特流发送到线缆或空气中。
这个"每层加头"的过程叫封装。接收方反过来,每往上一层就剥掉一个头部,叫解封装。很多面试题会问:"一个 1500 字节的 IP 分片,在数据链路层要传输时,帧实际多大?"标准以太网帧的最大传输单元 MTU 是 1500 字节,指的是 IP 数据报的负载,不算以太网帧头(14 字节)和帧尾(4 字节 CRC)。所以加上 MAC 头、类型字段和 CRC 后,整个帧通常为 1518 字节。这些细节就是八股题的常见爆点,理解封装过程后就不会记混。
1.3 核心性能指标:带宽、时延、吞吐量、RTT 为什么总被一起考
网络性能指标看起来简单,但很多人没分清:带宽是链路能承载的最大数据传输速率,单位是 bit/s;吞吐量是实际传输的速率;时延包括发送时延、传播时延、处理时延和排队时延。有一个经典误区是"把数据放到网线上的一瞬间就能到对端吗",答案是不行,因为每段链路都有传播时延,光在光纤里的速度大约是真空中的三分之二,所以 1000 公里光纤的单向传播时延就有几毫秒。
RTT(往返时间)指从发送数据到收到确认总共的时间,它不仅包含传播时延,还包含处理、排队时间。在 TCP 里计算超时重传时间时,RTT 是非常重要的依据。期末和面试都很喜欢把"带宽大"和"时延低"并列,你要能解释哪怕带宽是 100Gbps,一次长距离传输的时延依然受物理距离限制,二者不是一回事。把这个观念理清了,后面的拥塞控制和 HTTP/2 多路复用都能更好理解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 物理层与数据链路层:从比特到帧,最容易忽视的得分区
2.1 物理层的本质:用什么信号、怎么编码、怎么对抗噪声
物理层是整个网络的"地基",也是最容易被复习跳过的一层。它关注的问题很朴素:用电路上的电压变化表示 0 和 1,还是用光信号的有无?信号在铜线里衰减怎么办?无线信号怎么调制?典型考点包括奈氏准则和香农公式。奈氏准则说的是在无噪声信道下,码元传输速率有一个上限,超过后码间串扰会严重到无法识别;香农公式则给出了在有噪声信道下的信道容量极限,和信噪比 S/N 直接相关。
物理层的另一个常见考点是编码方式,例如不归零编码、曼彻斯特编码。曼彻斯特编码在每个比特中间都有一次跳变,这个跳变既能表示数据,又提供了同步时钟,所以早期以太网用它。虽然现在高速以太网已经不用这种简单编码,但考试题里仍然经常出现。理解物理层的关键是:它不关心数据内容,只负责把比特从一端搬到另一端,并且尽可能减少差错。
2.2 以太网与 MAC 地址:数据链路层的主角
数据链路层把物理层收到的比特组装成帧,并且用 MAC 地址来寻址。MAC 地址是 48 位,通常写成 6 组十六进制数,比如 a4:5e:60:bf:4a:20。它是在设备出厂时烧录的,理论上全球唯一。不过真正转发时,不可能靠广播遍历全世界,所以才出现了交换机和 ARP 协议。
以太网帧结构里包含了目的 MAC、源 MAC、类型字段(指出上层是 IP 还是其他协议)、数据部分和帧校验序列 FCS。帧的最小长度是 64 字节,这个数字不是拍脑袋定的,它和 CSMA/CD 的冲突检测机制有关。一个站点发送帧后,必须在一个碰撞域内能检测到冲突,如果帧太短,发送完一个帧后可能还没收到冲突信号,无法确认是否冲突,所以规定最短 64 字节,同时也限制了同轴电缆时代的网络最大长度。理解这个背景,比单纯背"64 字节"有用得多。
2.3 交换机、CSMA/CD 与 VLAN:局域网里绕不开的考点
交换机是二层设备,它根据 MAC 地址表来转发帧,最核心的工作是"学习"。帧进入交换机后,交换机记录源 MAC 和端口;如果目的 MAC 未知,就向所有其他端口广播(泛洪);如果已知,就单播到对应端口。这个过程在思科、华为的模拟器里都能看到,实际考试里经常给一张 MAC 地址表问转发路径。
CSMA/CD 是传统共享式以太网的冲突控制协议,核心是先听后发、边发边听、冲突停发、随机重发。现在交换式以太网已经是全双工,基本没有冲突了,但很多学校考核仍喜欢问退避算法,尤其是"发生冲突后等待时间为什么按指数退避"。这里的思路是让冲突节点生成一个随机等待时间,重试次数越多,等待时间的范围越大,避免所有节点反复在同一时刻重发。
VLAN 是另一种二层核心概念,它把一个物理局域网从逻辑上划分成多个广播域,不同 VLAN 之间默认不能直接通信,需要三层设备(路由器或三层交换机)转发。这个考点经常结合交换机配置出题:"同一交换机上不同 VLAN 的 PC,配置了同网段 IP,能 ping 通吗?"答案是不能,因为广播隔离了 ARP 请求。
2.4 数据链路层的可靠性:CRC、停止等待与滑动窗口
虽然数据链路层不保证端到端可靠,但它在每一段链路上会做差错检测。最常见的校验算法是 CRC(循环冗余校验),发送方根据数据计算出一个冗余码,附加在帧尾,接收方用同样的多项式去除,余数不为 0 就说明出错。这个考点在期末计算题里很常见,比如给定生成多项式 G(x) 和原始数据,求 FCS。我的建议是不要只背公式,要动手多算几道题,体会模 2 除法是怎么回事。
停止等待协议(停等协议)是最简单的可靠传输协议:发送方发一个帧,必须等到确认才能继续发下一个,信道利用率低。滑动窗口协议是在它的基础上一次允许发送多个帧而不必逐个等待确认,所以效率更高。虽然滑动窗口的思想更多用在传输层,但数据链路层里的滑动窗口可以帮你更早建立"窗口"这个概念,后面学 TCP 时就轻松多了。
3. 网络层:IP 寻址与路由,必须自己动手算一遍
3.1 IPv4 地址结构与子网划分:别死背公式,画图最稳
网络层最核心的是 IP 地址。IPv4 地址是 32 位,通常写成点分十进制。传统分类 A/B/C 类现在虽然已经不强制使用,但考试和面试都还保留考察。A 类第一位固定为 0,B 类前两位是 10,C 类前三位是 110。主机号全 0 表示网络地址,全 1 表示广播地址,不能分配给主机,所以每个网段可用主机数是 2 的 N 次方减 2。
子网划分的核心是借主机号位作为子网号。很多人背公式"子网数 = 2 的子网号位数次方,可用主机数 = 2 的主机号位数次方减 2",然后遇到题目就套;但我的建议是画线。比如给你 192.168.10.0/26,先把最后八位写出来,前 26 位是网络号,那么子网掩码就是 255.255.255.192,最后 8 位里前 2 位是子网位,后 6 位是主机位。这样每个子网块大小是 2^6 = 64 个地址,从 0 开始,子网依次是 192.168.10.0、192.168.10.64、192.168.10.128、192.168.10.192,每个子网可用的主机 IP 是去掉全 0 和全 1 后各 62 个。多画几个例子后,你会觉得子网划分比大多数人说的要简单。
3.2 ARP 与 ICMP:两个常被忽略却高频的协议
ARP 解决的是"已知 IP 地址,如何找到对应 MAC 地址"的问题。发送方先在自己的 ARP 缓存里查,查不到就广播一个 ARP 请求:"谁是 192.168.1.1,请告诉我你的 MAC 地址"。目标主机回复单播应答。为了效率,每台主机会把刚学到的映射缓存一段时间,缓存在实际电脑上用 arp -a 就能看到。
ICMP 则主要用来传递网络层的差错信息和诊断信息。大家最熟悉的 ping 用的就是 ICMP 回显请求和回显应答。traceroute(Windows 里叫 tracert)也是利用 ICMP 差错报文来实现的,它发送一组 TTL 从 1 开始递增的 IP 包,每经过一个路由器 TTL 减 1,减到 0 时路由器返回一个超时 ICMP 报文,这样就能把路径上的每一跳打印出来。掌握这两个命令,网络排错会直观很多。
3.3 路由协议全景:静态、RIP、OSPF、BGP 各管一段
路由协议是网络层另一个大考点。静态路由由管理员手动配置,适合小规模且拓扑稳定的网络。动态路由协议里,RIP 基于距离向量算法,以跳数作为度量,最大跳数 15,每 30 秒广播一次路由表,实现简单但不能适应大型网络。OSPF 基于链路状态算法,每台路由器都会收集整个区域的链路状态信息,再用 Dijkstra 算法计算最短路径,收敛快、适合大中型网络。BGP 则用于自治系统 AS 之间的路由选择,它更关注策略而不是单纯的最短路径。
面试常问:"RIP 和 OSPF 有什么区别?"我习惯从三个方面答:算法类型(距离向量 vs 链路状态)、度量标准(跳数 vs 带宽/开销)、适用范围(小规模内部网络 vs 大型或跨 AS 网络)。如果能再说清楚 OSPF 的区域概念,比如 area 0 是骨干区域,那说明是真的理解了。
3.4 从 ping 到 traceroute:网络层排错实战
理论讲完,一定要落到命令上。我在本地排查网络问题时,通常会按这个顺序来:
ping 127.0.0.1检查本机协议栈是否正常;ping 本机 IP检查网卡配置;ping 网关 IP检查局域网连通性;ping 公网 IP(比如ping 223.5.5.5)检查是否出得去;ping 域名检查 DNS 是否正常;tracert看路径上哪一跳断掉。
这套顺序不是背出来的,而是对应从底层到上层的排查思路。如果 ping 网关通但 ping 公网 IP 不通,问题大概率出在路由或运营商链路。如果 ping 公网 IP 通但 ping 域名不通,那就是 DNS 解析的问题。把网络层这套"协议栈分层排查法"掌握好,后面每一层的排错都能参考。
4. 传输层:TCP 与 UDP,面试和考试的核心战场
4.1 TCP 为什么需要三次握手、四次挥手
TCP 是面向连接的可靠传输协议,面试几乎必考三次握手、四次挥手。三次握手序列是 SYN、SYN+ACK、ACK。为什么要三次而不是两次或四次,核心是:要确认双方的发送能力和接收能力都正常。第一次握手客户端告诉服务器"我要连接",第二次服务器回复并同步自己的初始序号,第三次客户端确认服务器端的序号,这样双方都确认了对方的收发能力都没问题。如果只有两次握手,服务器无法确认客户端是否收到了自己的 SYN+ACK,可能造成历史重复连接请求误建连接。
四次挥手是 FIN、ACK、FIN、ACK。因为 TCP 连接是全双工的,双方都需要单独关闭自己的发送方向。第一次挥手是主动关闭方说"我不再发送数据",对方确认后,主动方还能继续接收数据;等被动方也发完数据后,它再发 FIN,双方都关闭,连接才算结束。多出来的 TIME_WAIT 状态是个常考细节,主动关闭方要等待 2MSL(两倍最大报文段寿命),目的是确保最后一个 ACK 能被对方收到,同时让旧连接的迟到报文在网络中消失。
4.2 可靠传输的基石:序号、确认与重传机制
TCP 的可靠性不是靠一个机制单独完成的,而是靠序号、确认号、校验、超时重传、快速重传这些机制配合。发送方给每个字节编号,TCP 报文段里的序号表示本报文段第一个字节在整个数据流中的位置;确认号表示期望收到对方下一个字节的序号。所以确认号是"累积确认"的思想,ack 3 代表序号 0、1、2 都收到了,期望下一个是 3。
超时重传是最基本的重传方式,超时时间不能设得太短也不能太长。快速重传则是当接收方收到乱序报文后,连续发出重复 ACK,发送方连续收到三个重复 ACK 就立即重传,不必等超时。这个机制比单纯靠超时更快地恢复丢包。复习时要能画出"seq 和 ack 变化"的示意图,很多大题都从这里出。
4.3 流量控制与拥塞控制:滑动窗口和拥塞窗口不是一回事
流量控制和拥塞控制是 TCP 里最容易混淆的两个概念。流量控制解决的是"发送方发太快,接收方处理不过来"的问题,它依赖滑动窗口,窗口大小由接收方的接收能力决定,对应 TCP 报文段里的窗口字段。接收方会在每个 ACK 里告诉发送方自己的剩余缓冲区大小,发送方据此调整发送速度,这叫端到端的背压。
拥塞控制解决的是"网络中间设备(如路由器)处理不过来"的问题,它依靠拥塞窗口 cwnd 控制发送量,算法包括慢启动、拥塞避免、快重传、快恢复。慢启动时 cwnd 从 1 个 MSS 开始,每经过一个 RTT 翻倍,指数增长;到达慢启动阈值 ssthresh 后进入拥塞避免,cwnd 线性增长;超时后阈值减半、cwnd 回到 1;快速重传后是阈值减半,cwnd 从新阈值开始而不是回到 1。理解这套逻辑的关键是:它是在没有全局状态的情况下,用"丢包作为拥塞信号"来试探网络容量。把这两个窗口分清楚,面试题基本能过一大半。
4.4 UDP 与 TCP 的选型判断,以及软件测试关注的连接状态
UDP 是无连接、不可靠、面向报文的协议,它不保证报文不丢失、不重复、按序到达,但头部只有 8 字节,开销小、延迟低,适合实时音视频、DNS 查询、游戏传输这些场景。选 TCP 还是 UDP,核心是看业务对可靠性和实时性的取舍:文件传输一定要 TCP;视频通话如果卡住重传反而更糟,所以很多场景用 UDP 或者基于 UDP 的 QUIC。
软件测试岗位常问观察网络连接状态的命令,比如在 Linux/Windows 上执行 netstat -an 或者 ss -s,可以看到大量 TCP 连接处于 LISTEN、ESTABLISHED、TIME_WAIT 状态。测试一个接口超时或连接被拒绝时,如果客户端大量出现 SYN_SENT 但没有 ESTABLISHED,可能是服务端连接数满了;如果服务端出现大量 TIME_WAIT,可能是短连接请求太多,可以考虑开启连接复用或用长连接。到这部分你会发现,传输层知识直接关系到接口测试和性能测试的排查思路。
5. 应用层:HTTP、DNS、HTTPS 以及日常排查视角
5.1 HTTP 协议:从 0.9 到 HTTP/2,核心报文结构
应用层里最重要、最常考的是 HTTP。HTTP 是请求-响应模式的协议,报文分为请求行/状态行、头部、空行、实体四个部分。请求行里包含方法(GET、POST、PUT、DELETE 等)、URL 和版本号;状态行里有状态码(200、301、403、404、500 等)。复习时至少要能说出状态码的分类:2xx 成功,3xx 重定向,4xx 客户端错误,5xx 服务端错误。
HTTP/1.1 默认支持持久连接,但没有解决队头阻塞问题,一个连接上一次只能请求一个资源。HTTP/2 引入了二进制分帧、多路复用、头部压缩和服务器推送,多个请求可以并行在一个连接上传输,解决了 HTTP/1.1 的队头阻塞。但 HTTP/2 在 TCP 层仍有队头阻塞问题,所以后来的 HTTP/3 改用了基于 UDP 的 QUIC,这是如今面试里很常见的追问点。理解了这层演进逻辑,比单纯背版本特性更能让面试官信服。
5.2 DNS 解析流程:一个网址背后的多级查询
DNS 是应用层另一个必考协议。当你在浏览器输入一个域名时,先查浏览器缓存,再查操作系统缓存,再查本地 DNS 服务器,也就是配置的 114.114.114.114 或 8.8.8.8 这类递归解析服务器。本地 DNS 服务器如果缓存没有,会从根域名服务器开始,逐级查询顶级域名服务器(比如 .com)、权威域名服务器,最后拿到对应的 IP 地址。
这里有几个常考点:递归查询和迭代查询的区别。客户端到本地 DNS 服务器通常是递归查询,本地 DNS 服务器到根/顶级/权威服务器通常是迭代查询。还有一个常考点是 DNS 使用 UDP 的 53 端口,但因为 UDP 报文有限制,当响应较大或需要区域传输时,会使用 TCP。DNS 不只是在浏览网页时工作,接口测试里如果服务名解析不了,也会表现为连接失败。
5.3 HTTPS:加密握手到底保护了什么
HTTPS 是在 HTTP 与 TCP 之间加入了一层 TLS/SSL。它解决三个问题:机密性(内容不被第三者看到)、完整性(内容不被篡改)、身份认证(证明服务器是真的)。核心机制是混合加密:握手阶段用非对称加密协商出一个对称密钥,之后的数据传输都用对称加密,这样兼顾安全和性能。
TLS 握手过程大体是:客户端发送支持的加密套件和随机数,服务器返回证书和随机数,客户端验证证书合法性,再生成预主密钥并用服务器公钥加密发给服务器,双方各自算出相同的会话密钥,然后完成握手。很多人背不下来证书校验细节,我建议抓包看一次完整的 TLS 握手,比背十遍都有用。另外,常见面试题"HTTPS 一定能防中间人攻击吗"的答案是:如果客户端没有正确校验证书,中间人依然可能插入假证书,所以证书信任链的校验至关重要。
5.4 软件测试/前端/运维视角:状态码、Cookie、CORS、WebSocket
如果你以后做软件测试、前端开发或运维,应用层知识必须结合工具来学。测试接口时,最常用的工具是 curl 和 Postman。比如 curl -I https://example.com 可以只看响应头,curl -v https://example.com 能看到完整握手过程和 HTTP 报文。状态码 301 和 302 的区别也是高频题:301 是永久重定向,302 是临时重定向,浏览器对 POST 请求的跟随策略有差异。
Cookie 和 Session 关系到登录状态管理。Cookie 是保存在客户端的小段信息,Session 保存在服务端,Cookie 里通常保存一个 Session ID。CORS(跨域资源共享)则涉及前后端联调时浏览器的同源策略,面试常问怎么解决跨域,常见方案是后端加上 Access-Control-Allow-Origin 头。WebSocket 和 HTTP 的差异也值得了解:HTTP 是单向请求-响应模式,WebSocket 是双向长连接,适合即时通讯、实时推送。把应用层这些概念串起来,对接口测试和联调排错很有帮助。
6. 期末/408/面试向复习路线:怎么整理"八股文"最有效
6.1 把知识点变成问题清单:八股文不是背,是串
网上常说"计算机网络八股文",意思是面试官常问的一组固定问题。我不建议你把八股文当背诵材料,而是把它当自测清单。比如:URL 输入后发生了什么?TCP 三次握手为什么不是两次?子网掩码怎么计算?HTTP 和 HTTPS 的区别是什么?每道题你都要能脱稿讲满三分钟,而不是只答一个名词。
一个很好的练习方法是"费曼式串讲":用手机录音,假装给一个学弟讲清楚"输入网址到页面显示"的过程。你会在录音里发现自己哪里卡壳、哪里逻辑跳跃。我在带新人时发现,大多数人对 IP 分片、子网划分这种计算类考点有畏难情绪,但只要手写过一遍分片过程,记忆会很牢。所以我的建议是:计算题必须动手,概念题必须复述。
6.2 学习资源怎么选:哪些教材适合你
现在网络资源很多,我先说教材。国内高校考研和期末最常用的是谢希仁版的《计算机网络》,它的优点是知识点结构清晰,贴近考试;另一本是国外常见的《计算机网络:自顶向下方法》,强调从应用层开始学,适合建立直观认识。如果你是期末快速复习,谢希仁版够用;如果你想深入理解设计动机,自顶向下版更好读。
视频资源里,"湖科大教书匠"的计算机网络课程经常被考研党讨论。我的看法是:它讲得比较细,适合基础薄弱、需要一步步跟的同学;但如果目标是 408,最好搭配真题和谢希仁教材对照使用,因为视频节奏偏慢,时间紧的话可以倍速或只挑薄弱章节看。电子书方面,不建议拿一本 PDF 从头看到尾,而是把它当字典使用,遇到模糊概念时去查对应章节,效率更高。
6.3 两周复习计划与易错点清单
如果现在是期末前两周,我建议按下面的节奏安排:
- 前 3 天:用自顶向下的方式过一遍协议栈,重点是每层解决什么问题、典型协议、关键报文格式。
- 第 4-6 天:专门练计算题,子网划分、IP 分片、CRC、滑动窗口、拥塞控制的 cwnd 变化。
- 第 7-9 天:刷历年真题,判断题和选择题里暴露的细节要注意,比如 TTL 的作用、端口号范围。
- 第 10-12 天:整理错题和易混淆点,做出属于自己的问题清单。
- 最后 2 天:把最容易遗忘的握手挥手流程、状态码含义再快速过一遍,保持手感。
易错点方面,我每次都会强调这几条:子网可用主机数要减 2;MAC 地址是 48 位,IP 地址是 32 位;RTT 不等于 RTO;ping 用的是 ICMP 不是 TCP;DNS 默认用 UDP,但区域传送和部分异常情况会用 TCP。很多同学考试丢分并不是不会,而是这些细节记串了。刻意把这些高频易错点写在笔记本第一页,考前看一眼,效果比盲目刷题好。
备考期间还有一个容易被忽略的点:一定要动手做抓包实验。Wireshark 抓包并不难,抓一次 DNS 查询、抓一次 TCP 三次握手、抓一次 HTTP 请求,你会对协议字段和状态转换有非常直观的感受。就算是纯理论考试,抓包也能帮你理解"为什么报文长这样"。
这套复习思路我这些年反复验证过,不管是期末、考研还是面试,关键都是把协议栈串成一条线,而不是孤立地记一堆名词。每次复习最后,我都会做一件事:默写一张从物理层到应用层的协议表格,每一层写两个代表协议、一个关键机制、一个常见排查命令。如果这张表能写得顺,说明网络知识框架是真的建起来了。
