TCP/IP详解卷2:实现(第2部分) - 多播组加入过程

需积分: 0 1 下载量 177 浏览量 更新于2024-08-02 收藏 12.04MB PDF 举报
"页面提取自-TCP-IP详解卷2:实现(第2部分)" 本文将深入探讨TCP/IP协议栈中的多播组管理机制,主要基于《TCP-IP详解卷2:实现(第2部分)》中的相关内容。多播是一种网络通信方式,允许一个发送者向多个接收者同时发送数据,有效地利用网络资源。 首先,加入多播组的过程涉及到找到合适的接口。系统通过创建一个`route`结构来表示多播组的目的地址,并调用`rtalloc`函数寻找对应路由器。如果找不到可用的路由器,会返回错误`EADDRNOTAVAIL`。一旦找到路由器,系统会保存指向路由器外出接口的指针,并释放路由器入口。 其次,如果用户指定了特定接口(非`INADDR_ANY`),系统会使用`INADDR_TO_IFP`宏在接口列表中查找该接口。如果未找到接口,或者找到的接口不支持多播,同样会返回`EADDRNOTAVAIL`错误。 接着,系统会检查`imr_membership`数组,确保请求加入的多播组在选定接口上尚未存在成员资格。如果已存在或数组为空,将分别返回`EADDRINUSE`或`ETOOMANYREFS`错误。 当所有检查都通过后,系统会调用`in_addmuliti`函数来让接口开始接收多播数据报。`in_addmuliti`负责在接口的多播组表中创建或更新`in_multi`结构,这个结构包含多播组的相关信息,并在成员数组中保存,同时增加数组的大小。 `in_addmuliti`函数的工作流程包括: 1. 检查接口是否已经加入了多播组。如果已经存在相应的`in_multi`结构,就增加其引用计数,否则创建新的结构。 2. 更新多播组表,确保接口能够接收指定多播组的数据。 3. 最后,返回指向新创建或已存在的`in_multi`结构的指针,以便后续处理。 对应的,`in_delmuliti`函数用于从多播组中删除接口,它会减少`in_multi`结构的引用计数,当计数归零时,会从组表中移除该结构。 这些过程在第14章的路由选择表中得到进一步解释,特别是如何根据路由规则选择合适的多播接口。8.5节详细描述了`route`结构,而19.2节则涵盖了`rtalloc`函数的功能。 多播组的管理和加入涉及复杂的网络层操作,包括接口选择、路由查找、状态检查和表结构维护,这些都是TCP/IP协议栈实现中的重要组成部分。理解这些细节对于网络编程和系统级调试具有重要意义。