基本概念之局域网发现之UDP组播

局域网发现设备是通信的第一步,通信需要先知道对方的ip地址,因为一般使用 DHCP 动态分配 ip 地址的局域网内,各个主机的 IP 地址是由 DHCP 服务器来帮你分配 IP 地址的。所以在很多情况下,你要知道对方的 IP 地址是比较麻烦的。

因此,局域网发现,我们要解决的事情就是:如何找到局域网内其他设备,并获取到设备的ip;

查询资料之后,发现使用udp单播、组播、广播来实现的方式都有,并且亲测确实都可行,那么哪种更合适呢,这也是我写这篇的目的,让大家对这些有个基本概念和对比;

使用哪种协议实现
udp 不用保证数据可靠性,传输速度快;并且一般tcp是不用于多播场景的;那使用udp如何实现呢?

使用udp 单播组播还是广播
先来了解什么是单播和组播、广播

单播

只有一个源点网络和一个终点网络。源点网络和终点网络的关系是一对一的。数据报途径的每一个路由器都要将这个分组仅从一个接口转发出去。
图例:
在这里插入图片描述

多播

在多播系统中,有一个源点一组终点。这是一对多的关系。在这种类型的通信中,源地址是一个单播地址,而目的地址则是一个组地址。
图例:
在这里插入图片描述

单播和组播、广播的区别

多播的优点

q 具有同种业务的主机加入同一数据流,共享同一通道,节省了带宽和服务器的优点,具有广播的优点而又没有广播所需要的带宽。
q 服务器的总带宽不受客户端带宽的限制。由于组播协议由接收者的需求来确定是否进行数据流的转发,所以服务器端的带宽是常量,与客户端的数量无关。
q 与单播一样,多播是允许在广域网即Internet上进行传输的,而广播仅仅在同一局域网上才能进行。

广播的缺点

q 多播与单播相比没有纠错机制,当发生错误的时候难以弥补,但是可以在应用层来实现此种功能。
q 多播的网络支持存在缺陷,需要路由器及网络协议栈的支持。
多播的应用主要有网上视频、网上会议等。

组播与广播

广播数据报的接收是被动的。
连接到子网上的所有主机都要接收广播数据报,这会增加网络流量,并且子网上的主机增加额外的负担。
UDP广播只能在内网(同一网段)有效,而组播可以较好实现跨网段群发数据。
UDP广播:消耗更多网络带宽,路由器向子网内的每个终端都投递一份数据包,不论这些终端是否乐于接收该数据包;
UDP组播:有了很大优化,只有终端加入到了一个广播组,UDP组播的数据才能被他接收到;
多播数据报的接收是主动的。主机主动加入指定的多播组,才会接收该组的多播数据报。
不同子网内的A,B进行组播通信,依靠IGMP协议;局域网组播,不考虑跨网段的组播实现,因此组播路由协议IGMP与本文要介绍的内容无关

局域网的多播

多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0至239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:
q 局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。
q 预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。
q 管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

初步结论

局域网发现可以使用:
1.udp单播,获取源主机的ip和子网掩码,得到该局域网的ip地址范围,然后使用udp单播轮询 找到对应的目标主机;

2.udp组播,让源主机和目标主机都加到同一个局部多播地址;源主机给该多播地址发送组播消息即可;

3.udp广播,使用广播地址255.255.255.255 来广播定制好的消息;

综合考虑:udp单播轮询比较耗时,而且如果局域网内设备较多,UDP发送过快的话,会导致本地发送缓冲区丢包;接收过慢的话,也会导致接收缓冲丢包;单播和广播一样,对于不需要关心该消息的主机是一种打扰;
因此,使用udp组播来实现局域网发现比使用udp广播更合适;并且我之后会学习mdns和dns-sd,而这两种都是基于udp组播,所以用组播来实现对于后面的深入研究更有意义;
现在,我们来实现一个最简单的局域网发现的demo;具体实现请看下一篇

--------------------- 作者:笑一笑没什么大不了 来源:CSDN 原文:https://blog.csdn.net/lixin88/article/details/55209630?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值