IP Multicast: IGMPv2

2024-02-29 11:48
文章标签 ip multicast igmpv2

本文主要是介绍IP Multicast: IGMPv2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

IGMP是主机和路由器之间的组管理协议,对于组播应用程序来讲这个应该是很重要的。我的理解是对于Receiver主机,组管理协议是必需的,毕竟是决定自己收不收组播数据流;但是对Source主机来讲,如果它是只发而不收任何组播数据,就不需要IGMP了。

先说一下实验拓扑:


跟上次一样http://blog.sina.com.cn/s/blog_4b5039210102e0vy.html Sender会持续循环不断的发往224.1.1.1一个字符串cisco.两个receiver进行接收。multicast网里运行pim密集模式进行组播数据转发。

1.对于主机

运行IGMPv2的主机主要使用下列三种类型的消息,不过我只见过第一种和第三种(启动receiver程序并在receiver1端抓包)

(1) membership report

(2) version 1 membership report

(3) Leave group

IGMPv2 membership report的包结构:



IP层注意几个地方(1)TTL=1;(2)protocol number = 2;(3)destination 为此组播目的地址224.1.1.1

IGMPv2的报文结构很简单。

version:2

Type: 0x16 代表是version 2 Membership Report;0x17是Leave Group;0x11 Membership Query;0x12 version 1 Membership Report,

Max Response Time:最大响应时间,对membership query有效。

Header Checksum:校验

Multicast Address:组播地址,此处表示想要接收224.1.1.1的组播数据包。

 

IGMPv2 Leave Group包结构:



python的组播程序关闭,产生离开消息。

2. 对于路由器

路由器发送的IGMPv2主要是查询消息,包括

(1) General Query 常规查询

(2) Group-Specific Query 特定组查询

 

General Query包结构:

General Query的作用和IGMP v1中queries的作用是一样的,当路由器发送General Query查询主机时,使用目的地址为224.0.0.1,当有主机回复时,便认为网络中存在组成员,则将组播发送到该网络,并且General Query每一分钟发送一次,主机每次都回复,如果连续三个General Query没有回复,那么路由器便认为网络中的组成员已经离开,也就停止向网络中发送组播数据了。


和Report不同的几点:

(1)目的地址是224.0.0.1 代表本子网内所有主机,即向所有主机询问是否有要加入组播组的;

(2)每隔一段时间会轮询一次,默认是60秒,路由器可配置修改此时间;


Group-Specific Query 的包结构:

在IGMP v2中,当网络中的组成员离开之后,会向路由器发送Leave Group来通告自己的离开,而只有向路由器发送过Membership Report的组成员离开时才需要发送Leave Group,其它组员离开时,也是没有任何动作的,因此当网络中的组成员离开后,路由器并不知道网络中是否还有其它组员,因为其它组员没有通告过自己的存在。所以如果路由器马上停止向子网转发组播的话,可能会造成某些还存在的组员无法接收组播。最终当路由器收到组成员离开时发来的Leave Group后,并不能马上停止组播的转发,还要向网络中发送Group-Specific Query,目的地址为组的地址,用来查询网络中是否还有别的组员存在,如果有组员回复了,那么组播流就不会中断。为了防止包丢失而误认为没有组员,路由器每1秒分别发两个Group-Specific Query。

 

组成员机制就先写这么多。

这篇关于IP Multicast: IGMPv2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/758686

相关文章

shell脚本快速检查192.168.1网段ip是否在用的方法

《shell脚本快速检查192.168.1网段ip是否在用的方法》该Shell脚本通过并发ping命令检查192.168.1网段中哪些IP地址正在使用,脚本定义了网络段、超时时间和并行扫描数量,并使用... 目录脚本:检查 192.168.1 网段 IP 是否在用脚本说明使用方法示例输出优化建议总结检查 1

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景:

2024.9.8 TCP/IP协议学习笔记

1.所谓的层就是数据交换的深度,电脑点对点就是单层,物理层,加上集线器还是物理层,加上交换机就变成链路层了,有地址表,路由器就到了第三层网络层,每个端口都有一个mac地址 2.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?答案:子网 3.将源 IP 与目的 IP 分别同这个子网掩码进行与运算****,相等则是在一个子网,不相等就是在不同子网 4.A 如何知道,哪个设备是路由器?答案:在 A

linux下查看自己的外网ip

局域网的服务器是通过ADSL路由器连接外网的,但ADSL是从ISP运营商那儿通过动态获得IP的,那么我怎么知道自己的外网地址是多少呢? 今天得到几个办法: curl -s http://whatismyip.org wget http://whatismyip.org 然后再  cat index.html 也可以看到

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端。 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配。 服务器端: #include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.

超越IP-Adapter!阿里提出UniPortrait,可通过文本定制生成高保真的单人或多人图像。

阿里提出UniPortrait,能根据用户提供的文本描述,快速生成既忠实于原图又能灵活调整的个性化人像,用户甚至可以通过简单的句子来描述多个不同的人物,而不需要一一指定每个人的位置。这种设计大大简化了用户的操作,提升了个性化生成的效率和效果。 UniPortrait以统一的方式定制单 ID 和多 ID 图像,提供高保真身份保存、广泛的面部可编辑性、自由格式的文本描述,并且无需预先确定的布局。

C# 如何同时Ping多个IP地址

在C#中,如果需要同时ping多个IP地址,可以采用多线程或异步编程的方式来实现,以便可以同时进行多个ping操作。以下是两种常用的方法: 方法一:使用多线程(Task 或 Thread) 使用Task是更现代和推荐的方式,因为它内置了更好的线程管理和异常处理机制。以下是一个使用Task的示例,展示如何同时ping多个IP地址: using System; using System.Co

JAVAEE初阶第七节(中)——物理原理与TCP_IP

系列文章目录 JAVAEE初阶第七节(中)——物理原理与TCP_IP 文章目录 系列文章目录JAVAEE初阶第七节(中)——物理原理与TCP_IP 一.应用层重点协议)1. DNS2 .NAT3. NAT IP转换过程 4 .NAPT5. NAT技术的缺陷6. HTTP/HTTPS7. 自定义协议 二. 传输层重点协议 1 .UDP协议 2.1.1 UDP协议端格式 2.1.2 UD