单播、广播、组播的区别(转)
单播、⼴播、组播的区别(转)
组播(M u l t i c a s t)传输:
在发送者和每⼀接收者之间实现点对多点⽹络连接。
如果⼀台发送者同时给多个的接收者传输相同的数据,也只需复制⼀份的相同数据包。它提⾼了数据传送效率。减少了⾻⼲⽹络出现拥塞的可能性。
含气量单播、组播、⼴播的差别可以看下图:
单播(unicast): 是指封包在计算机⽹络的传输中,⽬的地址为单⼀⽬标的⼀种传输⽅式。它是现今⽹络应⽤最为⼴泛,通常所使⽤的⽹络协议或服务⼤多采⽤单播传输,例如⼀切基于TCP的协议。
⼴播(broadcast):是指封包在计算机⽹络中传输时,⽬的地址为⽹络中所有设备的⼀种传输⽅式。实际上,这⾥所说的“所有设备”也是限定在⼀个范围之中,称为“⼴播域”。
组播(multicast): 也叫多播,多点⼴播或播。指把信息同时传递给⼀组⽬的地址。它使⽤策略是最⾼效的,因为消息在每条⽹络链路上只需传递⼀次,⽽且只有在链路分叉的时候,消息才会被复制。
判断⽹卡是否⽀持组播
在Linux运⾏ifconfig, 如果⽹卡信息中包含UP BROADCAST RUNNING MULTICAST,则⽀持⼴播和组播。
组播I P地址
组播IP地址⽤于标识⼀个IP组播组。
IANA(internet assigned number authority)把D类地址空间分配给IP组播,其范围是从224.0.0.0到239.255.255.255。
224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使⽤;
224.0.1.0~224.0.1.255是公⽤组播地址,可以⽤于Internet;
224.0.2.0~238.255.255.255为⽤户可⽤的组播地址(临时组地址),全⽹范围内有效;
239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
不悔梦归处 只恨太匆匆参考:
永久的组播地址:
224.0.0.0 基准地址(保留)
224.0.0.1 所有主机的地址(包括所有路由器地址)
224.0.0.2 所有组播路由器的地址
224.0.0.3 不分配
224.0.0.4 dvmrp路由器
使命召唤任务224.0.0.5 所有ospf路由器
224.0.0.6 ospf DR/BDR
224.0.0.7 st路由器
224.0.0.8 st主机
224.0.0.9 rip-2路由器
224.0.0.10 Eigrp路由器
224.0.0.11 活动代理
224.0.0.12 dhcp 服务器/中继代理
支付宝3月1号新规
224.0.0.13 所有pim路由器
224.0.0.14 rsvp封装
224.0.0.15 所有cbt路由器
224.0.0.16 指定sbm
224.0.0.17 所有sbms
224.0.0.18 vrrp
以太⽹传输单播ip报⽂的时候,⽬的mac地址使⽤的是接收者的mac地址。但是在传输组播报⽂时,传输⽬的不再是⼀个具体的接收者,⽽是⼀个成员不确定的组,所以使⽤的是组播mac地址。
组播mac地址是和组播ip地址对应的。iana(internet assigned number authority)规定,组播mac地址的⾼24bit为0x01005e,mac 地址的低23bit为组播ip地址的低23bit。
由于ip组播地址的后28位中只有23位被映射到mac地址,这样就会有32个ip组播地址映射到同⼀mac地址上。
组成员机制
要将组播数据准确发送给组成员,必须先确定哪些⽹络的哪些主机是组成员,只有先确定了成员的位置,才能正确转发组播。当组成员不再需要接收组播的时候,就应该停⽌向成员发送组播,要确定组成员不再需要接收组播,就必须在成员退出时明确通告发送者。要确定组成员,有两种⽅式:查询和报告。
人民的名义全集 下载
查询,就是⼀台路由器向⽹络中发出查询消息,查询是否要主机要加⼊组,如果有主机应答,那么路由器就可以请求上游路由器把组播流量前转到这个⼦⽹中,如果没有主机应答,则请求上游路由器停⽌向其前转组播流量。
报告,主机也可以不必等待路由器的查询,可以主动向路由器请求加⼊某个组,退出时也要向路由器发送退出消息,让路由器停⽌向其前转组播流量。
在⽹络中,要确定组成员,需要使⽤⼀种协议,这种协议就是IGMP (Internet Group Management Protocol)因特⽹组管理协议,IGMP运⾏在路由器和主机之间,因为当组播发送者和组成员在不同⽹络时,需要路由器为组播数据提供转发,那么路由器就必须确认⾃⼰直连的⽹络中是否存在组成员,可以使⽤查询和报告来发现组成员,IGMP就可以完成这样的⼯作。
组播数据包的⽣存时间
将消息发送到多播组时,该主机和端⼝的所有预定接收者都将接收到消息(在数据包的⽣存时间范围内,请参阅下⽂)。套接字不必成为多播组的成员即可向其发送消息。
多数多播包的TTL⽐较低: 所有的IP包都有⼀个“⽣存时间”(time-to-live),或者叫TTL。和DNS记录不⼀样,TTL指定⼀个包到达⽬的地之前跳过⽹络的最⼤次数。单播包通常被允许穿越30个⽹络(⽐如,被路由或”跳“过29个路由),穿过⽹络通常⼩于15次”跳越“,所以30的限制经常⽤于当⽹络配置的很烂时把数据包杀掉。但是许多程序发多播时把TTL设为⼀个很低的值,通常为0(这样消息不会离开⾃⾝的设备)。
设置为1表⽰只能发到本地⽹络的计算机,设置为2 表⽰只能穿过⼀个路由。很少有应⽤想把多播发给整个校园⽹络的未知设备,更不会发给整个⽹络。
曹长卿和李淳罡谁厉害诸多路由都设置了很⾼的TTL阈值:很多⽹络路由器,特别是WAN路由和internet⽹关路由都有很⾼的TTL阈值,这样它们就不会发送这些低TTL(如15)的多播包。这样可以防⽌多播从本地⽹络泄漏。
路由器⼀般配置成完全不发送多播,或只发⼀些特定的地址,或配置成阻塞多播包。
每当多播路由器转发多播数据包时,数据包中的TTL值都会被减1,若数据包的TTL减少到0,则路由器将抛弃该数据包。TTL的值是多少,多播数据便最多能经过多少个多播路由器。例如,TTL值为0,则多播只能在本地主机的多个套接字间传播,⽽不能传播到“⽹
线”上;TTL值为1(默认值),则多播数据遇到第⼀个路由器,便会被它“⽆情”地丢弃,不允许传出本地⽹络之外,即只有同⼀个⽹络内的多播组成员才能收到多播数据。
J a v a组播的例⼦
MulticastSocket 是⼀种 (UDP) DatagramSocket,它具有加⼊ Internet 上其他多播主机的“组”的附加功能。
可以通过⾸先使⽤所需端⼝创建 MulticastSocket,然后调⽤ joinGroup(InetAddress groupAddr) ⽅法来加⼊多播组:
例⼦代码取⾃:
通过W i r e s h a r k监控
通过 Wireshark 监控多播的请求,可以⽤下⾯过滤条件
(eth.dst[0]&1)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。