当前位置: 首页 > news >正文

UDP中的单播,多播,广播

文章目录

    • UDP 简单回顾
  • 一、单播(Unicast)
      • 定义
      • 特点
      • 应用
      • 举例
  • 二、广播(Broadcast)
      • 定义
      • 特点
      • 应用
  • 三、多播(Multicast)
      • 定义
      • 特点
      • 应用
  • UDP 单播、广播、多播的对比总结
  • 额外说明
  • 代码简要示例(C)



UDP 简单回顾

UDP(User Datagram Protocol,用户数据报协议)是一种无连接、不可靠的传输层协议,特点是:

  • 面向报文,报文界限清晰
  • 无连接,不保证数据送达、不保证顺序
  • 发送简单,开销低,适合实时或广播类应用

一、单播(Unicast)

定义

  • 单播是最常见的通信方式,一对一通信。
  • 发送方发送数据包到某个唯一的目标 IP 地址和端口。
  • 收发双方地址都是单个的。

特点

  • 定向通信,点对点。
  • 网络中每个主机都有唯一的单播 IP 地址。
  • 发送的数据只被目标主机接收。

应用

  • 普通客户端-服务器通信,如客户端请求服务器数据。
  • 设备间点对点通信。

举例

  • 192.168.1.10 给 192.168.1.20 发送 UDP 数据。

二、广播(Broadcast)

定义

  • 广播是单个主机向同一子网内的所有主机发送数据。
  • 发送方发送到广播地址(如 IPv4 的 192.168.1.255)。
  • 同一网段内的所有主机都能收到。

特点

  • 一对多,局域网内有效。
  • 不穿越路由器(路由器默认不转发广播包,除非配置特殊路由)。
  • 网络负载较大时可能导致“广播风暴”。

应用

  • 局域网内服务发现(DHCP、NetBIOS 等)。
  • 简单的组网信息广播。

三、多播(Multicast)

定义

  • 多播是一对多,但只发送给加入了指定多播组的主机。
  • 通过多播 IP 地址(IPv4 范围:224.0.0.0 到 239.255.255.255)。
  • 主机通过 IGMP 协议加入或离开多播组。

特点

  • 只发一次,网络中只有加入多播组的主机接收。
  • 多播可跨子网,路由器支持多播路由转发。
  • 节省带宽和网络资源,适合多点通信。

应用

  • IPTV 视频直播。
  • 实时股票行情推送。
  • 大规模在线会议、游戏。

UDP 单播、广播、多播的对比总结

通信方式发送目标目标地址类型通信范围发送次数网络开销应用场景
单播单个主机单播地址任意每个目标一次最低点对点通信
广播同一子网所有主机广播地址(如 192.168.1.255)局域网内一次局域网服务发现
多播加入指定多播组的多个主机多播地址(224.0.0.0-239.255.255.255)跨子网,多播路由支持一次适中多点分发、视频直播

额外说明

  • IPv6 没有广播,只有单播和多播。
  • 多播需要网络设备(路由器、交换机)支持 IGMP/MLD 协议。
  • UDP 多播发送方只需要把数据发给多播地址和端口,网络层和主机自动处理转发和接收。

代码简要示例(C)

// 单播发送示例(发送到指定 IP 和端口)
sendto(sock, buf, len, 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));// 广播发送示例(需要设置套接字选项 SO_BROADCAST)
int broadcastEnable = 1;
setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
sendto(sock, buf, len, 0, (struct sockaddr*)&broadcast_addr, sizeof(broadcast_addr));// 多播加入组播组(接收方示例)
struct ip_mreq mreq;
mreq.imr_multiaddr.s_addr = inet_addr("239.255.0.1");
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));

如果你需要,我可以帮你写更详细的多播使用示例,或者讲解多播组管理和路由原理。需要吗?

http://www.dtcms.com/a/288601.html

相关文章:

  • 【RAG Agent】Deep Searcher实现逻辑解析
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(CharacterController方式)
  • 【STM32实践篇】:串口通信
  • Qwen3-8B 的 TTFT 性能分析:16K 与 32K 输入 Prompt 的推算公式与底层原理详解
  • 吴恩达机器学习笔记(3)—线性代数回顾(可选)
  • 【Django】DRF API版本和解析器
  • HTML Style 对象深度解析:从基础到高级应用
  • 上电复位断言的自动化
  • 【数据结构】双向循环链表的实现
  • 18.TaskExecutor获取ResourceManagerGateway
  • 【MySQL】索引中的页以及索引的分类
  • 【Nature Communications】GaN外延层中位错辅助的电子和空穴输运
  • PHPStorm携手ThinkPHP8:开启高效开发之旅
  • selenium4 web自动化测试
  • pip关于缓存的用法
  • minizinc学习记录
  • 如何优雅解决缓存与数据库的数据一致性问题?
  • Docker实践:使用Docker部署WhoDB开源轻量级数据库管理工具
  • 飞船躲避陨石小游戏流量主微信抖音小程序开源
  • 【ESP32设备通信】-使用Modbus RTU读取传感器数据
  • 嵌入式硬件篇---按键
  • 嵌入式硬件篇---机械臂运动学解算(3自由度)
  • CentOS 服务器docker pull 拉取失败
  • 在vue中遇到Uncaught TypeError: Assignment to constant variable(常亮无法修改)
  • 后台管理系统登录模块(双token的实现思路)
  • 音视频学习(四十一):H264帧内压缩技术
  • 通俗易懂神经网络:从基础到实现
  • 【JavaFX国产化适配】快捷键注册(检测快捷键冲突、注册事件)
  • Syncthing实时共享同步数据 服务器数据备份软件(linux、windows)
  • 全面解析MySQL(2)——CRUD基础