UDP服务端收发流程

UDP 收发流程

一个 UDP socket 对应:

  • 一个接收缓冲区
  • 一个发送缓冲区

收消息

  1. 客户端发数据 → 网络传输
  2. 服务端内核收到
  3. 内核把数据包放进 接收缓冲区
  4. 应用程序调用 recvfrom 从里面读出来

发消息

  1. 应用程序调用 sendto 把数据交给内核
  2. 数据先进入 发送缓冲区
  3. 内核接管,从缓冲区取出,打包发往网络

  • 收:内核 → 接收缓冲区 → 应用
  • 发:应用 → 发送缓冲区 → 内核

不管多少个客户端,共用这一对缓冲区,内核负责排队,你只管读写。

多个客户端"同时发" 会不会冲突?

不会!!!

  • 操作系统内核会维护接收缓冲区
  • 客户端 1 发 → 进缓冲区
  • 客户端 2 发 → 也进缓冲区
  • 客户端 3 发 → 还进缓冲区

说明:结合前面所说,所有客户端发的消息都在同一个缓冲区里放着。

服务端 recvfrom()一个一个取的。

可以理解成:

多个客户端同时寄信,邮局不会把信搞混,服务端一封一封收。

关键:UDP 是 "无连接" 的

服务端不需要区分 "哪个客户端",

它只关心:

  • 这是谁发的(IP: 端口)
  • 发了什么内容

所以:1 个服务端 socket = 可以处理无限个客户端

这就是 UDP 高性能、适合游戏、视频、实时消息的原因。

相关推荐
ambition202423 小时前
操作系统同步:读者-写者问题与读写公平法详解(附每个 PV 操作含义)
linux·开发语言·数据结构·unix
zmzmzmalo3 小时前
Linux ELF文件加载与内存管理揭秘
linux·网络·数据库
三言老师9 小时前
K8s集群运行时自动化运维全覆盖落地实操(下)
linux·运维·服务器·网络
wuyk55510 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法
ltl10 小时前
HAProxy HTX 与 HTTP 路径:内部表示、改写落点与协议分叉
linux
ltl10 小时前
可拆分 OS:CXL 内存池化如何动摇本地 DRAM 假设
linux
ltl10 小时前
Tetragon 强制执行:Override 与 SIGKILL 各自保证什么
linux
峥无10 小时前
从0到1手撕红黑树:封装实现 my_map 与 my_set(SGI-STL 源码级深度解析)
开发语言·c++·笔记·算法·stl
波特率11520010 小时前
C++新特性---属性说明符与标准属性
开发语言·c++
lengjingzju11 小时前
编译与调试完全指南—第6章 性能分析工具
linux