QoS・パケットの識別

 QoSの機能には、大きく分けると「パケットの識別」、「優先制御」、「帯域制御」の3つの機能があり、この機能を使って動作しています。

 ここまで、「優先制御」、「帯域制御」について説明してきました。ここでは、「パケットの識別」について説明してゆきます。

 「優先制御」、「帯域制御」においてパケットの優先度を識別し、優先度に応じた待ちキューに振り分けたり、パケットの破棄を行っていると説明してきました。

それでは、パケットの優先度をどのように判定しているのでしょうか?

 ルータは、自動的にパケットの優先度を判定することができません。事前にどのような情報を持ったパケットが優先度が高いのか、低いのかを定義しておく必要があります。

ルータが主に識別する情報には、以下のようなものがあります。

  • IPアドレス
  • TCP,UDPのポート番号
  • IPヘッダ内のTOSフィールド
  • VLANタグ

IPヘッダの詳細は、下図の通りです。

VLANタグの詳細は、下図の通りです。

 IPアドレスでは、通信する端末を識別できます。TCP,UDPのポート番号では、アプリケーションを識別することができます。

 つまり、IPアドレスとポート番号の組み合わせで、端末やアプリケーション単位に優先度を判定することができます。

 「IPヘッダ内のTOSフィールド」や「VLANタグ」は、ルータやスイッチが優先度を他のルータやスイッチに優先度を知らせるために使用されています。

 基本的に端末側から、これらの情報が、書き込まれてパケットが送られることがないため、ルータで行われるQoSのパケットの識別には、主に「IPアドレス」、「TCP・UDPのポート番号」が使用されています。

しかし、この方法に問題がないわけでありません。

 「IPアドレス」だけの情報で識別を行うと、DHCPによりIPアドレスの払い出しを受けている端末を確実に識別することはできません。

 また、「TCP,UDPのポート番号」だけの情報で識別を行うとアプリケーションを識別することができますが、ポート番号が動的に変わるアプリケーションの場合、確実に識別することはできません。

 それでは、「VLANタグ」や「IPヘッダ内のTOSフィールド」で、この問題を解決できるのかというと、そういう訳でもありません。

 VLANタグ内の優先度を示す3ビットのフィールドは、スイッチやIP電話機のトラフィックを識別する場合が多く、端末のパケットを識別に使用することはありません。

 「IPヘッダ内のTOSフィールド」の8ビットの内、上位3ビットが優先度を表すIPプレシデンスで、値は10進数で0~7までを指定することができます。値が大きいほど優先度が高いことを表しますが、ここに書き込まれる優先度があてにならないのです。

 あくまでも、送信する端末の自己申告にすぎないので、自分のパケット(自分のアプリケーション)は、優先順位が高いのだと、優先度の高い値を設定されてしまえば、それまでです。

 それでは、端末側から書き込まれて送られてくるTOSフィールドの優先度を信用しないでルータ側で書き換えて、優先度を管理、制御できればよさそうですね。

 これを実現するには、管理するネットワーク全体のルータで一貫した優先度管理が必要です。こっちのルータだと優先度が高いのに、次のルータだと優先度が低く評価さることがあるようだと、QoSが成り立ちません。

 このように、パケットの識別は完全ではありません。しかし、大半の通信はIPアドレスとポート番号の組み合わせでパケットを識別することができるので、QoSを導入することで一定の効果は見込めます。