TCP 和 UDP 的区别
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种常用的传输层协议,分别适用于不同的应用场景。
知识点
TCP 的三次握手:
- 三次握手用于建立连接,确保双方都能发送和接收数据。
- 过程涉及同步和确认序列号,保证连接的可靠性。
TCP 的四次挥手:
- 四次挥手用于关闭连接,确保数据的完整性并安全关闭连接。
- 过程包括发送和确认 FIN 数据包,完成数据传输并释放资源。
UDP 的特点:
- UDP 不保证数据的可靠性,适合实时通信或流量较高但对丢包容忍的场景。
- 没有握手和挥手过程,因此传输速度较快。
TCP 与 UDP 的比较:
- TCP 用于需要高可靠性和数据顺序的场合,而 UDP 用于实时性要求较高的应用。
TCP 详解
TCP(传输控制协议)是一种面向连接、可靠的协议。它通过一系列机制来确保数据的准确无误地传输。
特点
- 面向连接:传输数据前需要三次握手建立连接,结束后通过四次挥手释放连接。
- 提供可靠传输:支持顺序控制、重传机制和流量控制。
- 数据以字节流形式传输,无数据边界。
三次握手(建立连接)
在 TCP 数据传输前,必须先通过三次握手来建立连接,以确保数据能够可靠地发送和接收。
- SYN:客户端向服务器发送连接请求,发送一个带有 SYN 标志的数据包,并选择一个序列号
a。 - SYN + ACK:服务器收到客户端的 SYN 数据包后,回复一个带有 SYN 和 ACK 标志的数据包,确认客户端请求,序列号为
b,确认号为a+1。 - ACK:客户端收到服务器的 SYN + ACK 数据包后,回复一个带有 ACK 标志的数据包,确认号为
b+1,序列号为a+1。
通过这三次交互,确保双方都准备好开始数据传输。
- 客户端发送
SYN包:- 表示发起连接请求。
- 包含序号(Seq=a)。
- 服务端返回
SYN+ACK包:- 确认接收客户端请求并发起响应请求。
- 包含序号(Seq=b),确认号(Ack=a+1)。
- 客户端返回
ACK包:- 确认服务端响应。
- 包含序号(Seq=a+1),确认号(Ack=b+1)。
- 至此,连接建立成功。
数据传输中的重传机制
在 TCP 数据传输过程中,如果接收方没有收到数据包或数据包丢失,发送方会重传丢失的数据包。这样可以确保数据准确无误地传送到接收方。
四次挥手(关闭连接)
数据传输完成后,TCP 连接需要通过四次挥手来确保数据传输的完整性和关闭连接的过程。
- FIN + ACK:主动关闭连接的一方(如客户端)发送一个带有 FIN 标志的数据包,表示数据发送完成,同时确认序列号
a,确认号为b。 - ACK:另一方(如服务器)收到 FIN 数据包后,回复一个带有 ACK 标志的数据包,确认号为
a+1,序列号为b。 - FIN:关闭连接的另一方(如服务器)也发送一个带有 FIN 标志的数据包,表示自己的数据也已发送完毕,确认号为
a+1,序列号为b+1。 - ACK:主动关闭连接的一方(如客户端)收到 FIN 数据包后,回复一个带有 ACK 标志的数据包,确认号为
b+1,序列号为a+1。此时,连接关闭。
通过这四次挥手,确保双方都完成数据传输,并且连接被安全地关闭。
- 客户端发送
FIN包:- 请求断开连接。
- 包含序号(Seq=a)。
- 服务端返回
ACK包:- 确认断开请求。
- 包含确认号(Ack=a+1)。
- 服务端发送
FIN包:- 通知客户端其数据传输完成。
- 包含序号(Seq=b)。
- 客户端返回
ACK包:- 确认断开。
- 包含确认号(Ack=b+1)。
- 至此,连接释放成功。
典型应用场景
- HTTP(S):用于网页浏览。
- FTP:文件传输协议。
- 邮件传输:如 SMTP、IMAP、POP3。
UDP 详解
UDP(用户数据报协议)是一种无连接、不可靠的协议。与 TCP 相比,UDP 更注重传输效率,并不保证数据的可靠性。UDP 的数据传输不进行连接建立或连接关闭过程,数据发送后没有确认,也没有重传机制。
特点
- 无连接:UDP 不需要先建立连接,数据可以直接发送给接收方。
- 不保证可靠性:UDP 不对数据进行校验和重传,因此不能保证数据的完整性。发送的数据包可能丢失,接收方也可能收到重复的数据包。
- 效率高:由于没有连接管理和重传机制,UDP 比 TCP 更加高效,适用于实时性要求较高的应用,如视频流、语音通信等。
典型应用场景
- DNS 查询:快速解析域名。
- 视频流传输:如在线视频。
- 实时通信:如语音通话、在线游戏。
TCP 与 UDP 的比较
| 特性 | TCP | UDP |
|---|---|---|
| 连接类型 | 面向连接 | 无连接 |
| 数据传输可靠性 | 提供可靠传输,确保数据完整性 | 不可靠,可能发生数据丢失或无序 |
| 数据包顺序 | 保证数据包的顺序 | 不保证数据包的顺序 |
| 错误校验 | 有错误检测和重传机制 | 有错误检测,但无重传机制 |
| 传输速度 | 较慢,因为需要建立连接、确认和重传(带有流量控制和拥塞控制) | 快速,适用于实时应用,延迟低 |
| 传输形式 | 面向字节流,无边界 | 面向数据报,有边界 |
| 应用场景 | 文件传输、网页浏览、邮件等需要可靠性的应用 | 流媒体、语音通信等对速度要求高的应用 |
总结
- TCP:提供可靠的数据传输,适用于对数据完整性有较高要求的应用,如文件传输、网页浏览和电子邮件等。
- UDP:提供快速的传输,不保证可靠性,适用于实时性要求较高、对丢包容忍的应用,如视频流、语音通信等。
- 选择合适的协议取决于具体应用需求:可靠性 vs 实时性,是否需要可靠性保障,或是对速度的要求更高。