免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2236 | 回复: 4
打印 上一主题 下一主题

[网络管理] 关于igmp的setsockopt [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-07 17:29 |只看该作者 |倒序浏览
上次曾经就这个问题发了一个帖子来询问, 可能是我说的不太清楚,所以也没有能得到什么回复.

现在我详细描述一下我的情况
   我在做的是一个igmp proxy的程序, 这份code是从别的地方repot过来的, 而且看上去这份code是没有问题的. 大家都知道, 我们如果要发一个igmp 的report, 可以通过先建立一个socket, 然后通过setsockopt(socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, (void*)&mreq, sizeof(mreq))), 这样来发出一个igmp的report报文.
     现在的问题是, 我做完这个setsockopt之后, 首先函数没有返回错误, 那应该说明我这个函数的执行过程中没有出错, 也就是产生了这个包, 然后这个包应该就要往外发出了, 但最终这个包并没有从接口发出去. 由于我不清楚, 在setsockopt之后, 这个包究竟经历了哪些流程, 所以很难查找问题的所在.
     从iptales来看, 在OUTPUT还是能看到这个包被收到了, 但是只收到了一个, 如果你发了n个, 也是只收到一个, 看上去是之后同样的包在这之前就被丢掉了, 同时没有一个包到达了POSTROUTING,
   
    不知道有没有人了解igmp的report报文在setsockopt产生之后, 经历了哪些地方, 或者提供一些线索, 非常感谢

[ 本帖最后由 kobefly 于 2006-6-7 17:36 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-06-07 22:45 |只看该作者
看了一下igmp协议,没看太仔细,我的理解是你发的这个包是向路由报告本机许要加入多播组,这个报告是发给最近的路由,以后的多播消息是由路由转发给你,这个包的TTL协议中规定是1,只能走到最近的路由。你发n个他只给你一个响应可能也是协议确定的(没细看协议),反正你是要加入组播,发多少都是加入,给你一个反馈就够了,要么告诉你成功,要么失败。
大概就是这样了吧。

论坛徽章:
0
3 [报告]
发表于 2006-06-07 23:04 |只看该作者
仔细看协议
8.11. Unsolicited Report Interval
   The Unsolicited Report Interval is the time between repetitions of a
   host's initial report of membership in a group. Default: 1 second.

报告间隔1秒!
经历了哪些地方?只能到最近的路由器。虽然是拿来的代码,也要看看协议呀!

[ 本帖最后由 liubinbj 于 2006-6-7 23:05 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-06-08 09:28 |只看该作者
我经过debug, 看上去igmp的report是经过igmp_send_report这个函数的发出的,现在我没有经过这个函数,不知道是不是timer的定时器出了问题

论坛徽章:
0
5 [报告]
发表于 2006-06-08 12:07 |只看该作者
往上层追,不发包肯定不行了,如果只发一次包那就是软件有状态记录。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP