华为OD技术面里,计算机网络几乎是跑不掉的一关。不管你是科班出身还是培训转行,投简历、过机考之后,紧接着的技术面就会从“能不能写代码”转向“基础到底牢不牢”。计算机网络作为计算机专业的基础课,面试官爱问、容易追问、也最容易暴露水平:面试者会背三次握手,却说不清为什么是三次;知道URL输入后会做DNS解析,却不知道递归和迭代的区别。这一篇我打算把OD技术面计算机网络部分的常见考法、答题逻辑和一些临时救场的话术完整梳理一遍,后面还会按系列继续往下拆,方便你直接照着准备。
这篇内容适合两类人:一类是刚过机考、正在系统准备技术面的人,另一类是工作几年想回过头补基础、跳槽面试的人。不管你属于哪一类,我的建议都是一样的——别只背八股,要把每个知识点背后的“为什么”弄明白。
1. 先摸清考情:OD技术面的计算机网络到底在考什么
1.1 技术面流程与计算机网络的位置
从我了解到的情况来看,OD技术面一般会安排一到两轮,面试时间通常在40到60分钟。前10到15分钟是自我介绍和项目背景,剩下的时间大部分会围绕基础知识和手写代码展开。计算机网络往往不是单独拎出来考,而是作为“基础能力摸底”的一部分,穿插在数据结构和操作系统之间,和它们交替追问。
很多候选人容易犯一个错误:把所有复习时间都花在刷题上,在机考阶段把算法练得滚瓜烂熟,却忽略了网络基础。结果一到技术面,面试官随口问一句“TCP和UDP有什么区别”,第一反应只能说出“一个可靠一个不可靠”,然后就没有然后了。这种答法很容易让面试官觉得基础不扎实,哪怕你后面的算法题写得再漂亮,整体印象分也会打折扣。
计算机网络在技术面里的位置其实很微妙。它不像手写算法那样有标准答案、非黑即白,但它出现的频率极高,而且天然适合面试官层层追问:从一个简单问题出发,往深处挖两三轮,候选人的知识边界马上就能探出来。所以准备这部分时,不要只准备“答案”,要准备“答案背后的逻辑链”。
1.2 高频考点地图
根据我对多场面试的复盘,计算机网络部分的高频考点大致可以按层级划分成下面几块。先记住这个整体分布,复习时心里就有谱了。
| 知识层级 | 高频考点 | 常见考察形式 | 出镜率 |
|---|---|---|---|
| 应用层 | HTTP状态码、请求方法、HTTPS握手过程、DNS解析 | 概念问答、场景分析 | 极高 |
| 传输层 | TCP三次握手、四次挥手、可靠传输、流量控制、拥塞控制 | 原理追问、画图/叙述流程 | 极高 |
| 网络层 | IP地址分类、子网划分、CIDR、路由协议 | 计算题、概念题 | 高 |
| 数据链路层 | MAC地址、ARP协议、交换机工作原理 | 概念问答 | 中等 |
| 网络工具 | ping、telnet、curl、nslookup的实际使用 | 面试官模拟场景提问 | 中等 |
这里面,传输层和应用层是重中之重。原因很简单:日常开发中最常打交道的就是HTTP和TCP,面试官自己写代码时也在用,问起来最顺手、最容易判断候选人的真实水平。网络层下面的子网划分则偏向“熟练度”,只要计算题套路掌握了,基本是送分题。
另外一个容易被忽略的点是:面试官很喜欢用“给一个场景让你判断或选择”的方式出题,比如“视频通话卡顿,你会选TCP还是UDP”“一个请求在浏览器里转了很久,怎么排查”。这类题目没有固定答案,考的是你把原理映射到实际问题的能力。我后面会专门展开这部分。
2. 高频真题拆解:从问题到答题逻辑
2.1 输入一个URL后发生了什么
这道题几乎可以说是计算机网络面试的“必考题”,也是我最推荐大家认真准备的题目之一。很多候选人一听到这道题就开始背:先DNS解析、再TCP连接、发HTTP请求、服务器返回、浏览器渲染……背得头头是道,但面试官随便挑一个中间环节追问,就卡壳了。
先看一个合格的回答应该覆盖哪些环节:
- 用户在浏览器输入URL并回车
- 浏览器对URL进行解析,提取协议、域名、端口、路径等信息
- 浏览器先查本地DNS缓存,没有就请求DNS服务器解析域名,拿到IP地址
- 浏览器与服务器建立TCP连接(三次握手)
- 如果协议是HTTPS,还要额外进行TLS握手协商密钥
- 浏览器构造并发送HTTP请求报文
- 服务器处理请求并返回HTTP响应报文
- 浏览器解析响应内容,包括HTML、CSS、JS、图片等静态资源,同时继续发起子资源请求
- 浏览器渲染页面,完成展示
面试官在这道题上的“杀手锏”是追问细节。DNS解析过程中,你的电脑不知道IP地址时,到底会问谁?这个问题考查的就是递归查询和迭代查询的区别:你的电脑先问本地DNS服务器,如果本地没有缓存,再由本地DNS服务器帮你去问根域名服务器、顶级域名服务器、权威域名服务器,拿到结果后缓存在自己这里,再返回给你——这是递归查询;而本地DNS服务器依次向各层级查询的过程,就是迭代查询。
TCP连接为什么是三次握手而不是两次?这题放在后面单独说。HTTP请求报文长什么样、状态码有哪些,也是这道题的天然延伸点。我的经验是,回答这道题时要主动“展开”,不要像个清单一样一条条念完就闭嘴。你可以把每个环节“一笔带过但点出关键词”,让面试官知道你清楚细节,比如“DNS解析时如果本地没缓存,会走递归+迭代的流程拿到IP”,这样既表达了信息量,也给了面试官一个切入点。
还要提醒一点,不要答出“从输入URL到页面展示一共经历了XX毫秒”这种毫无依据的数据。面试官想听的是机制,不是你拍脑袋的数字。
2.2 TCP三次握手与四次挥手:背诵之外,面试官真正想看什么
三次握手和四次挥手是计算机网络的万年考点。我见过太多人的准备方式就是背一张图:SYN,SYN+ACK,ACK;FIN,ACK,FIN,ACK。背得倒是挺熟,可面试官只要换一个角度问就露馅。
先说三次握手,重点是“为什么不是两次”。不要只回答“因为要确认双方的收发能力”,这只是一部分。更完整的理解是:两次握手无法避免历史重复连接初始化造成的资源浪费。客户端的一个过期SYN包如果先到达服务器,服务器回复SYN+ACK后就直接分配资源了,但客户端根本没有发起新连接,这个连接就是白建的。三次握手让客户端可以根据服务器的序号判断连接的新旧,发现是历史连接就发送RST终止,避免服务器白白消耗资源。
四次挥手也是一样,重点在于“为什么是四次”。因为TCP是全双工的,每一方的连接关闭都要经过一次FIN和一次ACK确认。理论上客户端和服务器的数据发送是独立的,所以两端各关各的,拆开来看就是四步。面试官还喜欢追问TIME_WAIT的作用:主动关闭方为什么要停留在TIME_WAIT状态而不是直接关闭?原因有两个——一是要确保最后一个ACK能让对方收到,如果对方没收到会重发FIN,你还需要继续回应;二是防止本连接的旧数据包出现在新连接中被错误接收。
如果面试官继续往深挖,还可能问TCP拥塞控制的四个算法:慢启动、拥塞避免、快重传、快恢复。慢启动是指连接初始时拥塞窗口很小,然后指数增长,直到触及阈值;到达阈值后进入拥塞避免阶段,窗口线性增长;丢包时依靠快重传机制,收到三个重复ACK就立即重传,而不是等超时;随后进入快恢复,窗口减半而不是从1重新开始。这四个算法几乎必考,建议把每个阶段的行为、触发条件、窗口变化规律都整理成一张图记下来。
回答这类问题的通用思路是:先给结论,再解释原理,最后补充一个实际场景。比如三次握手,先说“因为要确保双方序号同步并防止历史连接浪费资源”,再解释具体机制,最后说“如果没有三次握手,某个过期SYN包会导致服务器开一堆无效连接,资源就会很快被打满”。这样既有理论又能体现工程意识。
2.3 TCP与UDP的对比及衍生考点
TCP和UDP的对比属于基本功,但面试官往往不满足于“TCP可靠、UDP不可靠”“TCP有连接、UDP无连接”这种二维表格。他们更希望看到你能基于应用场景做判断。
我在模拟面试时经常用这几个问题来训练候选人:
- 视频通话为什么常用UDP而不是TCP?
- 网页HTTP为什么用TCP而不是UDP?
- 直播软件用的是TCP还是UDP?
- 如果让你设计一个实时对战游戏的消息传输方案,怎么选?
这几个问题没有标准答案,考的是你对特性的理解和工程权衡能力。视频通话对延迟敏感,TCP的丢包重传机制会导致数据到达时间不可控,一旦重传就会卡顿,所以宁可允许少量丢包也要保证实时性,UDP更合适。HTTP需要完整准确地传输页面数据,丢一个字节都可能让页面渲染出错,所以选择TCP保证完整性。直播则更复杂——很多系统在TCP基础上做改进,或者使用基于UDP的自研传输协议,夹在“实时性”和“流畅度”之间做取舍。
回答这类问题的框架可以固定为:业务核心指标是什么、带来的约束是什么、TCP/UDP各自如何应对、最终选了谁以及为什么。
另外,面试中还经常出现“TCP的粘包问题”这样的衍生题。很多人一听就懵,其实核心原因很简单:TCP是面向字节流的协议,它不保护消息边界,应用层发来的多个数据包可能会被组合在一起发送,或者一个数据包被拆成多份。解决思路一般是应用层自己定义消息边界,比如固定长度、分隔符、在消息头中声明长度,等等。这类问题其实在后台开发里很常见,能答好会非常加分。
2.4 HTTP状态码、报文结构与HTTPS握手
HTTP相关的题目可以分三层:状态码、报文结构、HTTPS机制。每一层都有一些值得展开的细节。
状态码部分,至少要熟练区分几组容易混淆的:
| 状态码 | 含义 | 典型场景 | 易混点 |
|---|---|---|---|
| 301 | 永久重定向 | 域名迁移、HTTP跳HTTPS | 和302混淆 |
| 302 | 临时重定向 | 未登录跳转登录页、短链跳转 | 浏览器行为不同 |
| 403 | 禁止访问 | 权限不足 | 和404混淆 |
| 404 | 找不到资源 | URL写错、接口下线 | 服务器不应暴露细节 |
| 500 | 服务器内部错误 | 代码异常 | 和502区分 |
| 502 | 网关错误 | 反向代理无法连接后端 | 常见于服务端异常 |
301和302的区别是高频追问点:301是永久重定向,浏览器会缓存这个重定向结果,下次直接访问新地址;302是临时重定向,浏览器每次都会先请求原地址再跳转,不会缓存。
报文结构的话,至少要知道请求行、请求头、请求体,以及响应行、响应头、响应体这几大块,并且能说出几个常见头字段的作用:Host、Content-Type、Content-Length、Authorization、Cookie、Set-Cookie、Cache-Control等等。面试官不一定会让你逐字背格式,但给你一个报文让你分析,你得能说出关键头字段的含义。
HTTPS部分,要能说明为什么它既用非对称加密又用对称加密。道理其实很直白:非对称加密安全但慢,对称加密快但密钥分发不安全,所以两者结合——用非对称加密协商出一个临时对称密钥,握手成功后用对称密钥加密通信数据。TLS握手的简化流程是:客户端发送随机数和支持的加密套件;服务器返回证书和随机数;客户端验证证书,生成预主密钥,用服务器的公钥加密后发给服务器;双方各自计算出会话密钥;之后通信全部使用会话密钥加密。这就是“一次非对称加密换取后续所有对称加密通信”的思路。
2.5 DNS解析过程与IP基础
DNS解析前面已经提到一部分,这里补充一些容易被追问的内容。面试官很可能问你“你们项目里的域名解析不小心配置错了,用户访问异常,怎么排查”。这里要用到nslookup命令,查解析记录、看解析到了哪个IP,再看本地有没有缓存。常见记录类型也要知道:A记录(域名到IPv4)、AAAA记录(域名到IPv6)、CNAME记录(域名别名)、MX记录(邮件服务器)、TXT记录(文本信息,常用于域名验证)。
IP部分,主要是子网划分和CIDR计算。这个放到下一章用实际题目演示,这里先提两个基本概念:一是公网IP和内网IP的区分,二是子网掩码的作用——它用连续的1表示网络位、连续的0表示主机位。面试官让你计算可用主机数时,记住公式是2的(主机位数量)次方减2,因为网络地址和广播地址不可分配。
3. 模拟实战:经典问答现场与操作示范
3.1 从输入URL到看到网页:把链路串成一个故事
这一节我模拟一次面试现场。面试官把“输入URL后发生了什么”这道题抛出来,候选人怎么答才能让面试官点头?给你一个参考模板,但不要背,理解后用自己的话复述:
“假设我在浏览器里输入了一个域名,比如www.example.com。首先,浏览器会解析这个URL,知道协议是HTTPS,域名是www.example.com,默认端口是443。接着开始域名解析:浏览器会先查本地缓存,也就是浏览器DNS缓存、操作系统hosts文件、操作系统的DNS缓存,如果都没有命中,就向本地DNS服务器发起递归查询。本地DNS服务器收到请求后,以迭代方式依次询问根域名服务器、com顶级域名服务器、example.com的权威服务器,最终拿到这个域名对应的IP地址,然后在本地缓存一份,再返回给我的电脑。”
“拿到IP之后,我的电脑开始和服务器建立TCP连接。三次握手的过程是,客户端发送一个SYN报文,服务端收到后回复SYN+ACK,客户端再回一个ACK。这一步的目的是同步双方的初始序列号,而且能确认双方的收发能力都正常。因为这里是HTTPS,TCP连接建立后还要再做一次TLS握手,协商出后面用来加密数据的对称密钥。”
“连接建立后,浏览器构造一个HTTP请求,里面包括请求方法、请求路径、请求头,比如Host、User-Agent、Cookie等等,然后发送过去。服务器收到请求后,找到对应的资源,返回一个HTTP响应,状态码是200,响应体里就是HTML内容。浏览器拿到HTML后开始解析,遇到CSS和JS会再发起新的请求去加载这些资源,同时根据HTML内容构建DOM树,最终渲染成用户看到的页面。”
为什么这个版本比较保险?因为它把每个环节都提到了,但每个环节都留了“钩子”:你提到三次握手时其实可以细讲,提到HTTPS时可以细讲TLS,提到DNS缓存时可以展开递归和迭代。面试官如果感兴趣,自然会顺着你的话往下问,而你因为早就知道这些钩子,完全不会被动。这就是“带节奏”的技术面技巧。
3.2 子网划分与CIDR计算题复盘
子网划分几乎是必考的计算题,而且一旦会了就是送分题。我出几道典型的,带你把过程走一遍。
典型题目一:某公司有一个网段192.168.1.0/24,需要划分成4个规模相同的子网,请写出新的子网掩码、每个子网的网络地址、广播地址和可用主机范围。
步骤一:确定需要借几位主机位。2的2次方等于4,所以要借2位子网位。原来的/24变成了/26。
步骤二:新的子网掩码是255.255.255.192,因为前24位不变,后面继续借2位,11111111.11111111.11111111.11000000,换成十进制就是192。
步骤三:这个/26一共有4个子网,每个子网有64个地址(2的6次方),主机位是6位,所以可用主机数是64减2,一共62个。
步骤四:四个子网分别如下:
| 子网 | 网络地址 | 广播地址 | 可用主机范围 | 掩码 |
|---|---|---|---|---|
| 1 | 192.168.1.0/26 | 192.168.1.63 | 192.168.1.1 ~ 192.168.1.62 | 255.255.255.192 |
| 2 | 192.168.1.64/26 | 192.168.1.127 | 192.168.1.65 ~ 192.168.1.126 | 255.255.255.192 |
| 3 | 192.168.1.128/26 | 192.168.1.191 | 192.168.1.129 ~ 192.168.1.190 | 255.255.255.192 |
| 4 | 192.168.1.192/26 | 192.168.1.255 | 192.168.1.193 ~ 192.168.1.254 | 255.255.255.192 |
很多候选人在考场上会卡住的地方是“可用主机范围写不对”。记住两点:网络地址是主机位全0,广播地址是主机位全1,可用主机就是中间那段。这个思路比背表好使,因为题目一变你也能应付。
再给一道进阶题:一个网址对应的IP是192.168.10.65/27,请问它所在的子网里有多少可用主机地址?/27说明主机位是5位,可用主机数2的5次方减2等于30。判断192.168.10.65所在子网时,先看子网掩码255.255.255.224,也就是最后一个字节是11100000,每32个IP一个子网,64到95是一个子网,所以192.168.10.65所在子网网络地址是192.168.10.64,广播地址是192.168.10.95,可用范围是65到94。这道题如果你能快速答出“30个,192.168.10.64到192.168.10.95是它的子网”,基本就没问题了。
考场上还有一个速算技巧:只要记住几个关键cidr值就行。/24有256个地址、/25有128个地址、/26有64个地址、/27有32个地址、/28有16个地址。多用几次就熟悉了。
3.3 网络命令的实战考察
技术面不只是在白纸上考试,有时候面试官会给一个线上问题场景,让你说用什么命令、看什么参数。这里挑几个最常碰到的。
ping用来检测本机到目标网络是否可达,基于ICMP协议,重点看的是“通不通”和“延迟多少”。面试官可能会追问TTL是什么,即数据包每经过一个路由器就减1,减到0就丢弃,用来防止数据包在网络上无限转发。telnet则是用来测试端口连通性的,常见的用法是telnet 某IP 端口,如果你看到“Unable to connect”说明端口不通。curl是后端开发最常用的命令之一,curl -I可以只看响应头,curl -v能看到完整交互过程。nslookup用来查DNS记录,比如nslookup www.example.com可以看域名解析到的IP。
这些命令本身不难,难的是面试官围绕命令展开的追问。比如“页面访问很慢,你会怎么排查”,这种题就是让你把命令组合起来用:先ping看网络通不通,再telnet看端口通不通,再用curl看响应时间和服务端返回的状态码,逐步缩小范围。能把排查思路说成一条清晰的链路,比背十个命令都管用。
4. 高频失分点与备战心得
4.1 这5个回答方式最容易被面试官质疑
第一,只念答案不给理由。比如问“TCP可靠吗”,回答“可靠,因为有确认重传机制”,这就太单薄了。应该继续说明确认重传怎么运作的:发送方发数据后启动超时定时器,接收方收到后返回ACK,超过时间没收到ACK就重传。面试官想听的是机制链条,不是标签。
第二,概念混着讲。比如把“TCP连接状态”和“HTTP连接状态”混在一起,或者把IP地址和MAC地址的作用搞混。一旦出现这种情况,面试官很容易对你整个基础水平产生怀疑。
第三,说不清“为什么”。很多候选人能说出三次握手是SYN、SYN+ACK、ACK,但问“为什么不能是两次”就卡住了。平时的复习必须追问自己——每个结论背后的原因是什么。
第四,忽略版本差异。面试官问HTTP时,如果你只回答HTTP/1.1的内容而不提HTTP/2或者HTTP/3,容易让人觉得你的知识停留在教科书年代。至少要知道HTTP/2多路复用、HTTP/3基于UDP等几个核心差异,哪怕只知道一两点也比完全不知道强。
第五,答不上来就沉默。这对技术面的伤害很大。你可以先说“这块我了解得不多,我的理解大概是……”,哪怕说错了,也能让面试官看到你的思维过程,比冷场强得多。
4.2 被追问到不会的地方,怎么稳住
技术面几乎没有不问倒人的。面试官往上深挖时,一般都会碰到候选人的知识边界,这是正常现象。关键在于边界的处理方式。
建议用“三层退让法”兜底。第一层:直接说出我目前会到什么程度。比如“我知道TCP的重传机制分超时重传和快速重传,但快速重传的具体触发条件我记得不太准确了”。第二层:给一个自己认为合理的推演过程。你可以补充“如果让我猜,应该是收到三个重复ACK就触发重传,因为这样可以避免等待超时,更快恢复”。这一层即使猜得不对,面试官也会看到你的逻辑能力。第三层:明确告诉面试官“这个问题我还没系统掌握,面试结束后希望再了解一下”。
这里要特别注意一个心态问题:不要一被追问就慌乱。我在实际面试中看到过不少候选人,前面答得很好,一到最后一段深挖有点卡住,马上声音就虚了,语速也飘了。这种落差反而比“没答上来”更吃亏。你越镇定,面试官越觉得这只是一个“目前没覆盖到的角落”,而不是“基础差”。
4.3 最后的复习优先级与时间规划建议
假设你离技术面还有一周时间,建议把复习安排按四段走。
前两天过基础:建议用一到两天把计算机网络的分层结构、各层核心协议过一遍,重点是TCP、UDP、HTTP、DNS、IP地址这些核心概念。不要急着背题,先保证能用自己的话解释清楚。
第三到第四天练表达:找一道题,比如“输入URL后发生了什么”,对着镜子或者录音讲一遍,逼自己在三分钟之内讲完并且不卡壳。这一步至关重要。很多人知识都懂,一开口就乱,就是因为没练过口语化的表达。
第五到第六天做模拟:可以找同样在准备面试的人互问,或者搜索一些计算机网络面试题集,每个问题先自己回答一次,再对照答案看缺了什么。这个阶段不用贪多,每天十道题就够,关键是把回答打磨得完整。
最后一天查漏:把常见的高频考点列表拿出来逐个过,遇到不熟练的直接回到基础部分重新看,不要硬背。同时准备好自己的“知识边界说明”:哪些方向你比较熟,哪些还在补课,心里有数即可。
我个人在帮别人模拟面试时发现,很多人会在“TCP/IP协议簇放在哪一层”这种小地方突然卡住,比如ARP到底属于网络层还是链路层。这类边界问题容易被忽视,建议最后一天集中把类似的小概念校对一遍,花不了多少时间,却能避免面试现场出现尴尬的冷场。
最后一天晚上就不要再熬夜刷题了,早点睡。技术面考察的是长期积累的底子,不是你最后一晚能突击出来的东西。把状态调整好,比多记一个冷门知识点更值钱。