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)