Python 网络编程:TCP 与 UDP 的区别详解
1. TCP 协议概述
TCP(Transmission Control Protocol)简称传输控制协议,它是一种面向连接的、可靠的、基于字节流的传输层通信协议。
1.1 TCP 通信流程
TCP 通信类似于生活中的打电话,通信开始前一定要先建立相关的连接。主要包含三个步骤:
- 创建连接:通过三次握手建立可靠连接。
- 数据传送:在连接建立后进行双向数据传输。
- 终止连接:通过四次挥手安全断开连接。
1.2 TCP 特点
- 面向连接:这种连接是一对一的,因此 TCP 不适用于广播的应用程序。
- 可靠传输:确保数据无差错、不丢失、不重复且按序到达。
- 应答机制:接收方收到数据后需发送确认信息。
- 超时重传:若发送方在规定时间内未收到确认,将自动重发数据。
- 错误校验:通过校验和检测数据在传输过程中是否损坏。
- 流量控制和阻塞管理:防止发送方发送速度过快导致接收方处理不过来。
1.3 TCP 优缺点
| 优点 | 缺点 |
|---|---|
| 可靠、稳定 | 传输速度慢 |
| 适合传输大量数据 | 占用系统资源高 |
1.4 TCP 使用场景
对网络通讯质量有较高要求的应用场景:
- 浏览器 HTTP/HTTPS 协议基于 TCP 协议。
- 文件传输(FTP)。
- 电子邮件(SMTP/POP3)。
2. TCP 连接过程详解
2.1 TCP 的三次握手(连接)
客户端与服务端建立连接的过程称为三次握手:
- SYN:客户端发送 SYN 包到服务端,进入 SYN_SENT 状态。
- SYN+ACK:服务端收到 SYN 包,回应 SYN+ACK 包,进入 SYN_RCVD 状态。
- ACK:客户端收到 SYN+ACK 包,向服务端发送 ACK 包,连接建立成功。
2.2 TCP 的四次挥手(断开)
断开连接的过程称为四次挥手:
- FIN:客户端发送 FIN 包,请求关闭连接。
- ACK:服务端收到 FIN,发送 ACK 确认。
- FIN:服务端处理完数据后,发送 FIN 包给客户端。
- ACK:客户端收到 FIN,发送 ACK 确认,连接关闭。
3. TCP 编程实战案例
TCP 严格区分客户端与服务端。以下是一个基于 TCP 的文件下载器示例(同步下载)。
3.1 TCP 客户端代码
import socket
__name__ == :
tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
:
tcp_client_socket.connect((, ))
file_name = ()
file_name_data = file_name.encode()
tcp_client_socket.send(file_name_data)
save_path =
(save_path + file_name, ) file:
:
file_data = tcp_client_socket.recv()
file_data:
file.write(file_data)
:
()
Exception e:
()
:
tcp_client_socket.close()


