UDP服务端收发流程

UDP 收发流程

一个 UDP socket 对应:

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

收消息

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

发消息

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

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

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

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

不会!!!

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

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

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

可以理解成:

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

关键:UDP 是 "无连接" 的

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

它只关心:

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

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

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

相关推荐
方便面不加香菜19 小时前
Linux--基础IO(一)
linux·运维·服务器
mounter6251 天前
现代 Linux 内存管理的演进与变革:从传统 LRU 到多代架构 MGLRU
linux·服务器·kernel
赵渝强老师1 天前
【赵渝强老师】Kubernetes(K8s)中的金丝雀升级
linux·docker·云原生·容器·kubernetes
Qt程序员1 天前
Linux RCU 原理与应用
linux·c++·内核·linux内核·rcu
The Sheep 20231 天前
Vue复习
linux·服务器·数据库
qeen871 天前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
兄台の请冷静1 天前
Linux 安装es
linux·elasticsearch·jenkins
fengyehongWorld1 天前
Linux rg命令
linux
pride.li1 天前
海思视觉Hi3516CV610--开机自动设置ip
linux·网络·网络协议·tcp/ip
我叫张小白。1 天前
CentOS 7 安装 Docker并配置镜像加速(完整指南)
linux·docker·centos