真实面经题目 · 原创解析
TCP、UDP、HTTP 之间是什么关系?
这题考网络分层和协议职责,回答要把 HTTP 的应用语义与 TCP/UDP 的传输能力分开讲。
真实面经题目 · 原创解析
这题考网络分层和协议职责,回答要把 HTTP 的应用语义与 TCP/UDP 的传输能力分开讲。
TCP 和 UDP 都在传输层,负责主机进程之间的数据传输;TCP 面向连接,提供可靠、有序的字节流,包含确认、重传、流控和拥塞控制;UDP 面向数据报,头部简单、延迟低,但不保证可靠和有序。HTTP 是应用层协议,定义请求方法、状态码、Header 和 Body 语义。HTTP/1.1、HTTP/2 通常跑在 TCP 上,HTTP/3 跑在 QUIC 上,而 QUIC 是基于 UDP 实现可靠传输和多路复用的协议。
HTTP 不和 TCP、UDP 处于同一层。HTTP 解决应用如何表达请求和响应,TCP/UDP 解决字节或数据报如何从一个进程传到另一个进程。
TCP 提供连接、可靠性、有序性、流量控制和拥塞控制。代价是握手、状态维护、队头阻塞和更复杂的内核协议栈处理。
UDP 保留消息边界,开销低、无连接,适合 DNS、音视频、实时游戏等可以自定义可靠性或允许少量丢包的场景。可靠性可以在应用层或上层协议中补充。
HTTP/1.1 在 TCP 上复用连接但仍容易队头阻塞;HTTP/2 在单 TCP 连接上多路复用,TCP 层丢包仍会阻塞所有流;HTTP/3 用 QUIC 在 UDP 上做连接迁移和流级别多路复用。
比较时不要说 HTTP 比 TCP 更可靠这类跨层说法。正确表达是:HTTP 的可靠交付通常依赖底层传输协议,HTTP/3 则通过 QUIC 在 UDP 之上重新实现可靠、有序的流。
靠序列号、确认应答、超时重传、滑动窗口、流量控制和拥塞控制来保证字节流可靠有序到达。
UDP 本身不保证可靠,但上层协议可以实现确认、重传、FEC、排序等能力,QUIC 就是在 UDP 之上实现可靠传输。
HTTP/2 多路复用仍受单个 TCP 连接丢包影响;HTTP/3 基于 QUIC,把多路复用和可靠性做到用户态,减少连接建立和队头阻塞问题。
TCP 不保留应用写入边界,接收方看到的是连续字节,需要应用层协议自己定义报文边界。