マルチキャストアドレス向けにpingを実行してみた。
マルチキャストアドレス(224.0.0.1)向けにpingを実行したときの出力内容を確認します。また、ICMP応答をしたホストがarpテーブルに追加されることを確認します。
Linuxの場合
Linuxにて、マルチキャストアドレス向けにpingを実行します。
$ ping -c 5 224.0.0.1
実行結果は以下のように出力されます。
PING 224.0.0.1 (224.0.0.1) 56(84) bytes of data. 64 bytes from 192.168.1.100: icmp_seq=1 ttl=255 time=0.307 ms 64 bytes from 192.168.1.16: icmp_seq=1 ttl=255 time=2.95 ms (DUP!) 64 bytes from 192.168.1.17: icmp_seq=1 ttl=64 time=80.8 ms (DUP!) 64 bytes from 192.168.1.100: icmp_seq=2 ttl=255 time=0.294 ms 64 bytes from 192.168.1.16: icmp_seq=2 ttl=255 time=1.14 ms (DUP!) 64 bytes from 192.168.1.100: icmp_seq=3 ttl=255 time=0.291 ms 64 bytes from 192.168.1.16: icmp_seq=3 ttl=255 time=1.14 ms (DUP!) 64 bytes from 192.168.1.17: icmp_seq=3 ttl=64 time=13.8 ms (DUP!) 64 bytes from 192.168.1.100: icmp_seq=4 ttl=255 time=0.296 ms 64 bytes from 192.168.1.16: icmp_seq=4 ttl=255 time=1.14 ms (DUP!) 64 bytes from 192.168.1.17: icmp_seq=4 ttl=64 time=27.5 ms (DUP!) 64 bytes from 192.168.1.100: icmp_seq=5 ttl=255 time=0.293 ms --- 224.0.0.1 ping statistics --- 5 packets transmitted, 5 received, +7 duplicates, 0% packet loss, time 4032ms rtt min/avg/max/mdev = 0.291/10.847/80.848/22.529 ms
Linuxのpingは、複数のホストからICMP応答があった場合、重複パケット(DUP!)として報告します。
arpコマンドを実行すると、ICMP応答をしたホストのエントリが追加されていることを確認できます。
$ arp
実行結果は以下のように出力されます。
Address HWtype HWaddress Flags Mask Iface 192.168.1.16 ether 00:0a:79:8c:2e:c4 C eth0 192.168.1.17 ether 00:30:c4:01:b2:3b C eth0 192.168.1.1 ether 00:0a:79:6c:6d:36 C eth0 192.168.1.18 ether 00:16:6f:c1:81:90 C eth0
Solaris10の場合
Solaris10にて、マルチキャストアドレス向けにpingを実行します。
$ ping -I1 224.0.0.1
実行結果は以下のように出力されます。
PING 224.0.0.1: 56 data bytes 64 bytes from blade (192.168.1.100): icmp_seq=0. time=0.727 ms 64 bytes from 192.168.1.16: icmp_seq=0. time=4.77 ms 64 bytes from blade (192.168.1.100): icmp_seq=1. time=0.462 ms 64 bytes from 192.168.1.16: icmp_seq=1. time=1.95 ms 64 bytes from 192.168.1.17: icmp_seq=1. time=36.1 ms 64 bytes from blade (192.168.1.100): icmp_seq=2. time=0.494 ms 64 bytes from 192.168.1.16: icmp_seq=2. time=1.97 ms 64 bytes from blade (192.168.1.100): icmp_seq=3. time=0.488 ms 64 bytes from 192.168.1.16: icmp_seq=3. time=1.97 ms 64 bytes from blade (192.168.1.100): icmp_seq=4. time=0.490 ms 64 bytes from 192.168.1.16: icmp_seq=4. time=1.97 ms 64 bytes from 192.168.1.17: icmp_seq=4. time=105. ms ^C ----224.0.0.1 PING Statistics---- 5 packets transmitted, 12 packets received, 2.40 times amplification round-trip (ms) min/avg/max/stddev = 0.462/13.01/105./30.6
Solaris10のpingは、複数のホストからICMP応答があった場合、すべての応答を出力します。
arpコマンドを実行すると、ICMP応答をしたホストのエントリが追加されていることを確認できます。
arp -a
実行結果は以下のように出力されます。
Net to Media Table: IPv4 Device IP Address Mask Flags Phys Addr ------ -------------------- --------------- -------- --------------- eri0 ALL-SYSTEMS.MCAST.NET 255.255.255.255 01:00:5e:00:00:01 eri0 192.168.1.1 255.255.255.255 o 00:0a:79:6c:6d:36 eri0 192.168.1.18 255.255.255.255 o 00:16:6f:c1:81:90 eri0 192.168.1.21 255.255.255.255 o 00:13:d3:d4:cf:c2 eri0 blade 255.255.255.255 SPLA 00:03:ba:08:42:23 eri0 192.168.1.17 255.255.255.255 00:30:c4:01:b2:3b eri0 192.168.1.16 255.255.255.255 00:0a:79:8c:2e:c4 eri0 192.168.1.19 255.255.255.255 o 00:0a:79:a6:8e:59 eri0 BASE-ADDRESS.MCAST.NET 240.0.0.0 SM 01:00:5e:00:00:00
Windowsの場合
Windowsにて、マルチキャストアドレス向けにpingを実行します。
C:\>ping 224.0.0.1
実行結果は以下のように出力されます。
Pinging 224.0.0.1 with 32 bytes of data: Reply from 192.168.1.16: bytes=32 time=2ms TTL=255 Reply from 192.168.1.16: bytes=32 time=1ms TTL=255 Reply from 192.168.1.16: bytes=32 time=1ms TTL=255 Reply from 192.168.1.16: bytes=32 time=1ms TTL=255 Ping statistics for 224.0.0.1: Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 1ms, Maximum = 2ms, Average = 1ms
Windowsのpingは、複数のホストからICMP応答があった場合でも、一つのホストの情報しか表示しません。なお、複数のホストからICMP応答があったかどうかは、パケットキャプチャで確認がとれます。
arpコマンドを実行すると、ICMP応答をしたホストのエントリが追加されていることを確認できます。
C:\>arp -a
実行結果は以下のように出力されます。
Interface: 192.168.1.18 --- 0x2 Internet Address Physical Address Type 192.168.1.1 00-0a-79-6c-6d-36 dynamic 192.168.1.16 00-0a-79-8c-2e-c4 dynamic 192.168.1.17 00-30-c4-01-b2-3b dynamic 192.168.1.100 00-03-ba-08-42-23 dynamic
Cygwinの場合
Cygwinにて、マルチキャストアドレス向けにpingを実行します。
$ ping 224.0.0.1 56 12
実行結果は以下のように出力されます。
PING 224.0.0.1 (224.0.0.1): 56 data bytes 64 bytes from 192.168.1.16: icmp_seq=0 ttl=255 time=14 ms 64 bytes from 192.168.1.100: icmp_seq=0 ttl=255 time=18 ms 64 bytes from 192.168.1.17: icmp_seq=0 ttl=64 time=22 ms 64 bytes from 192.168.1.16: icmp_seq=1 ttl=255 time=2 ms 64 bytes from 192.168.1.100: icmp_seq=1 ttl=255 time=6 ms 64 bytes from 192.168.1.17: icmp_seq=1 ttl=64 time=10 ms 64 bytes from 192.168.1.16: icmp_seq=2 ttl=255 time=2 ms 64 bytes from 192.168.1.100: icmp_seq=2 ttl=255 time=6 ms 64 bytes from 192.168.1.17: icmp_seq=2 ttl=64 time=9 ms 64 bytes from 192.168.1.16: icmp_seq=3 ttl=255 time=2 ms 64 bytes from 192.168.1.17: icmp_seq=3 ttl=64 time=6 ms 64 bytes from 192.168.1.100: icmp_seq=3 ttl=255 time=9 ms ----224.0.0.1 PING Statistics---- 4 packets transmitted, 12 packets received, -- somebody's printing up packets! round-trip (ms) min/avg/max/med = 2/9/22/8
Cygwinのpingは、複数のホストからICMP応答があった場合、すべての応答を出力します。
arpコマンドを実行すると、ICMP応答をしたホストのエントリが追加されていることを確認できます。なお、arpコマンドはWindowsのコマンドを実行しています。
C:\>arp -a
実行結果は以下のように出力されます。
Interface: 192.168.1.18 --- 0x2 Internet Address Physical Address Type 192.168.1.1 00-0a-79-6c-6d-36 dynamic 192.168.1.16 00-0a-79-8c-2e-c4 dynamic 192.168.1.17 00-30-c4-01-b2-3b dynamic 192.168.1.100 00-03-ba-08-42-23 dynamic
ARPテーブルへのエントリの追加について気づいた点
実は、マルチキャストアドレス向けにping実行時にARPテーブルにエントリが追加されるかどうかは、ICMP応答を行うホストのARPテーブルの内容に依存します。エントリの追加は、ICMP応答を行うホストのARPテーブルにpingを実行したホストのエントリが登録されていない場合だけです。
以下にARPテーブルにエントリが追加される例と追加されない例をあげます。この例の中では、ホストAをpingを実行するホストとし、ホストBをICMP応答を行うホストとします。
■ARPテーブルにエントリが追加される例(ホストBのARPテーブルにホストAのエントリが存在しない)
- ホストAがマルチキャストアドレス(224.0.0.1)向けにpingを実行(ICMP要求を送信)します。
- ホストBはホストAからのICMP要求を受信すると、ホストAに向けてICMP応答を送信しようとします。
- ここで、ホストBのARPテーブル中にホストAのエントリが存在しないので、ホストBはホストAに対してARP要求を送信します。
- ホストAはホストBからのARP要求を受信すると、ホストBに向けてARP応答を送信します。
- さらにこのとき、ホストAは自身のARPテーブルにホストBのエントリを追加します。
- ホストBはホストAからのARP応答を自身すると、ARPテーブルにホストAのエントリを追加します。
- ホストBはホストAに向けてICMP応答を送信します。
太字の通り、ホストAのARPテーブルにホストBのエントリが追加されます。