小红书一面:网络链路、TLS/QUIC 与负载均衡
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 个人介绍。
- 客户端如何通过 TNC 配置、调度域名和 CDN 被路由到符合数据归属要求的 Region?
- 流量进入后,如何经过四层负载、七层负载、API 和 RPC 完成更细粒度的调度?
- TLS 1.3 相比 TLS 1.2 节省了多少 RTT?CA 证书的验证和获取流程是啥?中间 CA 缺失会怎么样?
- QUIC 基于什么传输层协议?
- DNS 与自定义客户端 SDK 调度相比有什么不足?
- DNS 污染和 DNS 劫持分别是怎么发生的?
- 了解 ClickHouse 吗?是否有实际使用经验?
- 除了写代码,AI 还能如何帮助你完成文档编写、技术学习和陌生代码库阅读?
- 如何保证 AI 生成的设计和代码质量?
- 如果 AI 生成的代码上线后出现异常,你会如何测试、回滚,并结合日志和 AI 定位问题?
- 了解 NAT 吗?
- HTTPS 中客户端校验服务端 CA 证书的完整流程是什么?
- 场景计算题:已知链路 RTT 和待传输数据大小,考虑 MSS 分包及 TCP 慢启动,如何估算传输轮次和总耗时?
- TCP 慢启动和拥塞避免阶段的拥塞窗口分别如何增长?
- 介绍一下 OSI 七层模型,以及七层负载均衡在请求链路中的位置和作用。
- 你们从七层负载到 API、再到 RPC 的调用链路是怎样的?使用了哪些网关或 RPC 框架?
- 你所在的团队在业务和底层架构之间承担什么角色?遇到数据面流量异常时如何与底层系统协同排查?
- 了解 Maglev 吗?它解决什么负载均衡问题?
- 如果使用 AI 做流量异常检测和故障排查,如何按客户端、网关、调度配置及后端链路分层定位?
《参考解析》
客户端怎么被调度到合规 Region
链路是多层配合的。客户端 SDK 定期拉取 TNC(流量与节点配置),配置里带版本号、灰度规则和兜底默认值,本地缓存一份以便离线可用;用户归属地、合规要求、网络质量共同决定目标 Region;SDK 用该 Region 对应的调度域名发起解析,解析走 HTTPDNS 或私有 DNS,避开 LocalDNS 的出口 IP 不准问题;解析结果指向 Region 内的 CDN 或接入点,CDN 边缘再回源到 Region 内的网关。工程要点是配置变更要能灰度、要能快速回滚、变更后要触发连接重建,并且任何一步失败都要有兜底 Region。
四层到七层到 API/RPC 的分工
四层负载(LVS、DPDK、配合 ECMP)只看 IP 和端口,转发性能高、能扛住入口流量,但看不到内容,做不了精细策略。七层负载(Nginx、Envoy)能解析 HTTP,按 Host、Path、Header、Cookie 做路由,承担 TLS 卸载、鉴权、限流、灰度,代价是性能开销更大。再往里是 API 网关做协议转换与聚合,服务之间走 RPC,由服务发现加负载均衡策略选实例,配超时、重试、熔断。原则是粗粒度分流放在外层,细粒度策略放在内层。
TLS 1.3 省下的 RTT 与证书链校验
完整握手 TLS 1.2 需要 2-RTT,TLS 1.3 降到 1-RTT,因为客户端在 ClientHello 里就把 key_share 带上了,服务端选定参数后立即能算共享密钥。会话恢复更快:1.2 靠 session ticket 做到 1-RTT,1.3 的 PSK 可以 0-RTT(但有重放风险,只能用于幂等请求)。1.3 还删掉了 RSA 密钥交换、静态 DH 和 CBC 类套件,只保留前向安全的 (EC)DHE,并且 ServerHello 之后的所有握手消息都加密。证书链校验流程:客户端用本地信任库定位根 CA,逐级验签构建到叶证书的链,校验证书有效期、SAN 中的域名匹配、扩展用途是否允许 serverAuth,查询吊销状态(CRL/OCSP,生产上多用 OCSP stapling),最后用叶证书公钥验证握手中的签名。中间 CA 缺失意味着链断了——服务端必须把中间证书一起下发,否则浏览器报错;部分客户端会尝试用证书里的 AIA 扩展去下载,但这会引入额外网络依赖和延迟,不可靠。
QUIC 与 DNS 的短板
QUIC 跑在 UDP 之上,把 TLS 1.3 内建进握手,做到 1-RTT 甚至 0-RTT 建连;每条流独立,天然没有 TCP 的队头阻塞;用 Connection ID 标识连接,切换网络(WiFi 转 4G)时连接不中断;多路复用不排队。代价是 UDP 常被中间设备限速或丢弃,用户态协议栈带来更高的 CPU 开销。DNS 的不足:递归解析链路长、TTL 缓存由别人控制、按 LocalDNS 出口 IP 做调度不准确(EDNS Client Subnet 只能部分缓解)、解析结果无法感知客户端真实网络质量,所以大厂会用 HTTPDNS 加客户端 SDK 调度来绕开。DNS 污染是在解析路径上注入伪造响应抢答;DNS 劫持是把解析结果改成攻击者可控的 IP(或直接改本地 DNS 配置)。防护手段包括 DoT/DoH 加密解析、DNSSEC 验签(防篡改但不防阻断)、以及自建 HTTPDNS。
慢启动、拥塞避免与链路耗时估算
慢启动阶段每个 RTT 拥塞窗口翻倍(1、2、4、8……),达到慢启动阈值 ssthresh 后进入拥塞避免,每个 RTT 只加约 1 个 MSS,呈线性增长。估算题的解法:先算 MSS(以太网 MTU 1500 减去 IPv4 头 20 字节和 TCP 头 20 字节,通常取 1460),初始窗口现代实现常取 10 个 MSS(RFC 6928),慢启动第 n 个 RTT 的发送量是 10 × 2^(n-1) 个 MSS,累计是 10 × (2^n - 1) 个 MSS;用总量除以单 MSS 得到需要的 MSS 数,解出最少轮次 n;总耗时等于轮次乘 RTT,再加上 DNS、TCP、TLS 的前置开销。要主动说明假设:没有丢包、接收窗口足够大、忽略延迟 ACK 与 Nagle 的影响,一旦丢包会进快速重传或超时重传,估算就不再成立。面试官想听的是建模过程,而不是一个精确数字。
Maglev 与七层负载的位置
Maglev 是 Google 的分布式四层负载均衡方案,核心是它的一致性哈希算法:后端列表变化时,绝大多数已有连接仍然映射到同一台后端,同时把重映射的连接尽量均匀摊开,避免了传统一致性哈希的负载倾斜;配合 ECMP 让多台 Maglev 对同一个流的选路保持一致,且不需要在实例之间同步状态。OSI 七层是物理、数据链路、网络、传输、会话、表示、应用;七层负载工作在应用层,位置在四层负载之后、业务服务之前,负责按内容路由、TLS 卸载、限流与灰度。
ClickHouse 的适用场景
列式存储加向量化执行,MergeTree 家族按主键排序存储、带稀疏索引和分区,适合千万到百亿行的宽表聚合分析(日志、埋点、行为分析)。写入要批量(每批尽量上千行),否则小批量会生成大量 part 拖慢合并;不适合高频点查、事务和复杂的多表 join。回答时可以带上真实用过的细节:分区键怎么选、物化视图怎么预聚合、遇到过 part 过多或内存超限怎么处理。
用 AI 做异常检测与分层排查
按链路分层定位:客户端层看版本分布、地域分布与 SDK 错误码;解析与调度层看 DNS 解析结果、TNC 配置版本与灰度比例;网关层看四层与七层的连接数、状态码、超时与限流指标;后端链路看 RPC 成功率、P99、依赖服务的错误。AI 在这里的价值是聚合多源指标做异常检测、把告警关联成同一条故障链、以及基于历史工单给出排查建议。同时要记住 AI 生成的代码和结论都要人把关:要有评测集、灰度发布、可回滚、以及关键路径的人工复核。