- 论坛徽章:
- 0
|
本帖最后由 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发送出去。
不知道我的理解是否正确?如有不正确,请各位大师指正。
|
|