草庐IT

IP多播技术详解

墨辰JC 2023-04-28 原文


文章目录

前言

随着计算机网络的发展和个人计算机的普及,人们能够方便的在网络上畅游,进行网络通信或者获取自己所需的信息资源。此外,人们也越来越依赖于网络计算。大多数企业都建立了先进的网络,连接各个雇员和他们的计算机、工作站。有时,我们工作中的重要的信息只能通过网络得到,这些信息可能在企业的专用网络上,也可能在因特网上。

IP多播技术的相关基本概念

多播(Multicast,也称为组播)是一种实现一对多通信的技术,与传统单播一对一通信相比,多播可以极大地节省网络资源

在因特网上进行的多播,称为IP多播

多播的基础概念是。一个多播组(multicast group)就是一组希望接收特定数据流的接收者。这个组没有物理或者地理的边界:组内的主机可以位于互联网或者专用网络的任何地方。多播组中的每1个节点被称为多播组成员。

举例

  • 采用单播方式:共有60个主机要接收来自视频服务器的同一个视频节目,则视频服务器需要发送60个该视频节目,这些视频节目通过各路由器的转发,最终到达各主机。
  • 采用多播方式:可将这60个主机看做是同一个多播组的成员,视频服务器只要向该多播组发送1个视频节目即可;由于路由器R1支持IP多播,R1在转发视频节目时需要将该视频节目复制成两个副本,分别向路由器R2、R3转发一个副本,当该视频节目到达目的局域网时,由于局域网具有硬件多播功能,因此不需要复制,在局域网上的该多播组成员都能收到该视频。

当多播组的成员数量很大时,采用多播方式可以显著地减少网络中各种资源的消耗

IP多播地址和多播组

在IPV4中,D类地址被作为多播地址,多播地址只能用作目的地址,而不能用作源地址。

224.0.0.1 所有主机的地址
224.0.0.2 所有组播路由器的地址


用每一个D类地址来标识一个多播组,使用同一个IP多播地址接收IP多播数据报的所有主机就构成了一个多播组

  • 每个多播组的成员时可以随时变动的,一台主机可以随时加入或离开多播组
  • 多播组成员的数量和所在的地理位置也不受显示,一台主机可以属于几个多播组

非多播组成员也可以向多播组发送IP多播数据报

IPV4多播地址又可以分为:预留的多播地址(永久多播地址)、全球范围可用的多播地址以及本地管理的多播地址

IP多播可以分为两种:

  1. 只在本局域网上进行的硬件多播
  2. 在因特网上进行的多播

在局域网上进行硬件多播

由于MAC地址(也称硬件地址)有多播MAC地址这种类型,因此只要把IPV4多播地址映射成多播MAC地址,即可将IP多播数据报封装在局域网的MAC帧中,而MAC帧首部的目的MAC地址字段的值,就设置为由IPV4多播地址映射成的多播MAC地址。这样,可以很方便地利用硬件多播来实现局域网内的IP多播。

当给某个多播组的成员配置其所属组的IP多播地址时,系统就会根据映射规则从该IP多播地址生成相应的局域网多播MAC地址。

因特网号码指派管理局IANA,将自己从IEEE注册管理机构申请到的以太网MAC地址块中从01-00-5E-00-00-00到01-00-5E-7F-FF-FF的多播MAC地址,用于映射IPV4多播地址。

  • 这些多播MAC地址做起前25比特都是相同的,剩余23比特可以任意变化,因此共有2的23次方个(左边第1个字节的最低为比特取值为1,表示该MAC地址是多播MAC地址)

IP多播地址和多播MAC地址映射关系

为了映射一个IP多播地址到MAC层的多播地址,IP多播地址的底23位可以直接映射为MAC层多播地址的底23位。因为IP多播地址的前4位是固定的,另外还有比邻的5位不需要映射到MAC层多播地址

举例
只需将多播MAC地址坐起前25比特固定不变,将IP多播地址的低23比特映射到或者说作为MAC多播地址的低23位,这样就可以得出IP多播地址相应的多播MAC地址

如果不同的IP多播地址之间的不同指出仅出现在不能映射的那5个比特,则这些IP多播地址会映射出同一个多播MAC地址,因此收到IP多播数据报的主机还要在网际层利用软件进行过滤,把不是主机要接收的IP多播数据报丢弃。


在因特网上进行IP多播

要在因特网上进行IP多播,就必须要考虑数据报经过多个多播路由器进行转发的问题

  • 多播路由器必须根据IP多播数据报首部中的IP多播地址,将其转发到该多播组成员的局域网


在因特网上进行IP多播需要两种协议

  • 网际组管理协议IGMP
  • 多播路由选择协议

路由器如何知道各接口所在的局域网是否有某个多播组的成员?
需要使用TCP/IP体系结构网际层中的网际组管理协议IGMP

网际组管理协议IGMP

网际组管理协议(IGMP)是TCP/IP体系结构网际层中的协议,其作用是让连接在本地局域网上的多播路由器知道本地局域网上是否有主机(实际上是主机中的某个进程)加入或退出了某个多播组

IGMP只在本网络有效,使用IGMP并不能知道多播组所包含的成员数量,也不能知道多播组的成员都分布在哪些网络中

仅使用IGMP并不能在因特网上进行IP多播。连接在局域网上的多播路由器还必须和因特网上的其它多播路由器协同工作,以便把IP多播数据报用最小的代价传送给所有的多播组成员,这就需要使用多播路由选择协议

IGMP有三种报文类型

  • 成员报告报文
  • 成员查询报文
  • 离开组报文

IGMP报文被封装在IP数据报中传送


网际组管理协议IGMP的基本工作原理

  • 加入多播组的情况
  • 监视多播组成员变化的情况

    最后返回各个主机或路由器,进行解析
  • 退出多播组情况
    当主机要退出某个多播组时,可主动发送一个离开组报文而不必等待多播路由器的查询。这样可使多播路由器能够更快地发现某个组有成员离开

    之后多播路由器发送IGMP成员查询报文

多播路由选择协议

多播路由选择协议的主要任务是:在多播路由器之间为每个多播组建立一个多播转发树

  • 多播转发树连接多播源和所有拥有该多播组成员的路由器
  • IP多播数据报只要沿着多播转发树进行洪泛,就能被传送所有拥有该多播组成员的多播路由器
  • 之后,在多播路由器所直连的局域网内,多播路由器通过硬件多播,将IP多播数据报发送给该多播组的所有成员

即使某个主机不是任何多播组的成员,它也可以向任何多播组发送多播数据报

目前有两种方式来构建多播转发树:

  1. 基于源树(Source-Bass Tree)多播路由选择
  2. 组共享树(Group-Shared Tree)多播路由选择

基于源树的多播路由选择选择最典型算法是反向路径多播(RPM)算法

RPM算法包含以下两个步骤

  1. 利用反向路径广播算法建立一个广播转发树
  2. 利用剪枝算法,剪除广播转发树中的下游非成员路由器,获得一个多播转发树

建立广播转发树,可以使用洪泛法

利用反向路径广播RPB算法生成的广播转发树,不会存在环路,因此可以避免广播分组在环路中兜圈


组共享树多播路由选择采用基于核心的分布式生成树算法来建立共享树
该方法在每个多播组中指定一个核心(core)路由器,以该路由器为根,建立一棵连接多播组的所有成员路由器的生成树,作为多播转发树


有关IP多播技术详解的更多相关文章

  1. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  2. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  3. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  4. ruby - 在 TCPServer (Ruby) 中,我如何从客户端获取 IP/MAC? - 2

    我想在Ruby的TCPServer中获取客户端的IP地址。以及(如果可能的话)MAC地址。例如,Ruby中的时间服务器,请参阅评论。tcpserver=TCPServer.new("",80)iftcpserverputs"Listening"loopdosocket=tcpserver.acceptifsocketThread.newdoputs"Connectedfrom"+#HERE!HowcanigettheIPAddressfromtheclient?socket.write(Time.now.to_s)socket.closeendendendend非常感谢!

  5. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  6. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  7. 物联网MQTT协议详解 - 2

    一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su

  8. Tcl脚本入门笔记详解(一) - 2

    TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是

  9. ruby - 没有 nginx 的 Puma - 同一 IP 上的多个 ruby​​ 应用程序 :PORT - 2

    Nginx在生产中的重要性通常基于它为慢速客户端提供服务的能力;在RESTfulAPI的设置中,它似乎是生产堆栈的一个不必要的层,尤其是Puma(不像广泛使用的unicorn可以处理nginx工作)。Pumacanallowmultipleslowclientstoconnectwithoutrequiringaworkertobeblockedontherequesttransaction.Becauseofthis,Pumahandlesslowclientsgracefully.HerokurecommendsPumaforuseinscenarioswhereyouexpect

  10. ruby - 使用哪种群发消息技术? - 2

    我感到有点困惑——大约24小时以来,我一直在考虑在我的项目中使用哪种组播技术。基本上,我需要的是:创建组(通过一些后端进程)任意客户端广播消息(1:N,N:N)(可能)直接消息(1:1)(重要)使用我自己的后端(例如,通过某种HTTPAPI)对客户端进行身份验证/授权能够通过后端进程(或服务器插件)踢出特定的客户端这是我要的:Ruby或Haxe中的后端相关流程JS+Haxe(Flash9)中的前端—在浏览器中,因此理想情况下通过80/443进行通信,但不一定。因此,这项技术必须能够在HaxeforFlash中轻松访问,最好是Ruby。我一直在考虑:RabbitMQ(或OpenAMQ)、

随机推荐