组播 收发_[HCIARoutingamp;Switching]网络篇单播广播和组播
传统的IP通信有两种方式:一种是在源主机与目的主机之间点对点的通信,即单播;另一种是在源主机与同一网段中所有其它主机之间点对多点的通信,即广播。
如果要将信息发送给多个主机而非所有主机,若采用广播方式实现,不仅会将信息发送给不需要的主机而浪费带宽,也不能实现跨网段发送;若采用单播方式实现,重复的IP包不仅会占用大量带宽,也会增加源主机的负载。所以,传统的单播和广播通信方式不能有效地解决单点发送、多点接收的问题。
组播是指在IP网络中将数据包以尽力传送的形式发送到某个确定的节点集合(即组播组),其基本思想是:源主机(即组播源)只发送一份数据,其目的地址为组播组地址;组播组中的所有接收者都可收到同样的数据拷贝,并且只有组播组内的主
机可以接收该数据,而其它主机则不能收到。
现代应用中,可以利用网络的组播特性方便地提供一些新的增值业务,包括在线直播、网络电视、远程教育、远程医疗、网络电台、实时视频会议等互联网的信息服务领域。
组播的技术实现
组播技术的实现需要解决以下几方面问题:
? 组播源向一组确定的接收者发送信息,而如何来标识这组确定的接收者?——这需要用到组播地址机制;
? 接收者通过加入组播组来实现对组播信息的接收,而接收者是如何动态地加入或离开组播组的?——即如何进行组成员关系管理;
? 组播报文在网络中是如何被转发并最终到达接收者的?——即组播报文转发的过程;
? 组播报文的转发路径(即组播转发树)是如何构建的?——这是由各组播路由协议来完成的。
带着这四个问题,我们以此来看:
第一、组播地址机制
IP组播地址用于标识一个IP组播组。IANA把D类地址空间分配给组播使用,范围从224.0.0.0到239.255.255.255。
如图所示,IP组播地址前四位均为“1110”,而整个IP组播地址空间的划分则如下图所示。
? 224.0.0.0 到224.0.0.255 被IANA 预留,地址224.0.0.0 保留不做分配,其它地址供路由协议及拓扑查找和维护协议使用。该范围内的地址属于局部范畴,不论TTL 为多少,都不会被路由器转发;
? 224.0.1.0 到238.255.255.255 为用户可用的组播地址,在全网范围内有效。其中232.0.0.0/8 为SSM组地址,而其余则属于ASM组地址。
? 239.0.0.0 到239.255.255.255 为本地管理组播地址,仅在特定的本地范围内有效,也属于ASM 组地址。使用本地管理组地址可以灵活定义组播域的范围,以实现不同组播域之间的地址隔离,从而有助于在不同组播域内重复使用相同组播地址而不会引起冲突。
补充:
OSPF的hello报文就是使用了组播协议,其目的IP地址为224.0.0.5.
在以太网中,IANA将MAC地址范围01:00:5E:00:00:00~01:00:5E:7F:FF:FF分配给组播使用,这就要求将28位的IP组播地址空间映射到23位的组播MAC地址空间中,具体的映射方法是将组播IP地址中的低23位放入MAC地址的低23位,如图所示。
由于IP组播地址的后28位中只有23位被映射到组播MAC地址,这样会有32个IP组播地址映射到同一组播MAC地址上。
第二、组播的成员管理
组成员关系管理是指在路由器/交换机上建立直联网段内的组成员关系信息,具体说,就是各接口/端口下有哪些组播组的成员。
IGMP运行于主机和与主机直连的路由器之间,其实现的功能是双向的:一方面,主机通过IGMP通知路由器希望接收某个特定组播组的信息;另一方面,路由器通过IGMP周期性地查询局域网内的组播组成员是否处于活动状态,实现所连网段组
成员关系的收集与维护。通过IGMP,在路由器中记录的信息是某个组播组是否在本地有组成员,而不是组播组与主机之间的对应关系。
如图所示,当同一个网段内有多个IGMP路由器时,IGMPv2通过查询器选举机制从中选举出唯一的查询器。查询器周期性地发送普遍组查询消息进行成员关系查询,主机通过发送报告消息来响应查询。而作为组成员的路由器,其行为也与普通
主机一样,响应其它路由器的查询。
当主机要加入组播组时,不必等待查询消息,而是主动发送报告消息;当主机要离开组播组时,也会主动发送离开组消息,查询器收到离开组消息后,会发送特定组查询消息来确定该组的所有组成员是否都已离开。
通过上述机制,在路由器里建立起一张表,其中记录了路由器各接口所对应子网上都有哪些组的成员。当路由器收到发往组G的组播数据后,只向那些有G的成员的接口转发该数据。至于组播数据在路由器之间如何转发则由组播路由协议决定,而
不是IGMP的功能。
IGMP是针对IP层设计的,只能记录路由器上的三层接口与IP组播地址的对应关系。但在很多情况下,组播报文不可避免地要经过一些交换机,如果没有一种机制将二层端口与组播MAC地址对应起来,组播报文就会转发给交换机的所有端口,这显然会浪费大量的系统资源。
IGMP Snooping的出现就可以解决这个问题,其工作原理为:主机发往IGMP查询器的报告消息经过交换机时,交换机对这个消息进行监听并记录下来,为端口和组播MAC地址建立起映射关系;当交换机收到组播数据时,根据这样的映射关系,只向连有组成员的端口转发组播数据。
第三、组播转发报文
组播报文在网络中沿着树型转发路径进行转发,该路径称为组播转发树。它可分为源树(Source Tree)和共享树(RPT)两大类:
1. 源树
源树是指以组播源作为树根,将组播源到每一个接收者的最短路径结合起来构成的转发树。由于源树使用的是从组播源到接收者的最短路径,因此也称为最短路径树(SPT)。
对于某个组,网络要为任何一个向该组发送报文的组播源建立一棵树。源树的优点是能构造组播源和接收者之间的最短路径,使端到端的延迟达到最小。但付出的代价是,在路由器中必须为每个组播源保存路由信息,这样会占用大量的系统资源,路由表的规模也比较大。
2. 共享树
以某个路由器作为路由树的树根,该路由器称为汇集点(RP),共享树就是由RP到所有接收者的最短路路径所共同构成的转发树。使用共享树时,对应某个组网络中只有一棵树。所有的组播源和接收者都使用这棵树来收发报文,组播源先向树根发送数据报文,之后报文又向下转发到达所有的接收者。
共享树的最大优点是路由器中保留的路由信息可以很少,缺点是组播源发出的报文要先经过RP,再到达接收者,经由的路径通常并非最短,而且对RP的可靠性和处理能力要求很高。
当路由器收到组播数据报文时,根据组播目的地址查找组播转发表,对报文进行转发。与单播报文的转发相比,组播报文的转发相对复杂:在单播报文的转发过程中,路由器并不关心报文的源地址,只关心报文的目的地址,通过其目的地址决定
向哪个接口转发;而组播报文是发送给一组接收者的,这些接收者用一个逻辑地址(即组播地址)标识,路由器在收到组播报文后,必须根据报文的源地址确定其正确的入接口(指向组播源方向)和下游方向,然后将其沿着远离组播源的下游方向
转发——这个过程称为逆向路径转发(RPF)。
在RPF执行过程中会利用原有的单播路由表确定上、下游的邻接节点,只有报文从上游节点所对应的接口(称为RPF接口,即路由器上通过单播方式向该地址发送报文的出接口)到达时,才向下游转发。RPF的主体是RPF检查,通过RPF检查除了可以正确地按照组播路由的配置转发报文外,还可以避免可能出现的环路。路由器收到组播报文后先对其进行RPF检查,只有检查通过才执行转发。
RPF检查的过程为:路由器在单播路由表中查找组播源或RP对应的RPF接口(使用SPT时查找组播源对应的RPF接口,使用RPT时查找RP对应的RPF接口),如果组播报文是从RPF接口接收下来的,则RPF检查通过,报文向下游接口转发;否则,丢弃该报文。
第四、组播路由协议
与单播路由一样,组播路由协议也分为域内和域间两大类:
? 域内组播路由协议:根据IGMP 协议维护的组成员关系信息,运用一定的组播路由算法构造组播分发树,在路由器中建立组播路由状态,路由器根据这些状态进行组播数据包转发;
? 域间组播路由协议:根据网络中配置的域间组播路由策略,在各自治系统间发布具有组播能力的路由信息以及组播源信息,使组播数据能在域间进行转发。
在众多域内组播路由协议中,PIM是目前较为典型的一个。按照转发机制的不同,PIM可以分为DM(Dense Mode,密集模式)和SM(Sparse Mode,稀疏模式)两种模式。
1. PIM-DM
在PIM-DM域中,运行PIM-DM的路由器周期性地发送PIM Hello消息,以发现邻接的PIM路由器,进行叶子网络、叶子路由器的判断,并负责在多路访问网络中选举DR——尽管PIM-DM本身并不需要DR,但如果PIM-DM域中的共享网络上运行了IGMPv1,则需要选举出DR来充当共享网络上的IGMPv1查询器。
PIM-DM属于密集模式的组播路由协议,使用“推”模式传送组播数据,通常适用于组播组成员相对比较密集的小型网络,其基本原理如下:
? PIM-DM 假设网络中的每个子网都存在至少一个组播组成员,因此组播数据将被扩散到网络中的所有节点。然后,PIM-DM 对没有组播数据转发的分支进行剪枝,只保留包含接收者的分支。这种“扩散—剪枝”现象周期性地发生,被剪枝的分支也可以周期性地恢复成转发状态。
? 当被剪枝分支的节点上出现了组播组的成员时,该节点通过主动向其上游发送嫁接报文,从而由剪枝状态恢复成转发状态,以恢复对组播数据的转发。
对HCIA的课程,是不包含组播的报文转发和路由协议的!
组播实现机制
组播的实现机制,使得组播在点到多点场景中,比单播和广播具有强大的优势。组播的实现机制有哪些呢?
我们这里通过详细对比组播和单播的实现过程来展开介绍一下组播的实现机制。
如图所示,单播组网中要实现用户A,用户B,用户C能接收数据源的流量,需要做如下配置:
全网设备相连的接口都需要配置单播IP地址
全网要部署单播路由协议,确保数据源和用户A、用户B和用户C之间路由互通。
数据源发送的时候,对用户A发送的流量IP报文头封装的目的地址是用户A的主机地址10.1.2.1;
对用户B发送的流量IP报文头封装的目的地址是用户B的主机地址10.1.3.1;
对用户C发送的流量是IP报文头封装的目的地址是用户C的主机地址10.1.4.1。
如图所示,组播组网实现用户A,用户B和用户C能接收到数据源的流量,需要做如下部署:
全网设备相连的接口都需要配置单播IP地址
全网要部署单播路由协议,确保数据源和用户A、用户B和用户C之间路由互通
全网部署组播PIM协议(PIM-SM或者PIM-DM),并配置相应的BSR和RP,图中配置设备B为RP和BSR。
用户A,用户B,用户C必须发送IGMP组加入报文,组加入报文中包含其需要加入的组IP地址225.1.1.1。
数据源发送数据流,首先传输层封装应用层数据,并加上源目的端口,目的端口由实际的应用程序决定;然后到达网络层,,网络层源IP地址为数据源IP地址,目的IP地址为组播地址,IP报文的目的地址为225.1.1.1;然后进入链路层,该数据流二层目的MAC地址是组播的MAC地址。
组播实现机制总体来说就是接收者告诉一个中心节点(在组播协议里面称为RP),它需要哪些组地址的流量;RP需要被告之数据源(在组播场景中我们称之为组播源,它的特点是流量二层头中目的MAC地址是组播MAC地址,IP报层IP报文头目的地址是组播IP地址)在哪,数据源往哪些组地址发流。RP知道了接收方和发送方的所有信息后,就会根据需要把流量发送到特定位置(它发送的过程中建立了组播分发树)。
单播、广播和组播
传输方式 |
优势 |
不足 |
---|---|---|
单播方式 |
|
|
广播方式 |
|
|
组播方式 |
|
NA |
冲突域和广播域
我们用一张图说明
当前,集线器和冲突已经很少见了。因为集线器已经被交换机代替,而冲突域只存在于共享式以太网中,比如
如果PC1、PC2和PC3用hub相连,他就是共享式以太网,PC1 ping PC2,我们在PC3上可以监听到他们之间的通信,因为Hub是单通道,它会把一个端口收到的数据向其他所有端口转发。
但如果把Hub换成交换机,他就变成非共享网络,我们在PC3上监听不到Pc1和Pc2之间的通信。这是因为交换机是按照端口转发的。
组播 收发_[HCIARoutingamp;Switching]网络篇单播广播和组播相关推荐
- 5g通用模组是什么_广和通发布全新5G模组FG650,搭载展锐中国“芯”
6月29日上午10时,广和通携手紫光展锐,重磅发布搭载紫光展锐春藤V510中国"芯"5G模组 - FG650. 广和通FG650是一款高性能.高性价比的5G模组,搭载紫光展锐春藤V ...
- origin处理多组红外数据_【图文】用Origin作多组红外数据图
场景 有时候我们需要多组红外光谱作在同一张图上,以做对比,类似于下图,我们该怎么做呢. 步骤 打开OriginPro软件,博主用的8.6版本的. 依次点File->Import->CSV( ...
- 单播广播多播任播的分别
单播:1对1通信,早期的固定电话. 广播:将消息从1台主机发送给与之相连的所有其他主机.典型例子是电视播放,它将电视信号一起发送给非特定的多个接收对象. 多播:与广播类似,也是将信息发送给多个接收主机 ...
- Linux系统的广播和组播
广播 广播:在一个局域网内部,所有的终端都能够收到数据包.使用广播的发送数据,会使处于同一个局域网内部的所有用户都必须接收到数据,用户不能拒绝. 注意:在使用广播和组播时,发送方和接收方都要处于同一个 ...
- 【网络篇】第十八篇——IP协议相关技术
目录 DNS DNS背景 域名的层级关系 域名解析过程 使用dig工具分析DNS过程 ARP DHCP NAT NAT IP转换过程 NAPT NAT技术的缺陷 如何解决NAT潜在问题 ICMP IC ...
- linux网络协议栈 转发组播,Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础...
一.组播(Multicast)传输 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现 ...
- Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础
一.组播(Multicast)传输 在发送者和每一接收者之间实现点对多点网络连接. 如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包.它提高了数据传送效率.减少了骨干网络出现 ...
- Java网络编程(八)—— 组播和MulticastSocket
Java网络编程(八)-- 组播和MulticastSocket 文章目录 Java网络编程(八)-- 组播和MulticastSocket 什么是组播 MulticastSocket类 总述 构造方 ...
- 【Socket网络编程】5.单播、多播(组播)、广播
[单播].[多播(组播)].[广播] https://blog.csdn.net/daaikuaichuan/article/details/83474089 ####[单播] 用于两个主机之间的端对 ...
最新文章
- 项目经验分享——Java常用工具类集合 转
- Design Pattern - Observer(C#)
- mysql 线上加索引_mysql手札,唯一索引引发的线上事故
- Linux - Nginx安装
- 【Java 网络编程】TCP 数据传输示例 ( 客户端参数设置 | 服务器端参数设置 | ByteBuffer 存放读取数据类型 )
- 简单的多显示器解决方案
- 【PD】PowerDesigner生成数据字典
- dataframe数组做元素_数组 array 矩阵 list 数据框 dataframe
- (转)HTML5开发中Access-Control-Allow-Origin跨域问题
- sqlserver min函数其他set操作消除了null值_数据库常用SQL操作篇
- 利用ENVI绘制土地利用图
- gpu超算算法_2018电磁仿真(HFSS、CST、FEKO)单机集群并行计算特点分析与完美解决方案...
- Hspice中的测量语句(II)
- py爬虫pandas
- 梦幻西游手游服务器维护公告,《梦幻西游手游》10月5日维护公告 部分区服合并...
- python逻辑回归模型建模步骤_从原理到代码,轻松深入逻辑回归模型!
- Win7+U盘安装Ubuntu 双系统超级详细教程
- 科技的成就(三十六)
- 京东商城iOS客户端安装包瘦身实践
- Qt和海康威视混合编程