组播概述
在网络中,存在着三种发送报文的方式:单播、广播、组播。数据采用单播(Unicast)方式传输时,服务器会为每一个接收者单独传输一份信息,如果有多个接收者存在,网络上就会重复地传输多份相同内容的信息,这样将会大量占用网络资源。数据采用广播(Broadcast)方式传输时,系统会把信息一次性的传送给网络中的所有用户,不管他们是否需要,任何用户都会接收到广播来的信息。
当前,诸如视频会议和视频点播等单点发送、多点接收的多媒体业务正在成为信息传送的重要组成部分。在一点发送多点接收的前提下,单播方式适合用户较少的网络,而广播方式适合用户稠密的网络,当网络中需求某信息的用户量不确定时,单播和广播方式效率很低。这时组播(multicast)应运而生,它实现了网络中单点到多点的高效数据传送,能够节约大量网络带宽,降低网络负载。组播传输信息的方式如图所示。
组播的特点是:
服务对象不固定,通常是一对多的关系;
把服务对象看成一个组,发送端只需要发送一次数据到相关网络设备即可;
每个用户可以随时加入或退出组播组;
实时性要求较高,允许一定的丢帧现象发生。
组播地址
组播IP地址:
根据IANA(Internet Assigned Numbers Authority,因特网编号授权委员会)规定,组播报文的IP地址使用D类IP地址,组播IP地址范围是224.0.0.0~239.255.255.255。其中,几个特殊组播IP地址段的范围及说明如下:
组播MAC地址:
以太网传输单播IP报文的时候,目的MAC地址使用的是接收者的MAC地址。但是在传输组播报文时,传输目标不再是一个具体的接收者,而是一个成员不确定的组,所以需要使用组播MAC地址作为目的地址,组播MAC地址是一个逻辑的MAC地址。
IANA规定,组播MAC地址的高24bit位是以01-00-5E开头,低23bit为组播IP地址的低23bit,映射关系如图所示:
由于IP组播地址的高4bit是1110,标识了组播组,而低28bit中只有23bit被映射到组播MAC地址上,这样IP组播地址中就会有5bit没有使用,从而出现了32个IP组播地址映射到同一MAC地址上的结果。
组播地址表
交换机在转发组播数据时是根据组播地址表来进行的。由于组播数据不能跨越VLAN传输,因此组播地址表的第一部分是VLAN ID,当交换机收到组播数据包时,数据包只能在接收端口所在的VLAN内转发。组播地址表对应的出口端口不是一个,而是一组端口列表。转发数据时,交换机根据组播数据的目的组播地址查找组播地址表,如果在组播地址表中查不到相应的条目,则把该组播数据广播,即向接收端口所在VLAN内的所有端口上转发;如果能查找到对应的条目,则目的地址应该是一组端口列表,于是交换机把这个组播数据复制成多份,每份转发到一个端口,从而完成组播数据的交换。组播地址表一般格式如图所示。
IGMP侦听
网络中的主机通过发送IGMP(Internet Group Management Protocol,互联网组管理协议)报文向临近的路由器申请加入(或离开)组播组,当上层路由设备将组播数据转发下来后,交换机负责将组播数据转发给主机。IGMP侦听(IGMP Snooping)是组播约束机制,交换机用他来完成组播组的动态注册,运行IGMP侦听的交换机通过侦听和分析主机与组播路由器之间交互的IGMP报文来管理和控制组播组,从而可以有效抑制组播数据在网络中扩散。
IGMP侦听的工作过程
交换机侦听用户主机与路由器之间的交互IGMP报文,跟踪组播信息及其申请的端口。当交换机侦听到主机向路由器发出报告报文(IGMP Report)时,交换机便把该端口加入组播地址表中;当交换机侦听到主机发送的离开报文(IGMP Leave)时,路由器会发送该端口的特定组查询报文(Group-Specific Query),若还有其它主机需要该组播,则将回应报告报文,若路由器收不到任何主机的回应,交换机便把该端口从组播地址表中删除。路由器会定时发查询报文(IGMP Query),交换机收到查询报文后,如果在一定的时间段内没有收到主机的报告报文,便把该端口从组播表中删除。
以下内容来自:https://www.zhihu.com/question/49335649 车小胖的回答
网络分层的原则:每一层独立于其他层完成自己的工作,而不需要相互依赖,上下层之间通过标准接口来互相通信,简单易用又具有扩展性。
以太网位于数据链路层,它是一种多路访问网络,换句话说:一个广播帧发出去,这个广播域里任何一台主机都可以接收。如果以太网没有属于自己的地址,难道都靠广播的方式传播出去?比如有两台主机A与B,互相知道对方IP,如果没有MAC地址,它们之间的通信帧到达交换机(交换机属于二层设备),由于以太网头部没有MAC地址信息,交换机也只有从各个接口flooding 出去,结果就是这个广播域里的每台主机都会接收,由于网卡没有MAC地址,这些包会一直到达IP层,只有AB会接收,其它主机统统丢弃,这是对通信资源最大的浪费。
所以以太网必须有自己的MAC地址,以方便在数据链路层来标示自己的唯一存在。
一般以太网通信有这么几种方式:
1)unicast
A与B通信,A(10.1.1.1)知道B的IP为 10.1.1.2 ,需要通过ARP Request 广播的方式发送出去,B是广播域里的一员,所以也会接收到ARP,于是以ARP Reply的方式告诉A自己的MAC地址,于是A就知道B的MAC地址,并缓存在 ARP table 里。于是A与B就可以互相通信了。
2)multicast
既然IP层有组播地址,比如 239.1.1.1,那二层也要有对应的MAC地址。这个MAC地址需要ARP吗?不需要!只需要计算就可以得到,计算方法如下:
01:00:5e + 组播IP低23位 = 01:00:5e:01:01:01
细心的童鞋一定会发现 224.1.1.1,225.1.1.1 …239.1.1.1 所对应的MAC 都为01:00:5e:01:01:01,这是历史原因造成的,因为申请组播MAC地址时,IANA只给了23位。
3)broadcast
IP层的广播地址为:255.255.255.255
以太网对应的MAC: FF:FF:FF:FF:FF:FF
一般链路层是多路访问的网络一定会有自己的标识符ID 或MAC地址,比如Frame Relay、ATM、Ethernet;而点对点通信,PPP、HDLC则不需要地址标识符。
另外第二层的 MAC地址,第三层的IP地址,第四层的Port Number提供了三次筛子(filter )的机会。
筛子一(MAC地址):如果不是本机的MAC地址、也没有匹配到 组播MAC,也不是广播地址,则网卡拒绝接收;否则进入第二个筛子
筛子二(IP地址):依据Unicast / Multicast / Broadcast 做出判断
A Unicast
A.1 匹配本地IP ,依据协议号提交给TCP/UDP,则进入第三个筛子
A.2 没有匹配,查询路由表,找到下一跳,发送出去
B Multicast
提交给已注册加入该multicast group 的进程
C Broadcast
提交给已注册接收broadcast 的进程
筛子三(Port号):依据Port Number 将数据提交给特定的进程