日常的网络编程中,不管是TCP还是UDP,应用程序主要是基于单播,即点对点通信,对组播和广播涉及的相对少。这里先用通俗的例子解析一下这三者的区别:
单播:有具体目标地址的帧从源到达目标地址的过程。比如你对张三喊“张三”,哪么只有张三答应你.
多播(组播):帧送往定义在一组内的地址。比如你喊:姓张的请举手,那么只有姓张才会举手回应你,其他不姓张的人,就不会举手。
广播:把帧发往所有能到达的地址。比如你在学校的广播中喊“今天放假”。哪么全校的同学都能听到,然后欢呼。
特别注意:组播和广播是通过UDP实现的,TCP不支持组播和广播
组播地址范围
组播通信必须依赖于IP多播地址,在IPv4中它是一个D类IP地址,范围从 224.0.0.0到239.255.255.255,并被划分为局部链接多播地址、预留多播地址和管理权限多播地址三类:
局部链接多播地址范围在 224.0.0.0~224.0.0.255,这是为路由协议和其它用途保留的地址,路由器并不转发属于此范围的IP包;
预留多播地址为 224.0.1.0~238.255.255.255,可用于全球范围(如Internet)或网络协议;
管理权限多播地址为 239.0.0.0~239.255.255.255,可供组织内部使用,类似于私有 IP 地址,不能用于 Internet,可限制多播范围。
我们一般使用224.0.0.0~224.0.0.255范围作为组播地址,比如mDNS协议,就使用224.0.0.251固定地址。
单播
每次只有两个实体相互通信,发送端和接收端都是唯一确定的。
广播
- 主机之间的一对多的通信
- 所有的主机都可以接收到广播消息(不管你是否需要)
- 广播禁止穿过路由器(只能做局域网通信)
- 只有UDP可以广播
- 广播地址 有效网络号+全是1的主机号
- 192.168.50.123 -----》 192.168.50.255
- 255.255.255.255 给所有的网段中的所有主机发送广播,也是只能做局域网通信
- 需要相同端口
一.广播 (UDP协议)
广播地址: 主机号最大的地址;
以192.168.1.0 (255.255.255.0) 网段为例,最大的主机地址192.168.1.255代表该网段的广播地址
前面介绍的数据包发送方式只有一个接受方,称为单播
如果同时发给局域网中的所有主机,称为广播
(同一局域网内的主机都会接收到,如果其他主机没有加入广播站,就会将消息丢弃)
只有用户数据报(使用UDP协议)套接字才能广播
一般被设计为局域网搜索协议
广播的发送者:
广播发送端创建流程
1)广播的发送端流程 ---》类似于UDP的客户端socket 创建套接字
setsockopt 设置允许广播,默认是不允许的
填充接收方的结构体,给sendto使用,指定发送给谁
a。IP (192.168.50.255/255.255.255.255)b。端口号
sendto 发送数据
广播的接收者:(不需要设置为广播态)
广播接收端创建流程
2)广播的接收端流程 -----》类似于UDP服务器socket 创建套接字
填充结构体,
ip:广播ip;
0.0.0.0(将本机所有可用的IP都绑定到套接字上:192.168.50.58,127.0.0.1(本地回环))(本地回环地址给自己发送,本地自测,不走网卡)
端口号,一台主机只能打开一个服务器只用同一个端口号
bind
recv
广播的缺点:
广播方式发给所有的主机,过多的广播会大量的占用网络带宽,造成广播风暴,影响正常的通信;
组播
广播是给网段内的所有机器发消息 占用网络带宽,影响正常通信
单播是一对一的
主机之间一对一组的通信模式,也就是说只要加入了同一个小组,那就可以收到发送端的消息
组播地址:D类的224.0.0.1~~239.255.255.255
224.10.10.10(相当于组名)
。单播方式只能发给一个接收方
。 组播是一个人发送,加入到多播组的主机接收数据
。 多播方式既可以发给多个主机,又能避免像广播一样造成过多的负载:
第一字节的前四位固定为 1110
D类IP : 224.0.0.1 - 239.255.255.255
224.10.10.10
socket 创建套接字
填充结构体,给sendto函数使用,指定接收方
IP:组播ip(224.0.0.0~~239.255.255.255)
PORT:与接收方绑定的一致
sendto 发送数据
代码
广播接收端
广播发送端
组播发送端
组播接收端
到此这篇udp广播和组播区别(udp广播和单播)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/bcyy/59548.html