tcp与udp区别
2. TCP 与 UDP 的区别
TCP(Transmission Control Protocol)和 UDP(User Datagram Protocol)是两种常见的传输层协议,它们在功能和应用场景上有显著区别:
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接,需要建立连接(三次握手) | 无连接,不需要建立连接 |
| 可靠性 | 提供可靠传输,保证数据不丢失、不重复 | 不保证可靠传输,可能丢包或乱序 |
| 传输方式 | 面向字节流,数据按顺序传输 | 面向报文,数据以独立的报文形式传输 |
| 速度 | 较慢(需要确认和重传机制) | 较快(无确认和重传机制) |
| 开销 | 较大(需要维护连接状态) | 较小(无连接状态) |
| 应用场景 | 适用于可靠性要求高的场景,如文件传输 | 适用于实时性要求高的场景,如视频直播 |
应用场景
- TCP:HTTP/HTTPS、FTP、SMTP、POP3 等。
- UDP:DNS、DHCP、视频直播、在线游戏等。
3. 三次握手和四次挥手
三次握手(建立连接)
TCP 使用三次握手来建立可靠的连接,确保双方都能正常发送和接收数据。
-
第一次握手(客户端 → 服务端):
客户端发送一个 SYN(同步序列号)报文,表示请求建立连接。 -
第二次握手(服务端 → 客户端):
服务端收到 SYN 后,回复一个 SYN + ACK(确认)报文,表示同意连接。 -
第三次握手(客户端 → 服务端):
客户端收到 SYN + ACK 后,发送一个 ACK 报文,表示确认连接。
连接建立后,客户端和服务端可以开始通信。
四次挥手(断开连接)
TCP 使用四次挥手来断开连接,确保双方都能正常关闭连接。
-
第一次挥手(客户端 → 服务端):
客户端发送一个 FIN(结束)报文,表示不再发送数据。 -
第二次挥手(服务端 → 客户端):
服务端收到 FIN 后,回复一个 ACK 报文,表示确认收到。 -
第三次挥手(服务端 → 客户端):
服务端发送一个 FIN 报文,表示不再发送数据。 -
第四次挥手(客户端 → 服务端):
客户端收到 FIN 后,回复一个 ACK 报文,表示确认收到。
连接断开后,双方的资源被释放。
面试中的常见问题
-
为什么三次握手不能减少为两次?
- 如果只有两次握手,客户端无法确认服务端是否已准备好接收数据,可能导致数据丢失。
-
为什么断开连接需要四次挥手?
- 因为 TCP 是全双工通信,双方需要分别关闭发送和接收通道。
-
TCP 如何保证可靠性?
- 通过序列号、确认机制、超时重传、流量控制和拥塞控制等机制。
通过理解 TCP 和 UDP 的区别,以及三次握手和四次挥手的过程,可以更好地回答网络协议相关的面试问题。