当前位置: 首页 > news >正文

Linux 内核源码分析---组播/策略路由选择

在 Linux 实现中,组播路由选择不像单播路由选择那样可以由内核单独处理,组播守护程序种类繁多,如 mrouted 和 pimd,它们分别基于距离矢量组播路由选择协议(Distance Vector Multicast Routing Protocol,DVMRP)和协议无关组播选择协议(Protocol-Independent,PIM)。

PIM协议有两个版本:CONFIG_IP_PIMSM_V1和CONFIG_IP_PIMSM_V2,内核对这两
个版本都支持。

IGMP,就是Internet Group Management Protocol的意思。该协议用来在ip主机和与其直接相邻的组播路由器之间建立、维护组播组成员关系,但不包括组播路由器之间的组成员关系信息的传播与维护,这部分工作由各组播路由协议完成。所有参与组播的主机必须实现IGMP。

IGMP 作为 TCP/IP 第三层的协议,被封装在IP数据包中进行传输。IGMP 的报文格式是固定的,共 8 个字节,

一个典型的组播过程是这样的:
(1)IP主机的一个进程可随时加入和离开主机接口的一个组播组,该主机需要维护接口的一张表,该表包含了有那些组以及这些组中的进程数量。此时主机需要发送一个IGMP报告;
(2)路由器会定时发送IGMP查询报文,此时报文中的组地址为0;
(3)IP主机回应路由器的IGMP查询报文,对于一个主机,如果它加入了多个组,则需要为每个组返回一个IGMP报告;
(4)路由器根据这些信息,会对每个接口维护一张表,表中说明了该接口的组。

1.组播路由选择表
组播路由选择表由结构 mr_table 表示,其内核结构源码如下:
在这里插入图片描述

2.组播转发缓存
(Multicast Forwarding Cache,MFC)MFC 是组播路由选择表中最重要的数据结构,它实际上是一个缓存条目(mfc_cache对象)数组。这个数组名为mfc_cache_array,嵌入在组播路由选择表对象(mr_table)中。它包含 64(MFC_LINES)个元素,索引为散列值。

在这里插入图片描述

3.组播路由器
要将机器配置为组播路由器,必须设置内核配置选项CONFIG_IP_MROUTE,还必须运行路由选择守护进程,为与内核通信,这些路由选择守护程序会创建一个套接字。

在这里插入图片描述

4.vif 设备(vif_device 表示网络接口)
组播路由选择支持两模式,即:a.直接组播;b.将组播封装在单播数据包中,并通过隧道传输。
在这两种情况下,都使用相同的对象(结构vif_device的实例)来表示网络接口。

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 内存函数memcpy和memmove
  • 谷歌chrome浏览器显示“版本太旧”又无法更新情况下,如何关闭“Chrome版本太旧”提示,包括直接启动Google浏览器,或者通过其他应用启动
  • Web层统一实体规范封装
  • 出现 2003 - Can’t connect to MySQL server on ‘xxx‘(10060) 解决方法
  • 3b1b自注意力机制讲解记录
  • 3、springboot时代背景
  • Variomes:支持基因组变异筛选的高召回率搜索引擎
  • 0基础深度学习项目13:基于TensorFolw实现天气识别
  • JavaScript初级——DOM和事件简介
  • 递归神经网络 (RNN) 简介
  • 【微信小程序】自定义组件 - behaviors
  • 微服务:配置管理和配置热更新
  • PostgreSQL 内核资源管理
  • 2024下半年软考有哪些科目开考?该怎么选?
  • PHP开发过程中常见问题快速解决
  • #Java异常处理
  • 【RocksDB】TransactionDB源码分析
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Android优雅地处理按钮重复点击
  • C# 免费离线人脸识别 2.0 Demo
  • C++11: atomic 头文件
  • Consul Config 使用Git做版本控制的实现
  • es6--symbol
  • javascript从右向左截取指定位数字符的3种方法
  • Java知识点总结(JavaIO-打印流)
  • Laravel Telescope:优雅的应用调试工具
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 聊一聊前端的监控
  • 目录与文件属性:编写ls
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 小而合理的前端理论:rscss和rsjs
  • 移动端 h5开发相关内容总结(三)
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • ​插件化DPI在商用WIFI中的价值
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • ![CDATA[ ]] 是什么东东
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (2)空速传感器
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (七)Java对象在Hibernate持久化层的状态
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (贪心 + 双指针) LeetCode 455. 分发饼干
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)大道至简,职场上做人做事做管理
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)(官方)UE4--图像编程----着色器开发
  • (状压dp)uva 10817 Headmaster's Headache
  • (自适应手机端)行业协会机构网站模板
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net 无限分类
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚