6940 字
35 分钟
计算机网络高频面试题

国内互联网大厂计算机网络高频八股题#

我主要筛选了字节跳动、腾讯、美团、阿里云、蚂蚁、京东、拼多多等公司的后端面经。这里的“热点题目”不是根据某一篇题库判断,而是根据不同公司、不同年份的面经中反复出现的题目归纳。

从筛选结果来看,优先级最高的是:

TCP 三次握手与四次挥手、TCP 可靠性、TCP/UDP 区别、TIME_WAIT/CLOSE_WAIT、HTTP/HTTPS、TLS、DNS、输入 URL 后发生什么、HTTP 版本区别、HTTP 状态码。

近几年明显增加的题目是:

HTTP/2、HTTP/3、QUIC、WebSocket、CORS、TCP 粘包拆包、select/poll/epoll。

例如,字节面经直接出现了粘包、HTTPS 改造、DNS/TCP/HTTP 请求全过程;腾讯面经出现了 HTTP/1.1、HTTP/2、HTTP/3、QUIC、TLS 1.3、拥塞控制;近期多家公司汇总中仍然反复出现 URL 全过程、epoll、TCP 可靠性、TIME_WAIT、CLOSE_WAIT 和 SYN Flood。(牛客网)

面经属于候选人的个人记录,并不是公司官方题库,因此不能保证每场面试都会问;但用来判断重复出现的高频知识点非常合适。


一、网络模型与基础流程#

1. OSI 七层模型和 TCP/IP 模型分别是什么?#

面试回答:

OSI 七层模型从上到下是:

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输层
  5. 网络层
  6. 数据链路层
  7. 物理层

TCP/IP 四层模型是:

  1. 应用层:HTTP、DNS、SMTP
  2. 传输层:TCP、UDP
  3. 网际层:IP、ICMP
  4. 网络接口层:以太网、Wi-Fi 等

面试中也经常使用“五层模型”,即把网络接口层拆成数据链路层和物理层。

数据发送时会不断封装:

应用数据
TCP 段 / UDP 数据报
IP 数据包
以太网帧
比特流

接收端按照相反顺序解封装。TCP/IP 标准体系通常划分为应用层、传输层、网际层和链路层。(RFC 编辑器)


2. TCP 和 UDP 有什么区别?#

面试回答:

TCP 是面向连接、可靠、有序、全双工的字节流协议;UDP 是无连接、尽力而为、保留报文边界的数据报协议。

主要区别如下:

对比项TCPUDP
是否连接需要建立连接不需要建立连接
可靠性有确认、重传、排序协议本身不保证
数据形式字节流,没有消息边界数据报,有消息边界
顺序保证有序不保证有序
流量控制没有内置
拥塞控制没有内置
开销较大较小
常见场景HTTP/1.1、HTTP/2、MySQL、Redis实时音视频、游戏、DNS、QUIC

一个常见错误是说“UDP 一定不可靠”。更准确的说法是:

UDP 协议本身不提供可靠性,但应用层可以基于 UDP 实现可靠传输,例如 QUIC 就在 UDP 之上实现了确认、重传、流量控制和拥塞控制。

TCP 提供可靠、按序、面向连接的字节流服务;UDP 提供最小化的、非保证交付的数据报服务。(RFC 编辑器)


二、TCP 核心高频题#

3. TCP 是怎么保证可靠传输的?#

面试回答:

TCP 主要通过以下机制保证可靠性:

  1. 连接管理:三次握手建立连接。
  2. 序列号:每个字节都有序列号,用来排序和去重。
  3. 确认机制 ACK:接收方告诉发送方已经收到哪些数据。
  4. 校验和:发现数据在传输过程中是否损坏。
  5. 超时重传:长时间没有收到 ACK,就重新发送。
  6. 快速重传:收到多个重复 ACK 时,不等待超时就重传。
  7. SACK:告诉发送方哪些不连续的数据块已经收到。
  8. 滑动窗口:允许批量发送,提高吞吐量。
  9. 流量控制:避免发送方把接收方缓冲区打满。
  10. 拥塞控制:避免发送速度超过网络承载能力。
  11. 有序重组和重复数据丢弃

需要注意:

TCP 的“可靠”是指数据尽量完整、有序、不重复地到达,不代表数据经过了加密,也不代表绝对不会断开连接。

TCP 标准定义了可靠、有序的字节流传输;RTO 根据 RTT 和波动动态计算,SACK 可以报告已经收到的不连续数据块。(RFC 编辑器)


4. TCP 三次握手的过程是什么?#

假设客户端初始序列号是 x,服务端初始序列号是 y

客户端 服务端
SYN=1, seq=x
------------------------------>
SYN=1, ACK=1
seq=y, ack=x+1
<------------------------------
ACK=1, seq=x+1, ack=y+1
------------------------------>

具体过程:

  1. 客户端发送 SYN,进入 SYN_SENT
  2. 服务端收到后发送 SYN + ACK,进入 SYN_RECEIVED
  3. 客户端发送 ACK,双方进入 ESTABLISHED

三次握手不仅是建立连接,还会同步双方的初始序列号。(RFC 编辑器)


5. 为什么 TCP 建立连接需要三次握手,不能两次?#

核心原因是:

双方都需要确认自己的发送能力和接收能力正常,并同步双方的初始序列号。

两次握手之后:

  • 客户端知道:自己能发、自己能收、服务端能收、服务端能发。
  • 服务端只知道:自己收到了客户端的 SYN,并且自己发出了 SYN+ACK。
  • 服务端不知道:客户端是否成功收到自己的 SYN+ACK。

第三次 ACK 能让服务端确认客户端确实收到了服务端的初始序列号。

三次握手还可以降低历史失效 SYN 导致错误建连的风险。假如网络中延迟很久的旧 SYN 到达服务端,服务端返回 SYN+ACK,但当前客户端不会为这条旧连接发送正确 ACK,因此连接无法建立。

至于为什么不需要四次,是因为第三次 ACK 已经完成了双方确认;如果 ACK 也必须被再次确认,就会产生无限确认问题。


6. 第三次握手的 ACK 丢失会怎么样?#

客户端发送第三次 ACK 后,客户端通常已经认为连接建立成功,但服务端仍处于 SYN_RECEIVED

服务端没有收到 ACK,会重新发送 SYN+ACK

客户端收到重传的 SYN+ACK
再次发送 ACK
服务端进入 ESTABLISHED

如果客户端直接发送了携带有效 ACK 的业务数据,服务端也可能根据该 ACK 完成连接建立。

如果服务端始终收不到有效 ACK,经过多次重传和超时后,就会清理这条半连接。TCP 三次握手及 SYN/ACK 重传行为由 TCP 状态机和重传机制共同完成。(RFC 编辑器)


7. TCP 为什么是四次挥手?#

TCP 是全双工通信,两个方向必须分别关闭。

客户端 服务端
FIN
------------------------------>
ACK
<------------------------------
服务端处理完剩余数据
调用 close()
FIN
<------------------------------
ACK
------------------------------>

过程是:

  1. 主动关闭方发送 FIN,表示自己不再发送数据。
  2. 被动关闭方返回 ACK,但它可能还有数据没有发送完。
  3. 被动关闭方处理完数据后,再发送 FIN。
  4. 主动关闭方返回 ACK。

为什么通常比握手多一次?

因为服务端收到 FIN 后,只能立即确认“我知道你不发了”,但服务端自己可能还没有发送完数据,所以 ACK 和 FIN 通常分开发送。

如果服务端收到 FIN 后也立即关闭,ACK 和 FIN 可以合并,因此抓包时有可能看到三次报文完成关闭,并不是所有连接都严格表现为四个独立报文。(RFC 编辑器)


10. TCP 流量控制和拥塞控制有什么区别?#

流量控制#

解决的是:

接收方处理不过来怎么办?

接收方通过 TCP 头中的接收窗口 rwnd 告诉发送方自己还能接收多少数据,防止接收缓冲区被打满。

拥塞控制#

解决的是:

网络中间链路承载不过来怎么办?

发送方维护拥塞窗口 cwnd,根据丢包、ACK、RTT 等信息调整发送速度。

发送方实际能发送的数据量受二者共同限制:

实际发送窗口 = min(rwnd, cwnd)

记忆:

rwnd:保护接收方
cwnd:保护整个网络

TCP 的拥塞窗口和接收窗口共同限制发送量。(RFC 编辑器)


14. HTTP 长连接、TCP Keepalive 和应用心跳有什么区别?#

HTTP 长连接#

表示多个 HTTP 请求复用同一条 TCP 或 QUIC 连接,减少重复建连开销。

TCP Keepalive#

是操作系统 TCP 层的探测机制。连接长时间空闲后发送探测包,判断对端是否已经消失。

它通常:

  • 需要显式开启。
  • 默认探测时间可能很长。
  • 只能判断 TCP 对端是否仍有响应。
  • 不能证明业务线程一定正常。

应用层心跳#

应用主动定期发送业务心跳,例如:

PING
PONG

它可以更快发现:

  • 网络中断。
  • 服务进程卡死。
  • 业务线程不响应。
  • 网关或 NAT 清理空闲连接。

所以实际长连接服务经常同时使用 TCP Keepalive 和应用层心跳。Linux 的 TCP Keepalive 通过空闲时间、探测间隔和探测次数等参数控制。(man7.org)


15. 什么是 SYN Flood?#

攻击者向服务端发送大量 SYN,但不完成第三次握手:

攻击者:大量 SYN
服务端:创建半连接并返回 SYN+ACK
攻击者:不返回 ACK

大量伪造半连接会占满半连接队列,使正常用户无法建立连接。

常见防御:

  • SYN Cookie。
  • SYN Cache。
  • 限制单 IP 建连速率。
  • 防火墙、负载均衡器清洗流量。
  • 合理增加半连接队列。
  • 减少 SYN+ACK 重试时间和次数。
  • 源地址过滤。

SYN Flood 的核心就是利用大量伪造半连接占满 backlog。(RFC 编辑器)


16. TCP 和 UDP 可以使用相同端口吗?#

可以。

例如,一个程序可以同时监听:

TCP 53
UDP 53

因为操作系统区分连接时不仅看端口,还会看传输层协议:

协议 + 本地 IP + 本地端口 + 远端 IP + 远端端口

TCP 和 UDP 有各自独立的端口空间。

但是在同一种协议下,两个 Socket 通常不能随意绑定到完全相同的本地 IP 和端口,除非使用特定的地址复用选项并满足操作系统规则。

这个问题曾直接出现在阿里云后端面经中。(牛客网)


三、DNS、ARP 与访问网站全过程#

18. DNS 域名解析过程是什么?#

假设访问:

www.example.com

常见流程是:

  1. 浏览器检查自己的缓存。

  2. 操作系统检查 DNS 缓存和 hosts 文件。

  3. 客户端的 Stub Resolver 向递归 DNS 服务器查询。

  4. 递归 DNS 如果有缓存,直接返回。

  5. 没有缓存时,递归 DNS 依次查询:

    • 根 DNS。
    • 顶级域 DNS,例如 .com
    • 权威 DNS。
  6. 权威 DNS 返回 A、AAAA 或 CNAME 等记录。

  7. 递归 DNS 根据 TTL 缓存结果并返回客户端。

需要注意:

DNS 并没有固定的“必须经过五级缓存”。浏览器、操作系统、递归解析器、企业网关等是否缓存,取决于具体实现。

DNS 经典体系由递归解析器、根服务器、顶级域服务器、权威服务器和缓存共同完成。(RFC 编辑器)


19. ARP 是什么?访问不同网段的服务器时 ARP 谁?#

ARP 用来根据 IPv4 地址查询同一链路上的 MAC 地址。

目标和自己在同一个网段#

客户端 ARP 查询目标服务器的 MAC:

目标 IP → 目标 MAC

目标和自己不在同一个网段#

客户端不会 ARP 查询远程服务器的 MAC,而是查询默认网关的 MAC:

默认网关 IP → 默认网关 MAC

然后把数据帧发送给网关。

跨路由器传输时:

  • 目标 IP 通常仍然是最终服务器 IP,忽略 NAT 情况。
  • 源 MAC 和目标 MAC 会在每一跳重新封装和变化。

记忆:

IP 地址负责端到端定位
MAC 地址负责当前这一跳的链路传输

ARP 标准描述了协议地址到以太网地址的映射过程。(RFC 编辑器)


20. 浏览器输入 URL 后发生了什么?#

这是最重要的综合题之一。

以 HTTPS 网站为例,可以按下面的顺序回答。

第一步:解析 URL#

浏览器解析:

协议、域名、端口、路径、查询参数

并检查:

  • 浏览器缓存。
  • Service Worker。
  • HSTS。
  • 已有连接是否可以复用。

第二步:DNS 解析#

将域名解析成服务器或 CDN 节点的 IP 地址。

第三步:确定下一跳#

操作系统根据路由表判断数据发给:

  • 同网段目标。
  • 默认网关。

然后通过 ARP 获取下一跳 MAC 地址。

第四步:建立传输连接#

根据协议不同:

HTTP/1.1、HTTP/2:
TCP 三次握手 → TLS 握手
HTTP/3:
QUIC + TLS 1.3 握手

第五步:发送 HTTP 请求#

请求中包含:

请求方法
路径
请求头
Cookie/Token
可选请求体

第六步:服务端处理#

请求可能经过:

CDN
→ 负载均衡
→ Nginx / 网关
→ 后端服务
→ Redis / MySQL / RPC

第七步:返回 HTTP 响应#

包含状态码、响应头和响应体。

第八步:浏览器渲染#

大致过程:

解析 HTML 构建 DOM
解析 CSS 构建 CSSOM
生成渲染树
布局
绘制
合成

同时还会下载 JavaScript、CSS、图片等子资源。

回答时最好补充:

实际过程中,DNS、TCP、TLS 都可能因为缓存和连接复用而被跳过;使用 HTTP/3 时也不存在传统 TCP 三次握手。

URL 全过程、DNS、TCP、HTTP、HTTPS 是字节、京东、美团和近期后端面经中反复出现的组合题。(牛客网)


四、HTTP 与 HTTPS 高频题#

21. HTTP 和 HTTPS 有什么区别?#

HTTPS 本质上是:

HTTP + TLS

HTTP 负责请求方法、状态码、请求头、响应体等语义;TLS 负责:

  • 机密性:防止内容被窃听。
  • 完整性:防止内容被篡改。
  • 身份认证:通常验证服务端身份。

常见默认端口:

HTTP:80
HTTPS:443

但端口只是默认约定,并不是协议本质。

HTTPS 不能解决所有安全问题,例如:

  • 用户访问的本身就是钓鱼网站。
  • 服务端已经被入侵。
  • 客户端主动忽略证书错误。
  • Token 或密码在应用层被泄露。

TLS 1.3 的设计目标包括防窃听、防篡改和防消息伪造。(RFC 编辑器)


22. HTTPS 的 TLS 1.3 握手过程是什么?#

可以使用下面这个简化版本回答。

客户端 服务端
ClientHello
版本、加密套件、随机数、
key_share、SNI、ALPN
------------------------------>
ServerHello
选择参数和 key_share
<------------------------------
双方计算共享密钥,后续握手开始加密
EncryptedExtensions
Certificate
CertificateVerify
Finished
<------------------------------
Finished
------------------------------>
开始传输加密的 HTTP 数据

主要步骤:

  1. 客户端发送 ClientHello

  2. 服务端发送 ServerHello,双方根据临时密钥交换计算共享密钥。

  3. 服务端发送证书和证书签名证明。

  4. 客户端验证:

    • 证书链。
    • CA 签名。
    • 域名。
    • 有效期。
  5. 双方发送 Finished,确认握手没有被篡改。

  6. 使用对称 AEAD 算法加密业务数据。

需要纠正一个过时的八股答案:

现代 TLS 1.3 通常不是“服务端给 RSA 公钥,客户端生成对称密钥并用 RSA 加密”。TLS 1.3 通常通过临时的 ECDHE 等方式协商共享密钥,证书主要用于身份认证和签名证明,业务数据再使用高效的对称加密算法保护。

TLS 1.3 标准定义了 ClientHello、ServerHello、Certificate、CertificateVerify 和 Finished 等握手消息,并将大部分握手内容加密。(RFC 编辑器)


23. 如何把 HTTP 服务升级为 HTTPS?#

面试可以回答下面几步:

  1. 申请可信 CA 签发的证书。
  2. 安全保存私钥和完整证书链。
  3. 在 Nginx、负载均衡器或应用服务器配置 TLS。
  4. 监听 HTTPS 端口。
  5. 将 HTTP 请求重定向到 HTTPS。
  6. 清理页面中的 HTTP 混合内容。
  7. 配置证书自动续期。
  8. 服务稳定后再考虑 HSTS。
  9. 禁用过时 TLS 版本和弱密码套件。
  10. 保证内部回源、网关和服务间调用的安全策略一致。

字节后台面经曾直接询问“如何把 HTTP 服务器升级成 HTTPS”。(牛客网)


24. HTTP/1.0、HTTP/1.1、HTTP/2、HTTP/3 有什么区别?#

HTTP/1.0#

  • 通常一个连接处理一个请求。
  • 大量请求需要频繁建立连接。
  • 长连接主要依赖扩展方式实现。

HTTP/1.1#

  • 默认支持持久连接。
  • 增加 Host
  • 支持分块传输。
  • 支持管线化,但响应顺序会造成应用层队头阻塞。
  • 浏览器通常通过建立多个 TCP 连接提升并发。

HTTP/2#

  • 二进制分帧。
  • 一个 TCP 连接内建立多个 Stream。
  • 多路复用。
  • HPACK 头部压缩。
  • 解决 HTTP/1.1 应用层的队头阻塞。
  • 仍然存在 TCP 层队头阻塞。

HTTP/3#

  • 基于 QUIC。
  • QUIC 基于 UDP 承载。
  • 集成 TLS 1.3。
  • 使用 QPACK。
  • 不同流之间相对独立。
  • 支持连接迁移。
  • 降低建连延迟和跨流队头阻塞。

腾讯后台面试曾直接要求从 HTTP/1.1 一直讲到 HTTP/3,并继续追问 HPACK、QPACK、TLS 1.3 和 QUIC。(牛客网)


25. HTTP/2 是否彻底解决了队头阻塞?#

没有。

HTTP/1.1 的队头阻塞#

同一条管线中,前面的响应没有完成,后面的响应不能越过它返回,这是应用层队头阻塞。

HTTP/2 做了什么?#

HTTP/2 将请求拆成帧,不同 Stream 的帧可以交错发送,因此解决了 HTTP 层面的请求响应顺序阻塞。

为什么还存在 TCP 队头阻塞?#

HTTP/2 的多个流共用一条 TCP 连接。

如果某个 TCP 报文段丢失,由于 TCP 必须按序向上层交付,后面已经到达的数据也要等待这个缺失报文重传。因此一个 TCP 丢包可能暂时阻塞多个 HTTP/2 Stream。

HTTP/3 使用 QUIC 的独立流,使一个流的数据丢失通常不会阻塞其他无关流;但同一个流内部仍然需要保证有序交付。HTTP/2 标准明确说明,它解决了应用层队头阻塞,但没有解决 TCP 层队头阻塞。(RFC 编辑器)


27. GET 和 POST 有什么区别?#

不要只回答“GET 参数在 URL、POST 参数在请求体”,这只是常见使用方式,不是最本质区别。

语义区别#

GET:

获取目标资源的表示,语义上是只读的。

POST:

让目标资源处理所携带的内容,例如创建订单、提交表单、执行某项操作。

安全性和幂等性#

GET 是安全方法,也是幂等方法。

安全方法表示客户端没有请求服务端改变资源状态;幂等表示相同请求执行一次和执行多次,预期效果相同。

POST 默认既不是安全方法,也不保证幂等。

参数位置#

  • GET 参数通常放在 URL 查询字符串。
  • POST 数据通常放在请求体。
  • HTTP 规范并没有用这一点来定义 GET 和 POST 的本质区别。
  • GET 携带请求体没有通用明确语义,很多服务器和中间件也不会支持,因此一般不要这样设计。

安全性误区#

POST 并不天然比 GET 安全。

在 HTTP 明文传输下,两者都可能被看到;在 HTTPS 下,请求路径、请求头和请求体通常都受到 TLS 保护,但域名、IP、流量特征等元数据未必全部隐藏。

RFC 9110 将 GET 等方法定义为安全方法,将安全方法以及 PUT、DELETE 定义为幂等方法。(RFC 编辑器)


28. 常见 HTTP 状态码有哪些?#

2xx:请求成功#

  • 200 OK:请求成功。
  • 201 Created:资源创建成功。
  • 204 No Content:成功,但没有响应体。

3xx:重定向和缓存#

  • 301 Moved Permanently:永久重定向。
  • 302 Found:临时重定向。
  • 304 Not Modified:缓存内容没有变化。
  • 307 Temporary Redirect:临时重定向,并保持原请求方法和请求体。
  • 308 Permanent Redirect:永久重定向,并保持原请求方法和请求体。

301、302 在历史客户端中可能把 POST 改为 GET;307、308 明确要求保持请求方法和请求体。

4xx:客户端相关问题#

  • 400 Bad Request:请求格式或参数错误。
  • 401 Unauthorized:没有完成身份认证。
  • 403 Forbidden:服务端理解请求,但拒绝授权访问。
  • 404 Not Found:资源不存在。
  • 405 Method Not Allowed:请求方法不允许。
  • 409 Conflict:资源状态冲突。
  • 429 Too Many Requests:请求频率过高。

5xx:服务端或上游问题#

  • 500 Internal Server Error:服务端内部错误。
  • 502 Bad Gateway:网关从上游收到无效响应。
  • 503 Service Unavailable:服务暂时不可用或过载。
  • 504 Gateway Timeout:网关等待上游超时。

腾讯微信面经直接从 301、302 一路追问到三次握手、四次挥手和 TIME_WAIT。(牛客网)


29. HTTP 请求和响应报文由什么组成?#

以 HTTP/1.1 为例。

请求报文#

POST /orders HTTP/1.1
Host: example.com
Content-Type: application/json
Content-Length: 18
{"productId":100}

包含:

  1. 请求行。
  2. 请求头。
  3. 空行。
  4. 可选请求体。

响应报文#

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 15
{"status":"ok"}

包含:

  1. 状态行。
  2. 响应头。
  3. 空行。
  4. 可选响应体。

HTTP/2 和 HTTP/3 使用二进制帧传输,不再按照 HTTP/1.1 的纯文本格式直接在网络上传输,但请求方法、状态码和字段等 HTTP 语义仍然保留。(RFC 编辑器)


30. HTTP 为什么是无状态协议?Cookie、Session、Token 有什么关系?#

HTTP 无状态表示:

协议本身不要求服务端必须记住前一次请求的信息,每个请求都可以被独立理解。

Cookie 是浏览器保存并自动携带小段状态数据的机制:

服务端:Set-Cookie
浏览器:保存
后续请求:Cookie

Cookie 可以保存 Session ID,也可以保存其他信息。

Session#

Session 通常表示服务端保存用户状态:

Session ID → 用户登录信息

客户端通常只保存 Session ID,服务端根据 ID 查询 Session 数据。

Token#

Token 是客户端携带的访问凭证。服务端可以通过查询数据库、Redis,或者验证签名来判断 Token 是否有效。

JWT 是一种 Token 格式,但需要注意:

  • JWT 不等于绝对无状态。
  • JWT 泄露后仍可能被冒用。
  • JWT 仍要处理过期、续期、注销和撤销。
  • 如果服务端维护黑名单,系统仍然保存了状态。

一句话区分:

Cookie:浏览器保存和发送数据的机制
Session:服务端保存的会话状态
Token:用于证明身份或权限的凭证

HTTP Cookie 标准定义了通过 Set-CookieCookie 实现状态管理的机制。(RFC 编辑器)


五、近几年明显升温的题目#

32. WebSocket 和 HTTP 长连接有什么区别?#

HTTP 长连接只是复用连接:

客户端请求 → 服务端响应
客户端请求 → 服务端响应

它仍然主要遵循请求—响应模型。

WebSocket 在握手阶段通常先发送 HTTP Upgrade 请求,升级成功后变成独立的双向帧协议:

客户端 ⇄ 服务端

特点:

  • 全双工。
  • 服务端可以主动推送。
  • 长时间保持连接。
  • 使用帧区分消息。
  • 支持 Ping/Pong。
  • 适合聊天、实时通知、协同编辑、游戏等。

长轮询则是服务端暂时不返回 HTTP 响应,等有数据或超时后再响应,然后客户端重新发起下一次请求。它依旧是 HTTP 请求响应模式,不等同于 WebSocket。

腾讯和美团面经中都出现了 WebSocket 与 HTTP、HTTP 长连接的区别。(牛客网)


33. 什么是跨域?什么是 CORS 预检请求?#

浏览器同源通常要求以下三项全部相同:

协议 + 主机 + 端口

例如:

https://a.example.com
https://b.example.com

主机不同,因此是跨域。

CORS 是服务端通过响应头告诉浏览器,允许哪些来源读取响应:

Access-Control-Allow-Origin: https://a.example.com
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Authorization

对于非 CORS Safelist 范围内的方法、请求头或内容类型,浏览器通常先发送 OPTIONS 预检:

OPTIONS 预检
服务端允许
发送真实请求

需要注意:

  1. CORS 主要是浏览器安全机制,后端服务之间调用、curl 通常不受浏览器同源策略约束。
  2. CORS 不是身份认证机制。
  3. CORS 也不能代替 CSRF 防护。
  4. 对于不触发预检的跨域请求,请求可能已经到达服务端,只是浏览器不允许 JavaScript 读取响应。

Fetch 标准定义了预检请求、允许方法、允许请求头和预检缓存等行为。(Fetch Specification)


35. CDN 的基本原理是什么?#

CDN 的核心是:

把内容缓存到离用户更近的边缘节点,减少访问延迟和源站压力。

常见流程:

用户访问域名
DNS / CDN 调度系统选择合适边缘节点
用户请求边缘节点
缓存命中:直接返回
缓存未命中:向源站回源
边缘节点缓存并返回结果

CDN 的收益:

  • 降低网络延迟。
  • 减少源站带宽。
  • 降低源站 QPS。
  • 缓解突发流量。
  • 提高静态资源可用性。
  • 可以承担 DDoS 清洗、TLS 终止等功能。

适合缓存:

  • 图片。
  • CSS。
  • JavaScript。
  • 视频分片。
  • 安装包。
  • 不经常变化的接口结果。

不适合直接公共缓存:

  • 用户个人订单。
  • 强实时库存。
  • 带隐私数据的响应。
  • 每个用户结果都不同的动态接口。

DNS、CDN、QUIC 和完整访问链路在字节及拼多多相关面经中都有出现;CDN 缓存行为仍要遵守具体的 HTTP 缓存和鉴权策略。(牛客网)


六、对应的大厂面经链接#

下面优先列真实候选人记录,同时保留少量汇总帖用于判断重复频率。

类型公司与面经其中出现的网络问题
个人面经字节跳动后台 2025 暑期实习面经select/poll/epoll、粘包、HTTPS 改造、DNS/TCP/HTTP 全流程、中间人攻击
个人面经字节跳动后端三面面经DNS、CDN、ARP、默认路由、QUIC、poll/epoll
深挖面经腾讯 IEG 后台开发面试WebSocket、HTTP/1.1/2/3、HPACK、QPACK、QUIC、TLS 1.3、拥塞控制、epoll
个人面经腾讯微信实习后端面经301/302、HTTP 状态码、三次握手、四次挥手、TIME_WAIT
个人面经蚂蚁数字支付一面五层网络模型、TCP/UDP、HTTP/HTTPS、UDP 应用
个人面经美团秋招一面WebSocket 使用场景、HTTP 长连接和 WebSocket
个人面经阿里云实习面经TCP 和 UDP 能否使用同一个端口
汇总帖京东 Java 后端 2025 面经合集输入 URL 全过程、DNS 缓存、301/302、状态码
汇总帖拼多多面试真题QUIC 可靠传输、TCP 握手、CORS、访问页面全过程、CDN
近期汇总27 届后端高频面试题汇总URL 全过程、epoll、TCP 可靠性、少一次握手、TIME_WAIT、CLOSE_WAIT、SYN Flood
复习路线阿里云后端校招经验与复习方向HTTP 请求响应、HTTP 版本、HTTPS、TCP/UDP、握手挥手、丢包重传

七、建议背诵顺序#

第一轮先把下面这些背到能够完整回答:

TCP/UDP
→ TCP 可靠性
→ 三次握手
→ 四次挥手
→ TIME_WAIT/CLOSE_WAIT
→ 流量控制/拥塞控制
→ HTTP/HTTPS
→ TLS
→ DNS
→ 输入 URL 全过程

第二轮学习:

HTTP 状态码
→ GET/POST
→ HTTP 缓存
→ HTTP/1.1、2、3
→ HTTP/2 队头阻塞
→ QUIC
→ WebSocket

第三轮补充:

TCP 粘包拆包
→ select/poll/epoll
→ SYN Flood
→ ARP
→ CORS
→ CDN
→ 中间人攻击

面试回答统一使用这个结构最稳:

先说定义
→ 再讲工作流程
→ 再解释为什么这样设计
→ 最后补充异常情况和常见误区
计算机网络高频面试题
https://blog.huangnv.online/posts/2681/2/2/
作者
huangnv
发布于
2026-08-01
许可协议
CC BY-NC-SA 4.0