跳至正文
中文
立即开始

TCP(传输控制协议)

TCP(传输控制协议)是一种传输层协议,可在 IP 网络中的应用程序之间提供可靠、有序的字节流。

文章目录(8 个章节)

TCP 如何工作

TCP 位于应用层协议和 IP 之间。IP 负责在地址之间路由数据包,TCP 则为应用程序提供有序的字节流。每条连接都由源 IP 地址、目标 IP 地址以及源端口和目标端口共同标识。

发送应用数据前,两个端点会完成三次握手:

  1. 客户端发送 SYN。
  2. 服务器回复 SYN-ACK。
  3. 客户端返回 ACK。

随后,TCP 将字节拆分成报文段。序列号用于按顺序重组收到的字节,校验和用于检测数据损坏,确认应答则用于确认数据已经到达。丢失的数据会重新传输。流量控制可避免接收端过载,网络过载时,拥塞控制会降低发送速率。

TCP 能处理常规丢包,但不能保证每条连接都能完成。路由故障、服务器不可用或超时仍可能导致连接中断。

一个简单的 TCP 示例

浏览器可能会使用临时客户端端口连接服务器的 HTTPS 端口:

192.0.2.10:53124  →  TCP  →  203.0.113.20:443

握手完成后,SSL/TLS 会协商加密,浏览器再发送 HTTP 数据。响应数据在网络中传输时,各报文段的大小可能不同,但 TCP 仍会按正确顺序向浏览器提供字节流。连接可通过交换 FIN 来关闭,也可以用 RST 立即重置。

TCP 与 UDP

TCP 和 UDP 都能传输应用数据,但提供的服务不同。

TCP UDP
连接建立 三次握手 无
数据传输 有序字节流,支持重传 独立数据报,不恢复
开销 较高 较低
常见用途 HTTPS、SSH 和电子邮件 DNS、实时媒体和 QUIC

应用程序决定使用哪种协议。HTTP/1.1 和 HTTP/2 通常使用 TCP,HTTP/3 则使用基于 UDP 的 QUIC,并自行实现可靠传输。

TCP 与代理的关系

使用代理服务器通常会涉及两段 TCP 连接:一段从客户端到代理,另一段从代理到网站。网站会把代理的出口 IP 视为第二段连接的源 IP。

通过 HTTP 代理访问 HTTPS 时,客户端连接代理后会发送 CONNECT example.com:443。代理随后建立到目标的连接;连接成功后,通过隧道中继加密的 TLS 数据。TCP 分别管理两段连接。

任意一侧都可能发生故障。连接代理时出现连接超时,可能说明主机、端口或防火墙规则有误。隧道建立后才超时,原因可能出在代理的出站连接或目标网站。

常见问题

TCP 和 HTTP 是一回事吗?

不是。TCP 负责传输字节,HTTP 则定义请求和响应。HTTP 通常基于 TCP 运行,但 HTTP/3 基于 QUIC 和 UDP 运行。

TCP 会加密数据吗?

不会。TCP 提供排序、错误检测和重传,但不提供保密性。HTTPS 在 TCP 之上加入 TLS 加密。

TCP 能保证数据送达吗?

只有连接保持可用,TCP 才能保证送达。TCP 会重传丢失的数据并维持正确顺序,但如果网络或端点在传输完成前失效,TCP 会报告错误。

相关术语

查看全部术语