IP多播

IP多播的基本概念

与单播相比,在一对多的通信中,多播可以大大减少网络资源。在互联网上进行多播就叫做IP多播,IP多播所传送的分组需要使用多播IP地址。能够运行多播协议的路由器叫做多播路由器,当然多播路由器也可以转发普通的IP数据报。

在互联网中的每一台主机都必须有一个全球唯一的IP地址,如果某台主机现在想接受某个特定多播组的分组,那么怎样才能使这个多播数据报传送到这台主机呢?

其实多播组的标识符就是 IP 地址中的 D 类地址。D 类 IP 地址的前四位是 1110,因此D 类地址范围是 224.0.0.0 到 239.255.255.255。我们就用每一个 D 类地址标志一个多播组。这样,D 类地址共可标志 228 个多播组,也就是说,在同一时间可以允许有超过 2.6 亿的多播组在互联网上运行。多播数据报也是“尽最大努力交付”,不保证一定能够交付多播组内的所有成员。因此,多播数据报和一般的IP数据报的区别就是它使用D类IP地址作为目的地址,并且首部中的协议字段值是2,表明使用网际组管理协议IGMP。

显然,多播地址只能用于目的地址,而不能用于源地址。此外,对多播数据报不产生ICMP 差错报文。因此,若在 PING 命令后面键入多播地址,将永远不会收到响应。

IP多播可以分为两种:在局域网上进行硬件多播和在互联网范围进行多播

在局域网上进行硬件多播

互联网号码指派管理局 IANA 拥有的以太网地址块的高 24 位为 00-00-5E, 因此 TCP/IP协议使用的以太网多播地址块的范围是从00-00-5E-00-00-00到00-00-5E-FF-FF-FF。在第3章讲过,以太网硬件地址字段中的第 1 字节的最低位为 1 时即为多播地址,这种多播地址数占 IANA 分配到的地址数的一半。因此 IANA 拥有的以太网多播地址的范围是从01-00-5E-00-00-00到01-00-5E-FF-FF-FF。不难看出,在每一个地址中,只有23位可用作多播。这只能和D类IP 地址中的23位有一一对应的关系。D类 IP 地址可供分配的有 28 位,可见在这 28 位中的前 5 位不能用来构成以太网硬件地址(图 4-54)。例如,IP 多播地址224.128.64.32(即 E0-80-40-20)和另一个 IP 多播地址 224.0.64.32(即 E0-00-40-20)转换成以太网的硬件多播地址都是 01-00-5E-00-40-20。由于多播 IP 地址与以太网硬件地址的映射关系不是唯一的,因此收到多播数据报的主机,还要在 IP 层三利 片用软件进滤,把不是本主机要接收的数据报丢弃。

下面就讨论IP多播所需要的协议

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

IP多播需要两种协议

如图4-55是互联网传送多播数据的例子。图中标有IP地址的四台主机都参加了一个多播组,其地址是226.15.37.123。显然多播数据报应当传送到路由器R1、R2、R3,而不是R4,因为R4连接的局域网并没有成员接入到多播组中。但这些路由器又怎么知道多播组的成员呢?这就要利用一个协议,叫做网际组管理协议IGMP(Internet Group Managerment Protocol)

图 4-55 强调了 IGMP 的本地使用范围。请注意,IGMP 并非在互联网范围内对所有多播组成员进行管理的协议。IGMP 不知道 IP 多播组包含的成员数,也不知道这些成员都分布在哪些网络上,等等。IGMP 协议是让连接在本地局域网上的多播路由器知道本局域网上是否有主机(严格讲,是主机上的某个进程)参加或退出了某个多播组。

显然,仅有 IGMP 协议是不能完成多播任务的。连接在局域网上的多播路由器还必须和互联网上的其他多播路由器协同工作,以便把多播数据报用最小代价传送给所有的组成员。这就需要使用多播路由选择协议。

网际组管理协议IGMP

与网际控制报文协议ICMP类似,IGMP使用IP数据报传送报文(即在IGMP首部加上IP数据首部构成了IP数据报),但它也向IP提供服务。因此,我们不能把IGMP看成是一个单独的协议,而是属于整个网际协议IP的一个组成部分。从概念上来讲,IGMP的工作可分为两个阶段:

  1. 第一个阶段:当某台主机加入新的多播组的时候,该主机应向多播组的多播地址发送一个IGMP报文,声明自己要成为该组的成员。本地的多播路由器收到IGMP报文后,还要利用多播路由选择协议把这种组成员关系转发给互联网上的其它多播路由器。

  2. 第二个阶段:组成员关系是动态的。本地多播路由器要周期性地探询本地局域网上的主

    机,以便知道这些主机是否还继续是组的成员。只要有一台主机对某个组响应,那么多播路由器就认为这个组是活跃的。但一个组在经过几次的探询后仍然没有一台主机响应,多播路由器就认为本网络上的主机已经都离开了这个组,因此也就不再把这个组的成员关系转发给其他的多播路由器。

IGMP协议设计的很仔细,避免了多播控制信息给网络增加大量的开销,IGMP采用的具体措施如下:

  1. 主机和多播路由器之间的所有通信都是使用IP多播。只要有可能,携带IGMP报文的数据报都用硬件多播来传送。因此在支持硬件多播的网络上,没有参加IP多播的主机不会接收到IGMP报文。

  2. 多播路由器在探询组成员关系时,只需要对所有的组发送一个请求信息的询问报文,而不需要对每一个组发送一个询问报文(虽然也允许对一个特定组发送询问报文)。默认的询问速率是每 125 秒发送一次(通信量并不太大)。

  3. 当同一个网络上连接有几个多播路由器时,它们能够迅速和有效地选择其中的一个来探询主机的成员关系。因此,网络上多个多播路由器并不会引起IGMP通信量的增大。

  4. 在 IGMP 的询问报文中有一个数值 N,它指明一个最长响应时间(默认值为 10秒)。当收到询问时,主机在 0 到 N 之间随机选择发送响应所需经过的时延。因此,若一台主机同时参加了几个多播组,则主机对每一个多播组选择不同的随机数。对应于最小时延的响应最先发送。

  5. 同一个组内的每一台主机都要监听响应,只要有本组的其他主机先发送了响应,自己就可以不再发送响应了。这样就抑制了不必要的通信量。

多播路由器并不需要保留组成员关系的准确记录,因为向局域网上的组成员转发数据报是使用硬件多播。多播路由器只需要知道网络上是否至少还有一台主机是本组成员即可。实际上,对询问报文每一个组只需有一台主机发送响应。

如果一台主机上有多个进程都加入了某个多播组,那么这台主机对发给这个多播组的每个多播数据报只接收一个副本,然后给主机中的每一个进程发送一个本地复制的副本。最后我们还要强调指出,多播数据报的发送者和接收者都不知道(也无法找出)一个多播组的成员有多少,以及这些成员是哪些主机。互联网中的路由器和主机都不知道哪个应用进程将要向哪个多播组发送多播数据报,因为任何应用进程都可以在任何时候向任何一个多播组发送多播数据报,而这个应用进程并不需要加入这个多播组。

多播路由选择协议

虽然TCP/IP中IP多播协议已经成为了建议标准,但多播路由选择协议尚未标准化。

在多播过程中,一个多播组的成员是动态变化的。多播路由选择协议实际上是找出以源主机为根节点多播转发树,在多播转发树上,每一个多播路由器向树的叶节点方向转发收到的多播数据报,但在多播转发树上的多播路由器上不会收到重复的多播数据报(即多播数据报不会在互联网中兜圈子)。不难看出,对于不同的多播组对应于不同的多播转发树,同一个多播组,对不同的源点也会有不同的多播转发树。

已有了多种实用的多播路由选择协议,它们在转发多播数据报的时候使用了以下三种方法:

  1. 洪泛与剪除:这种方法适用于较小的多播组,而所有的组成员接入的局域网也是相邻的。一开始,路由器转发多播数据报使用的是洪泛的方法(也就是广播)。为了避免兜圈子,采用了叫做反向广播路径RPB(Reverse Path Broadcasting)的策略。RPB的要点是:每一个路由器在收到一个多波数据报的时候,先检查数据报是否从源点经最短路径传来,进行这种检查很容易,只要从本路由器寻找到源点的最短路径上(之所以叫做反向路径,因为在计算最短路径的时候把源点当做终点)的第一个路由器是否就是刚才把多播数据报送来的路由器。若是,就向所有其他地方转发刚才收到的多播数据报(进入的方向除外),否则就丢弃而不转发。如果本路由器有好几个相邻路由器都处在源点的最短路径上(也就是说,存在多条同样长度的最短路径),那么只能选择一条最短路径,选择的转则是看这几条最短路径中谁的IP地址最小吗,如图4-57:

为了简单起见,在图4-57中的网络用路由器之间的链路来表示,我们假定各路由器之间的距离都是1。路由器R1在收到源点发来的多播数据报之后,向R2和R3进行转发。R2发现R1就在自己到源点的最短路径上,因此向R3和R4转发收到的多播数据报,R3发现R2不在自己的源点的最短路径上,因此丢弃R2发送过来的数据报。其他路由器也照样转发。R6到源点有两条最短路径:R7->R4->R2->R1->源点;R7->R5->R3->R1->源点。我们假定R4的IP地址比R5的IP小,所以我们只使用前一条最短路径。因此R7只转发R4发过来的IP数据报。而丢弃R5传过来的数据报。最后就得到了用来转发多播数据报的多播转发树(图中粗线),以后就按照这个多播转发树来转发多波数据报。这样就避免了多播数据报兜圈子问题。

如果在多播转发树上的某个路由器发现它的下游树枝(即叶节点方向)已没有该多播组成员,就应该把它和下游的树枝一起剪除,例如,在图4-57中虚线椭圆表示剪除的部分,当某个树枝有新增加的组成员的时候,可以再接入到多播转发树上。

  1. 隧道技术(tunneling):隧道技术适用于多播组的位置在地理上很分散的情况。例如在图4-58中,网1和网2都支持多播,现在网1的一些主机向网2的一些主机进行多播。但路由器R1和R2之间的网络并不支持多播,因而R1和R2路由器不能按多播地址进行转发数据报。为此。R1路由器就对多播数据报进行再封装,再加上普通数据报首部,使之成为一个向单一目的站发送的单播(unicast)数据报,然后通过隧道(tunnel)从R1发送到R2。

单播数据报到达路由器R2后,再由路由器R2剥去其首部,使之又恢复成原来的多播数据报,继续向多个目的站进行转发。使用隧道技术传送数据报又叫做IP中的IP(IP in IP)。

  1. 基于核心的发现技术:这种方法对于多播组的大小在较大范围内变化都合适。这种方法是对每一个多播组G指定一个核心路由器,给出它的IP单播地址。核心路由器按照前面讲过的方法创建出对应于多播组G的转发树。如果有一个路由器R1向这个核心路由器发送数据报,那么它在途中经过的每一个路由器都要检查其内容。当数据报到达参加了多播组G2的组地址时候,R2就向多播组G的成员转发这个多波数据报。如果R1发送的数据报是一个请求加入多播组G的数据报,R2就把这个信息加到它的路由中,并用隧道技术向R1转发每一个多播数据报副本。这样,参加组G的路由器就从核心向外增多了。扩大了多播转发树的范围。

计算机网络-4-11-IP多播的更多相关文章

  1. 计算机网络及TCP/IP知识点(全面,慢慢看)

    TCP/IP网络知识点总结 一.总述 1.定义:计算机网络是一些互相连接的.自治的计算机的集合.因特网是网络的网络. 2.分类: 根据作用范围分类: 广域网 WAN (Wide Area Networ ...

  2. 《TCP/IP具体解释卷2:实现》笔记--IP多播

    D类IP地址(224.0.0.0到239.255.255.255)不识别互联网内的单个接口,但识别接口组,被称为多播组. 单个网络上的组成员利用IGMP协议在系统之间通信. 多播路由器用多播选录协议. ...

  3. IP多播(组播)

    IP多播是实现数据一对多通信的模式.从一个源点传送到多个目的地,数据仅仅拷贝一份.这里说的数据仅仅拷贝一份,是指在每一条须要它的两个点之间,数据仅仅有一份.例如以下图为<计算机网络>(谢希 ...

  4. 计算机网络基础之IP地址详解

    计算机网络基础之IP地址详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.IP地址概述 1>.什么是IP地址 我们为什么要使用逻辑地址(IP地址)来标识网络设备,而不采 ...

  5. Visual C++实现局域网IP多播

    //////////////////////////////////////////////////////////////////////////////////////////////////// ...

  6. IP多播技术及其应用

    随着全球互联网(Internet)的迅猛发展,上网人数正以几何级数快速增长,以因特网技术为主导的数据通信在通信业务总量中的比列迅速上升,因特网业务已成为多媒体通信业中发展最为迅速.竞争最为激烈的领域. ...

  7. TCP/IP学习笔记13--IP地址的构成,广播地址,IP多播,子网掩码

    现在,我是蔚蓝的 :在此岸或彼岸,我都是蔚蓝的.  ---李瑾 IP对应的是OSI模型中的网络层,TCP对应的是传输层.每一个参与通信的主机都会有一个IP地址. IP地址(IPv4地址)含4个字节,每 ...

  8. 【miscellaneous】IP多播技术及其编程

    标  题: IP多播技术及其编程 发信站: 幽幽黄桷兰 (Mon Jun 16 10:35:39 2003) 转信站: SMTH!maily.cic.tsinghua.edu.cn!news2.ues ...

  9. IP multicast IP多播

    https://networklessons.com/multicast/multicast-routing/ IP多播有两种模式,密集模式和稀疏模式: Dense Mode Sparse Mode ...

  10. IP 多播

    IP 多播 一.IP 多播的基本概念 1.1.简介 不使用多播时需要发送 90 次单播: 使用多播时只需要发送 1 次多播: 1.2.IP 多播的一些特点 多播使用组地址:D 类IP地址支持多播.多播 ...

随机推荐

  1. Mave 下载与安装

    一,Maven 介绍 我们在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还需要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要.Maven是当前最受欢迎 ...

  2. 3.3 GO字符串处理

    strings方法 index 判断子字符串或字符在父字符串中出现的位置(索引)Index 返回字符串 str 在字符串 s 中的索引( str 的第一个字符的索引),-1 表示字符串 s 不包含字符 ...

  3. 【Linux】【Services】【Package】编译安装

    程序包编译安装:         testapp-VERSION-release.src.rpm --> 安装后,使用rpmbuild命令制作成二进制格式的rpm包,而后再安装:         ...

  4. 【Java 基础】 instanceof和isInstance区别详解

    obj instanceof class 也就是说这个对象是不是这种类型, 1.一个对象是本身类的一个对象 2.一个对象是本身类父类(父类的父类)和接口(接口的接口)的一个对象 3.所有对象都是Obj ...

  5. 通过静态分析和持续集成 保证代码的质量 (Helix QAC)2

    续上.... 第二章 部署示例:Jenkins and Helix QAC工具 第一节 Jenkins 作为持续集成系统 现在有很多持续集成工具,既有免费的,也有商业的.最近的研究显示,Jenkins ...

  6. Mysql解决主从慢同步问题

    目录 一.简介 为何有延迟 二.观察 三.解决办法 参数 多线程 组提交 一.简介 一般主从复制,有三个线程参与,都是单线程:Binlog Dump(主) ----->IO Thread (从) ...

  7. shell脚本 用户登录服务器发送钉钉提醒

    一.企业微信配置 1.获取AgentId(AppID).Secret .CropID.部门ID 创建一个企业微信应用获取到AgentId(AppID).Secret 2.获取CropID,点击 &qu ...

  8. [BUUCTF]PWN——others_shellcode

    others_shellcode 附件 解题步骤: 例行检查,32位程序,开启了NX(堆栈不可执行)和PIE(地址随机化)双重保护 试运行了一下,发现直接就能执行shell的命令 远程连接运行一下,直 ...

  9. 小迪安全 Web安全 基础入门 - 第二天 - Web应用&架构搭建&漏洞&HTTP数据包&代理服务器

    一.网站搭建 1.域名.是由一串用点分隔的字符组成的互联网上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位.域名可以说是一个IP地址的代称,目的是为了便于记忆后者. 2.子域名.在 ...

  10. CF275A Lights Out 题解

    Content 有一个 \(3\times 3\) 的矩阵.一开始每个元素都为 \(1\). 你可以对任意的位置进行操作,每次操作将在这个位置上的元素及其上下左右的元素全部由 \(1\) 改为 \(0 ...