AyuCLouD-Services返回首页

Transmission Control Protocol(TCP)是什么?

更新于 2026-10-27 · ayu-ssr.buzz

简答:Transmission Control Protocol,简称 TCP,是 TCP/IP 网络中的传输层协议,为两台主机提供面向连接、可靠且有序的字节流传输。理解一次网页访问时,可以按“DNS解析→TCP三次握手→TLS协商(HTTPS)→HTTP请求→TCP传输→连接关闭”这条链路排查问题。

定义:Transmission Control Protocol(TCP)是一种通过连接建立、序列号、确认、重传、流量控制和拥塞控制,在主机之间传输有序字节流的传输层协议。

先看结论:TCP 解决什么问题

TCP 位于 TCP/IP 协议栈的传输层。IP 主要负责把数据报送到目标主机,而 TCP 在两台主机之间建立连接,并把应用数据组织成可确认、可重传、按序交付的字节流。NIST 对 TCP 的定义也强调了连接建立、数据流交换和有序交付这些特征。查看 NIST 术语定义

需要注意,TCP 提供的是协议机制,不等于无条件保证应用最终成功。链路中断、对端进程退出、路由不可达、接收窗口为零或连接被重置时,TCP 仍可能结束连接或向应用报告错误。

TCP、IP、TLS 与 HTTP/HTTPS 的职责对照
层次或协议主要职责不负责什么
IP按 IP 地址转发数据报不保证按序、可靠交付
TCP连接、序列号、确认、重传、流量与拥塞控制不负责应用层加密
TLS在 HTTPS 等场景中提供加密、完整性和身份校验机制不替代 TCP 的连接和字节流功能
HTTP/HTTPS定义网页请求、响应和应用语义不直接负责 IP 路由

一次网页连接的完整流程

下面是适合初学者的文本版流程图。它不是单纯的“打开网页”,而是把名称解析、传输连接、安全协商和应用请求分开:

输入域名 → DNS 返回 IP → TCP SYN → TCP SYN-ACK → TCP ACK → TLS 协商(HTTPS)→ HTTP 请求 → HTTP 响应 → TCP 按序传输 → FIN/ACK 关闭

  1. DNS 解析:应用先把域名解析为一个或多个 IP 地址。DNS 成功只说明名称解析有结果,不代表目标端口一定可连接。
  2. TCP 三次握手:客户端发送 SYN,服务端返回 SYN-ACK,客户端再发送 ACK。双方借此同步初始序列号,并确认对方能够收发连接建立报文。RFC 9293 TCP 规范
  3. TLS 协商:如果访问的是 HTTPS,TLS 在 TCP 连接建立后完成加密参数和证书相关协商。TCP 本身不负责加密。
  4. HTTP 请求:应用层发送请求,TCP 将字节流切分为报文段并维护序列号、确认号和窗口。
  5. 连接关闭:通常由 FIN 和 ACK 逐步完成;如果发生严重异常,也可能使用 RST 快速重置。

因此,网页打不开时不要只看“网络是否在线”:应分别判断 DNS 是否成功、TCP 端口是否能建立、TLS 是否失败,以及 HTTP 是否返回错误。

TCP 的核心机制:可靠性、流量控制和拥塞控制不是一回事

可靠、有序的字节流

TCP 会为发送的数据字节编号,接收方通过确认号告知“下一个期待的序列号”。如果报文段丢失、校验失败或确认未在预期时间内到达,发送方可能进行重传。序列号还帮助接收方识别重复数据并按正确顺序交给应用。RFC 9293 的序列号、确认和重传说明

流量控制:照顾接收方

接收方会通过接收窗口告诉发送方自己还能接收多少数据。窗口较小或变为零,通常表示接收端处理速度跟不上,发送端需要减慢发送或等待窗口重新开放。流量控制解决的是“接收方来不来得及处理”。

拥塞控制:照顾网络路径

拥塞控制关注的是网络中间设备和链路是否过载。TCP 的基本拥塞控制包括慢启动、拥塞避免、快速重传和快速恢复等机制;这些机制与流量控制相互关联,但目的不同。RFC 5681 TCP 拥塞控制

三个容易混淆的 TCP 机制
机制主要观察对象典型表现
可靠性数据是否丢失、重复或乱序确认、序列号、重传
流量控制接收端缓冲区接收窗口变小或为零
拥塞控制网络路径承载能力拥塞窗口调整、丢包后的降速

TCP 头部、端口与连接四元组怎么理解

TCP 报文段头部包含源端口、目的端口、序列号、确认号、窗口、校验和以及控制位等字段。常见控制位包括 SYN、ACK、FIN、RST、PSH、URG、ECE 和 CWR;RFC 9293 对这些控制位及窗口、校验和字段作出了规范说明。查看 RFC 9293 头部字段

  • 端口:让同一台主机上的多个应用复用网络连接,例如浏览器、数据库和文件服务可以使用不同端口。
  • 四元组:在常见 TCP 连接识别语境中,是本地 IP、本地端口、远端 IP、远端端口。
  • 五元组:如果再加上传输协议类型,例如 TCP 或 UDP,通常称为五元组。
  • 连接状态:LISTEN 表示等待连接,SYN-SENT 表示已发出 SYN,SYN-RECEIVED 表示收到并准备确认,ESTABLISHED 表示连接已建立;FIN-WAIT、CLOSE-WAIT、TIME-WAIT 等则与关闭流程有关。

四元组或五元组描述的是“这条流由哪些字段识别”,而 LISTEN、ESTABLISHED、TIME-WAIT 描述的是“当前 TCP 状态”。两者不能混为一谈。

TCP 与 UDP 怎么选

TCP 与 UDP 都属于传输层,但设计目标不同。TCP 适合需要连接管理、按序传输和丢失重传的场景;UDP 更接近无连接的数据报发送,应用可以自行决定是否处理顺序、重传和速率控制。

按使用场景理解 TCP 与 UDP
场景通常更关注的能力常见选择思路
网页访问、接口调用完整请求、顺序和错误处理传统 HTTP/1.1、HTTP/2 通常基于 TCP
文件传输、软件包下载数据完整性和顺序通常选择 TCP 或在更高层实现可靠机制
实时音视频低延迟和及时到达可能选择 UDP,并由上层处理丢包和拥塞
简单查询或局域网发现低开销、无需保持连接可考虑 UDP,但要接受其不提供 TCP 式可靠字节流

不存在脱离场景的“TCP 一定更快”或“UDP 一定更好”。选型应看应用是否能接受丢包、乱序、重复数据,以及是否需要稳定的连接语义。

连接异常时的最短排查流程

当应用提示连接超时、连接被拒绝或连接重置,可以按下面顺序缩小范围:

  1. 先查 DNS:确认域名能解析到预期地址;如果不同网络得到的结果不同,记录解析结果再继续,不要直接把问题归因于 TCP。
  2. 再查 TCP 端口:确认目标主机的对应端口是否可达。超时通常表示路径、过滤或对端没有及时响应;拒绝通常表示目标主机明确返回了拒绝,或该端口没有监听,但具体原因仍需结合服务端日志。
  3. 观察握手:抓包或查看连接状态,区分 SYN-SENT、SYN-RECEIVED、ESTABLISHED、TIME-WAIT 等状态。
  4. 最后查应用层:TCP 已建立但网页仍失败,应继续检查 TLS 证书、HTTP 状态码、代理配置和应用日志。
提示或现象→检查→下一步
提示或现象检查下一步
域名无法解析DNS 服务器、域名拼写、网络环境先修复解析,再测试 TCP
连接超时路由、端口过滤、服务端是否响应对比其他网络并查看两端日志
连接被拒绝目标端口是否监听、服务是否启动检查服务配置和防火墙规则
连接被重置RST 来源、服务崩溃、代理或中间设备抓包定位发送 RST 的一端
TCP 已连接但请求失败TLS、HTTP 响应、应用日志进入应用层排查,不要只重复测试端口

排障时应记录测试时间、目标域名或 IP、目标端口、网络环境和错误提示。不要把一次连通或一次超时当成长期可用性结论。

安全提醒与标准边界

TCP 本身不提供应用数据加密,也不能单独证明通信对端身份。涉及账号、隐私或敏感业务时,应由 HTTPS、TLS 或其他经过验证的安全协议提供相应保护。

RFC 9293 是当前 TCP 基础规范的主要入口,并整合、更新了早期 TCP 规范内容;RFC 793 更适合作为历史背景阅读,而不应被单独当作现行完整标准。RFC 9293 标准说明 RFC 793 历史规范

常见问题

TCP 是不是一种网速?

不是。TCP 是传输层协议,负责连接和数据传输机制;实际体验还会受到链路带宽、往返时延、丢包、拥塞、服务器处理能力和应用协议影响。

TCP 三次握手为什么不是两次?

三次交互让双方分别确认自己的发送方向和接收方向,并同步双方的初始序列号。只交换两次时,双方无法充分确认彼此的收发能力和序列号状态。

TCP 建立连接后还会丢包吗?

链路仍可能丢失或重复报文段。TCP 通过确认、序列号和重传机制处理部分丢失,但重传会增加延迟,持续异常时连接仍可能失败。

TIME-WAIT 是不是故障?

不一定。TIME-WAIT 是连接关闭流程中的正常状态,用于处理延迟到达的旧报文并避免新旧连接混淆。只有当数量异常、耗尽资源并伴随业务故障时,才需要进一步排查。

TCP 端口开放就代表服务正常吗?

不代表。端口可建立连接只能说明 TCP 层有响应,应用仍可能在 TLS、认证、请求格式或后端依赖处失败。

TCP 与 HTTPS 是同一回事吗?

不是。TCP提供传输层连接和字节流,HTTPS是在HTTP之上使用TLS保护通信。一次传统HTTPS访问通常会先建立TCP连接,再进行TLS协商,之后才交换HTTP内容。

常见问题

TCP 可以直接替代 DNS 吗?

不可以。DNS 负责名称解析,TCP 负责建立传输连接;DNS 得到 IP 后,应用才可能继续连接目标端口。

为什么 ping 通但 TCP 端口仍然连不上?

ping 通常测试的是 ICMP 可达性,不等于目标 TCP 端口正在监听或允许访问。应单独测试目标端口并查看连接状态。

TCP 的校验和能保证数据绝对正确吗?

TCP 校验和用于检测部分传输错误,但它不是端到端应用语义校验,也不能替代 TLS、文件哈希或应用层完整性校验。

RST 和 FIN 有什么区别?

FIN 通常表示一方正常结束自己的发送方向,RST 表示连接被重置或异常终止。具体原因要结合报文方向、状态和服务日志判断。

TCP 为什么会让实时业务感觉变慢?

TCP 的按序交付和重传机制有助于完整传输,但丢包时可能等待重传,后续数据也可能受队头阻塞影响。是否适合实时业务取决于应用需求。

排查 TCP 问题一定要抓包吗?

不一定。先看 DNS、端口测试、系统连接状态和应用日志;当这些信息无法区分超时、拒绝、重置或TLS失败时,再使用抓包工具定位。

相关阅读

参考资料

  1. RFC 9293: Transmission Control Protocol (TCP)
  2. RFC 5681: TCP Congestion Control
  3. NIST Transmission Control Protocol Glossary
  4. RFC 793: Transmission Control Protocol