マルチキャストアドレス向けに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

Linuxpingは、複数のホストから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

Solaris10pingは、複数のホストから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

Windowspingは、複数のホストから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

pingの実行結果に出力されていないホストのエントリも、こっそりarpテーブルに追加されています。

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

Cygwinpingは、複数のホストから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のエントリが存在しない)
  1. ホストAがマルチキャストアドレス(224.0.0.1)向けにpingを実行(ICMP要求を送信)します。
  2. ホストBはホストAからのICMP要求を受信すると、ホストAに向けてICMP応答を送信しようとします。
  3. ここで、ホストBのARPテーブル中にホストAのエントリが存在しないので、ホストBはホストAに対してARP要求を送信します。
  4. ホストAはホストBからのARP要求を受信すると、ホストBに向けてARP応答を送信します。
  5. さらにこのとき、ホストAは自身のARPテーブルにホストBのエントリを追加します。
  6. ホストBはホストAからのARP応答を自身すると、ARPテーブルにホストAのエントリを追加します。
  7. ホストBはホストAに向けてICMP応答を送信します。

太字の通り、ホストAのARPテーブルにホストBのエントリが追加されます。

ARPテーブルにエントリが追加されない例(ホストBのARPテーブルにホストAのエントリが存在しない)
  1. ホストAがマルチキャストアドレス(224.0.0.1)向けにpingを実行(ICMP要求を送信)します。
  2. ホストBはホストAからのICMP要求を受信すると、ホストAに向けてICMP応答を送信しようとします。
  3. ここで、ホストBのARPテーブル中にホストAのエントリが存在するので、ホストBはホストAに向けてICMP応答を送信します。

結局、ホストAのARPテーブルにホストBのエントリが追加されることはありません。