TCP 是用来解决什么问题?

TCP 工作在传输层,底层IP协议只提供无连接、尽力而为的报文交付,存在丢包、乱序、重复、网络拥塞、接收缓冲区溢出等问题。TCP 就是在不可靠的IP网络之上,向上层应用提供可靠的、面向连接的字节流传输服务。

TCP 解决的核心问题:

  1. 建立与维持通信双方的连接

    通过三次握手同步双方初始序列号,确认双方收发链路可用;通信结束通过四次挥手正常释放连接,避免资源泄漏。

  2. 解决数据丢失问题

    采用确认应答(ACK)+ 超时重传机制。发送方等待接收方的确认报文,超时未收到ACK则重传数据,保证数据最终送达。

  3. 解决数据乱序问题

    为每个字节分配序列号,接收端根据序列号重组报文,将有序字节流交付应用程序。

  4. 解决重复报文问题

    利用序列号识别重复收到的数据包,丢弃重复报文,避免上层应用收到重复数据。

  5. 流量控制

    使用滑动窗口机制,接收方通过窗口大小告知发送方自身剩余缓冲区容量,防止发送方发送速率过快,造成接收端缓冲区溢出。

  6. 拥塞控制

    感知整个网络的拥塞状态,动态调整发送窗口,避免大量报文涌入网络,导致网络瘫痪。

  7. 字节流封装

    将应用层的数据拆分成合适大小的TCP段,适配底层IP的MTU,向上层屏蔽底层网络分片细节。

一句话概括:TCP 在不可靠的IP网络上,为应用层提供可靠、有序、无重复、带流量与拥塞控制的面向连接字节流传输。

相关推荐
文丑颜不良啊4 小时前
LeetCode2081~2100题目解析
java·leetcode
玖米GEO运营王总监4 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
叼烟扛炮5 小时前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain
文丑颜不良啊6 小时前
LeetCode2061~2080题目解析
java·leetcode
FungLeo6 小时前
成为全栈·基础补充·域名、DNS 与 HTTPS 证书
https·网络基础·网站部署·tls证书·成为全栈·域名 dns
特立独行的猫A6 小时前
13MB 单文件、一条命令变服务:把仓颉写的 cjh 内嵌进你的应用,当它的 AI 大脑
java·后端·python
Brookty6 小时前
Java博客项目实战|工程环境与构建:工程目录、PowerShell命令调用与JDK/IDEA/Maven工作机制
java·项目实战
养军博客7 小时前
Spring Boot 3.x + Spring Security 6.x 整合 JWT 实战:jjwt 与 java-jwt 两种工具库详解
java·spring boot·springsecurity
TeamDev7 小时前
使用 JxBrowser 在桌面应用中集成 Spring
java·前端·后端·spring·混合应用·jxbrowser·浏览器控件
J.YA7 小时前
String字符串[面试题]
java·开发语言