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.pswp.cn/diannao/92090.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/92090.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库练习3

一、建立product表,操作方式operate表要求:1.定义触发器实现在产品表(product)中每多一个产品,就在操作表(operate)中记录操作方式和时间以及编号记录。注:操作说明:标记执行delete 、insert、 update2.定义触发器实现在产品表(pr…

pycharm和anaconda安装,并配置python虚拟环境

1、pycharm和anaconda安装 PyCharm与Anaconda超详细安装配置教程_anaconda pycharm安装-CSDN博客https://blog.csdn.net/qq_32892383/article/details/116137730 2、pycharm汉化 PyCharm汉化:简单两步搞定!PyCharm怎么设置中文简体,为什么…

EP04:【Python 第一弹】函数编程

一、定义 函数指将一组语句的集合通过一个变量名封装起来,调用这个函数变量名,就可以执行函数。 二、特点 减少重复逻辑代码的编写将程序中的逻辑可以进行扩展维护项目程序的代码更简单 三、创建 def 函数名():逻辑代码1逻辑代码2return 结果 函数名…

linux安装Mysql后添加mysql的用户和密码

在 MySQL 中创建用户并设置密码的完整指南如下: 方法 1:使用 CREATE USER 语句(推荐) -- 创建新用户并设置密码 CREATE USER newuserlocalhost IDENTIFIED BY your_password;-- 授予权限(示例:授予所有数据…

React hooks——memo

一、简介React.memo 是 React 提供的一个高阶组件(Higher-Order Component),用于优化函数组件的渲染性能,它通过浅比较(shallow compare)props 的变化来决定是否重新渲染组件。1.1 基本用法const MyCompone…

leetcode15.三数之和题解:逻辑清晰带你分析

介绍 题源 分析 1.双指针固定一个数 首先明白一点,我们有三个数,我们想使用双指针,那就必须固定一个数。 2.二分 本题还涉及二分,双指针经常和二分结合使用(二分本质就是双指针,仔细思考这思考这句话&…

exports使用 package.json字段控制如何访问你的 npm 包

目录 想象一下你正在开发一个 npm 包…… 术语 什么是exports领域? exports好处 保护内部文件 多格式包 将子路径映射到dist目录 子路径导出 单一入口点 多个入口点 公开软件包文件的子集 有条件出口 设置使用条件 默认条件 句法 针对 Node.js 和浏…

AngularJS 安装使用教程

一、AngularJS 简介 AngularJS 是 Google 开发的一款前端 JavaScript 框架,采用 MVVM 架构,提供了数据双向绑定、依赖注入、模块化、路由管理等强大功能,适合构建单页面应用(SPA)。注意:AngularJS&#xf…

基于python和neo4j构建知识图谱医药问答系统

一、pyahocorasick1.安装 pyahocorasick 包: pip install pyahocorasick -i https://pypi.tuna.tsinghua.edu.cn/simple/pip install pyahocorasick :安装名为 pyahocorasick 的第三方库👉 这个库是一个 Aho-Corasick 多模匹配算法 的 Python…

片上网络(NoC)拓扑结构比较

1. 拓扑结构拓扑结构延迟吞吐量跳数功耗面积开销可扩展性容错性布线复杂度适合通信模式Mesh(网格)低(O(√N))高(多路径并行)O(√N)中高(路由器多)中高(规则布线&#xff…

git merge 命令有什么作用?具体如何使用?

回答重点git merge 命令主要用于将两个分支的历史和内容合并在一起。简而言之,它会将一个分支的更改引入到当前分支中。常见的使用场景是将功能分支(feature branch)的修改合并回主分支(main branch)或者开发分支&…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - jieba库分词简介及使用

大家好,我是java1234_小锋老师,最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程,持续更新中,计划月底更新完,感谢支持。今天讲解 jieba库分词简介及使用 视频在线地址&…

大模型的后训练与逻辑能力

《DeepSeek原生应用与智能体开发实践》【摘要 书评 试读】- 京东图书 在人工智能与机器学习领域,模型的后训练阶段不仅是技术流程中的关键环节,更是提升模型性能,尤其是数学逻辑能力的“黄金时期”。这一阶段,通过对已初步训练好…

pycharm安装教程-PyCharm2025安装步骤【MAC版】附带安装包

pycharm安装教程-PyCharm2025安装详细步骤【MAC版】安装安装包获取(文章末尾)今天来给大家分享 Mac 系统安装 PyCharm,附带安装包资源安装, PyCharm 相关就不叙述了,直接开始安装! 安装 2024版本、2025年…

【React Native】路由跳转

Link 跳转的路径,就在href里写/details。路径都是相对于app目录来写的,也就是说app目录就是/。很多时候,需要跳转的组件比较复杂。比方说,要在里面要嵌套按钮,或者其他东西。这种情况下,就可以在Link组件里…

使用 Spring Boot + AbstractRoutingDataSource 实现动态切换数据源

1. 动态切换数据源的原理AbstractRoutingDataSource 是 Spring 提供的一个抽象类,它通过实现 determineCurrentLookupKey 方法,根据上下文信息决定当前使用的数据源。核心流程如下:定义多数据源配置:注册多个数据源。实现动态数据…

Kubernetes (K8S)知识详解

Kubernetes (K8S) 是什么? Kubernetes 是 Google 在 2014 年开源的生产级别的容器编排技术(编排也可以简单理解为调度、管理),用于容器化应用的自动化部署、扩展和管理。它的前身是 Google 内部的 Borg 项目,Borg 是 …

在github上传python项目,然后在另外一台电脑下载下来后如何保障成功运行

如何在 GitHub 上传并在另一台电脑成功运行 Python 项目✅ 一、上传前(本地准备) 在你的项目文件夹中进行以下准备: 1. 确保结构清晰 my_project/ ├── main.py ├── utils.py ├── config.yaml ├── requirements.txt └── README…

详解Mysql Order by排序底层原理

MySQL 的 ORDER BY 子句实现排序是一个涉及查询优化、内存管理和磁盘 I/O 的复杂过程。其核心目标是高效地将结果集按照指定列和顺序排列。一、确定排序模式 (Sort Mode)MySQL 根据查询特性和系统变量决定采用哪种排序策略&#xff1a;1.1 Rowid 排序<sort_key, rowid> 模…

SpringBoot的介绍和项目搭建

SpringBoot是简化Spring应用开发的一个框架&#xff0c;他是Spring技术栈的整合。优点&#xff1a;能够快速创建独立运行的Spring项目以及与主流框架集成使用嵌入式的Servlet容器&#xff0c;应用无需打成war包&#xff0c;内嵌tomcatStarters自动依赖和版本控制大量的自动装配…