广播、组播和子网

广播,就是指同时向子网中的多台计算机发送消息,并且所有子网中的计算机都可以接收到发送方发来的消息。每个广播消息包含一个特殊的IP地址。

广播消息地址分为两种类型:本地广播和全球广播

通过本地广播向子网中的所有计算机发送广播消息时,其他网络不会受到本地广播的影响。我们知道IP地址分为两部分,网络地址和主机地址,标准网络地址部分组成了本地网络地址的第一部分,字节地址中全部为1的部分用于主机地址部分(即十进制的255)。

例如,对于B类网络192.168.0.0,使用子网掩码255.255.0.0,(此IP地址的网络号为192.168,主机号为0.0,子网掩码全为1的对应的IP地址的网络号)则本地广播地址是192.168.255.255,用二进制表示为11000000101010001111111111111111。其中前两个字节为网络地址,后两个字节为主机地址。

仍以192.168.0.0为例,如果子网掩码为255.255.255.0,则本地广播地址是192.168.0.255192.168.0为网络地址,255代表192.168.0子网中的主机地址。

    全球广播使用四个字节所有位全为1IP地址,即点分十进制的255.255.255.255,这个特定的广播地址表明数据报的目的地是网络上的所有设备。但是由于路由器会自动过滤掉全球广播,所以使用这个地址没有实际意义。

子网划分

子网划分是为了解决网络IP不够用的情况,

它的实质其实就是,在A,B,或者C类中把原先分配给它的主机号位数拿出若干个位来作网络号这样就可以缓解网络IP不够用的情况了

一个子网192.168.15.0,要划分成三个子网,其中一个子网有100台,另两个分别是60、48台。

三个子网,故最多向主机号借两位,子网可分为四个(00,01,10,11) ,平均下来每个子网为2^6-2=62台,因第一个子网要求100台,故子网00,01被分成一个

一个子网100台,故需要二进制至少需要7位主机号,因为默认的子网掩码为255.255.255.0,故此时的子网掩码为255.255.255.128,IP地址为192.168.15.1~192.168.15.127

一个子网60台.故需要二进制至少需要6位主机号,因为默认的子网掩码为255.255.255.0,故此时的子网掩码为255.255.255.192 .IP地址为192.168.15.129~192.168.15.190

一个子网48台.故需要二进制至少需要6位主机号,因为默认的子网掩码为255.255.255.0,故此时的子网掩码为255.255.255.192 .IP地址为192.168.15.192~192.168.15.254

组播

    广播的通信模式虽然能够实现一对多的通信需要,但是,由于广播是向子网中的所有计算机用户发送消息,没有目的性,不但增加了网络传输负担,而且资源消耗较高。组播的出现,较好地解决了这个问题。组播也叫多路广播。所谓组播是将消息从一台计算机发送到本网或全网内选择的计算机子集上,即发送到那些加入指定组播组的计算机上。组播组是开放的,每台计算机都可以通过程序随时加入到组播组中,也可以随时离开。

 组播组是分享一个组播地址的一组设备。与IP广播类似,IP组播使用特殊的IP地址范围来表示不同的组播组。组播地址(1110开头的D类地址)是范围在224.0.0.0239.255.255.255DIP地址。任何发送到组播地址的消息都会被发送到组内的所有成员设备上。组可以是永久的,也可以是临时的。大多数组播组是临时的,仅在有成员的时候才存在。用户创建一个新的组播组时只需从地址范围内选出一个地址,然后为这个地址构造一个对象,就可以开始发送消息了。

    使用组播时,应注意的是TTL(生存周期Time To Live)值的设置。TTL值是允许路由器转发的最大数目,当达到这个最大值时,数据包就会被丢弃。如果使用默认值(默认值为1),则只能在子网中发送。可以通过UdpClient对象的Ttl属性直接设置TTL值,例如:

UdpClient myUdpClient = new UdpClient();

myUdpClient.Ttl = 50;

该语句设置TTL值为50,即最多允许50次路由器转发。

UdpClient类中,使用JoinMulticastGroup方法将UdpClient对象和TTL一起加入组播组,使用DropMulticastGroup退出组播组。例如:

//创建UdpClient的实例并设置使用的本地端口号

UdpClient udpClient=new UdpClient(8001);

udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"));

或者:

UdpClient udpClient=new UdpClient(8001);

udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);

其中50TTL值。

组播IP地址到MAC地址的映射

d类地址是从224.0.0.0到239.255.255.255之间的IP地址

其中224.0.0.0到224.0.0.255是被保留的地址

224.0.0.1表示子网中所有的组播组

224.0.0.2表示子网中所有的路由器

224.0.0.5表示OSPF路由器

224.0.0.6表示OSPF指定路由器

224.0.0.12表示DHCP服务器

2层的MAC地址是如何与3层的IP地址进行映射的咧?

通过将MAC地址的前25位强行规定为0100.5e,而后23位对应IP地址的后23位,而组播IP地址的前4位均相同,如

IP地址:   1110yyyy.yxxxxxxx.xxxxxxxx.xxxxxxxx

MAC地址: 00000001.00000000.01011110.0xxxxxxx.xxxxxxxx.xxxxxxxx

后面是相同的

 

转载于:https://www.cnblogs.com/fujinliang/archive/2012/06/24/2560589.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于UDP组播的一些认识<br><br> 利用UDP组播能在intarnet,internet上也数据报的形式进行数据的组播(在internet上进行组播,要求路由器支持IGMP(internet网关管理协议,这个协议是在IP出现以后,为了支持组播而出现的)).相对于极度消耗网络带宽的广播来说(广播只能在intranet内广播),UDP组播有了很大的优化,只有终端加入到了一个广播组,UDP组播的数据才能被他接受到.<br> UDP组播是采用的无连接,数据报的连接方式,所以是不可靠的.也就是数据能不能到达接受端和数据到达的顺序都是不能保证的.但是由于UDP不用保证数据的可靠性,所有数据的传送速度是很快的.<br><br>1. 组播的“根”<br> 组播从概念上来讲分为两部分:控制部分和数据部分。控制部分决定着组播的对象的组织方式。而数据部分决定了数据的传输方式。<br> 控制层有“有根”,“无根”两种情况。对于有根的控制层,存在着一个root和若干个leaf. root负责管理这个组播组,只有他能邀请一个leaf加入一个组播组(ATM就是有根控制的一个典型的例子)。对于无根的控制层,没有root,只有若干的leaf. 每一个leaf都能自己加入一个组播组(IP就是无根控制的典型例子)<br> 数据层也有“有根”,“无根”两种情况。对于有根数据层,从root发出的数据能到达每一个leaf,而从leaf发出的数据只能到达root.对于无根数据层,每一个leaf发出的数据能到达组播组中的每一个leaf(甚至包括他自己)。每一个leaf也能接受组播组里的任何数据包。<br><br><br>二.IP组播地址<br> IP组播通信需要一个特殊的组播地址.IP组播地址是一组D类IP地址,范围从224.0.0.0 到 239.255.255.255。其中还有很多地址是为特殊的目的保留的。224.0.0.0到224.0.0.255的地址最好不要用,因为他们大多是为了特殊的目的保持的(比如IGMP协议)<br><br>三.IGMP协议<br> IGMP(internet网关管理协议)是IP组播的基础.在IP协议出现以后,为了加入对组播的支持,IGMP产生了。IGMP所做的实际上就是告诉路由器,在这个路由器所在的子网内有人对发送到某一个组播组的数据感兴趣,这样当这个组播组的数据到达后面,路由器就不会抛弃它,而是把他转送给所有感兴趣的客户。假如不同子网内的A,B要进行组播通信,那么,位与A,B之间的所有路由器必须都要支持IGMP协议,否则A,B之间不能进行通信。<br> 当一个应用加入一个组播组后,就会向这个子网的所有路由器发送一个IGMP加入命令,告诉他子网内有人对发送到某一个组播组的数据感兴趣.路由器也会定时向子网内的所有终端发送一条查询消息,用于询问是否还有人对某个组播组的数据感兴趣。如果有的话,终端就会回应一条IGMP消息,路由器则继续转发这个组播组的数据。如果没有人回应这条消息,那么路由器就认为已经没有终端对这个组播组的数据感兴趣,就不会在转发关于这个组播组的数据了。在IGMP第二版中,一个终端推出组播组以后,会向路由器发送一个推出消息,路由器也会通过这个消息来判断是否还要继续转发关于这个组播组的数据了(IGMP第一版中没有这个功能)[这些事情都是底层的系统做的,你只要坐享其成就好了]<br><br> <br><br>四. winsock 1组播<br> winsock 1的组播主要有以下几个步骤:<br>1. 建立支持数据报的scoket<br>2. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)<br>3. 通过setsockopt IP_ADD_MEMBERSHIP加入一个组播组<br>4. 然后就能通过sendto / recvfrom进行数据的收法<br>5. 通过 setsockopt IP_DROP_MEMBERSHIP离开一个组播组<br>6. 关闭socket<br><br>如果你仅仅是想向一个组播组发送数据,而不要接受数据,那么可不用加入组播组,而直接通过sendto向组播组发送数据<br><br><br>五.winsock 2组播<br> winsock 2组播主要是通过WSAJoinLeaf来实现的(WSAJoinLeaf的行为,返回值根据socket的模式,组播的实现构架有很大的关系)<br> winsock 2组播的主要有以下几个步骤<br>1. 建立支持数据报的socket(用WSASocket建立socket,同2. 时设置组播的一些属性)<br>3. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)<br>4. 通过WSAJoinLeaf加入一个组播组<br>5. 通过sendto / recvfrom进行数据的收发<br>6. 直接关闭socket,<br><br>7. 退出组播组<br>
数字IP网络广播系统方案 背景音乐 远程广播 网络会议 网络通信 第一部分:系统方案介绍 1. 产品简介: IPAudio 技术介绍: 数字音频的桥梁,IPAudio将模拟音频信号数字编码,通过网络传输后,再由终端解 码成音频信号。可多路、双向传输,局域网内延迟时间仅为数十毫秒,幷具有自动流量 调整、声音修补功能。符合标准IP协议(IP属于TCP/IP中的协议,有统一的数据包格式, 以消除各通信子网的差异),经过路由器也能实现音频传输, 是世界上先进的网络音频传输技术之一。IPAudio 可实现与其他以太网络的无缝兼容, 并创造性的将广播的传播范围通过网络扩大到了世界的每一个角落。 系统介绍: IP网络广播系统采用IP Audio音频处理技术, 将音频信号以标准IP包形式在局域网和广域网上进行传送,是一套纯数字传输的双向音 频扩声系统。彻底解决了传统广播系统存在的音质不佳,维护管理复杂,缺乏互动性等 问题。该系统设备使用简单,安装扩展方便,只需将音频终端接入计算机网络即可构成 功能强大的数字化广播系统,每个接入点无需单独布线,真正实现计算机网络、数字视 频监控、公共广播的多网合一。 IP网络广播系统是完全不同于传统广播系统、调频寻址广播系统和数控广播系统的产 品。因建立在通用网络平台上,并融入自有知识产权的数字音频技术,多方面体现了显 著的优越性: 稳定性方面:针对服务器的WINDOWS系统稳定性差,易受病毒和黑客的侵害等问题,业 界首创由计算机和嵌入式IP网络主控机组成双主控系统,两者可同时协调管理,也可以 独立运行,如一方故障,另一方可接管所有终端,嵌入式IP网络主控机可屏蔽目前已知 的所有电脑病毒的入侵,传送数据不受网络上病毒的干扰,完全消除病毒、黑客所可能 给广播系统所带来的影响。 功能方面:可独立控制每个终端播放不同的内容(如:局域网内300个终端同时播放 300路节目)。不仅能够完全实现传统广播系统的功能(如:定时打铃、分区播放、消防 报警等),而且还具备终端自由点播、终端间双向对讲等功能; 传输方面:音频传输距离无限延伸,可运行在跨网关的局域网和Internet网上,支持 大范围的重要型应用,从主校区到分校区集中控制广播,从公司总部到各个地区分部的 同声广播,实现快速、可靠的信息沟通; 音质方面:终端输出音质接近CD级(44.1K, 16bit), 满足对声音质量要求较高的场合,如高考、大学四六级考试听力播放,及教室里的日常 外语听力训练,每个发音都可以清晰可辨,不再为含混不清的声音所困扰; 产品应用范围: 学校 高速公路 宾馆大厦 商业连锁店 大中型企业 2、功能介绍 涵盖传统广播系统所有功能 包括自动打铃、音乐播放、领导讲话、播送通知和转播电台节目等 系统基于IP网络,遵循TCP/IP协议 一线多用,充分利用网络资源,避免重复架设线路,有以太网接口的地方就可以接数 字广播终端,真正实现广播、计算机网络的多网合一。 任意选择寻呼 通过IP网络寻呼话筒或网上的任意一台计算机,能指定全部、局部或单个终端,实现 广播寻呼。工作站软件还支持跨越Internet的远程寻呼。 自由点播 操作人员通过遥控器控制每台数字广播终端,完成对音频服务器中广播节目的任意点 播。操作简单方便。 实时采播 将外接音频(卡座、CD、收音机、话筒等)接入音频服务器实时压缩成高音质数据流 ,并通过网络发送广播数据,安装在不同位置的数字广播终端可实时接收并通过自带音 箱进行播放。 双向对讲 寻呼话筒与终端之间,终端与终端之间可以实现双向对讲功能。用于日常联络和应急 通讯。(注:部分型号终端支持对讲,客户可根据需要自由选择) 定时播音 数字广播终端具有独立IP地址,可以单独接收服务器的个性化定时播放节目。广播管 理员可将需要使用的节目资源存储在服务器硬盘上,并使用专门软件编制播放计划,系 统将按任务计划实现全自动播出。 多路分区播音 系统可设定任意多个组播放制定的音频节目,或对任意指定的区域进行广播讲话;服 务软件可远程控制每台终端的播放内容(划定区域播放)和音量等。 音频扩音 数字广播终端提供音频输入功能。在没有广播信号的时候,其他模拟节目源的音频输 出可接入语音终端,经扩音播出。终端可以根据语音信号的有无,自动切换功放音箱的 电源。 紧急消防广播 系统可接入消防报警信号,实现消防联动,并支持邻层报警。终端带强切功能,可控 制三线制音控器。 音频素材制作 实现数字素材的录制、转换和剪辑。系统服务器可存储数千小时以上的音乐节目。 其他辅助功能 节目监听,可设任意终端作为监听器,监听其他终端的节目广播内容。 3、传统广播系统存在的问题 技术落后,兼容性、扩展性不佳 现有公共广播系统基本都是采用模拟传输,人工管理的工作方式,系统易受环境干扰 ,多路广播
去掉了下载分限制对于UDP组播的一些认识 利用UDP组播能在intarnet,internet上也数据报的形式进行数据的组播(在internet上进行组播,要求路由器支持IGMP(internet网关管理协议,这个协议是在IP出现以后,为了支持组播而出现的)).相对于极度消耗网络带宽的广播来说(广播只能在intranet内广播),UDP组播有了很大的优化,只有终端加入到了一个广播组,UDP组播的数据才能被他接受到. UDP组播是采用的无连接,数据报的连接方式,所以是不可靠的.也就是数据能不能到达接受端和数据到达的顺序都是不能保证的.但是由于UDP不用保证数据的可靠性,所有数据的传送速度是很快的.1. 组播的“根” 组播从概念上来讲分为两部分:控制部分和数据部分。控制部分决定着组播的对象的组织方式。而数据部分决定了数据的传输方式。 控制层有“有根”,“无根”两种情况。对于有根的控制层,存在着一个root和若干个leaf. root负责管理这个组播组,只有他能邀请一个leaf加入一个组播组(ATM就是有根控制的一个典型的例子)。对于无根的控制层,没有root,只有若干的leaf. 每一个leaf都能自己加入一个组播组(IP就是无根控制的典型例子) 数据层也有“有根”,“无根”两种情况。对于有根数据层,从root发出的数据能到达每一个leaf,而从leaf发出的数据只能到达root.对于无根数据层,每一个leaf发出的数据能到达组播组中的每一个leaf(甚至包括他自己)。每一个leaf也能接受组播组里的任何数据包。二.IP组播地址 IP组播通信需要一个特殊的组播地址.IP组播地址是一组D类IP地址,范围从224.0.0.0 到 239.255.255.255。其中还有很多地址是为特殊的目的保留的。224.0.0.0到224.0.0.255的地址最好不要用,因为他们大多是为了特殊的目的保持的(比如IGMP协议)三.IGMP协议 IGMP(internet网关管理协议)是IP组播的基础.在IP协议出现以后,为了加入对组播的支持,IGMP产生了。IGMP所做的实际上就是告诉路由器,在这个路由器所在的子网内有人对发送到某一个组播组的数据感兴趣,这样当这个组播组的数据到达后面,路由器就不会抛弃它,而是把他转送给所有感兴趣的客户。假如不同子网内的A,B要进行组播通信,那么,位与A,B之间的所有路由器必须都要支持IGMP协议,否则A,B之间不能进行通信。 当一个应用加入一个组播组后,就会向这个子网的所有路由器发送一个IGMP加入命令,告诉他子网内有人对发送到某一个组播组的数据感兴趣.路由器也会定时向子网内的所有终端发送一条查询消息,用于询问是否还有人对某个组播组的数据感兴趣。如果有的话,终端就会回应一条IGMP消息,路由器则继续转发这个组播组的数据。如果没有人回应这条消息,那么路由器就认为已经没有终端对这个组播组的数据感兴趣,就不会在转发关于这个组播组的数据了。在IGMP第二版中,一个终端推出组播组以后,会向路由器发送一个推出消息,路由器也会通过这个消息来判断是否还要继续转发关于这个组播组的数据了(IGMP第一版中没有这个功能)[这些事情都是底层的系统做的,你只要坐享其成就好了] 四. winsock 1组播 winsock 1的组播主要有以下几个步骤:1. 建立支持数据报的scoket2. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)3. 通过setsockopt IP_ADD_MEMBERSHIP加入一个组播组4. 然后就能通过sendto / recvfrom进行数据的收法5. 通过 setsockopt IP_DROP_MEMBERSHIP离开一个组播组6. 关闭socket如果你仅仅是想向一个组播组发送数据,而不要接受数据,那么可不用加入组播组,而直接通过sendto向组播组发送数据五.winsock 2组播 winsock 2组播主要是通过WSAJoinLeaf来实现的(WSAJoinLeaf的行为,返回值根据socket的模式,组播的实现构架有很大的关系) winsock 2组播的主要有以下几个步骤1. 建立支持数据报的socket(用WSASocket建立socket,同2. 时设置组播的一些属性)3. 把socket和本地的一个端口绑定(以后会通过这个端口进行数据的收发)4. 通过WSAJoinLeaf加入一个组播组5. 通过sendto / recvfrom进行数据的收发6. 直接关闭socket,7. 退出组播
在C#中,你可以使用UDP协议进行单播、多播和广播通信。下面是一些基本概念和代码示例: 1. 单播(Unicast):将数据从一个发送方发送到一个接收方。 ```csharp // 发送方 using (UdpClient udpClient = new UdpClient()) { string message = "Hello, Unicast!"; byte[] bytes = Encoding.ASCII.GetBytes(message); udpClient.Send(bytes, bytes.Length, "接收方IP地址", 接收方端口号); } // 接收方 using (UdpClient udpClient = new UdpClient(接收方端口号)) { IPEndPoint senderEndpoint = new IPEndPoint(IPAddress.Any, 0); byte[] bytes = udpClient.Receive(ref senderEndpoint); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("接收到消息: " + message); } ``` 2. 多播(Multicast):将数据从一个发送方发送到一组接收方。 ```csharp // 发送方 using (UdpClient udpClient = new UdpClient()) { udpClient.JoinMulticastGroup(组播组IP地址); string message = "Hello, Multicast!"; byte[] bytes = Encoding.ASCII.GetBytes(message); udpClient.Send(bytes, bytes.Length, 组播组IP地址, 接收方端口号); } // 接收方 using (UdpClient udpClient = new UdpClient(接收方端口号)) { udpClient.JoinMulticastGroup(组播组IP地址); IPEndPoint senderEndpoint = new IPEndPoint(IPAddress.Any, 0); byte[] bytes = udpClient.Receive(ref senderEndpoint); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("接收到消息: " + message); } ``` 3. 广播(Broadcast):将数据从一个发送方发送到同一子网中的所有接收方。 ```csharp // 发送方 using (UdpClient udpClient = new UdpClient()) { udpClient.EnableBroadcast = true; string message = "Hello, Broadcast!"; byte[] bytes = Encoding.ASCII.GetBytes(message); udpClient.Send(bytes, bytes.Length, "255.255.255.255", 接收方端口号); } // 接收方 using (UdpClient udpClient = new UdpClient(接收方端口号)) { IPEndPoint senderEndpoint = new IPEndPoint(IPAddress.Any, 0); byte[] bytes = udpClient.Receive(ref senderEndpoint); string message = Encoding.ASCII.GetString(bytes); Console.WriteLine("接收到消息: " + message); } ``` 请注意,示例中的IP地址和端口号需要根据实际情况进行替换。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值