はじめに
前回の記事「DPIの仕組み ~初級編~」では、HTTP通信を例にDPIとSPIとの違いについて紹介しました。
今回はもう少し踏み込んで、HTTP通信がどのようにしてアプリケーションに分類されるのか?という点について触れたいと思います。
アプリケーションとプロトコル
「アプリケーション」についてはIT技術に疎い方でもおおよそイメージできると思いますが、表計算ソフトやWebブラウザ、ゲームなど特定の目的のためにプログラムされたソフトウェアアプリケーション(アプリ)です。アプリケーションの多くは利用する際に通信が発生します。
では「プロトコル」とは何でしょうか?
「プロトコル」とはコンピュータ同士がネットワーク上で連携するにあたって定められている規約のことを指します。HTTP通信のHTTPとはHyper Text Transfer Protocolの略で、Web上でやり取りされるHTML文書の転送を目的としたプロトコルの一種です。
前回の記事では、DPIがTCPのペイロードを参照しHTTP通信かどうか判断できることを説明しました。これはHTTPというプロトコルの通信規約がRFCと呼ばれる文書で定められているため、DPIはこの規約に則った通信が行われているかどうかをチェックすることでプロトコルを判断できる、という仕組みです。
アプリケーションの識別
アプリケーションがネットワーク上でどのような振舞いをするかについては、プロトコルのようにRFCに定められて公開されているわけではありません。
つまりアプリケーションの識別はプロトコルの識別のようにはいきません。
DPIは「どのアプリケーションがどのようなプロトコルを用いてどのサーバと通信するのか」といった情報を基に、アプリケーションの識別を行います。これらの情報はDPIメーカが独自に収集するなどしてシグネチャと呼ばれるデータベースに保持されます。
シグネチャはDPIのアプリケーション識別精度を左右し、日々変化するトラフィックに追従できるよう様々な工夫が成されています。
HTTP通信におけるアプリケーション識別
上記を踏まえて本題の「HTTP通信がどのようにしてアプリケーションに分類されるのか?」についてご説明します。
インターネット上のトラフィックを分析するにあたり、多くを占めるのがHTTPやHTTPS(HTTPをTLSで暗号化して転送する:HTTP over SSL/TLS)を用いた通信です。
HTTPは平文で転送されるため、HTTP上でやり取りされるデータをすべて参照することができます。
DPIはこれを利用してHostヘッダを参照すればWebサーバのホスト名を特定することが可能であり、バーチャルホストのように1つのIPアドレスで複数のウェブサイトが構成されるようなパターンであっても、どのサイト向けのトラフィックか判断でき、結果的に正確なアプリケーションの識別が可能になります。
また、最近は減ってきているのですが、スマートフォン上で動作するアプリケーションの場合はUser-Agentヘッダにアプリケーション固有の文字列が設定されるため、これを手掛かりにアプリケーションの識別が可能なケースもあります。
次回は、HostヘッダやUser-Agentヘッダを参照できないHTTPS通信のケースを例にDPIの動作原理をご紹介します。