在计算机网络中,TCP(传输控制协议)和 UDP(用户数据报协议)是两种常用的传输层协议。它们在数据传输方式、可靠性和用途上有显著差异。本文将通俗易懂地介绍 TCP 和 UDP,帮助新手理解这两种协议。


场景:下载文件
下面是一个使用 Python 实现 TCP 客户端和服务器的示例:
import socket
# 创建TCP/IP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定套接字到地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)
# 监听传入连接
server_socket.listen(1)
print('等待连接...')
connection, client_address = server_socket.accept()
try:
print('连接来自', client_address)
# 接收数据并发送回去
while True:
data = connection.recv(1024)
if data:
print('收到:', data.decode())
connection.sendall(data)
else:
break
finally:
# 关闭连接
connection.close()
import socket
# 创建TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_address = ('localhost', 65432)
client_socket.connect(server_address)
try:
# 发送数据
message = '这是一个测试消息。'.encode()
client_socket.sendall(message)
# 接收响应
data = client_socket.recv(1024)
print('收到:', data.decode())
finally:
# 关闭连接
client_socket.close()
在这个示例中,TCP 服务器在 localhost 上的 65432 端口监听传入连接。客户端连接到服务器并发送一个测试消息。服务器接收消息并将其回显给客户端。

场景:视频通话
下面是一个使用 Python 实现 UDP 客户端和服务器的示例:
import socket
# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定套接字到地址和端口
server_address = ('localhost', 65432)
server_socket.bind(server_address)
print('等待数据...')
while True:
data, address = server_socket.recvfrom(4096)
print('收到:', data.decode(), '来自:', address)
if data:
sent = server_socket.sendto(data, address)
import socket
# 创建UDP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ('localhost', 65432)
message = '这是一个测试消息。'.encode()
try:
# 发送数据
print('发送:', message.decode())
sent = client_socket.sendto(message, server_address)
# 接收响应
data, server = client_socket.recvfrom(4096)
print('收到:', data.decode())
finally:
client_socket.close()
在这个示例中,UDP 服务器在 localhost 上的 65432 端口等待数据。客户端发送一个测试消息到服务器,服务器接收消息并将其回显给客户端。
| 特性 | TCP | UDP |
|---|---|---|
| 连接类型 | 面向连接 | 无连接 |
| 可靠性 | 高 | 低 |
| 传输顺序 | 保证 | 不保证 |
| 速度 | 较慢 | 较快 |
| 传输单元 | 段(Segment) | 数据报(Datagram) |
| 典型应用 | 文件传输、网页浏览 | 视频流、在线游戏 |
TCP 和 UDP 各有优缺点,适用于不同的应用场景。TCP 适合需要高可靠性的数据传输,如文件下载和网页浏览。UDP 则适合对实时性要求高但允许少量数据丢失的应用,如视频通话和在线游戏。理解它们的工作原理和特点,有助于选择合适的协议来满足特定的网络需求。
希望这篇文章能帮助你入门 TCP 和 UDP,进一步探索网络世界的奥秘。