真实面经题目 · 原创解析

TCP 如何保证可靠传输?

TCP 可靠传输依赖一组机制共同保证:序列号和确认号负责定位数据,重传机制处理丢包,滑动窗口控制发送节奏,校验和发现损坏,按序交付与去重处理乱序和重复,拥塞控制保护网络稳定。

出现于:字节跳动 · 测开

60 秒回答模板

可以按可靠性问题逐项回答。TCP 把字节流编号,发送方给每段数据分配序列号,接收方通过 ACK 告诉已经连续收到的位置。数据丢失时,发送方可以根据超时重传或重复 ACK 触发快速重传。接收方会用校验和发现损坏报文,丢弃错误数据,并根据序列号缓存乱序数据、去除重复数据,最终按序交付给应用。滑动窗口让发送方在未收到确认前可以连续发送一定量数据,同时接收窗口体现接收端处理能力,避免把对方缓冲区打爆。拥塞控制通过慢启动、拥塞避免、快速重传和快速恢复调节发送速率,降低网络拥塞导致的大面积丢包。测试要覆盖丢包、乱序、重复、延迟、接收端变慢、带宽变化和连接中断。

考点 可靠不是单一机制
难度 真实面经高频题
回答目标 讲清机制、边界和追问

深入解析

01

序列号和确认号

TCP 面向字节流,每个字节都有逻辑序号。发送段会携带序列号,接收方根据连续收到的数据返回确认号,表示下一个期望字节。这个机制让双方能知道哪些数据已到达、哪些还缺失,也是按序交付、去重和重传判断的基础。

02

重传机制

如果发送方在重传超时时间内没有收到确认,就会重新发送相关数据。若接收方连续返回相同 ACK,说明中间可能缺了一段数据,发送方可触发快速重传,不必等到超时。超时重传和快速重传共同处理丢包,但也会影响延迟和吞吐。

03

滑动窗口与流控

TCP 不是发一段等一段,而是在窗口允许范围内连续发送多段数据。接收方通过接收窗口告诉发送方还能接收多少数据,发送方据此控制在途数据量。流控关注的是接收端处理能力,避免发送过快导致对端缓冲区溢出。

04

乱序、重复和损坏

网络可能让报文乱序、重复或损坏。TCP 使用校验和发现传输错误,使用序列号识别重复数据,并在接收端缓存部分乱序片段。只有当缺口补齐后,数据才会按顺序交给应用层,从而让应用看到连续字节流。

05

拥塞控制

可靠传输不能只考虑两端,还要考虑网络中间路径。拥塞控制通过拥塞窗口限制发送量,根据丢包、延迟和 ACK 反馈调整速率。慢启动提高探测速度,拥塞避免保持稳定,快速恢复减少突发丢包后的吞吐塌陷。

易错点

  • 只说 TCP 有三次握手,所以可靠,忽略数据传输阶段的确认、重传和窗口机制。
  • 认为 TCP 能保留应用消息边界,没有意识到它提供的是字节流。
  • 把流量控制和拥塞控制混为一谈,没有区分接收端能力和网络路径能力。
  • 忽略乱序、重复和校验错误,只把可靠性理解成丢包后重发。

面试官追问

TCP 能保证数据绝对不丢吗?

TCP 会尽力通过确认和重传保证已建立连接上的字节流可靠交付。如果网络长期不可达或连接超时,最终会报错给应用。应用仍需处理连接失败、超时和重试后的幂等问题。

TCP 是否保证业务消息边界?

不保证。TCP 提供连续字节流,可能发生粘包或拆包。业务协议需要用长度字段、分隔符或固定格式来定义消息边界,不能假设一次 send 对应一次 receive。

快速重传依赖什么信号?

快速重传通常依赖多个重复 ACK。当接收方持续确认同一个序号,说明后续数据可能到了但中间有缺口,发送方可以尽早重发缺失段,减少等待超时带来的延迟。

为什么有了流控还需要拥塞控制?

流控只说明接收端还能接收多少,不代表网络中间路径能承载多少。拥塞控制根据网络反馈限制发送速率,避免过量数据挤占链路导致更严重的丢包和重传。