跳到主要内容
SUN / 笔记
← 全部文章

客户端网络面试速记

从求职材料中拆出的客户端网络高频题;重复的 TCP 三次握手内容仅保留一版。

客户端开发岗位(尤其是大厂)对计算机网络的要求通常集中在 TCP/IP 基础 + 常见网络机制 + 实际工程理解。面试不会像网络方向那样深入,但一些基础问题几乎必问。下面整理一套 客户端岗位必须掌握的核心知识点,理解到能解释原理即可。


网络基础知识(客户端面试常问)

TCP 三次握手

TCP 建立连接时需要进行三次握手。

过程

text
客户端                服务端

SYN = 1  seq = x  -------->

                    <--------  SYN = 1  ACK = 1  seq = y  ack = x+1

ACK = 1 ack = y+1 -------->

步骤

第一次握手

客户端发送 SYN,请求建立连接,并发送初始序列号 seq = x。

第二次握手

服务器收到后回复:

  • SYN
  • ACK
  • ack = x + 1

表示: 我收到了你的请求,同时我也要建立连接。

第三次握手

客户端发送 ACK,确认服务器的 SYN。

连接建立完成。


为什么是三次握手

核心原因:双方都需要确认发送和接收能力正常。

三次握手保证:

能力 客户端 服务端
发送能力 ✔ ✔
接收能力 ✔ ✔

如果只有 两次握手:

可能发生 历史连接请求问题。

例子:

  1. 客户端发送 SYN(网络延迟)
  2. 客户端又发送新的 SYN
  3. 服务端收到旧 SYN 并建立连接

客户端其实已经放弃这个连接,但服务器却建立了连接。

三次握手通过第三次 ACK 可以避免这个问题。


TCP 四次挥手(断开连接)

TCP 是 全双工通信,双方需要分别关闭。

text
客户端                服务端

FIN -------->

            <-------- ACK

            <-------- FIN

ACK -------->

步骤:

1 客户端发送 FIN(不再发送数据)

2 服务端返回 ACK

3 服务端发送 FIN

4 客户端返回 ACK

客户端会进入 TIME_WAIT 状态。


TIME_WAIT 为什么存在

TIME_WAIT 持续 2MSL(报文最大生存时间)。

原因:

防止旧连接的数据干扰新连接

如果没有 TIME_WAIT:

旧连接的延迟包可能进入新连接。

确保最后 ACK 被收到

如果服务器没有收到 ACK,会重新发送 FIN。

客户端必须还能回应。


TCP 的核心特点

TCP 是:

面向连接 + 可靠传输 + 有序传输

可靠性来自几个机制:

  • 序列号
  • 确认应答
  • 重传机制
  • 滑动窗口
  • 拥塞控制

TCP 滑动窗口

滑动窗口用于 提高传输效率。

如果没有滑动窗口:

发送一个包就必须等待 ACK。

效率非常低。

滑动窗口允许:

连续发送多个数据包。

示例:

text
发送窗口 = 3

发送:
packet1
packet2
packet3

收到 ACK1 后:

text
窗口滑动

发送 packet4

所以叫 滑动窗口。


TCP 流量控制

TCP 使用 **接收窗口(rwnd)**控制速度。

接收方告诉发送方:

text
我还能接收多少数据

例如:

text
rwnd = 4096 bytes

发送方不能超过这个值。

防止 接收端缓冲区被打满。


TCP 拥塞控制

用于防止 网络被打爆。

核心算法:

  • 慢启动
  • 拥塞避免
  • 快重传
  • 快恢复

慢启动

刚开始发送速率很小:

text
1 → 2 → 4 → 8 → 16

指数增长。

拥塞避免

到达阈值后:

text
线性增长

TCP 和 UDP 区别(高频题)

特点 TCP UDP
连接 需要连接 无连接
可靠性 可靠 不可靠
顺序 保证顺序 不保证
速度 较慢 较快
应用 HTTP、FTP 视频、游戏

举例:

TCP:

  • HTTP
  • SSH
  • 数据库

UDP:

  • 视频直播
  • 游戏
  • DNS

HTTP 和 HTTPS 区别

HTTPS = HTTP + TLS 加密

区别:

特点 HTTP HTTPS
安全 不安全 加密
端口 80 443
证书 无 需要

HTTPS 过程:

1 TCP 建立连接 2 TLS 握手 3 加密通信


Socket 是什么

Socket 是 网络通信接口。

客户端开发中常见流程:

text
1 创建 socket
2 connect 服务器
3 send 发送数据
4 recv 接收数据
5 close 关闭连接

例如:

text
客户端  <----TCP---->  服务器

Qt / Android / C++ 网络库都是基于 socket。


客户端开发常见网络问题

面试官经常会问:

网络断开怎么办

常见方案:

  • 心跳机制
  • 自动重连
  • 超时检测

粘包问题

TCP 是 字节流,可能出现:

text
packet1 + packet2

解决方法:

  • 固定长度
  • 分隔符
  • 消息长度字段

QUIC(了解即可)

QUIC 是 Google 提出的协议。

特点:

  • 基于 UDP
  • 内置 TLS
  • 支持多路复用
  • 减少握手延迟

HTTP/3 使用 QUIC。


客户端岗位网络必背问题

如果是腾讯客户端面试,大概率会问:

基础

  • TCP 三次握手
  • TCP 四次挥手
  • TCP vs UDP
  • HTTP vs HTTPS

稍微进阶

  • 滑动窗口
  • 粘包问题
  • 心跳机制

加分题

  • TIME_WAIT
  • QUIC

建议重点背这 7 个

只要掌握这些就够大部分面试:

text
1 TCP三次握手
2 TCP四次挥手
3 TCP和UDP区别
4 滑动窗口
5 TIME_WAIT
6 HTTP和HTTPS
7 粘包问题

相关笔记

相关文章

第0章 Overview →HTTP →计算机网络 →