i春秋作家:wasrehpic
0x00 前言
在上一篇文章「Python 绝技 —— TCP 服务器与客户端」中,介绍了传输层的核心协议 TCP ,并运用 Python 脚本的 socket 模块演示了 TCP 服务器与客户端的通信过程。
本篇将按照同样的套路,先介绍传输层的另一个核心协议 UDP,再比较 TCP 与 UDP 的特点,最后借助 Python 脚本演示 UDP 服务器与客户端的通信过程。
0x01 UDP 协议
UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠、基于数据报的传输层通信协议。
- UDP 的通信过程与 TCP 相比较为简单,不需要复杂的三次握手与四次挥手,体现了无连接;
- UDP 传输速度比 TCP 快,但容易丢包、数据到达顺序无保证、缺乏拥塞控制、秉承尽最大努力交付的原则,体现了不可靠;
- UDP 的无连接与不可靠特性注定无法采用字节流的通信模式,由协议名中的「Datagram」与 socket 类型中的「SOCK_DGRAM」即可体现它基于数据报的通信模式。
为了更直观地比较 TCP 与 UDP 的异同,笔者将其整理成以下表格:
| TCP | UDP | |
|---|---|---|
| 连接模式 | 面向连接(单点通信) | 无连接(多点通信) |
| 传输可靠性 | 可靠 | 不可靠 |
| 通信模式 | 基于字节流 | 基于数据报 |
| 报头结构 | 复杂(至少20字节) | 简单(8字节) |
| 传输速度 | 慢 | 快 |
| 资源需求 | 多 | 少 |
| 到达顺序 | 保证 | 不保证 |
| 流量控制 | 有 | 无 |

本文深入探讨了 UDP 协议及其与 TCP 的区别,并通过 Python 实例展示了如何创建 UDP 服务器和客户端。内容涵盖 UDP 的无连接、不可靠特性,以及 Python 中的 socket 模块相关 API 使用,包括 bind(), sendto(), recvfrom() 和 close() 函数。通过实例,演示了 UDP 服务器如何处理多客户端通信,展示了 UDP 在进程间通信的简易流程。"
111930470,10539155,Flutter Dio网络请求与拦截器实战教程,"['flutter开发', 'dio库', '网络请求库', '数据拦截', '请求封装']
1789

被折叠的 条评论
为什么被折叠?



