ICMPを利用した技術(2.traceroute/tracertコマンド)

ICMPを利用した技術(2.traceroute/tracertコマンド)

traceroute/tracertコマンドの詳細について説明します。

目次

traceroute/tracertコマンドとは

概要

traceroute/tracertコマンドは、IPのTTL値(Time to Live)と、ICMPの「Query(問い合わせ)/Error(エラー通知)」という機能を組み合わせて、ネットワークの経路情報を確認するためのコマンドです。

ICMPの説明とType/Codeの一覧については下記を参照してください。

コマンドの種類

OSにより利用されるコマンドやプロトコルが異なります。

スクロールできます
コマンドOS利用プロトコル備考
tracerouteMac, Linux, CiscoUDP+ICMPMac/Linuxは、オプションによりICMPのみを利用することが可能
tracertWindowsICMP

traceroute/tracert通信の詳細

ネットワーク構成

下記のネットワークをCiscoCMLで構築し、traceroute通信の検証を行います。

ネットワーク構成

Desktop → Server へのtraceroute実施

Desktopでtracerouteコマンドを実行します。CiscoCML上のDesktopは、LinuxベースのOSとなるため、”-I”オプションを付けてICMPを利用するようにしています。

Desktop
traceroute -I 172.16.1.1
Desktop:~$ traceroute -I 172.16.1.1
traceroute to 172.16.1.1 (172.16.1.1), 30 hops max, 46 byte packets
 1  192.168.1.254 (192.168.1.254)  5.659 ms  4.206 ms  6.972 ms
 2  10.0.0.2 (10.0.0.2)  8.835 ms  12.807 ms  10.753 ms
 3  172.16.1.1 (172.16.1.1)  14.788 ms  7.926 ms  11.677 ms

通信フロー

STEP
ICMPエコー要求(echo request)をTTL=1として送信

tracerouteコマンドを実行すると、DesktopからServerに対して、ICMPエコー要求をTTL=1として送信します。

ICMPエコー要求(TTL=1)

パケットキャプチャで詳細を確認すると、TTL値(Time to live)が、”1″に設定されていることがわかります。

パケットキャプチャ抜粋

Internet Protocol Version 4, Src: 192.168.1.1, Dst: 172.16.1.1
    Time to live: 1
    Protocol: ICMP (1)
    Source: 192.168.1.1
    Destination: 172.16.1.1
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x6b11 [correct]
    Sequence number (BE): 1 (0x0001)
    Sequence number (LE): 256 (0x0100)
STEP
Router1が、Time Exceeded を送信

Router1がTTL=1のパケットを受け取ると、それ以上ルーティングができないため、パケットを破棄します。そして、パケットを破棄したことを送信元(Desktop)へ伝えるために、Time Exceeded(Type11)のICMPパケットを送信します。

Router1からの応答

Time Exceeded/Time to Live Exceeded in Transitは、ICMPのType11/Code0が利用されます。また、ICMPのデータ部には送信されたICMPエコー要求の情報が格納されます。

パケットキャプチャ抜粋

Internet Protocol Version 4, Src: 192.168.1.254, Dst: 192.168.1.1
    Time to live: 255
    Protocol: ICMP (1)
    Source: 192.168.1.254
    Destination: 192.168.1.1
Internet Control Message Protocol
    Type: 11 (Time-to-live exceeded)
    Code: 0 (Time to live exceeded in transit)
    Checksum: 0xf600 [correct]
    Internet Protocol Version 4, Src: 192.168.1.1, Dst: 172.16.1.1
        Time to live: 1
        Protocol: ICMP (1)
        Source: 192.168.1.1
        Destination: 172.16.1.1
    Internet Control Message Protocol
        Type: 8 (Echo (ping) request)
        Code: 0
        Checksum: 0x6b11 [unverified] [in ICMP error packet]
        Sequence number (BE): 1 (0x0001)
        Sequence number (LE): 256 (0x0100)
STEP
ICMPエコー要求(echo request)をTTL=2として送信

Router1からICMPパケットを受け取ったDesktopは、Router1までの疎通は問題ないと判断します。応答パケットはエラー通知(Time Exceeded)ですが、何かしらの応答があればOKと判断します。

次に、DesktopからServerに対して、ICMPエコー要求をTTL=2として送信します。

ICMPエコー要求(TTL=2)

パケットキャプチャで詳細を確認すると、TTL値(Time to live)が、”2″に設定されていることがわかります。

パケットキャプチャ抜粋

Internet Protocol Version 4, Src: 192.168.1.1, Dst: 172.16.1.1
    Time to live: 2
    Protocol: ICMP (1)
    Source: 192.168.1.1
    Destination: 172.16.1.1
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x680d [correct]
    Sequence number (BE): 4 (0x0004)
    Sequence number (LE): 1024 (0x0400)
STEP
Router2が、Time Exceeded を送信

Desktopから送信されたTTL=2のパケットは、Router1を経由し、Router2がTTL=1の状態で受け取ります。Router2がTTL=1のパケットを受け取ると、それ以上ルーティングができないため、パケットを破棄します。そして、パケットを破棄したことを送信元(Desktop)へ伝えるために、Time Exceeded(Type11)のICMPパケットを送信します。

Router2からの応答

Time Exceeded/Time to Live Exceeded in Transitは、ICMPのType11/Code0が利用されます。また、ICMPのデータ部には送信されたICMPエコー要求の情報が格納されます。

パケットキャプチャ抜粋

Internet Protocol Version 4, Src: 10.0.0.2, Dst: 192.168.1.1
    Time to live: 254
    Protocol: ICMP (1)
    Source: 10.0.0.2
    Destination: 192.168.1.1
Internet Control Message Protocol
    Type: 11 (Time-to-live exceeded)
    Code: 0 (Time to live exceeded in transit)
    Checksum: 0xf901 [correct]
    Internet Protocol Version 4, Src: 192.168.1.1, Dst: 172.16.1.1
        Time to live: 1
        Protocol: ICMP (1)
        Source: 192.168.1.1
        Destination: 172.16.1.1
    Internet Control Message Protocol
        Type: 8 (Echo (ping) request)
        Code: 0
        Checksum: 0x680d [unverified] [in ICMP error packet]
        Sequence number (BE): 4 (0x0004)
        Sequence number (LE): 1024 (0x0400)
STEP
ICMPエコー要求(echo request)をTTL=3として送信

Router2からICMPパケットを受け取ったDesktopは、Router2までの疎通は問題ないと判断します。応答パケットはエラー通知(Time Exceeded)ですが、何かしらの応答があればOKと判断します。

次に、DesktopからServerに対して、ICMPエコー要求をTTL=3として送信します。

ICMPエコー要求(TTL=3)

パケットキャプチャで詳細を確認すると、TTL値(Time to live)が、”3″に設定されていることがわかります。

パケットキャプチャ抜粋

Internet Protocol Version 4, Src: 192.168.1.1, Dst: 172.16.1.1
    Time to live: 3
    Protocol: ICMP (1)
    Source: 192.168.1.1
    Destination: 172.16.1.1
Internet Control Message Protocol
    Type: 8 (Echo (ping) request)
    Code: 0
    Checksum: 0x6509 [correct]
    Sequence number (BE): 7 (0x0007)
    Sequence number (LE): 1792 (0x0700)
STEP
Serverが、ICMPエコー応答(echo reply) を送信

ICMPエコー要求を受け取ったServerは、ICMPエコー応答を返信することにより、ネットワークが正常であることをDesktopへ伝えます。

Serverからの応答

エコー応答は、ICMPのType0が利用されます。

パケットキャプチャ抜粋

Internet Protocol Version 4, Src: 172.16.1.1, Dst: 192.168.1.1
    Time to live: 62
    Protocol: ICMP (1)
    Source: 172.16.1.1
    Destination: 192.168.1.1
Internet Control Message Protocol
    Type: 0 (Echo (ping) reply)
    Code: 0
    Checksum: 0x6d09 [correct]
    Sequence number (BE): 7 (0x0007)
    Sequence number (LE): 1792 (0x0700)
STEP
traceroute完了

Desktopは、宛先となるServerから応答を受け取り、ネットワーク全体が正常であると判断します。また、途中経路の機器からも応答を受け取ることで、どの機器を経由し宛先まで到達するかを把握することができます。

なお、tracerouteでは、同じTTL値の3パケットずつ送信しています。全体の通信状況をパケットキャプチャしたものは下記となります。

【参考】UDPを利用する場合

ICMPエコー要求ではなく、UDPを利用する場合は、下記の通信フローとなります。UDPの宛先ポート番号は、33434〜33534が利用されます。Serverからの応答は、UDPで利用されるポート番号が開放されていないことを意味する、「Port Unreachable(Type3/Code3)」が利用されます。

UDPを利用する場合の通信フロー

全体の通信状況をパケットキャプチャしたものは下記となります。

以上で、ICMPを利用した技術(2.traceroute/tracertコマンド)の説明は完了です!

  • URLをコピーしました!
  • URLをコピーしました!
目次