当前位置: 首页 > article >正文

深入解析 TCP:可靠传输的基石

目录

TCP到底是什么?

TCP 的核心特点

TCP 三次握手:连接建立过程

更通俗易懂的可以理解为:

 为什么要三次握手?

TCP 四次挥手:连接释放过程

更通俗易懂的理解为:

为什么需要 TIME_WAIT?

TCP 可靠性机制

TCP 拥塞控制

TCP vs UDP 对比


你有没有想过,当你刷微博、看视频、玩游戏时,数据是如何稳定地从服务器传输到你的设备上的?这背后有个关键角色——TCP(Transmission Control Protocol,传输控制协议)

TCP到底是什么?

在网络通信中,TCP(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠传输的协议,就像是一名“可靠的快递员”,确保数据包能够完整、按顺序地送达目的地,不丢失、不重复。广泛应用于Web、文件传输等场景。本文将深入探讨TCP的关键机制。

TCP 的核心特点

面向连接:通信前必须先建立连接(三次握手),通信结束时需释放连接(四次挥手)。
可靠传输:TCP 通过序列号、确认机制保证数据完整性,并通过重传机制防止丢包。
流量控制:使用滑动窗口防止发送方数据过快,导致接收方处理不过来。
拥塞控制:采用慢启动、拥塞避免、快速重传、快速恢复等算法,提高传输效率。

TCP 三次握手:连接建立过程

在 TCP 连接建立时,客户端与服务器需要进行 三次握手(3-Way Handshake):

第一步(SYN):客户端向服务器发送 SYN(Synchronize)包,请求建立连接,并携带初始序列号 seq = x
第二步(SYN + ACK):服务器收到 SYN 后,发送 SYN + ACK 响应,分配缓存,并告知自己的初始序列号 seq = y
第三步(ACK):客户端收到服务器的 SYN + ACK 后,返回 ACK 确认,连接正式建立。

更通俗易懂的可以理解为:

客户端:“你好,我想建立连接!”(SYN)
服务器:“我收到了,可以连接!”(SYN+ACK)
客户端:“好的,正式开始!”(ACK)
连接建立,数据传输开始!

 为什么要三次握手?

防止历史连接影响:若是两次握手,可能会误响应延迟的 SYN 包,导致建立错误连接。确保双方的接收与发送能力正常。

TCP 四次挥手:连接释放过程

当通信结束时,TCP 需要 四次挥手(4-Way Handshake)来保证双方数据都正确传输完毕:

第一步(FIN):客户端发送 FIN(Finish)请求关闭连接。
第二步(ACK):服务器收到 FIN 后,返回 ACK,表示“我知道你要断开了”。
第三步(FIN):服务器数据处理完后,发送 FIN,准备断开连接。
第四步(ACK):客户端收到 FIN 后,发送 ACK 并进入 TIME_WAIT 状态,等待一段时间后真正关闭连接。

更通俗易懂的理解为:

A:“我要断开了!”(FIN)
B:“收到,但我还有点东西要处理。”(ACK)
B:“我处理完了,也要断开了!”(FIN)
A:“收到,正式断开!”(ACK)
连接关闭,安全退出!

为什么需要 TIME_WAIT?

确保最后的 ACK 能够被服务器接收,避免服务器误以为连接未完全关闭。允许旧数据包在网络中消失,防止新连接受到影响。

TCP 可靠性机制

序列号(Sequence Number)与确认号(ACK Number)

  • 发送方每个数据包都有序列号,接收方通过 ACK 号确认已接收的数据。

超时重传机制

  • 若发送方在一定时间内未收到 ACK,则重新发送数据。

  • 超时时间(RTO)通常由 RTT(往返时间)动态计算。

快速重传

  • 若接收方发现数据包丢失,会重复发送 ACK(如 3 次 ACK 相同),发送方立即重传,而不等待超时。

TCP 拥塞控制

CP 拥塞控制采用 四种算法 防止网络拥堵:

1. 慢启动(Slow Start)

  • 初始发送窗口小,每次收到 ACK 后指数增长,快速发现带宽上限。

2. 拥塞避免(Congestion Avoidance)

  • 当网络接近饱和时,窗口线性增长,避免过载。

3. 快速重传(Fast Retransmit)

  • 触发 3 次重复 ACK 后,立即重传丢失的数据包。

4. 快速恢复(Fast Recovery)

  • 避免窗口回到初始值,维持一定速率,减少吞吐量下降。

TCP vs UDP 对比

特性TCPUDP
连接方式面向连接(需要三次握手)无连接(不建立会话)
可靠性可靠传输(有序、无丢包)不可靠(可能丢失、乱序)
传输速度较慢(有流控、拥塞控制)快速(无流控、无重传)
典型应用HTTP、FTP、邮件视频直播、DNS、VoIP

 


http://www.kler.cn/a/598976.html

相关文章:

  • 体育直播模板nba英超直播欧洲杯直播模板手机自适应
  • 安装unsloth
  • 实战经验:Gone 框架模块化改造中的 go work 反思
  • TCP | 序列号和确认号 [逐包分析] | seq / ack 详解
  • 工业软件的破局与重构:从技术依赖到自主创新的未来路径
  • 连接chatgpt的桌面语音助手
  • 单片机开发资源分析实战——以STM32F103ZET6为例子,分析我们的单片机
  • Binder机制源码分析
  • 详细解析格式化消息框的代码
  • Python Web 框架之 Flask
  • 精密矫平机:解锁工业制造的“平整密码”,打造零瑕疵的金属艺术
  • PHP基本知识
  • 【IDEA】 配置安装 Leetcode 插件
  • 奇迹科技:蓝牙网关赋能少儿篮球教育的创新融合案例研究
  • CentOS与LAMP详解:从概念到实战!!!
  • Redis 内存淘汰策略
  • Python Cookbook-4.8 二维阵列变换
  • 前后端+数据库的项目实战:hbu迎新网-较复杂(下)javaweb
  • 蓝桥备赛(23)算法篇【枚举】
  • Hive与Spark的UDF:数据处理利器的对比与实践