在当今互联网中,视频直播、在线会议等多媒体应用广泛依赖多播技术,而IGMP(Internet Group Management Protocol)正是IPv4多播的基石协议。本文将通过Linux内核源码(net/ipv4/igmp.c)深入解析其实现机制。
一、核心数据结构
IGMP实现围绕两个关键结构体构建:
struct ip_mc_list { // 多播组管理结构
__be32 multiaddr; // 多播组地址(如224.0.0.1)
unsigned int sfmode; // 过滤模式(MCAST_INCLUDE/EXCLUDE)
struct ip_sf_list *sources; // 源地址链表
struct timer_list timer; // 组报告定时器
// ...
};
struct ip_sf_list { // 多播源结构
__be32 sf_inaddr; // 源IP地址
unsigned int sf_count[2]; // INCLUDE/EXCLUDE计数器
// ...
};
这种设计实现了精细化的源过滤能力,支持SSM(特定源多播)等高级特性。
二、协议状态机与工作流程
1. 成员加入过程
当应用加入多播组时:
ip_mc_join_group()
→ __ip_mc_inc_group()
→ igmp_group_added()
→ igmp_start_timer(im, IGMP_

订阅专栏 解锁全文
272

被折叠的 条评论
为什么被折叠?



