IP 组播

来源:互联网 发布:收购淘宝店铺可信吗 编辑:程序博客网 时间:2024/06/04 22:08

OSFP 协议会利用组播地址来发送hello 和 keep live 消息

224.0.0.5   all ospf router

224.0.0.6   designated router(DR)

224.0.0.1特指所有主机

224.0.0.2特指所有路由器


IP 组播需要层二数据链路层的支持

默认情况下ethernet 网卡能够接受单播(目标MAC地址为当前网卡的MAC地址)和广播MAC地址(FF:FF:FF:FF:FF:FF)全一。

如果希望当前网卡能够接收来自某个组的包,则需要把当前网卡加入某个组这样就能接收来自某个组的包。

如下系统调用可以支持把当前网卡加入某个组:

 /* 设置要加入组播的地址 */
 28         bzero(&mreq, sizeof (struct ip_mreq));
 29
 30         inet_pton(AF_INET,"224.0.1.2",&ia.sin_addr);
 31         /* 设置组地址 */
 32         bcopy (&ia.sin_addr.s_addr, &mreq.imr_multiaddr.s_addr, sizeof (struct in_addr));
 33         /* 设置发送组播消息的源主机的地址信息 */
 34         mreq.imr_interface.s_addr = htonl (INADDR_ANY);
 35
 36         /* 把本机加入组播地址,即本机网卡作为组播成员,只有加入组才能收到组播消息 */
 37         if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq,sizeof (struct ip_mreq)) == -1)
 38         {
 39                 perror ("setsockopt");
 40                 exit (-1);
 41         }


现在网卡能够接受的MAC地址包括

1,当前网卡的MAC地址

2,广播MAC地址

3,设置的组播MAC地址 01:00:5e:00:00:01   由  224.0.0.1转换而来。


下面是wireshark抓取的广播包

root@baohua-VirtualBox:~# cat packet
No.     Time           Source                Destination           Protocol Length Info
      1 0.000000000    10.0.2.15             224.0.0.1             UDP      49     Source port: 23456  Destination port: 7838

Frame 1: 49 bytes on wire (392 bits), 49 bytes captured (392 bits) on interface 0
Ethernet II, Src: CadmusCo_eb:0a:68 (08:00:27:eb:0a:68), Dst: IPv4mcast_00:00:01 (01:00:5e:00:00:01)
    Destination: IPv4mcast_00:00:01 (01:00:5e:00:00:01)
        Address: IPv4mcast_00:00:01 (01:00:5e:00:00:01)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
    Source: CadmusCo_eb:0a:68 (08:00:27:eb:0a:68)
        Address: CadmusCo_eb:0a:68 (08:00:27:eb:0a:68)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IP (0x0800)
Internet Protocol Version 4, Src: 10.0.2.15 (10.0.2.15), Dst: 224.0.0.1 (224.0.0.1)
User Datagram Protocol, Src Port: 23456 (23456), Dst Port: 7838 (7838)
Data (7 bytes)

0000  66 64 61 73 66 64 0a                              fdasfd.
root@baohua-VirtualBox:~#


ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:27:eb:0a:68 
          inet addr:10.0.2.15  Bcast:10.0.2.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:feeb:a68/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:56 errors:0 dropped:0 overruns:0 frame:0
          TX packets:124 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:10202 (10.2 KB)  TX bytes:15806 (15.8 KB)


0 0