深入解析 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 对比
特性 | TCP | UDP |
连接方式 | 面向连接(需要三次握手) | 无连接(不建立会话) |
可靠性 | 可靠传输(有序、无丢包) | 不可靠(可能丢失、乱序) |
传输速度 | 较慢(有流控、拥塞控制) | 快速(无流控、无重传) |
典型应用 | HTTP、FTP、邮件 | 视频直播、DNS、VoIP |