🕷️

【ネットワーク】ICMPの概要

1 min read

はじめに

ICMPについての小テストで爆死したので猛省するために記事を書きます.
爆死するくらいネットワーク雑魚なので,間違いは大アリです.

ICMP

ICMP(Internet Control Message Protocol)は,IPを補助するプロトコルです.ICMPを利用したソフトウェアにはPingがあります.なので,Pingコマンドについて初めに書き,そのあとICMPについて書くという形を取ります.

Ping

Pingコマンドは以下のような形式でIPパケットが到達されるか確認するものです.mac,windowsで差があるのか知りませんが,以下のような形式で扱います.

ping <ip address>

たとえば,google.comについての出力例を見てみます.

$ ping google.com
64 bytes from 216.58.197.206: icmp_seq=0 ttl=111 time=40.382 ms
64 bytes from 216.58.197.206: icmp_seq=1 ttl=111 time=35.187 ms
64 bytes from 216.58.197.206: icmp_seq=2 ttl=111 time=71.083 ms
64 bytes from 216.58.197.206: icmp_seq=3 ttl=111 time=45.611 ms
64 bytes from 216.58.197.206: icmp_seq=4 ttl=111 time=39.993 ms
64 bytes from 216.58.197.206: icmp_seq=5 ttl=111 time=58.322 ms

この216.58.197.206は解決されたIPアドレスなので,ブラウザの検索バーか何かで216.58.197.206を入力すればGoogleの検索画面が表示されます.

ICMP

上記のPingはICMPを利用して実現しているのでした.なので,ここからICMPがどのようなプロトコルであるのか書いていきます.

(ICMPはIPヘッダも付与されますが,そこについては書きません.)
ICMPは32bit + 可変長bit で表します.

その32bitを次のようなルールで分割して扱います.

  • タイプ(8bit)
    • ICMPメッセージの種類
  • コード(8bit)
    • 到達不能メッセージのコード(到達不能メッセージの種類をコードとして8bitで表してしている.)
  • チェックサム(16bit)
    • 誤り検出するための冗長bit(たぶん訂正はしないのかな?わからん.)

上記より,8bit + 8bit + 16bit = 32bitになっています.

可変長bitには,

  • データ(可変長bit)
    • タイプによって異なる長さのデータを扱います.

なので,このICMPをうまく使えばPingのようなソフトウェアを作ることができそうであるという感じがしてきたと思います.疲れたのでココで終わります.