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字节) |
传输速度 | 慢 | 快 |
资源需求 | 多 | 少 |
到达顺序 | 保证 | 不保证 |
流量控制 | 有 | 无 |