ここでは、RFC、IPクラスなどが異なるため、人々は複雑すぎます。 いくつかのテストを実行して、
ping
コマンドが入力値をどのように解析するかを確認してください。
ping
C:\>ping 1 Pinging 0.0.0.1 with 32 bytes of data: C:\>ping 1.2 Pinging 1.0.0.2 with 32 bytes of data: C:\>ping 1.2.3 Pinging 1.2.0.3 with 32 bytes of data: C:\>ping 1.2.3.4 Pinging 1.2.3.4 with 32 bytes of data: C:\>ping 1.2.3.4.5 Ping request could not find host 1.2.3.4.5. Please check the name and try again. C:\>ping 255 Pinging 0.0.0.255 with 32 bytes of data: C:\>ping 256 Pinging 0.0.1.0 with 32 bytes of data:
ご覧のとおり、
ping
コマンド(Windows)では、さまざまなアドレス形式を使用できます。 IPv4アドレスは、
ABCD
4つの部分(オクテット)に分割できます
ping
コマンドでは、すべての部分を指定せずに、次のアルゴリズムを使用して空白を埋めることができます。
1 (ping A) : 0.0.0.A 2 (ping AB) : A.0.0.B 3 (ping ABC) : AB0.C 4 (ping ABCD) : ABCD
1つの部分のみを指定すると、上記のアルゴリズムに従ってオクテットとして認識されます。 255を超える場合、値は変換されて次のフィールドに転送されます。
いくつかの境界線のケースがあります。 たとえば、4オクテット以上を指定すると、そのようなアドレスはまったく認識されません。 そのため、
google.com
IPアドレスは
0.74.125.226.4
または
74.125.226.4.0
いずれでも
0.74.125.226.4
ません。
16進表記を使用することもできます。これは、ドットによるオクテット区切りと分割なしの両方を使用できます。 最初のケースでは、各オクテットの前に
0x
値が必要です。2番目のケースでは、アドレス全体の前にプレフィックス
0x
示されます。 8進法では、プレフィックス
0
指定されます。
したがって、IPアドレス(IPv4)を表すには多くの方法があります。 ドットなし、またはドットあり(2ドット、3ドット、または1ドット)で記述でき、それぞれの場合に異なる形式の表記法(10進数、16進数、8進数)を使用できます。 異なるオクテットの同じアドレスに混在させることもできます。 たとえば
google.com
次の方法で
google.com
記録できます。
google.com
(ドメイン名)
74.125.226.4
(ピリオド付きの10進表記)
1249763844
(
1249763844
なしの10進数)
0112.0175.0342.0004
(ドット付き8進数)
011237361004
(ドットなしの8進数)
0x4A.0x7D.0xE2.0x04
(ドット付きの16進数)
0x4A7DE204
(ドットなしの16進数)
74.0175.0xe2.4
(ಠ_ಠ)
(バイナリ記録もサポートされていないことを神に感謝します!)
この場合、192.168.072へのpingは上記のテーブルの3番目のオプション(AB0.C)を使用するため、実際にはアドレスは192.168.0.072に変換されます。 ただし、最後のオクテットはゼロから始まるため、8進数値として扱われます。10進数では58に対応します。
謎は解決されました。
ping
for Windowsはこのようなさまざまな形式をサポートし、それらを正しく解釈しますが、これらの形式がどこでも使用できることを必ずしも意味しないことに注意してください。 4つのオクテットすべてを入力する必要があるプログラムもあれば、1つのアドレスに8進値と10進値を混在させることを禁止するプログラムなどもあります。