Type of Service(タイプ・オブ・サービス、ToS、サービス種別)フィールドは、IPv4ヘッダの先頭から2バイト目(8 - 15ビット目)である。このフィールドには長年にわたって様々な目的が割り当てられ、5つのRFC[1]にそれぞれ異なる方法で定義されている

再定義される以前は、ToSフィールドはデータグラムの優先順位を指定し、低遅延、高スループット、または信頼性の高いサービスのための経路を要求するために使用されていた。ToS値に基づいて、パケットは優先送信キューに入れられ[2]、あるいは適切なレイテンシ、スループット、または信頼性により転送されることになる。実際には、この目的でのToSフィールドの利用は、米国国防総省のネットワーク以外では広く使用されていない。しかしながら、多くの実験的、研究的、展開的な研究はこの8ビットをどのように利用するかに焦点を合わせており、その結果が現在のDSフィールドの定義になっている。

再定義後のToSフィールドは、6ビットのDifferentiated Services Code Point(DSCP)フィールド[3]と2ビットのExplicit Congestion Notification(ECN)フィールド[4]から構成される8ビットのDS(differentiated services)フィールドである。Differentiated ServicesはToSとやや後方互換性があるが、ECNにはない。このDSフィールドのフォーマットは、IPv6Traffic Classフィールドにも使用されている。

歴史 編集

IPヘッダのToSフィールドは、元々 RFC 791 で定義されたもので、それ以来IP優先順位とToSとして解釈されてきた。この定義は、主にメッセージ優先順位を定義する米国国防総省仕様JANAP-128から派生したものである。これは、各IPパケットに優先順位を割り当てるためのメカニズム、および高スループット、高信頼性、低遅延などの特定の処理を要求するためのメカニズムを定義している。 RFC1349 では、Monetary Costビットが導入された(このビットは、RFC 791では将来の使用のために予約されていた)。 RFC 1583 (OSPFv2)のセクション2.4で、ToS対応ルーティング方式が導入された。

実際には、このフィールドのIP優先順位の部分だけが米国DoDネットワークの外で使用されたことがある。IP優先順位フィールドの値が高いほど、IPパケットの優先順位が高くなる。米国DoDネットワークの中には、海洋ケーブル経路と衛星通信(SATCOM)経路の間の経路選択(両方の経路が存在する場合)に遅延ビットを使用したものもあった。作者がその起草時にDiffServの取り組みを知っていたこともあり、IPv6にはIPv4のような伝統的なToSフィールドがなかった( RFC 2460 Section 7)。

RFC 2474 では、このフィールド全体の定義が変更された。現在はDS(Differentiated Services、DiffServ)フィールドと呼ばれており、上位6ビットにはDSCP(Differentiated Services Code Point)と呼ばれる値が含まれている。DSの上位3ビットは、IP優先順位との互換性を維持する。RFC 3168 以降、残りの2ビット(最下位2ビット)はExplicit Congestion Notification(ECN)に使用される。

割当て 編集

優先順位とToS 編集

RFC 791 では、Type of Serviceフィールドは次のように定義されていた。

0 1 2 3 4 5 6 7
優先順位 Type of Service 未使用(0)

優先順位(Precedence)は先頭3ビットのフィールドであり、この数値の高いパケットを他のパケットよりも重要なものとして扱う。ルータが輻輳していて、いくつかのパケットを破棄する必要がある場合は、優先順位が最も低いパケットが最初に破棄される。優先順位フィールドはIPv4の一部であるが、使用されることはなかった。

RFC 1349 で低コスト(lowcost)フィールドが追加され、ToSの4つのビットの役割が以下のようになった。

0 1 2 3 4 5 6 7
(優先順位) 低遅延 スループット 信頼性 低コスト 未使用(0)

ここでの命名は、Unixオペレーティングシステムの規約に従う[5]RFC 1349 および RFC 1060 では、アプリケーションのデフォルト値として同時に使用される1ビットの例のみを示しているが、 RFC 791 では、3つのビットのうち最大2つを名目上設定する必要があると述べている。そのような用途の1つがmod_iptosにある[6]

最後の3ビットはRFC 2474以前に多くの定義を経ているため(下記参照)、文書化と実装の際に混乱し矛盾を来す可能性がある。

DSCPとECN 編集

RFC 2474 (1998年12月発表)ではDSフィールドの最初の6ビットをDifferentiated Services Code Point(DSCP)用に予約し、RFC 3168では後ろの2ビットをExplicit Congestion Notification英語版用に予約した。

0 1 2 3 4 5 6 7
DSCP ECN

DSCPは、定義した各値に名前を付けるクラスセレクタ(CS)を定義しており、先頭の3ビットは従前の仕様のIP優先順位を反映している。

DSCP/IP優先順位変換テーブル
DSCP名 DS Fieldの値(十進数) IP優先順位
CS0 0 0: Best Effort
CS1, AF11-13 8,10,12,14 1: Priority
CS2, AF21-23 16,18,20,22 2: Immediate
CS3, AF31-33 24,26,28,30 3: Flash - mainly used for voice signaling
CS4, AF41-43 32,34,36,38 4: Flash Override
CS5, EF 40,46 5: Critical - mainly used for voice RTP
CS6 48 6: Internetwork Control
CS7 56 7: Network Control

DSCPの命名法:

CS
クラスセレクタ (RFC 2474)
AFxy
Assured Forwarding (x=class, y=drop precedence) (RFC 2597)
EF
Expedited Forwarding (RFC 3246)

上記の表では、ToSフィールド全体の値に対して個々の値が書き出されている。

DSCP/ToS/IP優先順位変換テーブル
DSCP値 ToS値 IP優先順位
0 0 0
8 32 1
10 40 1
14 56 1
18 72 2
22 88 2
24 96 3
28 112 3
34 136 4
36 144 4
38 152 4
40 160 5
46 184 5
48 192 6
56 224 7

注:上の表では、ToSは十進数で表示されている。多くのルータはToSを16進形式で表す。

例えば、IP優先順位が1、すなわち2進数で0b001の場合、未使用の5ビットがゼロであると仮定すると、ToSフィールド全体は001 00000になる。これを001000 00と解釈すると、先頭5ビットの001000 = 8がDSCP値となる。

脚注 編集

  1. ^ RFC 791RFC 1122RFC 1349RFC 2474RFC 3168 の5つ。ToSフィールドの歴史については RFC 3168 のsection 22を参照。
  2. ^ http://www.tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.qdisc.classless.html Linux Advanced Routing & Traffic Control
  3. ^ RFC 3260 Section 4
  4. ^ RFC 3168 Section 5
  5. ^ openbsd/src:sys/netinet/ip.h” (英語). GitHub. 2018年10月10日閲覧。
  6. ^ mod_iptos.c (mod_iptos 1.0)”. 2018年10月10日時点のオリジナルよりアーカイブ。2018年10月10日閲覧。

参考文献 編集

  • John Evans, Clarence Filsfils (2007). Deploying IP and MPLS QoS for Multiservice Networks: Theory and Practice. Morgan Kaufmann. ISBN 978-0123705495 

関連項目 編集

外部リンク 編集