内核中的多播

Netlink多播开发指南:如何用Linux内核广播机制实现高效事件通知 本文详细解析了Linux内核中Netlink多播机制的开发实践,指导开发者如何利用这一高效事件通知系统实现内核与用户空间的实时通信。通过多播组配置、消息处理及性能优化策略,显著提升物联网和网络安全领域的设备监控效率。 阅读详情
内核中的多播
Linux内核中的多播是利用结构struct ip_mc_socklist来将多播的各个方面连接起来的,其示意图如图11.7所示。

1.  struct inet_sock { 
2.      ... 
3.      __u8                mc_ttl;     /*多播TTL*/ 
4.      ... 
5.      __u8                ... 
6.                          mc_loop:1;      /*多播回环设置*/ 
7.      int                 mc_index;       /*多播设备序号*/ 
8.      __be32              mc_addr;        /*多播地址*/ 
9.      struct ip_mc_socklist   *mc_list;   /*多播群数组*/ 
10.    ... 
11.};
结构成员mc_ttl用于控制多播的TTL;
结构成员mc_loop表示是否回环有效,用于控制多播数据的本地发送;
结构成员mc_index用于表示网络设备的序号;
结构成员mc_addr用于保存多播的地址;
结构成员mc_list用于保存多播的群组。
1.结构ip_mc_socklist
结构成员mc_list的原型为struct ip_mc_socklist,定义如下:
1.  struct ip_mc_socklist 
2.  { 
3.      struct ip_mc_socklist   *next; 
4.      struct ip_mreqn     multi; 
5.      unsigned int        sfmode;     /*MCAST_{INCLUDE,EXCLUDE}*/ 
6.      struct ip_sf_socklist   *sflist; 
7.  };
成员参数next指向链表的下一个节点。
成员参数multi表示组信息,即在哪一个本地接口上,加入到哪一个多播组。
成员参数sfmode是过滤模式,取值为 MCAST_INCLUDE或MCAST_EXCLUDE,分别表示只接收sflist所列出的那些源的多播数据报,和不接收sflist所列出的那些源的多播数据报。
成员参数sflist是源列表。
2.结构ip_mreqn
multi成员的原型为结构struct ip_mreqn,定义如下:
1.  struct ip_mreqn 
2.  { 
3.      struct in_addr  imr_multiaddr;      /*多播组的IP地址*/ 
4.      struct in_addr  imr_address;        /*本地址网络接口的IP地址*/ 
5.      int         imr_ifindex;            /*网络接口序号*/ 
6.  };
该结构体的两个成员分别用于指定所加入的多播组的组IP地址,和所要加入组的那个本地接口的IP地址。该命令字没有源过滤的功能,它相当于实现IGMPv1的多播加入服务接口。
3.结构ip_sf_socklist
成员sflist的原型为结构struct ip_sf_socklist,定义如下:
1.  struct ip_sf_socklist 
2.  { 
3.      unsigned int    sl_max;     /*当前sl_addr数组的最大可容纳量*/ 
4.      unsigned int    sl_count;   /*源地址列表中源地址的数量*/ 
5.      __u32         sl_addr[0];       /*源地址列表*/ 
6.  };
成员参数sl_addr表示是源地址列表;
成员参数sl_count表示是源地址列表中源地址的数量;
成员参数sl_max表示是当前sl_addr数组的最大可容纳量(不确定)。
4.选项IP_ADD_MEMBERSHIP
选项IP_ADD_MEMBERSHIP用于把一个本地的IP地址加入到一个多播组,在内核中 其处理过程如图11.8所示,在应用层调用函数setsockopt()函数的选项IP_ADD_MEMBE- RSHIP后,内核的处理过程如下,主要调用了函数ip_mc_join_group()。

(1)将用户数据复制如内核。
(2)判断广播IP地址是否合法。
(3)查找IP地址对应的网络接口。
(4)查找多播列表中是否已经存在多播地址。
(5)将此多播地址加入列表。
(6)返回处理值。
5.选项IP_DROP_MEMBERSHIP
选项IP_DROP_MEMBERSHIP用于把一个本地的IP地址从一个多播组中取出,在内核中其处理过程如图11.9所示,在应用层调用 setsockopt()函数的选项IP_DROP_ MEMBERSHIP后,内核的处理过程如下,主要调用了函数ip_mc_leave_group()。
(1)将用户数据复制入内核。
(2)查找IP地址对应的网络接口。
(3)查找多播列表中是否已经存在多播地址。
(4)将此多播地址从源地址中取出。
(5)将此地址结构从多播列表中取出。
(6)返回处理值。
部署模型:Libtorch使用笔记【Pytorch的C++版本】【把用Pytorch训练好的模型打包保存为.pt格式,使用Libtorch去加载.pt格式模型,在C++工程中去用就好了】 A : Libtorch是pytorch的C++版本,现在的很多大型项目都是用C++写的,想使用训练好的模型,需要通过caffe等方式去集成,比较麻烦。这里pytorch官方提出了Libtorch,我们就可以把pytorch训练好的模型,打包起来,直接在C++工程中去用就好了,相比较caffe等,非常方便!虽然对于许多需要动态性和易迭代性的场景来说,Python是一种合适且首选的语言,但在同样的情况下,Python的这些特性恰恰是不利的。生产环境是一个需要低延迟和有严格部署要求的领域,一般选择C++。 阅读详情

相关推荐

用Arduino和8个舵机,从零搭建一台能走路的并联腿机器狗(附完整代码与3D模型)

本文详细介绍了如何用Arduino和8个舵机从零搭建一台能走路的并联腿机器狗,包括硬件准备、结构组装、电路系统搭建、运动算法实现和Arduino编程。通过完整的代码与3D模型,帮助创客深入理解机器人运动原理,实现稳健行走的8自由度机器狗。

weixin_30482383的博客 701

深度探索Linux内核之离开一个多播组(最简单的情况)

应用程序通过命令字IP_DROP_MEMBERSHIP使一个socket离开一个多播组,IP_DROP_MEMBERSHIP是一个IP层的命令字,其调用使用的参数是结构体struct ip_mreq。该结构体的两个成员分别用于指定所要离开的多播组的组IP地址,和所要离开组的那个本地接口的IP地址。     ip_setsockopt实现了该命令字,它通过调用ip_mc_leave_group使s

L_yangliu的专栏 2005

SAP FI实战入门:从借贷法则到F-02记账,新手必懂的会计凭证操作

本文详细介绍了SAP FI模块中借贷记账法的核心逻辑及F-02凭证录入的全流程操作。通过实例解析借贷方向规则、科目编码设置及金额镜像原则,帮助新手快速掌握会计凭证操作技巧。同时提供了FS10N余额查询和常见错误排查方法,助力用户高效完成SAP财务记账任务。

weixin_29306571的博客 261

Linux网络编程-UDP组播

#include #include #include #include #include #include #define BUFLEN 255 /********************************************************************* *filename: mcastclient.c *purpose: 演示组播

自我学习小计 1694

CPRI原理及应用--基本原理

本文主要介绍CPRI的基本原理,包括CPRI的发展历程、CPRI基本协议、速率、帧结构、时延模型等

u014035968的博客 2万+

AD936x Evaluation Software 实战配置指南:从寄存器设置到滤波器优化

本文提供AD936x Evaluation Software的实战配置指南,详细解析从工程创建、RF向导与时钟模块配置,到数字滤波器优化、数字接口设置及增益控制的完整流程。重点分享寄存器设置、滤波器系数权衡及PLL稳定技巧等核心要点,帮助开发者高效配置AD9361/AD9363射频芯片,快速应用于SDR、基站等场景。

perl8的博客 697

linux系统之 组播实例代码(多播 、IP_ADD_MEMBERSHIP 、IP_MULTICAST_IF)

11.3 多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。 11.3.1 多播的概念 多播,也称为"组播",将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的 数据。 在广域网上广播的时候,...

随意的风的专栏 4622

韩版传奇 2 源码分析与 Unity 重制(一)服务端 TCP 状态管理

该专题将会分析 LOMCN 基于韩版传奇 2,使用 .NET 重写的传奇源码(服务端 + 客户端),分析数据交互、状态管理和客户端渲染等技术,此外笔者还会分享将客户端部分移植到 Unity 和服务端用现代编程语言重写的全过程。本文重点介绍了服务端的启动链路、网络初始化和连接处理这三个过程,并简要分析的游戏循环的实现与数据包处理,在下一篇文章中,我们会从客户端角度分析从游戏启动、登录、游戏开始和基础游戏交互的全流程。

东方猫的博客 2497

IGMP

IGMP(Internet Group Manage Protocol):Internet组管理协议,提供internet网际多点传送的功能,即将一个ip包拷贝给多个host。   IGMP的工作过程如下: 一. 当主机加入一个新的工作组时,它发送一个igmp host membership report的报文给全部主机组,宣布此成员关系.本地多点广播路由器接受到这个报文后,向Inter

星空探索 837

fast-lio运行步骤(使用velodyne数据)

使用fast-lio运行velodyne数据

ericdowney 4769

开源数字人、虚拟直播部署教程

对,你无看错,是欧美的。在直播带货案例里,我们把模型导入到ue4,我们给模型在ue4里预设了四个动作(站着、站着说话、坐着、坐着说话),三个表情(平静、开发、愤怒),三个镜头(全局、近矩说话、看显示器播放商品展示)。我们只需要把目标主播的直播给录制下来,提取样本数据,然后训练一个从粉丝的不同刺激的组合,到主播的不同响应方式的多元逻辑回归的数学模型参数即可。

南七小僧的学海无涯 4560

组播原理及 C语言编程

源自:http://blog.163.com/mh_333333333/blog/static/3585491220095199419684/ 摘要:     本文可做为TCP/IP组播技术的入门材料,文中介绍了组播通信的概念及原理,以及用于组播应用编程的Linux API的详细资料。为了使读者更加完整的了解Linux 组播的整体概念,文中对实现该技术的核心函数也做了介绍。在文章的最后给出

xiaowen_10的专栏 9520

【深度学习】最强算法之:残差网络(ResNet)

一篇掌握深度学习算法之:残差网络

商务合作 | 面试培训 | 职场规划 ==>主页扫码 7837

11.3.4 内核中的多播

11.3.4  内核中的多播Linux内核中的多播是利用结构struct ip_mc_socklist来将多播的各个方面连接起来的,其示意图如图11.7所示。  图11.7  多播的内核结构struct inet_sock {    ...    __u8                mc_ttl;     /*多播TTL*/    ...    __

Linux/UNIX典藏大系 884

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

linux 内核中的多播

2010-09-17 11:28:40 标签:linux linux 组播 内核中的多播 Linux内核中的多播是利用结构struct ip_mc_socklist来将多播的各个方面连接起来的,其示意图如图11.7所示。       1.  struct inet_sock {   2.      ...   3.      __u8                m

badboyplane的专栏 1599

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何在Linux c/c++ 进行多播(组播)编程

如何在Linux 启用组播

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 4560

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

linux 网络转主机,Linux网络编程--多播 [转]

一、多播介绍什么是多播?单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。多播,也称为“组播”,将局域网中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其...

weixin_42303803的博客 300

linux多播

11.3 多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。 11.3.1 多播的概念 多播,也称为"组播",将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的时候其数据仅仅在同一分组中进行,其他的主机没有加入此分组不能收发对应的 数据。 在广域网上广播的时候,其中的交

bolinmengling的博客 344

多播--概念和编程

  11.3  多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。 11.3.1  多播的概念 多播,也称为"组播",将网络中同一业务类型主机进行了逻辑上的分组,进行数据收发的...

wqfhenanxc的专栏 2557

linux内核 ip组播,Linux配置及测试IP多播(Multicast)

224.0.0.0到239.255.255.255 这些都叫组播地址我举个不太严谨 的例子有几个主机已经加入了 224.1.1.1 这个组192.168.1.1---192.168.1.2---192.168.1.3---比如这三个ip地址加入了组224.1.1.1然后组播源10.1.1.1--- 向224.1.1.1 这个组地址发送信息的时候 那几个加入组的主机都会收到组播源发送的信息...

weixin_30095015的博客 2224

Linux 内核网络教程(三)

原文:Linux kernel networking 协议:CC BY-NC-SA 4.0 六、高级路由 第五章讲述了 IPv4 路由子系统。本章继续讲述路由子系统,并讨论高级 IPv4 路由主题,如多播路由、多路径路由、策略路由等。这本书讨论的是 Linux 内核网络实现——它没有深入研究用户空间多播路由守护进程实现的内部,这些实现非常复杂,超出了本书的范围。然而,我确实在某种程度上讨论了用户空间多播路由守护进程和内核中多播层之间的交互。我还简要讨论了互联网组管理协议(IGMP)协议,这是组播组成员管

龙哥盟 1412

多播,IP_MULTICAST_TTL,IP_ADD_MEMBERSHIP,IP_MULTICAST_IF,IP_DROP_MEMBERSHIP

原文:http://blog.chinaunix.net/uid-28458801-id-5085099.html 11.3  多播 单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这

Luke的专栏 1万+

用户空间和内核空间通讯之【Netlink 下】

关于Netlink多播机制的用法         在上一篇博文中我们所遇到的情况都是用户空间作为消息进程的发起者,Netlink还支持内核作为消息的发送方的情况。这一般用于内核主动向用户空间报告一些内核状态,例如我们在用户空间看到的USB的热插拔事件的通告就是这样的应用。        先说一下我们的目标,内核线程每个一秒钟往一个多播组里发送一条消息,然后用户空间所以加入了该组的进程都会收到这

christian513的博客 256

linux 内核对多播报文的处理

linux 内核对多播报文的处理

一叶知秋的博客 1361

用户空间与内核空间通讯之[netlink下]

关于Netlink多播机制的用法 在上一篇博文中我们所遇到的情况都是用户空间作为消息进程的发起者,Netlink还支持内核作为消息的发送方的情况。这一般用于内核主动向用户空间报告一些内核状态,例如我们在用户空间看到的USB的热插拔事件的通告就是这样的应用。 先说一下我们的目标,内核线程每个一秒钟往一个多播组里发送一条消息,然后用户空间所以加入了该组的...

weixin_33804990的博客 123
上一篇: linux GCC 64位编程技巧
linuxliu
博客等级 码龄17年 23粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值