当前位置: 首页 > 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.lryc.cn/news/593938.html

相关文章:

  • RabbitMQ核心组件浅析:从Producer到Consumer
  • 30个常用的Linux命令汇总和实战场景示例
  • 使用 Pyecharts 绘制精美饼状图:从基础到高级技巧
  • nginx定期清理日志
  • Node.js:函数、路由、全局对象
  • 数据并表技术全面指南:从基础JOIN到分布式数据融合
  • 分布式文件系统04-DataNode海量数据分布式高可靠存储
  • ZooKeeper学习专栏(一):分布式协调的核心基石
  • 【橘子分布式】gRPC(编程篇-下)
  • C++STL系列之list
  • ABP VNext + Grafana Loki:集中式日志聚合
  • 【Django】DRF API版本和解析器
  • Kubernetes (K8S)知识详解
  • 基于bert-lstm对微博评论的情感分析系统设计与实现
  • JVM-Java
  • Web服务压力测试工具hey学习一:使用方法
  • Django ORM系统
  • PyQt5—QColorDialog 学习笔记
  • 7-20 关于mysql
  • 【企业架构】TOGAF概念之一
  • 基于SHAP的特征重要性排序与分布式影响力可视化分析
  • Shell脚本-cut工具
  • 零基础学习性能测试第一章-理解程序运行原理,需要什么资源
  • 第十四届全国大学生数学竞赛初赛试题(非数学专业类)
  • CSS 单位完全指南:掌握 em、rem、vh、vw 等响应式布局核心单位
  • gradle微服务依赖模版
  • PHPStorm携手ThinkPHP8:开启高效开发之旅
  • 用 Jetpack Compose 写 Android 的 “Hello World”
  • RCE随笔(1)
  • RK3588 安卓adb操作