【网络开发】组播问题分析

news/2024/7/4 19:48:11

1、知识介绍
   根据接收者对组播源处理方式的不同,组播模型分为以下三类:
   1)ASM 模型:Any-Source Multicast,任意信源组播
   2)SFM 模型:Source-Filtered Multicast,信源过滤组播
   3)SSM 模型:Source-Specific Multicast,指定信源组播

   解释:
   IGMPv3主机为接口上的每一个组播都维护一个表现信息:
   格式为:(组播地址,过滤模式,源列表)

   过滤模式包含INCLUDE和EXCLUDE:
   1)INCLUDE模式表示只接收来自源列表中列出的源发送的组播数据包;
   2)EXCLUDE模式表示只接收来自不在源列表中列出的组播源发送的组播数据包。

   源列表包含0个或多个IP单播地址,通常用集合形式来表示。


   可能存在的问题:对于某些交换机,可能对于不在组播组中的数据不进行发送。
   所以,可能需要将组播发送的源也进行组播注册,离开时发送leave。


2、如何实现主机发送IGMP的报文。
   若进程要加入到一个组播组中,用soket的setsockopt()函数发送该选项。
   该选项类型是ip_mreq结构,它的第一个字段imr_multiaddr指定了组播组的地址,
   第二个字段imr_interface指定了接口的IPv4地址。


   1)通过设置socket属性就可以相应的将IGMP的不同类型报文发送出去。
      对于IGMP的报文,设置的socket的属性有以下几个。下面具体说明。

 

 

3、如何在交换机上设置组播策略。
   在ASM/SFM/SSM模式中配置。可以不考虑,而只用设置加入源组播地址,从源组播地址中删除操作。
   这样可以测试被删除的地址能否将组播信息发送出来。
  

4、socket组播属性说明:(struct ip_mreq / struct ip_mreq_source)
 1)IP_ADD_MEMBERSHIP    struct ip_mreq
  若进程要加入到一个组播组中,用soket的setsockopt()函数发送该选项。
    该选项类型是ip_mreq结构,它的第一个字段imr_multiaddr指定了组播组的地址,第二个字段imr_interface指定了接口的IPv4地址。
 2)IP_DROP_MEMBERSHIP
  该选项用来从某个组播组中退出。数据结构ip_mreq的使用方法与上面相同。
 3)IP_MULTICAST_IF
  该选项可以修改网络接口,在结构ip_mreq中定义新的接口。
 4)IP_MULTICAST_TTL
  设置组播报文的数据包的TTL(生存时间)。默认值是1,表示数据包只能在本地的子网中传送。
  5)IP_MULTICAST_LOOP
  组播组中的成员自己也会收到它向本组发送的报文。这个选项用于选择是否激活这种状态。

  6)考虑使用的(struct ip_mreq_source)
   IP_BLOCK_SOURCE   :Removes the given source as a sender to the supplied multicast group and interface.    
   IP_UNBLOCK_SOURCE : 排除方式加入组播组

   IP_ADD_SOURCE_MEMBERSHIP  包含方式加入组播组
   IP_DROP_SOURCE_MEMBERSHIP

 实验:
分别设置socket属性,看发送的报文是哪些。

转载于:https://www.cnblogs.com/huty/p/8517216.html


http://www.niftyadmin.cn/n/4021786.html

相关文章

Postgresql 离线安装教程

Postgresql 离线安装教程 1.下载postgresql安装包和依赖包 依赖包包括:gcc、zlib、readline等,但是一般的服务器都自带gcc或zlib。 postgresql包下载地址:https://ftp.postgresql.org/pub/source/ readline包下载地址:http://ftp.…

linux系统权限修改命令

1.chmod命令用来修改文件的操作权限 修改文件权限: chmod 755 test.txt 修改文件夹权限: chmod 755 test/ 修改文件夹及文件夹下所有文件权限: chmod -R 755 test/ 2.chown命令用来修改文件的用户 修改文件所属用户: cho…

mysql快问快答

1.查看mysql版本 select version(); show variables like version; 2.mysql 可以按timestamp排序吗? 可以 3.怎么查询商户下是否有某个账户? 此种问题默认商户是已存在的,那么只需用账户左连接商户,看是否有记录。转载于:https://…

postgres设置时区报错:invalid value for parameter “TimeZone“: “PRC“

使用java连接postgres库时,因为数据库时区问题连接不成功,修改数据库时区时,一直提示“invalid value for parameter "TimeZone": "PRC"”错误,经排查,是因为数据库时区文件权限问题造成的。修改p…

C/C++ 线程池的作用与结构 C++代码实现

线程池的作用 如果多次使用线程,那么就需要多次的创建并撤销线程。但是创建/撤销的过程会消耗资源。线程池是一种数据结构,其中维护着多个线程,这避免了在处理短时间任务时,创建与销毁线程的代价。即在程序开始运行前预先创建一定…

liunx 硬盘分区

第一步:分区 fdisk /dev/sdb 命令(输入 m 获取帮助):m命令操作 a toggle a bootable flag b edit bsd disklabel c toggle the dos compatibility flag d delete a partition g create a new empty GPT partition table G create an IRIX (SGI) partiti…

使用nginx部署VUE项目及nginx配置

1.将vue项目打包放到指定位置,比如/data下 2.安装nginx centos7在线安装比较方面,可以直接使用命令:yum install nginx安装,具体步骤如下: 2.1.修改yum源 查看源地址:http://nginx.org/en/linux_packag…

centos 7 添加端口白名单,设置防火墙白名单

1.查看防火墙白名单: firewall-cmd --list-ports 2.增加防火墙白名单: firewall-cmd --permanent --add-port8080/tcp 3.重启防火墙 firewall-cmd --reload