创维E900V21C救砖记:从TTL焊盘损坏到飞线修复,手把手教你排查硬件故障
2026/6/8 10:24:05
本文详细解析计算机网络传输层两个最重要的协议:TCP (Transmission Control Protocol)和UDP (User Datagram Protocol),重点阐述“面向连接”与“无连接”的核心区别、工作原理及应用场景。
在计算机网络中,“连接”并不是一条物理的网线。
“连接”是一种逻辑状态,是通信双方为了保证数据可靠传输而维护的一组状态信息。
TCP 是一个可靠的、面向流的传输协议。就像打电话,必须先拨通对方,对方接听后才能开始说话。
下图展示了 TCP 的连接建立与数据传输过程:
Mermaid 流程示意:
UDP 是一个简单的、不可靠的、面向数据报的传输协议。就像寄信或广播,写好地址直接扔进邮筒,不知道对方是否收到,也不保证顺序。
下图展示了 UDP 的“发射即忘” (Fire and Forget) 模式:
| 特性 | TCP (Transmission Control Protocol) | UDP (User Datagram Protocol) |
|---|---|---|
| 连接性 | 面向连接(需要3次握手,4次挥手) | 无连接(直接发送) |
| 可靠性 | 可靠(保证不丢、不重、有序) | 不可靠(尽最大努力交付,可能丢包、乱序) |
| 传输模式 | 字节流(Stream,无边界) | 数据报(Datagram,有边界) |
| 速度/效率 | 较慢 (握手、ACK、重传消耗资源) | 快(无控制开销) |
| 头部开销 | 20-60 字节 | 8 字节 |
| 拥塞控制 | 有 (慢启动、拥塞避免等) | 无 (网络拥堵时依然全速发送) |
| 应用场景 | 网页(HTTP), 邮件(SMTP), 文件(FTP) | 视频直播, 语音通话(VoIP), DNS, 游戏(FPS) |
在编程实现上,两者的主要区别在于 Socket 的类型和发送/接收函数。
# Servers=socket(AF_INET,SOCK_STREAM)# SOCK_STREAM 代表 TCPs.bind((ip,port))s.listen()conn,addr=s.accept()# 阻塞等待连接data=conn.recv(1024)# 基于连接接收# Clients=socket(AF_INET,SOCK_STREAM)s.connect((ip,port))# 必须先建立连接s.send(data)# 基于连接发送# Servers=socket(AF_INET,SOCK_DGRAM)# SOCK_DGRAM 代表 UDPs.bind((ip,port))data,addr=s.recvfrom(1024)# 接收数据,同时获取发送者地址# Clients=socket(AF_INET,SOCK_DGRAM)# 不需要 connects.sendto(data,(ip,port))# 发送时指定目标地址选择建议: