突然ですが、コマンドプロンプトのPingコマンドだけで通信先のネットワーク機器のOSが何なのかある程度推測することが可能なことを皆さんはご存知でしょうか?
①192.168.0.1 からの応答: バイト数 =32 時間 <1ms TTL=64
②192.168.0.2 からの応答: バイト数 =32 時間 <1ms TTL=128
③192.168.0.3 からの応答: バイト数 =32 時間 <1ms TTL=255
例えば、上記のような結果の場合、
①は、Linux OS/Mac OS
②は、Windows OS
③は、UNIX OS/ネットワーク機器
ということが分かります。
IPアドレス以外に異なっている箇所がはっきりしているので、
すぐにわかると思いますが、TTL部分の数値を見ることで判断可能です。
TTLとは
TTL(Time To Live)は、ネットワークを介して送信されるパケットに含まれるタイマー値で、
データ(パケット)を破棄して期限切れにするまでに受信者(Pingコマンドを使った相手など)にパケットの保持期間または使用期間を通知します。
TTL値はオペレーティングシステムによって異なるため、TTL値に基づいてある程度OSを決定することができます。
このTTLはループ防止目的の為に設定されている値で、L3レベルのネットワーク機器を一つ経由する毎に値が一つ減っていき、
0になるとそのパケットは破棄されてしまいます。
送信元(Ping)に表示されるTTL値は
基礎値 – 到達までのネットワーク機器数 = TTL値
となります。
yahoo.co.jp宛てにPingを打ってみた場合の結果はこちらです。
TTLの数値が45となっていますので、yahoo.co.jp のサーバーがLiux OSだとすると、
私の環境からyahoo.co.jp のサーバーまで到達するまでにL3レベルのネットワーク機器が、19台あることがあることが分かります。
また、Ping コマンドにはオプションも多数用意されており、組み合わせて使うことでネットワーク調査に大いに役立ちます。
pingのオプション
パケットロスを長期的に把握したい場合に有用な -t オプションなどは最低限覚えておきたいところですね。
Ping送信先までの経路にL3レベルのネットワーク機器が沢山あるようなケース以外であればTTLの値がOSに割り当てられた数値が近い数値が返ってくるので、推測はある程度容易かと思います。