网络协议--IGMP:Internet组管理协议

news2024/11/15 19:51:48

13.1 引言

12.4节概述了IP多播给出,并介绍了D类IP地址到以太网地址的映射方式。也简要说明了在单个物理网络中的多播过程,但当涉及多个网络并且多播数据必须通过路由器转发时,情况会复杂得多。

本章将介绍用于支持主机和路由器进行多播的Internet组管理协议(IGMP)。它让一个物理网络上的所有系统知道主机当前所在的多播组。多播路由器需要这些信息以便知道多播数据报应该向哪些接口转发。IGMP在RFC 111 2中定义[Deering 1989]。

正如ICMP一样,IGMP也被当作IP层的一部分。IGMP报文通过IP数据报进行传输。不像我们已经见到的其他协议,IGMP有固定的报文长度,没有可选数据。图13-1显示了IGMP报文如何封装在IP数据报中。
在这里插入图片描述

IGMP报文通过IP首部中协议字段值为2来指明。

13.2 IGMP报文

图13-2显示了长度为8字节的IGMP报文格式。
在这里插入图片描述

这是版本为1的IGMP。IGMP类型为1说明是由多播路由器发出的查询报文,为2说明是主机发出的报告报文。检验和的计算和ICMP协议相同。

组地址为D类IP地址。在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。在下一节中,当介绍IGMP如何操作时,我们将会更详细地了解它们。

13.3 IGMP协议

13.3.1 加入一个多播组

多播的基础就是一个进程的概念(使用的术语进程是指操作系统执行的一个程序),该进程在一个主机的给定接口上加入了一个多播组。在一个给定接口上的多播组中的成员是动态的—它随时因进程加入和离开多播组而变化。

这里所指的进程必须以某种方式在给定的接口上加入某个多播组。进程也能离开先前加入的多播组。这些是一个支持多播主机中任何API所必需的部分。使用限定词“接口”是因为多播组中的成员是与接口相关联的。一个进程可以在多个接口上加入同一多播组。

Stanford大学伯克利版Unix中的IP多播详细说明了有关socket API的变化,这些变化在Solaris 2.x和ip(7)的文档中也提供了。

这里暗示一个主机通过组地址和接口来识别一个多播组。主机必须保留一个表,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量。

13.3.2 IGMP报告和查询

多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:

  1. 当第一个进程加入一个组时,主机就发送一个IGMP报告。如果一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
  2. 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
  3. 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
  4. 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

使用这些查询和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到(使用相应的多播链路层地址)还拥有属于那个组主机的接口上。

图13-3显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组。
在这里插入图片描述

对TTL字段我们将在本节的后面介绍。

13.3.3 实现细节

为改善该协议的效率,有许多实现的细节要考虑。首先,当一个主机首次发送IGMP报告(当第一个进程加入一个多播组)时,并不保证该报告被可靠接收(因为使用的是IP交付服务)。下一个报告将在间隔一段时间后发送。这个时间间隔由主机在0~10秒的范围内随机选择。

其次,当一个主机收到一个从路由器发出的查询后,并不立即响应,而是经过一定的时间间隔后才发出一些响应(采用“响应”的复数形式是因为该主机必须对它参加的每个组均发送一个响应)。既然参加同一多播组的多个主机均能发送一个报告,可将它们的发送间隔设置为随机时延。在一个物理网络中的所有主机将收到同组其他主机发送的所有报告,因为如图13-3所示的报告中的目的地址是那个组地址。这意味着如果一个主机在等待发送报告的过程中,却收到了发自其他主机的相同报告,则该主机的响应就可以不必发送了。因为多播路由器并不关心有多少主机属于该组,而只关心该组是否还至少拥有一个主机。的确,一个多播路由器甚至不关心哪个主机属于一个多播组。它仅仅想知道在给定的接口上的多播组中是否还至少有一个主机。

在没有任何多播路由器的单个物理网络中,仅有的IGMP通信量就是在主机加入一个新的多播组时,支持IP多播的主机所发出的报告。

13.3.4 生存时间字段

在图13-3中,我们注意到IGMP报告和查询的生存时间(TTL)均设置为1,这涉及到IP首部中的TTL字段。一个初始TTL为0的多播数据报将被限制在同一主机。在默认情况下,待传多播数据报的TTL被设置为1,这将使多播数据报仅局限在同一子网内传送。更大的TTL值能被多播路由器转发。

回顾6.2节,对发往一个多播地址的数据报从不会产生ICMP差错。当TTL值为0时,多播路由器也不产生ICMP“超时”差错。

通过增加TTL值的方法,一个应用程序可实现对一个特定服务器的扩展环搜索(expanding ring search)。第一个多播数据报以TTL等于1发送。如果没有响应,就尝试将TTL设置为2,然后3,等等。在这种方式下,该应用能找到以跳数来度量的最近的服务器。

从224.0.0.0到224.0.0.255的特殊地址空间是打算用于多播范围不超过1跳的应用。不管TTL值是多少,多播路由器均不转发目的地址为这些地址中的任何一个地址的数据报。

13.3.5 所有主机组

在图13-3中,我们看到了路由器的IGMP查询被送到目的IP地址224.0.0.1。该地址被称为所有主机组地址。它涉及在一个物理网络中的所有具备多播能力的主机和路由器。当接口初始化后,所有具备多播能力接口上的主机均自动加入这个多播组。这个组的成员无需发送IGMP报告。

13.4 一个例子

现在我们已经了解了一些IP多播的细节,再来看看所包含的信息。我们使sun主机能够支持多播,并将采用一些多播软件所提供的测试程序来观察具体的过程。

首先,采用一个经过修改的netstat命令来报告每个接口上的多播组成员情况(在3.9节显示了netstat -ni命令的输出结果)。在下面的输出中,用黑体表示有关的多播组。
在这里插入图片描述

其中,-n参数将以数字形式显示IP地址(而不是按名字来显示它们),-i参数将显示接口的统计结果,-a参数将显示所有配置的接口。

输出结果中的第2行le0(以太网)显示了这个接口属于主机组224.0.0.1(“所有主机”),和两行地址,后一行显示相应的以太网地址为:01:00:5e:00:00:01。这正是我们期望看到的以太网地址,和12.4节介绍的地址映射一致。我们还看到其他两个支持多播的接口:SLIP接口sl0和回送接口lo0,它们也属于所有主机组。

我们也必须显示IP路由表,用于多播的路由表同正常的路由表一样。黑体表项显示了所有传往224.0.0.0的数据报均被送往以太网:
在这里插入图片描述

如果将这个路由表与9.2节中sun路由器的路由表作比较,会发现只是多了有关多播的条目。

现在使用一个测试程序来让我们能在一个接口上加入一个多播组(不再显示使用这个测试程序的过程)。在以太网接口(140.252.13.33)上加入多播组224.1.2.3。执行netstat程序看到内核已加入这个组,并得到期望的以太网地址。用黑体字来突出显示和前面netstat输出的不同。
在这里插入图片描述

我们在输出中再次显示了其他两个接口:sl0和lo0,目的是为了重申加入多播组只发生在一个接口上。

图13-4显示了tcpdump对进程加入这个多播组的跟踪过程。
在这里插入图片描述

当主机加入多播组时产生第1行的输出显示。第2行是经过时延后的IGMP报告,我们介绍过报告重发的时延是10秒内的随机时延。

在两行中显示硬件地址证实了以太网目的地址就是正确的多播地址。我们也看到了源IP地址为相应的sun主机地址,而目的IP地址是多播组地址。同时,报告的地址和期望的多播组地址是一致的。

最后,我们注意到,正像指明的那样,TTL是1。当TTL的值为0或1时,tcpdump在打印时用方括号将它们括起来,这是因为TTL在正常情况下均高于这些值。然而,使用多播我们期望看到许多TTL为1的IP数据报。

在这个输出中暗示了一个多播路由器必须接收在它所有接口上的所有多播数据报。路由器无法确定主机可能加入哪个多播组。

多播路由器的例子:

继续前面的例子,但我们将在sun主机中启动一个多播选路的守护程序。这里我们感兴趣的并不是多播选路协议,而是要研究所交换的IGMP查询和报告。即使多播选路守护程序只运行在支持多播的主机(sun)上,所有的查询和报告都将在那个以太网上进行多播,所以我们在该以太网中的其他系统中也能观察到它们。

在启动选路守护程序之前,加入另外一个多播组224.9.9.9,图13-5显示了输出的结果。
在这里插入图片描述

在这个输出中没有包括以太网地址,因为已经证实了它们是正确的。也删去了TTL等于1的说明,同样因为它们也是我们期望的那样。

当选路守护程序启动时,输出第1行。它发出一个已经加入了组224.0.0.4的报告。多播地址224.0.0.4是一个知名的地址,它被当前用于多播选路的距离向量多播选路协议DVMRP(Distance Vector Multicast Routing Protocol)所使用(DVMRP在RFC 1075中定义[Waitzman,Partridge,and Deering])。

在该守护程序启动时,它也发送一个IGMP查询(第2行)。该查询的目的IP地址为224.0.0.1(所有主机组),如图13-3所示。

第一个报告(第3行)大约在5秒后收到,报告给组224.9.9.9。这是在下一个查询发出之前(第4行)收到的唯一报告。当守护程序启动后,两次查询(第2行和第4行)发出的间隔很短,这是因为守护程序要将其多播路由表尽快建立起来。

第5、6和7行正是我们期望看到的:sun主机针对它所属的每个组发出一个报告。注意组224.0.0.4是被报告的,而其他两个组则是明确加入的,因为只要选路守护程序还在运行,它始终要属于组224.0.0.4。

下一个查询位于第8行,大约在前一个查询的2分钟后发出。它再次引发三个我们所期望的报告(第9、10和11行)。这些报告的时间顺序与前面不同,因为接收查询和发送报告的时间是随机的。

最后的查询在前一个查询的大约2分钟后发出,我们再次得到了期望的响应。

13.5 小结

多播是一种将报文发往多个接收者的通信方式。在许多应用中,它比广播更好,因为多播降低了不参与通信的主机的负担。简单的主机成员报告协议(IGMP)是多播的基本模块。

在一个局域网中或跨越邻近局域网的多播需要使用本章介绍的技术。广播通常局限在单个局域网中,对目前许多使用广播的应用来说,可采用多播来替代广播。

然而,多播还未解决的一个问题是在广域网内的多播。[Deering and Cheriton 1990]提出扩展目前的路由协议来支持多播。9.13节中的[Perlman 1992]讨论了广域网多播的一些问题。

[Casner and Deering 1992] 介绍了使用多播和一个称为MBONE(多播主干)的虚拟网络在整个Internet上传送IETF会议的情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1133447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wkhtmltoimage/wkhtmltopdf 使用实践

1. 介绍 wkhtmltopdf/wkhtmltoimage 用于将简单的html页面转换为pdf或图片; 2.安装 downloads 2.1. mac os 下载64-bit 版本然后按照指示安装, 遇到 untrust developers 时,需要在 Settings -> Privacy 处信任下该安装包。 2.2. debian # 可用…

[AutoSar NVM] 存储架构

依AutoSAR及公开知识辛苦整理,禁止转载。 专栏 《深入浅出AutoSAR》, 全文 2900 字. 图片来源: 知乎 汽车的ECU内存中有很多不同类型的变量,这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…

AnkiPDF Guru软件评测:打开全新学习方式的大门

在当今信息爆炸的时代,如何高效学习和记忆成为了每个人关注的焦点。AnkiPDF Guru软件作为结合了Anki和PDF的学习利器,向我们展示了一种全新的学习方式。本文将以软件的实用性和使用场景为切入点,从专业的角度客观分析和评测该软件&#xff0c…

3.2.6:工作表的VBA操作引申

我给VBA的定义:VBA是个人小型自动化处理的有效工具。利用好了,可以大大提高自己的劳动效率,而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册,现在已经全部完成,希望大家利用、学习。 如果…

【毕业设计】基于SSM酒店后台管理系统

前言 🔥本系统可以选作为毕业设计,运用了现在主流的SSM框架,采用Maven来帮助我们管理依赖,所选结构非常合适大学生所学的技术,本系统结构简单,容易理解!本系统功能结构完整,非常高适…

express session JWT JSON Web Token

了解 Session 认证的局限性 Session 认证机制需要配合 cookie 才能实现。由于 Cookie 默认不支持跨域访问,所以,当涉及到前端跨域请求后端接口的时候,需要做很多额外的配置,才能实现跨域 Session 认证。 注意: 当前端…

rust学习—— 复合类型结构体、复合类型枚举、复合类型元组

文章目录 复合类型元组用模式匹配解构元组用点来访问元组元组的使用示例 复合类型结构体结构体定义结构体语法创建结构体实例访问结构体字段简化结构体创建结构体更新语法 结构体的内存排列元组结构体(Tuple Struct)单元结构体(Unit-like Struct)结构体数据的所有权打印结构体 …

k8s kubeadm配置

master 192.168.41.30 docker、kubeadm、kubelet、kubectl、flannel node01 192.168.41.31 docker、kubeadm、kubelet、kubectl、flannel node02 192.168.41.32 do…

springboot配置redis

1.Jedis库 依赖库 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>5.0.2</version> </dependency>使用案例&#xff1a; Testpublic void jedis(){Jedis jedis new Jedis("127…

【Java 进阶篇】Java Servlet URL Patterns 详解

Java Servlet 是构建动态 Web 应用程序的关键组件之一&#xff0c;而 URL Patterns&#xff08;URL 模式&#xff09;则是定义 Servlet 如何响应不同 URL 请求的重要部分。在本文中&#xff0c;我们将深入探讨 Java Servlet URL Patterns 的各个方面&#xff0c;适用于初学者&a…

谢谢大家!

注&#xff1a;此篇都是真心话&#xff01; 谢谢各位对我长久以来的支持&#xff0c;感谢感谢&#xff01; 感谢各位把我的阅读量提升到21487&#xff01; 感谢各位把我的排名提升到24916&#xff08;灰长前&#xff0c;干到前1000我发超长文章&#xff09;&#xff01; 感谢…

会声会影2023永久稳定绿色汉化中文版安装包下载

会声会影2023操作简单&#xff0c;功能同样强大&#xff01;会声会影附带上百种特效、滤镜、转场、模板。同时各类专业级视频工具&#xff0c;如调色、遮罩、绿幕抠像、运动追踪、分屏创建器&#xff0c;满足更高标准的视频需求。这款软件上手操作简单易学&#xff0c;就算你在…

已更新!宝藏教程!MYSQL-第六章节多表查询(一对一,多对多,一对多),连接查询(内,外连接),联合查询,子查询 代码例题详解这一篇就够了(附数据准备代码)

c知识点合集已经完成欢迎前往主页查看&#xff0c;点点赞点点关注不迷路哦 点我进入c第一章知识点合集 MYSQL第一章节DDL数据定义语言的操作----点我进入 MYSQL第二章节DDL-数据库操作语言 DQL-数据查询语言----点我进入 MYSQL第三章节DCL-管理用户&#xff0c;控制权限----点我…

windows安装数据库MySQL

windows安装数据库MySQL 文章目录 windows安装数据库MySQL一、MySQL官网下载压缩包二、在D盘新建文件夹D:\MySQL&#xff0c;将下载的压缩包解压到该文件夹下三、配置环境变量四、通过命令行模式安装、启用、配置SQL服务 一、MySQL官网下载压缩包 下载地址&#xff1a;https:/…

Unity ShaderGraph 必会,实用的渐变滑条

常用来做一下区分不同区间部位的区别 G 对应的是 UV 的垂直轴Y R 对应的是 UV 的水平轴X 举个例子&#xff1a; 是不是层次感立马就不一样了呀&#xff0c;嘻嘻嘻嘻嘻嘻嘻 加了渐变的&#xff1a; 没有加渐变的&#xff1a;

C# 图解教程 第5版 —— 第7章 深入理解类

文章目录 7.1 类成员7.2 成员修饰符的顺序7.3 实例类成员&#xff08;*&#xff09;7.4 静态字段&#xff08;*&#xff09;7.5 从类的外部访问静态成员7.5.1 静态字段示例7.5.2 静态成员的生存期 7.6 静态函数成员7.7 其他静态类成员类型7.8 成员常量7.9 常量与静态量7.10 属性…

SLAM从入门到精通(三边测量法详解)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 三边测量&#xff0c;或者说叫三角定位&#xff0c;是定位系统中很常见的一种测量方法。它最主要的原理就是依靠已有的三个特征坐标和半径&#xf…

安全典型配置(五)SNMP中应用ACL过滤非法网管案例

【微|信|公|众|号&#xff1a;厦门微思网络】 安全典型配置&#xff08;一&#xff09;使用ACL限制FTP访问权限案例 安全典型配置&#xff08;二&#xff09;使用ACL限制用户在特定时间访问特定服务器的权限 安全典型配置&#xff08;三&#xff09;使用ACL禁止特定用户上网…

mysql 命令行安装

一、安装包下载 1、下载压缩包 &#xff08;1&#xff09;公众号获取 关注微信公众号【I am Walker】&#xff0c;回复“mysql”获取 &#xff08;2&#xff09;官网下载 安装地址MySQL :: Download MySQL Community Server ​ ​ 二、解压 下载完之后进行解压&…

如何学习能减少对现有工作的依赖?

减少对现有工作的依赖需要你提升自己的技能和能力&#xff0c;并拓宽你的职业选择。以下是一些具体的步骤&#xff1a; 自我评估: 确定你目前的技能和兴趣&#xff0c;并识别哪些领域你可以提升或学习新的技能。 设定学习目标: 根据自我评估的结果&#xff0c;设定具体的学习目…