SNMPとICMP

October 09, 2017

引き続きネスペネタです。今回はSNMPとICMPについて。どちらもManagement Protocolなので、何がどう違うのか、結構混乱するので、整理します。

まず、前回と同様、各プロトコルの目的を明確にしておきます。SNMPは通信機器をネットワーク経由で監視、制御するためのプロトコルです。一方、ICMPは通信機器に対して問い合わせや通知を行うもので、パケットの送信先の状態を確認したり、送信元へエラーなどを知らせるためのプロトコルです。前者は特定の通信機器を管理するためのもの、後者は不特定の通信相手に情報を伝えるためのもの、という違いがあると言えそうです。

SNMPは管理対象となる機器(ルーターやスイッチなど)に常駐するエージェントと、管理する側の機器(クライアントPC、あるいはサーバ)のマネージャーで構成され、監視対象の機器の情報はMIB(管理情報ベース)と呼ばれる機器情報の集合体で管理されます。MIBは各情報(オブジェクト)を分類してツリー構造で管理しています。SNMPマネージャとSNMPエージェントがやり取りするメッセージは大きく5つあり、SNMPマネージャが送信するGet Request, GetNext Request, Set Requestと、SNMPエージェントが送信するGet Response, TRAPがあります。基本、自発的にメッセージを送信するのはSNMPマネージャですが、機器の状態に変化があったことを通知するTRAPだけはSNMPエージェントが自発的に送信します。SNMPはUDPを使用しており、エージェントに送信する場合はポート番号161、マネージャに送信する場合はポート番号162を宛先ポートに指定します。なお、MIBで扱う情報はUDPやTCPの動作に関するもの(リセット回数や接続の失敗回数、受信回数など)やインターフェイスに関するものなどがあるようです。ネットワークの機器を監視したり、設定したりするためのものですので、ネットワークの運用を行う人が利用しているんでしょうね。

一方、ICMPはSNMPと違ってIPと同じネットワーク層のプロトコルに分類されており、ICMPメッセージを送受信して通信相手に問い合わせ、通知を行います。ICMPメッセージには、echo request, Echo Reply, Destination Unrechable(到達不能通知)、Redirect(最適経路への変更指示)、Time Exceeded(TTL超過によるパケット破棄の報告)、Parameter Problem(パケットパラメータにおけるエラー)、Source Quench(送信元抑制)などがあります。tracerouteコマンドではあるホストまでの経路を調べるためにTime Exceededメッセージが利用されていますし、pingというツールではパケットが届くかどうかを調べるために、echo request, echo replyメッセージが使われています。なので、一般ユーザーでもコマンドやアプリケーションを介してICMPを利用する機会が結構あるのではないかと思います。