免费注册 查看新帖 |

Chinaunix

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

[其他] 组播的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-10 04:36 |只看该作者 |倒序浏览
本帖最后由 kallytin 于 2013-01-10 04:42 编辑

想用C实现一些组播的功能,但碰到一些问题,具体如下:

=========
假设:
=========

1)网络1(192.168.1.0/24)
主机A:IP_A: 192.168.1.1
主机B:IP_B: 192.168.1.2
主机C:IP_C: 192.168.1.3
主机D:IP_D: 192.168.1.4
主机E:IP_E: 192.168.1.5

2)网络2(192.168.2.0/24)
主机W:IP_W: 192.168.2.10
主机X:IP_X: 192.168.2.11
主机Y:IP_Y: 192.168.2.12
主机Z:IP_Z: 192.168.2.13

3)群组1(224.0.1.1)

4)群组2(224.0.2.1)

5)路由器R(支持组播)

=========
问题:
=========


1、单机如何配置组播地址?

2、组播的运作过程是怎样的?

=========
个人理解:
=========


对于问题1,感觉有3种方式(以网络1为例):

1)对于网络1的主机A,添加1个虚拟网卡,如:tap0,然后对tap0配置1个组播地址,如:224.0.1.1。对于主机B,同样也添加1个虚拟网卡tap0,将其ip配置为组播地址224.0.0.1(跟主机A的一样)。其他 C,D,E 的配置也是一样的。

2)对于网络1的主机A,添加1个物理网卡(真实的网卡),然后将其ip配置为组播地址 224.0.1.1。对于其他主机(B,C,D,E)也是一样的配置

3)所有网络1的主机都不配置组播地址,而是将组播地址当成是一个“群组的id”。但是,每个主机都需要有一张表(一个群组对应一张表),表内包含所有属于该群组的主机。例如,网络1的所有主机如果都加入了“群组1(224.0.1.1)”,则该表内就包括了A,B,C,D,E 的ip。

个人感觉 3)较为合理。因为组播地址是不能作为源地址使用的,因此似乎单机没必要配置组播地址。不知道理解得对不对?


对于问题2,感觉有3种方式(前提:组播地址的配置按照上面 3)的做法):

1)同一局域网内,如在网络1中,假设所有主机都加入了群组1(224.0.1.1)。如果主机A发数据给同一群组的其他主机,则主机A查找同一群组的其他主机的ip(在上面3)中提到的表内查找),并最终形成4个packet,其目的ip分别为ip_b,ip_c,ip_d,ip_e。至于其目的mac,可以通过广播arp查询分别获得mac_b,mac_c,mac_d,mac_e。最后,将4个packet发送出去。这里不需要路由器R的参与

2)对于不同网络,同一群组的处理如下:
假设网络1的所有主机(A,B,C,D,E)和网络2的所有主机(W,X,Y,Z)都加入群组1(224.0.1.1)
当网络1中的主机A要向群组1(B,C,D,E,W,X,Y,Z)发送一份数据。则主机A形成1个packet,其目的IP为ip_b,ip_c,ip_d,ip_e,ip_w,ip_x,ip_y,ip_z(跟上面1)的查找方法一致)。对于目的mac,B,C,D,E的处理跟上面1)一样(因为在同一个局域网内)。但是,对于W,X,Y,Z,其目的mac都是路由器R的mac(到W,X,Y,Z的packet都会转发到路由器R)。在路由器R处,只需要根据目的IP选路即可。这里的路由器R不需要支持组播功能。


3)对于不同网络、不同群组的处理如下:
假设网络1的所有主机(A,B,C,D,E)都加入群组1(224.0.1.1);而网络2的所有主机(W,X,Y,Z)都加入群组2(224.0.2.1);而路由器R支持组播功能。
当网络1中的主机A要向群组2(W,X,Y,Z)发送一份数据。则主机A形成1个packet,其目的地址为“群组2的组播地址” 224.0.2.1。按照单机路由表的查询结果,该packet会缺省发送至路由器R,即目的mac为路由器R的mac。路由器R会查找其上“组播信息表”(先暂时使用这个称呼),找到群组2中各个主机的IP,然后像 1)中那样,形成4个packet,每个packet的ip分别为ip_w,ip_x,ip_y,ip_z(至于目的mac,这个得看路由器R是否直连到该网络上了,这个不做细述)。最后,将这4个packet发送出去。


不知道我的理解是否正确?如有不正确,请各位大师指正。






论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2013-01-10 08:53 |只看该作者
组播地址不用配,是你的程序代码中指定加入哪个组播地址

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
3 [报告]
发表于 2013-01-10 09:15 |只看该作者
推荐:《UNIX网络编程》,随便可以下载到电子版   
  第20章 广播
  第21章 多播
把原理看明白了就懂了

论坛徽章:
0
4 [报告]
发表于 2013-01-10 11:56 |只看该作者
回复 3# cokeboL

楼上,

类似的资料之前我也参考了一些,只是还有上面提到的一些问题还没弄清楚。如果可以的话,是否可以以我上面提到的例子作一个解答?
   

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
5 [报告]
发表于 2013-01-10 12:08 |只看该作者
回复 4# kallytin


时间太久了,我工作不用,看过的都快忘光了,不过UNP讲得应该算挺清楚了,

楼主再问下楼上版大和linux_c_py_php大牛他们吧

论坛徽章:
0
6 [报告]
发表于 2013-01-10 13:15 |只看该作者
回复 2# hellioncu

楼上,

谢谢你的回复,能说的具体点吗?最好引用我上面的例子分析......
   

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
7 [报告]
发表于 2013-01-10 13:33 |只看该作者
kallytin 发表于 2013-01-10 13:15
回复 2# hellioncu

楼上,


加入组播组,不是调用 setsockopt (... IP_ADD_MEMBERSHIP...)就行了么,不知道你还要设置什么

论坛徽章:
0
8 [报告]
发表于 2013-01-10 13:44 |只看该作者
hellioncu 发表于 2013-01-10 13:33
加入组播组,不是调用 setsockopt (... IP_ADD_MEMBERSHIP...)就行了么,不知道你还要设置什么


楼上,

我的意思是对于问题1和问题2,你的看法是怎样。此外,从你之前的回复,感觉对于问题1,你是倾向于 3),是这样吗?另,对于问题2,你的看法又如何?

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
9 [报告]
发表于 2013-01-10 13:48 |只看该作者
kallytin 发表于 2013-01-10 13:44
楼上,

我的意思是对于问题1和问题2,你的看法是怎样。此外,从你之前的回复,感觉对于问题1,你是倾 ...


我觉得你没理解组播是怎么回事。
或者你的操作系统不支持组播,你要自己来模拟实现组播?

论坛徽章:
0
10 [报告]
发表于 2013-01-10 13:55 |只看该作者
hellioncu 发表于 2013-01-10 13:48
我觉得你没理解组播是怎么回事。
或者你的操作系统不支持组播,你要自己来模拟实现组播?


对,我要实现类似组播的功能......

另,就是因为想实现这个功能,所以想了解清楚组播到底是怎么回事(虽然不少资料有提及,但总觉得泛泛而谈,不如例子来得实际)...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP