TCP 与 UDP 是什么?差异为何?
2023年2月10日
💎 加入 E+ 成長計畫 與超過 500+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源
TCP 原理
TCP 全名 Transmission Control Protocol 是一种面向连接的协定,它在传送资料前会建立一个可靠的连接,并且在传送过程中提供错误检查和重新传送功能,确保传送的资料不会丢失。
以下流程可以搭配上图来看,当 Client 向 Server 发送请求前,会经过的程序为:
- Client 向 Server 主动传送一个要求连线封包
- Server 接收并确认这个封包后,也会回传一个相对应的封包给 Client 确认,并等待。
- Client 收到 Server 的封包后,就确认了第一步骤发送的封包有被正确接收,如果 Client 也同意与 Server 建立连线,就会再回传一个确认封包告知 Server。
- Server 接收到也确认过后,就完成了三次交握,并建立连线。
TCP 特性
建立完连线后,后续进行传输封包都会加上序号,而这个序号可以让 TCP 拥有可靠的传输性,能够确保:
- 完整性:接收端能够确认封包是否传送完毕,判断是否有缺漏。
- 重传处理:当发现有缺少封包或者逾时,则会在一定的时间内重新传送。
- 顺序性:封包的序号可以确保接收方在收到封包时,重建顺序。
为了能够提升整体传输效率,TCP 并非一个封包一个封包传送,而是利用滑动窗口的方式来传输,每一次传输一个窗口的量,借此来提升传输效率。
UDP 原理
UDP 全名为 User Datagram Protocol 是一种面向非连接的协定,它没有保证传送资料的可靠性,因此传送速度更快,通信引擎也更简单。由下图所示,传输方(Server)不需确认接收方(Client)是否有收到封包,封包也不像 TCP 管理得如此严密,也因为少了一些确认机制,不仅表头资料会比较少,传输效率也比较好,适合应用的场景为:串流服务。
TCP 与 UDP 的比较
TCP 和 UDP 的主要差别在于传送资料的可靠性:TCP 提供可靠的传送,而 UDP 不保证传送的可靠性。因此,如果对资料的完整性有更高的要求,则选用 TCP;如果通信需要更快的速度,则选用 UDP。