网络基础是Android面试中的必考内容,无论你面试的是初级还是高级岗位,面试官几乎都会从计算机网络的知识体系中挑几道题来考察你的基本功。这篇文章整理了最常被问到的几类题目,并逐一拆解其中的原理和容易被追问的细节,帮助你在面试前做一次系统的复习。

一、OSI七层模型与TCP/IP四层模型必须掌握的对应关系
这是网络部分的敲门砖题,面试官通常用它来判断候选人的知识体系是否完整。OSI七层模型从下到上依次是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而实际开发中更常用的是TCP/IP四层模型,分别是网络接口层、网络层、传输层和应用层。
两者的对应关系是:TCP/IP的网络接口层对应OSI的物理层和数据链路层,网络层和传输层一一对应,而TCP/IP的应用层则合并了OSI的会话层、表示层和应用层。回答时最好能结合实际协议举例,比如网络层的IP协议、传输层的TCP和UDP、应用层的HTTP和DNS,这样能体现出你对模型的理解而不是死记硬背。
面试官常追问的一个点是数据在发送端是如何经过封装的。应用层生成数据后,往下每经过一层都会加上该层的头部信息,到了数据链路层还会加上尾部,最终变成比特流在物理介质上传输。接收端则按照相反的顺序逐层解封装,这个过程建议能口述清楚,因为它直接关系到你对分包、粘包等问题的理解。
二、TCP与UDP的区别以及三次握手四次挥手
TCP和UDP的区别是出现率百分之百的题目。核心差异有五点:TCP是面向连接的,UDP是无连接的;TCP提供可靠传输,通过确认应答、超时重传、滑动窗口等机制保证数据不丢不重,UDP只是尽最大努力交付;TCP是有序的,UDP不保证顺序;TCP面向字节流,UDP面向报文;TCP头部至少20字节且连接维护开销大,UDP头部只有8字节,开销小、实时性好。
在Android开发中,两者的典型应用场景也常被追问。HTTP基于TCP,文件下载、网页请求都用TCP;而实时音视频通话、直播弹幕这类对实时性要求高的场景通常用UDP,因为丢一两帧画面无所谓,但延迟太大体验会很差。如果你在项目中用过WebSocket或者做过IM即时通讯,可以把TCP长连接的实践经历带上,会是很好的加分项。
三次握手的过程必须能完整说出来。客户端发送SYN包并携带初始序列号,服务端回复SYN加ACK,客户端再回一个ACK,连接建立。为什么是三次而不是两次是高频追问点,答案的核心是防止已失效的连接请求报文突然又到达服务端造成资源浪费,同时三次握手能让双方都确认自己的发送和接收能力正常。
四次挥手则比握手多一步,因为TCP是全双工的,一方发送FIN只表示它不再发送数据,但另一方可能还有数据要传,所以ACK和FIN需要分开发送。主动关闭方在收到对方FIN并回复ACK后会进入TIME_WAIT状态,等待两倍的最大报文生存期才彻底关闭,目的有两个:确保最后一个ACK能到达对方,同时让旧连接的报文在网络中自然消亡,避免影响新连接。
三、HTTPS的加密原理与HTTP缓存机制
HTTP和HTTPS的区别是另一道必考题。HTTPS等于HTTP加TLS,默认端口从80变成443,能提供数据加密、完整性校验和身份认证三大保障。面试官特别喜欢追问HTTPS的握手过程,简化版流程是这样的:客户端发送请求并附带自己支持的加密套件,服务端返回证书并选定加密算法,客户端验证证书合法性后生成一个随机对称密钥,用服务端证书中的公钥加密后发送,双方基于这个对称密钥进行后续通信。
这里的混合加密设计值得展开说。非对称加密安全但性能差,只用来交换密钥;对称加密性能好但密钥分发有风险,所以用来传输实际数据。两者结合既保证了安全又兼顾了效率。如果面试官继续追问中间人攻击,可以解释证书体系的作用:证书由CA机构签发,内置在系统中的根证书可以逐级验证证书链,Android系统中就内置了一百多个受信任的CA根证书。
HTTP缓存也是Android面试的常客,尤其在讲OkHttp或者图片加载框架时会被问起。强缓存通过Cache-Control和Expires头控制,在有效期内浏览器直接读本地缓存不发请求;协商缓存通过Last-Modified配合If-Modified-Since,或者ETag配合If-None-Match实现,服务器判断资源没变就返回304,客户端继续用本地缓存。
四、从输入URL到页面展示发生了什么
这道题堪称网络面试的万能题,能串联起整个知识体系。完整链路是:浏览器对URL进行DNS解析获取服务器IP,DNS解析本身有本地缓存、系统缓存、路由器缓存、运营商DNS逐级查找的过程;拿到IP后与服务器建立TCP连接,如果是HTTPS还要完成TLS握手;连接建立后发送HTTP请求,服务器处理请求并返回响应;浏览器拿到HTML后解析DOM、加载CSS和JS资源、渲染页面;最后四次挥手断开连接。
回答这道题的技巧是分层叙述并且主动埋点。你可以在DNS环节提一句DNS基于UDP的53端口,在传输层环节提三次握手,在应用层环节提HTTP缓存和状态码。面试官大概率会顺着你的话往深处追问,主动把话题引向你熟悉的领域,是面试中非常实用的策略。
常见HTTP状态码也是这道题的延伸考点。200成功、301永久重定向、302临时重定向、304缓存有效、403禁止访问、404资源不存在、500服务器内部错误、502网关错误,这些最好能脱口而出。另外GET和POST的区别也常被顺带问到,从语义上看GET用于获取资源是幂等的,POST用于提交数据会修改服务器状态,参数位置、缓存行为、浏览器历史记录留存等方面也有差异。
五、面试复习建议
网络基础的特点是知识点多但体系清晰,建议按照分层模型把内容串起来复习,而不是零散地背题。传输层重点掌握TCP的可靠传输机制和连接管理,应用层重点掌握HTTP的报文结构、缓存和HTTPS的加密流程,网络层了解IP寻址和路由的基本概念即可。
对于Android开发岗位,别忘了把网络知识和实际开发关联起来。比如OkHttp的连接复用对应TCP长连接,拦截器链和HTTP的请求响应模型,HTTPS证书校验失败的排查经验等。能结合项目经历讲出自己解决过的网络问题,比如弱网环境下的超时重试策略、抓包分析接口异常,这样的回答远比背概念更能打动面试官。