G- lambda
3.2 実装および応用
3.2.1 i-Path 機能を実現する API
i-Pathではsocket APIを利用することで, 端末のアプリケーションがネットワーク
経路上のルータの情報を取得することを可能としている. ネットワークの内部情報の収 集および利用は輻輳制御方式の性能向上を目的としたENCAP方式ではトランスポー トスタック内でのみ動作し,アプリケーションへのデータの受け渡しは想定されていな かった. そこで本研究ではアプリケーションに対してデータを受け渡すためのAPI を 開発した.
一般のネットワークに内部情報について可視性が提供された場合,必要とされる情報 の種類,更新の頻度, 得られた情報に対する振る舞いはアプリケーション毎に大きく異 なることが想定される. そこで,一般の内部情報の収集に拡張されたENCAP方式では アプリケーションが内部情報にアクセスするための何らかのAPIが必要となる. また,
ENCAP方式の情報収集はTCP, UDPといった既存のトランスポート層にカプセル化
されて行われることから,アプリケーションから見た場合にソケット内の機能として取 り扱うことが適切と考えた.
収集された通信相手までの経路上の内部情報を利用してアプリケーション,トランス ポート挙動の最適化を目指すENCAP方式はコネクション型通信で多く利用されるこ とが想定される. 通信相手先毎にソケットが生成されるコネクション型通信の場合は, ソケットオプションの設定, 取得APIsetsockopt(), getsockopt()を介して,収集対 象とする情報および開示ポリシの設定, 収集された情報へのアクセスを提供する. コネ クションレス型通信の場合,アプリケーションがこれまでに収集された情報にアクセス したい場合, 相手先端末を指定したうえで, コネクション型と同様のgetsockopt()を 介して取得する.
また,アプリケーションがデータグラム毎にENCAP方式に依る収集対象の設定,収 集された情報のアクセスを行いたい場合はそれぞれsendmsg(), recvmsg()の制御バッ ファを利用する. ENCAP方式で収集される通信経路上の情報は同一通信相手の他のコ ネクションにとっても有用である. そのため,相手先のアドレス単位で管理を行うこと とした. 例えばFreeBSDではPathMTU,スロースタート閾値(ssthresh), 輻輳制御ウイ ンドウサイズ(cwnd)の情報は相手先アドレス毎に経路表で管理されており, ENCAP で収集された情報もこれらと併せて管理することができる.
i-Pathの機能は将来のインターネットの機能の一部として利用することを想定して
いるため, i-Pathの機能を利用するには現状のネットワークで利用されている機器に対
してソフトウエアの変更をおこなったうえで利用しなければならない. ただし, i-Path の機能は現状の機能に対して追加的に利用できるようにしており, i-Path機能を備えて
いないルータがi-Path headerが挿入されたIPパケットを受信した時には単に通過さ せる処理を行う.
i-Path機能を実現するAPIの動作について述べる. 端末上のアプリケーションは
i-PathのTCP socket APIとUDP socket APIを利用することで取得する情報の種類を 決定し, 開示ポリシにそって情報を取得する. i-PathではAPIに対してパラメータを指 定することで, 取得する情報の種類を決定する(表3.1) . さらに, 情報を取得するルー タのTTLの範囲を決定することで, 情報を取得したい範囲(MIN TTL, MAX TTL)を設 定する. これらのパラメータを指定し, データを取得することでTTLごとの一覧が端 末側に返送される.このとき, i-Path機能が利用できない場合やルータに設定されたポ リシによって情報取得ができなかった場合には,返送される情報の一覧に情報が取得で きなかったルータが存在することも情報として取得できる.
i-Path機能によって, Network Interface Card (NIC)の帯域情報,バイトカウント,エ ラーカウント,キュー長, MTUサイズ,位置情報(緯度・経度), redundancy elimination の使用可否が取得できる. ここでは位置情報の取得に関しては予め管理情報として設 定がされていることが必要である. Redundancy eliminationは Anandら[25]によって 提案されたパケットのルータ上でのキャッシュ機構である.
i-Path機能の実装により,アプリケーションは多くの機能を追加できる. 端末がルー
タより取得する情報を活用した輻輳制御により, P2Pアプリケーションの通信の効率化 ができるようになる. また,最適な符号化品質の選択ができる動画アプリケーションの 開発なども可能となる. さらには, ネットワークの端末側から正常なネットワークの状 態と, 異常状態を判断することが可能となり, ネットワーク運用者に対して障害報告が 詳細に行えるようになる(図3.7).
通信経路上のネットワークの状態の評価にあたっては, 非対称通信経路や通信経路の 切り替わりによる影響を考慮することが必要である. 通信経路の切り替わりはネット ワーク側の経路情報の更新に伴う一時的なものばかりではなく, Equal Cost Multi Path (ECMP)やLink Aggregation Group (LAG)区間における定常的な通信経路の切り替わ りも想定される. 多くの場合は, 到着パケットのIP TTL値によって通信経路の違いを 識別することもできるが,異なる通信経路でルータホップ数が等しい場合には経路の違 いを検出することは困難となる. i-Pathで厳密な複数経路の検出が必要な場合は,ルー
タがi-Path headerに情報を書き込む際にパケットが通過するルータインタフェースID
またはそのハッシュ値を併せて記載することで対応できる. また, 時間経過による通信 経路情報を保存するためのタイムスタンプを書き込むことができる.
i-Pathの最大の特徴はAPIを利用することでアプリケーションからネットワーク上
の情報が取得できることである. これによってアプリケーションが経路を選択するため
図 3.7 i-Path機能を利用した運用者向けの障害報告
の情報を得ることができ,ネットワークの利用者に選択肢を提供し望ましい方法で通信 できる. 実装したAPI利用の具体例を図3.8に示す.
図 3.8 i-Path APIの利用例
/∗ Probing Outbound Byte−Count of Network Interfaces, range of TTL = 0 −64 ∗/
#include <ip sirens.h>
structsr ireq∗req = (structsr ireq∗)malloc(IPSIRENS IREQSIZE(
IPSIRENS IREQMAX));
structsrreq index∗sri = (structsrreq index∗)(req + 1);
Socklen t len = IPSIRENS IREQSIZE(inSettings−>numsirens);
req−>sr nindex = inSettings−>numsirens;
req−>sr smax = 1;
for(int i = 0; i< inSettings−>numsirens ; i++){ sri[i].mode = SIRENS TTL;
sri[i].probe = SIRENS OBYTES;
sri[i].qttl min = 64;
sri[i].sttl min = 0;
sri[i].sttl max = 64;
}
setsockopt( inSettings−>mSock, IPPROTO IP, IPSIRENS IDX, (char∗) req, len);
/∗ Retrieving and Printing out Probed Byte−Count ∗/
#include<ip sirens.h>
structsr dreq ∗req = (structsr dreq)malloc(IPSIRENS DREQSIZE(IP TTL MAX));
unionu sr data∗sr dataq,∗pr dataq;
sr dataq = (union u sr data∗)((char∗)dreq +sizeof(structsr dreq));
sr datas = (unionu sr data∗)((char∗)dres + sizeof(structsr dreq));
dreq−>dir = 1;
dreq−>mode = SIRENS TTL;
dreq−>probe = SIRENS OBYTES;
getsockopt( status−>agent−>mSock, IPPROTO IP, IPSIRENS SDATA, (char∗) dreq, &
len );
for(i=0; i <IP TTL MAX ; i++){ if(sr dataq[i].set != 0xffffffff)
printf("%3d:%16u\n", i, ntohl(sr dataq[i].set));
} }
表 3.1 i-Path APIのパラメータ
Parameter Type Parameter Description
SIRENS LINK Link bandwidth of NIC Probing SIRENS OBYTES Output byte count on NIC Information SIRENS IBYTES Input byte count on NIC
SIRENS DROPS Dropped packets count on NIC SIRENS ERRORS Error count on NIC
SIRENS QMAX Maximum used queue length on NIC SIRENS QLEN Output queue length limit
SIRENS MTU MTU size
SIRENS LOCATION Geographical location
SIRENS RE Availability of Redundancy Elimination
Probing Range MIN TTL Lower bound of TTL
MAX TTL Upper bound of TTL