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

打印 上一主题 下一主题

主题 1931|帖子 1931|积分 5793

在 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的实例)来表示网络接口。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

老婆出轨

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表