zoukankan      html  css  js  c++  java
  • 组播IP地址

    组播IP地址

    关于组播地址的分类:
    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为本地管理组播地址,仅在特定的本地范围内有效。

    IANA已经把D类地址空间分配给了IP组播地址.
    D类空间的地址在其第一个字节的前4位,用二进制值1110来识别.
    所以组播地址的范围是:
    224.0.0.0到239.255.255.255.
    D类地址:  www.2cto.com  
    字节1 字节2 字节3 字节4
    1110xxxx xxxxxxxx xxxxxxxx xxxxxxxx

    clip_image002
     
    原理是这样的:
    该空间的地址用二进制表示并且第一个八位数的前4位用1110表示.
    1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
    下面给出一些常用的局部链接的组播地址:
    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)
    224.0.0.7 ST路由器
    224.0.0.8 ST主机
    224.0.0.9 RIP2路由器
    224.0.0.10 IGRP路由器
    224.0.0.12 DHCP服务器/中继代理
    224.0.0.13 所有的PIM路由器
    224.0.0.15 所有CBT路由器
    224.0.0.18 VRRP
    224.0.0.19 到 224.0.0.255是可以使用的。其他的建议保留以便网络中的设备或者主机使用.
    这里还要说明的是,实际上保留的地址空间远远不止那些.
    IANA还预留了239.0.0.0--239.255.255.255的地址范围作为管理范围地址,以供在私有的组播领域内使用.
    组播MAC地址
    xxxxxx11.xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx
    MAC地址我们都知道是48位的,在第一个8位中的最后2位如果置为1的话,那么就规定为是组播的MAC地址.  www.2cto.com  
    以太网IP与组播MAC地址映射

    clip_image004
     
    由于IPv4组播地址的高4位是1110,代表组播标识,而低28位中只有23位被映射到IPv4组播MAC地址,这样IPv4组播地址中就有5位信息丢失。于是,就有32个IPv4组播地址映射到了同一个IPv4组播MAC地址上,因此在二层处理过程中,设备可能要接收一些本IPv4组播组以外的组播数据,而这些多余的组播数据就需要设备的上层进行过滤了。
    NOTES:
    可以看到,三层组播IP是以 1110 开始的。
    范围从1110 0000 - 1110 1111 ,也就是224到239.
    那么这里组播MAC是以0x010005E开始的.
    最后可以看到,三层组播IP,224-239开头的,最后映射到二层组播MAC,都变成一个了.
    说到这里,就会产生一个问题。
    MAC地址映射的性能影响:
    因为第三层IP组播地址信息的全部28位比特不能映射进23bit可用的mac地址空间,所以在映射的过程中,丢失了5bit的地址信息,这会导致组播地址映射到第二层IEEE MAC地址时,会有2的5次方,或者32:1的地址不明确.这也就意味着,每一个IEEE IP多播MAC地址可以表示32个IP地址组播地址.
    MAC和IP的后23位一一对应,后第24位可以是0或1,这一位没有对应上。每一个2层地址可以映射成32个3层地址。
    0100.5e01.0101
    0100.5e可以映射成IP地址的第1个字节:224-239
    01.0101可以映射成IP地址的后3个字节:1.1.1和129.1.1
    这个MAC地址可以映射成:224.1.1.1、224.129.1.1、225.1.1.1、225.129.1.1….239.129.1.1这么32个IP地址。
    记得一前段时间,客户有一个这样的需求。
    Multicast – when issuing command “multicast mac-address 01:00:5e:01:01:01 vlan 30 interface ethernet 0/0/1” – we state 239.1.1.1 as MAC address – they what to state it as IP address.   www.2cto.com  
    其实,这个需求就是,在二层交换机上面,客户不想用48bit的二层组播MAC地址标示,觉得太麻烦,这也可以理解,很多客户根本就记不住MAC地址前面25bit是以0x01005E开头的,更分不清楚后面的对应关系了。所以客户说,想要在二层交换机上面写三层的组播IP地址,让系统自动的翻译成二层的组播MAC.
    这里通过二层组播的mac原理,已经知道了,这样会遇到一个很大的问题就是一个MAC可以同时对应32个组播IP. 
    所以最后软件的实现方式是:不管客户写什么IP开头,比如说224/239/225/226.那么最终映射到系统的命令行会自动变成224.这里会给客户一个提醒的命令行,说明一下这个问题的情况,然后最终系统识别到的还是01005E的前25位.

    组播也是一种IP包,也有源IP地址,目的IP地址,源IP地址为组播源的服务器IP地址,目的地址为一个特殊的IP地址,它位于 224.0.0.0 - 239.255.255.255 中,由于 224.0.0.0/8用于本地链路,即一跳的组播,239.0.0.0/8 为私有组播地址,所以实际的可用于在互联网上组播地址是225.0.0.0/8 - 238.0.0.0/8,这个组播地址不属于任何服务器或个人,它有点类似一个微信群号,任何成员(组播源)往微信群(组播IP)发送消息(组播数据),这个群里的成员(组播接收者)都会接收到此消息。

    IPTV就是组播的应用:

    IPTV里的一个电视频道对应一个组播IP, 假设CCTV1 对应的组播IP =238.1.1.1 ,IPTV节目源IP=1.1.1.1,就以238.1.1.1 为目的地址封装发送,这里有两个问题需要解决:

    IPTV组播源不知道收看此节目的用户在哪里?

    收看此节目的用户不知道IPTV组播源在哪里?


    用户IPTV机顶盒只知道节目组播地址为238.1.1.1 ,至于谁是这个节目源(IP=1.1.1.1)并不清楚。


    于是就引入了一个中介机构(RP),Rendezvous Point,RP点,组播的汇聚点,RP IP = 2.2.2.2 ,组播源通过单播隧道的方式把组播238.1.1.1 发给 RP,简称组播源的注册。


    机顶盒静态配置了RP IP = 2.2.2.2,知道RP会有组播数据,于是就向RP( 2.2.2.2)申请加入这个238.1.1.1 的组,于是RP就把自己收到的注册组播源数据发送给机顶盒,这个就是基于RP的 树,RPT。


    机顶盒收到第一个组播包,定睛一看,原来组播源是1.1.1.1,于是发一个申请给1.1.1.1 ,申请加入238.1.1.1,这就是基于源的 树,SPT。即然已加入了SPT ,就不需要RPT 了,向RP申请退出就可以了。

    着重强调一点:一旦组播用户(接收者)知道了组播源,那RP的任务就算完成了,RP的存在就是为了组播接收者发现组播源,组播用户会加入路径更优的SPT树,会申请退出路径不是最优的RPT树,避免收到两份组播的复制。

    以上就是组播工作的大概过程,IPTV是IGMPv2 以及 PIM SM mode 的一个应用。

    IPTV是电信独立的IP网络,部署起来很容易;但是如果在全球网络里部署组播,将会遇到很多挑战。


    如果想了解IGMPv3 以及PIM SSM 请回复,会继续更新。


    想深入学习的童鞋请继续
    ------------------------------------
    IP multicast 组播

    在组播的世界里,我们又见到了树的概念,关于树,你一定会有似曾相识的感觉,二层交换网络就有树的概念了,那个树我们称之为:生成树,spanning tree,尽管这个树中文名称有点别扭,但它就是一棵树。

    喜爱大自然的童鞋仔细观察一棵树,会发现一棵树,有根,主干,树杈,叶子,水分通过根,源源不断地输送到主干,树杈,然后到达叶子。水分在从根扩散到叶子的过程中,一直是单向的,没有水倒流的现象,即使水有倒流,也不会有环路,因为树的结构是发散的,没有物理的树杈的交织,自然不会发生环路。

    网络科学家发现了这个规律,有一个大胆设想,如果把树的拓扑结构用于二层交换网络,在二层网络里选择一个根(root bridge),其它交换机当作树的树杈,每个树杈自然有一个根末梢(root port),这个就是交换机的上游接口,除了根末梢,其它的接口都是下游接口,至于下游接口是畅通的、还是阻断的,取决于到根的路径成本,谁更接近根,谁就畅通(Forwarding) ,即常说的Designated Port; 谁远离根,谁就需要被阻断(Blocked), 即常说的 Non Designated Port。通过这种仿生的机制,可以有效地避免网络环路。

    今天我们主题并不是spanning tree,而是组播树。至于为什么要有树的概念,上文已经阐述,为了避免潜在的网络环路,那我们来谈谈组播树的概念。

    组播第一个挑战就是组播的接收者(Receiver)不知道组播源在哪里,换句话说,就是不知道组播源的IP地址,如果知道了,可以直接向这个IP地址发送加入组播的请求,那一切就简单了,组播可以直接推送到组播的接收者。这仅仅是一个美好的假设,事实是接收者无从知道组播源的IP地址。

    为了克服这个困难,引入了一个中介机构(RP),Rendezvous Point,RP点,组播的汇聚点。

    为了更便于阐述这个复杂的过程,假定:

    Multicast Source IP: 1.1.1.1
    Multicast Group IP : 238.1.1.1
    Rendezvous Point IP: 2.2.2.2
    IGMPv2: Host chat with Router
    PIM Sparse Mode: Router chat with Router

    于是组播源就把组播238.1.1.1封装在一个单播(source IP 1.1.1.1,destination IP 2.2.2.2) 发给RP,我们称之为组播源的单播注册。

    虽然组播的接收者不知道组播源在哪里,但他们深深地知道,他们所在的广播域里的路由器一定知道,而路由器如果静态配置RP,或动态发现RP,可以知道RP在哪里,可以间接的知道组播源在哪里。这就是美其名曰的:曲线救国!

    于是组播接收者用IGMPv2发送一个广播请求,这个广播域里的路由器听到了这个广播请求,查询自己的单播路由表,可以知道谁是通向RP的上游路由器,然后发送一个PIM Join请求给上游,上游路由器按照相同的方式把这种Join 请求一级一级的中继到RP,RP简单地将收到Join请求这个接口放入组播出接口列表(OIL),然后把组播仅仅复制(Replication)一份从OIL发送出去。PIM Join 在层层向上中继的过程,路由器已经形成一个上下游的关系,越是靠近RP的路由器,为上游;而远离RP的路由器,为下游。这其实就是一种树,因为树的根是RP,我们称这种组播树为基于RP的树,即RP-Based Tree,简称RPT。

    当组播接收者直连的路由器收到第一个组播,就知道组播源在哪里?为什么?因为组播包里的源IP告诉我们的啊!于是向组播源IP发起了一个新的PIM Join请求,为什么要这样啊?是不是画蛇添足啊?好,我们来分析一下:

    组播先从组播源发到RP,然后再从RP顺着RPT树一级一级向下游扩散,直到到达组播的接收者,这条路径有点绕,因为先要绕到RP,所以不是最优路径。既然RP的存在是为了组播的接收者发现组播源,那一旦这个任务完成了,也就没有必要再走这条有点绕路的路径了,为什么不直接走组播源到达组播接收者的路径呢?省时、省力、省路径!于是组播接收者的直连路由器向着组播源1.1.1.1的方向,如何知道?查询单播路由表啊,然后顺着朝向1.1.1.1 的方向发送 Join 请求,也是一级级向着上游发请求,直到到达组播源1.1.1.1,这个有上下游关系也是组播树,因为树的根是组播源,我们称之为:基于源的树,Source Path Tree,简称SPT。

    即然加入了SPT树,收到了组播数据,就没有必要赖在RPT树上,否则将会收到两份复制,这实在没有必要。于是组播接收者直连的路由器向RP提出leave 请求,RP将收到 leave 请求的这个接口从OIL列表里删掉,即不会再复制组播数据了。

    忘了一个细节,RP在接收到组播源的单播注册,会发一个单播停止消息给组播源,即 Register Stop 消息,既然RP已经知道组播源在哪里了,继续单播注册就没有必要了。同时RP也会朝着组播源1.1.1.1 的方向发送Join请求,请求加入SPT树。

  • 相关阅读:
    vs2008 当前上下文不存在名称xxx 解决办法
    SQL Server 2008故障转移集群+数据库镜像配置实例之一
    通过JavaScript获取页面大小
    使用JavaScript判断浏览器类型
    sql2008安装图解sql2008安装全过程
    Sqlserver中对时间类型的字段转换
    SQL Server 2008故障转移集群+数据库镜像配置实例之三
    这年头口罩都成时尚品
    一位软件工程师的6年总结[转]
    MS SQL Server查询优化方法[转]
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7834350.html
Copyright © 2011-2022 走看看