パケット送信装置、パケット送信方法、およびパケット送信プログラム
【課題】 パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置に関し、バースト問題の一層の緩和を図る。
【解決手段】 受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定し、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行なう。
【解決手段】 受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定し、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行なう。
【発明の詳細な説明】
【技術分野】
【0001】
本件は、パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置およびパケット送信方法、並びに演算処理装置内にパケット送信装置を構築するパケット送信プログラムに関する。
【背景技術】
【0002】
例えば動画配信等のストリーミング配信における1つの問題としていわゆるバースト問題がある。すなわち、大量のパケットが短時間に配信されることによって中継装置(スイッチ、ルータ、コンバータなど)や送信先装置のバッファ(キュー)がオーバフローする。オーバフローしたパケットは廃棄され、その結果、例えば動画配信における再生画像が乱れるなどの障害が生じる。これをバースト問題と称する。
【0003】
従来、このバースト問題の緩和のために、トラフィックシェービングと呼ばれる手法とトラフィックポリシングと呼ばれる手法が知られている。トラフィックシェービングは送信しようとしているパケットをバッファ(キュー)に一旦溜め込んでおき、一定の時間間隔でパケットを転送する方式である。また、トラフィックポリシングは、トラフィックが一定レート以上になるとパケットを破棄する方式である。
【0004】
ここで、トラフィックシェービングは、アンダフロー(キューに溜め込まれたパケットの枯渇)が原因で一定時間間隔での送信ができなくなることを避けるために、大量のパケットを常にキューに溜め込んでおくように実装される。このため、トラフィックシェービングでは、キューに溜め込まれた大量のパケットに相当する時間分の遅延が常に発生した状態で送信を行なうことになる。さらにこのトラフィックシェービングでは、何らかの理由で送信が一定時間行なえなかった場合、キューに溜め込まれるパケットの数がさらに増加することになる。
【0005】
一方、トラフィックポリシングでは、パケット廃棄が発生しやすい。このトラフィックポリシングでは、パケットがまとまって大量に破棄される可能性は小さいため、大きい画像乱れにはつながりにくいが、小規模なパケット破棄による小規模な画像乱れが発生しやすい。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2004−186882号公報
【特許文献2】特開2007−13449号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本件のパケット送信装置、パケット送信方法、およびパケット送信プログラムの課題は、上記のバースト問題の一層の緩和を図ることにある。
【課題を解決するための手段】
【0008】
本件開示のパケット送信装置は、パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置であって、パケット受信部と、経過時間判定部と、待ち処理部と、パケット送信部とを有する。
【0009】
パケット受信部は、パケットを受信する。
【0010】
また、経過時間判定部は、経過時間tと、第1の閾値時間X・T1との大小を判定する。ここで、受信したパケットを送信先装置に向けて送信したときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をXとする。また、その最小のキューに収容されているパケットがその最小のキューから順次取り出される時間間隔をT1とする。さらに経過時間tは、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間をいう。
【0011】
また、待ち処理部は、経過時間判定部により、経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合に、上記の未送信パケットの送信を待たせる処理を行なう。
【0012】
さらに、パケット送信部は、上記未送信パケットを、経過時間判定部により経過時間tが第1の閾値時間X・T1よりも大きいと判定された場合には前記現時刻に送信する。また、このパケット送信部は、上記未送信パケットを、経過時間判定部により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合には待ち処理部により待たされた後に送信する。
【0013】
また、本件開示のパケット送信方法は、上記のパケット送信装置で実行される処理を方法として捉えたものである。
【0014】
さらに、本件開示のパケット送信プログラムは、プログラムを実行する演算処理装置内で実行され、その演算処理装置内に上記のパケット送信装置を構築するプログラムである。
【発明の効果】
【0015】
本件開示のパケット送信装置等によれば、バースト問題の一層の緩和が図られる。
【図面の簡単な説明】
【0016】
【図1】第1実施形態のパケット送信装置の機能ブロック図である。
【図2】第2実施形態を含む全体システムを示すブロック図である。
【図3】制御表の一例を示した図である。
【図4】配信サーバ中のドライバBにおける送信処理を示すフローチャートである。
【図5】図4に示す送信処理のうちの「キューイングおよびストリーミング配信以外のパケット送信部」のフローチャートである。
【図6】図3の送信スレッド部の処理を示すフローチャートである。
【図7】送信間隔を調整することなく送信を行なった場合の例を示す図である。
【図8】トラフィックシェービングを適用した場合の例を示す図である。
【図9】時刻Zmsの時点における制御表を示した図である。
【図10】図4〜図6に示す送信処理の具体例を示す図である
【図11】この第1変形例における制御表の初期状態を示す図である。
【図12】この第1変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」の処理内容を示したフローチャートである。
【図13】図12におけるポート番号自動識別処理(ステップ31)のフローチャートである。
【図14】第2変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」の処理内容を示した図である。
【図15】第2実施形態の第3変形例を示す図である。
【図16】第4変形例における制御表を示した図である。
【図17】測定プログラムの配置位置を示した図である。
【図18】X+1個のパケットを時間間隔0で送信した場合を示す模式図である。
【図19】X+2個のパケットを時間間隔0で送信した場合を示す模式図である。
【図20】パケットを送信時間間隔T1で送信したときの様子を示す図である。
【図21】パケットを送信時間間隔0.99・T1で送信したときの様子を示す図である。
【図22】UDPを使用した場合の、測定プログラムおよびパケットロストプログラムの各動作位置を示した図である。
【図23】UDPを使用した場合の、測定プログラムおよびパケットロストプログラムの各動作位置を示した図である。
【発明を実施するための形態】
【0017】
以下、実施形態を説明する。
【0018】
図1は、第1実施形態のパケット送信装置の機能ブロック図である。
【0019】
この図1において、実線の矢印は送信データ(パケット)の流れを表わし、点線の矢印は、その他のデータ(制御情報)の流れを表わしている。
【0020】
この図1に示すパケット送信装置10は、パケット受信部11、待ち処理部12、およびパケット送信部13を有する。
【0021】
パケット受信部11は、パケットを受信する。
【0022】
待ち処理部12は、後述する条件に合致する場合には、パケット受信部11で受信したパケットをパケット送信部13で直ちには送信させずに、その送信を延期させる待ち処理を行なう。
【0023】
パケット送信部13は、待ち処理部12から渡されたパケットを送信先装置(図示せず)に向けて送信する。
【0024】
また、この図1に示すパケット送信装置10は、経過時間判定部14を有する。この経過時間判定部14では、待ち処理部12に待ち処理を実行させるための条件判定を行なう。その条件判定の説明にあたり、ここでは以下の通りパラメータを定義する。
【0025】
X:受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数。送信経路の具体例については、後述の第2実施形態で説明する。
【0026】
T1:その最小のキューに収容されているパケットがその最小のキューから順次取り出される時間間隔
t:直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間
X・T1:第1の閾値時間
経過時間判定部14は、経過時間tと第1の閾値時間X・T1との大小を判定する。
【0027】
そして待ち処理部12は、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合に、パケット受信部11から受け取った未送信パケットの送信を延期させる待ち処理を行なう。
【0028】
さらにパケット送信部13は、その未送信パケットを、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも大きいと判定された場合には待ち処理部12による待ち処理を経ることなく送信する。すなわちこの場合、パケット送信部13は未送信パケットを待ち処理部12から直ちに受け取って送信する。また、このパケット送信部13は、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合には、未送信パケットを、待ち処理部12による待ち処理を経た後に送信する。
【0029】
ここで、さらにパラメータを定義する。
【0030】
T:パケット受信部11におけるパケット平均受信時間間隔
T2:T1<T2<Tを満たす時間間隔。例えばT2=(T1+T)/2
待ち処理部12は、具体的には、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を、現在時刻から(第2の閾値時間X・T2−経過時間t)の待ち時間だけ待たせる待ち処理を行なう。
【0031】
図1に示すパケット送信装置10は、さらに、制御表記憶部15と制御表更新部16を有する。制御表記憶部15は制御表15aを記憶する記憶部である。この制御表15aには、直近の送信済パケットから数えてX−1個前の送信済パケットまでの、その直近の送信済パケットを含むX個の送信済パケットの各送信時刻が記録される。また、制御表更新部16は、パケット送信部13による未送信パケットの送信を受けて制御表中の送信時刻を更新する。
【0032】
上記の経過時間判定部14は、制御表15aを参照することによりX−1個前の送信済パケットの送信時刻を求めて経過時間tを算出し、その経過時間tと第1の閾値時間X・T1との大小を判定する。
【0033】
ここで、パケットの送信先が複数存在するときは、制御表15aには、各送信先ごとの各領域に、各送信先に向けて送信された送信済パケットの各送信時刻が記録される。この場合、制御表更新部16は、制御表15a中の送信時刻をパケットの送信先ごとに更新する。
【0034】
制御表15aに記録される送信先は、あらかじめ分かっているときは、その分かっている送信先が初期設定として制御表15aに記録される。あるいは、送信先があらかじめ不明な場合、制御表更新部16にパケットの送信先を監視させ、新たな送信先に向けて送信されるパケットを検出したときに制御表15aにその新たな送信先に対応する領域を追加させる構成を採用してもよい。
【0035】
制御表15aの具体例については、後述の第2実施形態で説明する。
【0036】
図1に示すパケット送信装置10はさらに、測定部17と再送要求受信部18を有する。再送要求受信部18は、パケット送信部13から送信先装置に向けて送信したパケットの再送要求を受信する受信部である。この再送要求受信部18で再送要求を受信すると、再送要求があったことが測定部17に通知される。
【0037】
測定部17は、以下の3つの役割りを担っている。
(1)パケット平均受信時間間隔Tを求める平均受信時間算出部としての役割り。
(2)収容可能パケット数Xを求める収容可能パケット数検出部としての役割り。
(3)時間間隔T1を求めるキュー取出し時間検出部としての役割り。
【0038】
この測定部17は、上記(1)のパケット平均受信時間間隔Tを求めるにあたっては、以下の処理を行なう。すなわち、この測定部17は、パケット受信部11において順次受信する複数のパケットの受信間隔の平均値を算出する。この算出された平均値が上記の平均受信時間間隔Tである。
【0039】
また、測定部17は、上記(2)の収容可能パケット数Xを求めるにあったては、以下の処理を行なう。すなわち、測定部17は、パケット送信部13に、複数個のパケットを送信先装置に向けてほぼ同時に送信する過程を、ほぼ同時に送信するパケットの個数を順次変更しながら繰り返させ、再送要求の発生を免れる最大パケット数を検出する。この再送要求の発生を免れる最大パケット数が送信先装置に向けてパケットを送信したときの送信経路上に存在するキューのうちの最小のキーの収容可能なパケット数Xである。
【0040】
さらに、測定部17は、上記(3)の時間間隔T1を求めるにあたっては、以下の処理を行なう。すなわち測定部17は、パケット送信部13に、複数個のパケットを所定の時間間隔で送信する過程を、パケットの個数および所定の時間間隔を変更しながら繰り返させて、パケットの個数を増やしても再送要求が検出されない最短の時間間隔を検出する。この最短の時間間隔が、上記の時間間隔T1である。
【0041】
尚、この図1に示す第1実施形態では、測定部17を備えてパケット平均受信時間間隔T、収容可能パケット数X、および時間間隔T1を求めているが、それらがあらかじめ分かっているシステムの場合は、この測定部17は不要である。
【0042】
測定部17で求められた各値T、X、T1は、待ち処理部12および経過時間判定部14での上述の各処理や、制御表記憶部15に記憶されている制御表15aに記録される送信時刻の数の指標として用いられる(制御表15aについては後述の第2実施形態を参照)。
【0043】
ここでは、パケット送信装置10について説明したが、このパケット送信装置10で行われる処理をパケット送信方法として捉えることもできる。また、この図1のパケット送信装置10を、プログラムを実行するCPU(Central Processing Unit)が搭載された演算処理装置内で実行されたときに、その演算処理装置内にパケット送信装置を構築するパケット送信プログラムとして捉えることもできる。
【0044】
以上で第1実施形態の説明を終了し、次に第2実施形態を説明する。
【0045】
図2は、本件の第2実施形態を含む全体システムを示すブロック図である。
【0046】
ここでは、パケットは、コンテンツ20(ここでは動画コンテンツとする)からエンコーダ21に取り込まれ、そのエンコーダ21から配信サーバ30が受信するものとする。ここで、エンコーダ21は、例えば多数のコンテンツを蓄積しておき、要求に応じたコンテンツを表わすパケットを要求先に向けてストリーム配信するコンテンツストレージ装置等を代表させて示したものである。
【0047】
配信サーバ30に到着したパケットは、アダプタAで受信され、ドライバAが受け取ってIP(Internet Protocal)に渡され、さらにTCP(Transmission Control Protocal)に受け渡される。ここで、後述する態様によってはTCPに代わりUDP(User Datagram Protocol)を採用した場合に言及する。基本的にはTCPとして説明する。
【0048】
TCPは、ユニキャストの送信を行なうプロトコルである。したがって、1つのポート番号は1個の送信先装置に対応している。またTCPでは、送信経路上でパケットロストがあるとパケットの再送処理が行なわれる。
【0049】
一方UDPでは多くの場合マルチキャストでの送信が行なわれており、その場合1つのポート番号が複数の送信先装置に対応している。またUDPではそのままでは再送処理は行われない。したがって送信元では、パケットロストを検出するとその結果を送り返すパケットロスト検出プログラムを送信先側に導入して初めてパケットロストがあったことを知ることができる。
【0050】
配信サーバ30のTCPに受け渡されたパケットは、さらにアプリケーションプログラムを経由して今度は逆順を辿り、TCP、IPと進み、次にはドライバB、アダプタBと進んで、配信サーバ30から送信先装置(ここではクライアント端末50_1,50_2,・・・,50_n.・・・のうちのいずれか)に向けて送信される。
【0051】
配信サーバ30から送信されたパケットは中継器A41,インターネット42(または専用線でもよい)、およびいずれかの中継器B43_1,43_2,・・・を経由して、いずれかのクライアント端末50_1,50_2,・・・,50_n,・・・で受信される。受信されたパケットはそのクライアント端末に接続された映像装置51_1,51_2,・・・,51_n−1,51_n,・・・により映像として可視化される。
【0052】
ここで、配信サーバ30は、図示しないCPUやメモリ等、演算処理を行なうハードウェアを有する。
【0053】
図2に示したドライバA、IP、TCP(またはUDP)、およびアプリケーションは、そのハードウェア上で実行されるソフトウェアを表わしている。ここでは、説明の簡素化のため、それらのソフトウェアがCPUで実行されることにより実現する機能を、ソフトウェア自体と区別せずに説明する。
【0054】
以下では、本件の機能をドライバBで実現した例について先ず説明し、その後、実現形態の異なる各種の例について説明する。
【0055】
尚、以下の説明においても、X,T,T1,T2,tの各パラメータは前述の第1実施形態で説明した通りのものとする。X,T,T1は、ユーザがあらかじめ知っていてドライバBのコンフィギュレーションプロパティ(Configuration Properties)などで指定したものが用いられる。あるいは後述する方法により求められ、ユーザあるいはアプリケーションにより指定されたものが用いられる。
【0056】
図3は、制御表の一例を示した図である。
【0057】
ここでは、送信先ポート番号や各種パラメータはユーザが既に知っていて、ドライバBのプロパティ(Configuration Properties)などで指定されるものとする。あるいはアプリケーションが知っていてそのアプリケーションがドライバBに指定するものであってもよい。
【0058】
この図3に示す制御表中の「送信先ポート番号」は、上記の通りユーザ又はアプリケーションにより指定されたものである。この制御表は送信先ポート番号ごとに横一行の領域が設けられており、各送信先ポート番号ごとに以下に説明する値が記録される。また、ここでは、ドライバBが、パケットを一時的に格納しておくキューを各送信先ポート番号ごとにメモリ(図示せず)上に作成するものとし、「キューのベースアドレス」には、そのメモリ上に作成されたキューの所在をあらわすアドレスが記録される。
【0059】
また、「X−1個前のパケット番号」は、直近の送信済のパケットから数えてX−1個前の送信要済パケットのパケット番号である。ここでは、このパケット番号は0〜X−1で指定され、パケットを1つ送信するたびに0→1→・・・→X−1の順にインクリメントされ、(X−1)に達したら次は(0)に戻される。これら0,1,・・・,X−1は、この制御表内の時刻(0),時刻(1),・・・,時刻(X−1)にそれぞれ対応している。図3では、初期値として全て0が記録されている。
【0060】
「直近のパケット番号」は、直近の送信済のパケットの番号である。この「直近パケット番号」についてもパケットを1つ送信するたびに0→1→・・・→X−1→0→・・・の順に循環的に更新される。図3には初期値として全てX−1が記録されている。
【0061】
「時刻(0)」,「時刻(1)」,・・・,「時刻(X−1)」は、それぞれ、パケット番号0,1,・・・,X−1の送信済パケットの各送信時刻である。図3では初期値として全てSが記録されている。この初期値Sは、パケット送受信を開始する時刻よりも時間的に十分に辿った時刻である。例えば図2の配信サーバ30が起動した時刻を0としたとき、起動後数分はパケット送受信を開始しないであれば、S=0でよい。
【0062】
未送信のパケットを1個送信すると、「直近のパケット番号」に記録されているパケット番号に対応する時刻(直近のパケット番号)に現在時刻が記録され、「X−1個前のパケット番号」および「直近のパケット番号」に1が加えられる。ただし、1を加えた結果X−1がXに値が変ったときは、そのパケット番号は0に戻される。
【0063】
尚ここでは、収容可能なパケット数が最小のキューは、図2の中継器B43_1,43_2,・・・に存在し、かつ各中継器B43_1,43_2,・・・のキューの収容可能なパケット数は、いずれの中継器B43_1,43_2,・・・も同一の数Xであるとしている。
【0064】
図4は、配信サーバ中のドライバBにおける送信処理を示すフローチャートである。
【0065】
ドライバBではIPからの関数コールによりこの図4に示す送信処理が実行される。
【0066】
この送信処理は、「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)と「送信スレッド部」(ステップS02)とから成り立っている。
【0067】
図5は、図4に示す送信処理のうちの「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)のフローチャートである。
【0068】
この図5、およびそれ以降の図において「TCP/UDP」は、そのシステムでストリーム配信にTCPが使用されていればTCPを、UDPが使用されていればUDPを意味するものとする。
【0069】
ここでは先ず、今回送信しょうとしているパケットがここで対象としているTCP/UDPパケットであり、かつポート番号が制御表(図3参照)に含まれるポート番号であるか否かが判定される(ステップS11)。
【0070】
このステップS11の条件を満たすパケットの場合は、そのパケットが送信待ちのパケットを並べておくキューに登録され(ステップS12)、送信スレッドが起動していなければ送信スレッドが起動される(ステップS13)。この送信スレッドは、図4に示す送信スレッド部(ステップS02)の処理を行なうプログラムである。送信スレッド部(ステップS02)の処理については後述する。
【0071】
ステップS11の条件を満足しない場合、すなわち、送信しようとするパケットがここでの制御対象としているTCP/UDPパケット以外のパケットである場合、および、TCP/UDPパケットではあっても制御表に制御対象として登録されているポート番号以外のポート番号のパケットであった場合は、ステップS14に進み、ここではそのまま、従来と同様のパケット送信処理が行なわれる。
【0072】
以上の処理が、今回送信しようとしている全てのパケットについて繰り返される(ステップS15)。
【0073】
図6は、図4の送信スレッド部(ステップS02)の処理を示すフローチャートである。
【0074】
ここでは、初期には送信スレッドがスリープ状態にあるものとする。(ステップS21)。
【0075】
図5のステップS15で起動をかけられると送信スレッドが動作を開始し、ステップS22以下の処理が行われる。
【0076】
ここでは先ずキューからパケットが1個取出される(ステップS22)。次いで直近の送信済パケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの経過時間tが算出される(ステップS22)。この経過時間tは、図3に示す制御表が参照され、
t=現在の時刻−時刻(X−1個前のパケット番号)
により算出される。
【0077】
次に、この算出された経過時間tと、第1の閾値時間X・T1とが比較される(ステップS24)。t≦X・T1のときは待ちが必要と判断され、(X・T2−t)の時間待つ(ステップS25)。t>X・T1のときは、待ちは不要と判断され、ステップS25はスキップされる。
【0078】
次に、制御表(図3参照)の、時刻(直近のパケット番号)に送信時の現在時刻が記録され(ステップS26)、それに続き、パケット送信処理が行われる(ステップS27)。
【0079】
さらに、制御表の、X−1個前のパケット番号、および直近のパケット番号に1が加えられる(ステップS28)。1を加えた結果X−1よりも大きな値となったときは0に戻される。
【0080】
ステップS29では、キューに未送信のパケットが残ってるか否かが判定され、残っているときはステップS22に戻り、残りの未送信パケットのうちの1個のパケットが取出されて、上記と同様の処理が繰り返される。
【0081】
一方、ステップS29において、キューに未送信パケットが残っていないと判定されたときはステップS21に戻り、この送信スレッドはスリープ状態に戻る。
【0082】
この図6に示す処理によれば、連続するX個のパケットの先頭から末尾までの間隔はX・T1より大きくなるため、このままのパケット間隔で中継器Bに到達すれば中継器Bのキューがオーバフローすることはない。
【0083】
ここで、連続するX個のパケットの先頭から末尾までの間隔がX・T1より大きい場合、任意の1個のパケットが中継器Bに到達したときに中継器Bのキューに最低限1個の空きがあることを説明する。その1個のパケットよりもX−1個前のパケットは、少なくともX・T1の間隔が開いている。このため仮にX−1個前のパケットが中継器Bに到着したときにそのX−1個前のパケットが中継器Bのキューの末尾に登録されたとしても、今回のパケットが中継器Bに到着したときには、そのX−1個前のパケットはその中継器Bのキューの外に取り出されている。したがって任意の1個のパケットが中継器Bに到着したときには、中継器Bのキューに最低1個の空きが存在する。したがって、図6に示す処理によれば、中継器Bのキューでのオーバフローを避けることができる。
【0084】
ここで図4〜図6に示す送信処理によるパケット送信例を比較例とともに具体的に説明する。
【0085】
図7は、送信間隔を調整することなく送信を行なった場合の例を示す図である。この図7は本件に対する比較例に相当する。ここでは、この図7に示す比較例を第1比較例と称する。
【0086】
この図7および後述する図8、図10並びにそれらの図の説明で用いている記号は、以下の通り定義されるものとする。
【0087】
T、X、T1、T2、tの意味は、第1実施形態の説明の通りとする。
【0088】
msはミリ秒を表す。ここでは、T=10ms、中継器Bのキューが最小であってX=8個、T1=4ms、T2=6msの場合を考える。
【0089】
Q1は、配信サーバ30のIPのキューである。そのQ1の欄に記載されている「なし」、「1」、「2」等は、そのQ1に並んでいるパケットの数を表わしている。
【0090】
Q2は、配信サーバ中のドライバBのキューである。そのQ2の欄に記載されている、「なし」、「100」(図8参照)等は、そのQ2に並んでいるパケットの数を表している。ただし、このパケットの数は、Q2から取り出された直後の、未送信のパケットを含んでいる。
【0091】
時刻Z+10−0ms、Z+20−0ms(図7参照)等の−0msは、時刻Z+10ms、Z+20ms等よりもわずかに前の時刻であることを意味している。
【0092】
また、時刻Z+10+0ms、Z+20+0ms(図8参照)等の+0msは、時刻Z+10ms、Z+20msよりもわずかに後の時刻を意味している。
【0093】
またここで登場するパケットは、送信先ポート番号がすべて同一(ここでは送信先ポート番号28001)であるとする。
【0094】
時刻Zmsは、既に何パケットか送信された後の状態にある時刻である。
この時刻Zms以前は、パケットは10msの等間隔で受信され、Q1、Q2を通過し、さらに、配信サーバ30の外にもそのまま10msの等間隔で送信されたものとする。時刻Zms以降も、Q1には10msの等間隔でパケット届いているものとする、尚パケットがQ1に到着する時刻は、Z+10−0ms、Z+20−0ms等、Z+10ms、Z+20ms等よりもわずかに前の時刻であるとする。
【0095】
そして、時刻Z〜Z+10msの間のどこか(例えば時刻Z+5ms)から時刻Z+100−0msまでの間、CPUでは、パケットの送信とは無関係の、それよりも優先順位の高い何らかのソフトウェアが動作したために、ドライバBでの送信処理にはCPUが割り当てられず、送信処理が中断した状態にあったものと仮定する。
【0096】
この場合、送信間隔を調整することなく送信を行なうと、図7に示す通りとなる。
【0097】
すなわち、図7に示すように、時刻Z+10−0ms〜時刻Z+100−0msの間に到達したパケットは、送信処理が中断しているためQ1に格納されたままとなる。時刻Z+100−0msにCPUに送信処理が割り当てられたことにより、時刻Z+100+0msには、Q1に格納された10個のパケットがほぼ同時に配信サーバ30の外に送信される。
【0098】
この場合、最小のキューを持つ中継器B(X=8個)で10−8=2個のパケットが廃棄される結果となる。
【0099】
図8は、トラフィックシェービングを適用した場合の例を示す図である。ここでも図7の場合と同じ条件が適用されている。
【0100】
トラフィックシェービングは、前述のとおり、パケットをキューに一旦溜め込んでおき、等間隔の時間でパケットを送信する方式である。この図8に示す例では、Q2に100個のパケットが溜め込まれ、そのパケットが10ms間隔で送信されている。また、同じ10ms間隔で新たなパケットが到着している。
【0101】
この場合、図8に示すように、時刻Z+10−0ms〜時刻Z+100−0msの間に到達したパケットは、送信処理が中断しているためQ1に格納されたままとなる。また送信処理が中断したため、Q2に溜まっているパケットも溜まったままとなり、配信サーバ30から外への送信も中断する。時刻Z+100−0msに送信処理が再開されると、直後の時刻Z+100+0msに、時刻Z+100−0msにQ1に到着したパケットを含む、それまでQ1に溜まっていた10個のパケットがQ2に移る。送信処理が再開されたことに伴い、その時刻Z+100+0msには、Q2からパケットが1個取り出されて配信サーバ外に送信され、その後もQ2からは10ms間隔でパケットが取り出されて送信される。
【0102】
この場合、配信サーバ30から送信された後の送信経路上ではパケットの廃棄は生じないが、パケット配信が中断したことによる映像の乱れが生じる可能性がある。またQ2には、中断以前のパケット数よりも多い数のパケットが蓄えられ、その分、送信が全体としてさらに遅れることになる。
【0103】
次に図4〜図6に示す送信処理の具体例を説明する。
【0104】
図9は、時刻Zmsの時点における制御表を示した図である。ただしここでは、送信先ポート番号28001についてのみ示してある。
【0105】
また図10は、図4〜図6に示す送信処理の具体例を示す図である。ここでも図7の場合と同じ条件が適用されている。
【0106】
時刻Z−0msにIPに到達したパケットはドライバBに直ちに転送される。ドライバBでは、図4に示す「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)、すなわち図5のフローチャートが実行され、図5のステップS11→ステップS12と進んでドライバBのキューQ2に登録される。さらにステップS15に進んで送信スレッドが起動される。
【0107】
すると、今度は、図6のステップS21→ステップS22→ステップS23と進む。すなわち、ドライバBの送信スレッドがスリープ状態から起動し(ステップ21)、Q2からパケットが取り出され(ステップS22)、経過時間tが
t=現在の時刻−時刻(7個前のパケット番号)
=Zms−時刻(1)の時刻
=Zms−(Z−70ms)
=70ms
と、算出される(ステップS23)。
【0108】
ここで、第1の閾値時間X・T1は、
X・T1=8×4=32ms
であるので、
t=70ms>X・T1=32ms
であり、ステップS24では「偽」(待ち不要)と判定される。すなわち、ここでは、ステップ25の待ち処理は行われずに、制御表の、時刻(直近のパケット番号)=時刻(0)に現在の時刻が記録されて(ステップS26)Q2から取り出したパケットが直ちに送信される(ステップS27)。そして、制御表の、7個前のパケット番号、および直近のパケット番号に1が加えられて、それぞれ2、1となる(ステップS28)。
【0109】
時刻Z〜Z+10msの間のどこか(例えば時刻Z+5ms)から時刻Z+100−0msまでの間はドライバBにはCPUが割り当てられていなかったためパケットの送信処理が中断している。そのため、時刻Z+100−0msの時点では、IPのキューQ1に10個のパケットが溜まった状態となる。
【0110】
時刻Z+10+0ms時点では、ドライバBにCPUが再び割り当てられて送信処理が再開したため、IPのキューQ1に溜まっていた10個のパケットがドライバBに転送され、図4〜図6に示す送信処理が再開される。
【0111】
これら10個のパケット全てについて図5のステップS11の判定結果は「含まれる」であり、それら10個のパケット全てがドライバBのキューQ2に登録され(ステップS12)、ドライバBの送信スレッドが起動される(ステップS15)。
【0112】
図6のステップS23で算出される経過時間tは、Q2に登録された10個のパケットのうちの1〜7個目のパケットに関し、
パケット番号1:t=Z+100ms−時刻(2)=Z+100−(Z−60)=160ms>32ms=X・T1
パケット番号2:t=Z+100ms−時刻(3)=Z+100−(Z−50)=150ms>32ms=X・T1
パケット番号3:t=Z+100ms−時刻(4)=Z+100−(Z−40)=140ms>32ms=X・T1
パケット番号4:t=Z+100ms−時刻(5)=Z+100−(Z−30)=130ms>32ms=X・T1
パケット番号5:t=Z+100ms−時刻(6)=Z+100−(Z−20)=120ms>32ms=X・T1
パケット番号6:t=Z+100ms−時刻(7)=X+100−(Z−10)=110ms>32ms=X・T1
パケット番号7:t=Z+100ms−時刻(0)=Z+100−Z=100ms>32ms=X・T1
であるためステップS25における待ち処理はスキップされる。
【0113】
8個目のパケットについては、
パケット番号0:t=Z+100ms−時刻(1)=Z+100−(Z+100)=0ms<32ms=X・T1
であるため、
X・T2−t=8×6−0=48ms
の待ちが挿入される。
【0114】
この待ちを行なっている48msの間の各時刻Z+110、Z+120、Z+130、Z+140msに、それぞれ1個づつ(合計4個)のパケットがドライバBに到着し、それらのパケットは、図5の処理によりドライバBのキューQ2に登録される。
【0115】
時刻Z+148msに達した時点で、先ずは8個目のパケット(パケット番号0)が送信され、9個目、10個目のパケット(パケット番号1,2)も、
パケット番号1:t=Z+148ms−時刻(2)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号2:t=Z+148ms−時刻(3)=Z+148−(Z+100)=48ms>32ms=X・T1
であるため直ちに送信される。
【0116】
さらに、時刻Z+100ms〜Z+148msの間に到着した4個のパケット(パケット番号3、4、5、6)についても、
パケット番号3:t=Z+148ms−時刻(4)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号4:t=Z+148ms−時刻(5)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号5:t=Z+148ms−時刻(6)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号6:t=Z+148ms−時刻(7)=Z+148−(Z+100)=48ms>32ms=X・T1
であるため、時刻Z+148msの時点で直ちに送信される。
【0117】
時刻150msに到着したパケット(パケット番号7)は、
パケット番号7:t=Z+150ms−時刻(8)=Z+150−(Z+148)=2ms<32ms=X・T1
であるため、
X・T2−t=8・6−2=46ms
の待ちが挿入される。ここで求めた46msは時刻Z+150msからの間隔であるため、時刻Z+148msからの間隔は48msとなる。つまり、Z+150ms+46ms=Z+196msまでは送信を待つことになる。
【0118】
この待ちをしている間、時刻Z+160,Z+170,Z+180,Z+190msに各々1個のパケットがドライバBに到着するが、Z+150msに到着したパケットが未送信であるため、ドライバのキュー(Q2)でそのまま待つことになる。
【0119】
時刻196msに達したとき、まず150msの時点でに到着していたパケット(パケット番号6)が送信され、各時刻Z+160,Z+170,Z+180,Z+190msに到着していたパケットについても、
パケット番号0:t=Z+196ms−時刻(1)=Z+196−(Z+148)=48ms> 2ms=X・T1
パケット番号1:t=Z+196ms−時刻(2)=Z+196−(Z+148)=48ms>32ms=X・T1
パケット番号2:t=Z+196ms−時刻(3)=Z+196−(Z+148)=48ms>32ms=X・T1
パケット番号3:t=Z+196ms−時刻(4)=Z+196−(Z+148)=48ms>32ms=X・T1
であるため、直ちに送信される。
【0120】
時刻200msに達したとき、パケットがドライバBに1個到着するが、そのパケットは、
パケット番号4:t=Z+200ms−時刻(5)=Z+200−(Z+148)=52ms>32ms=X・T1
であるため、直ちに送信される。
【0121】
これ以降、時刻Z+210ms,Z+220ms,Z+230ms…と10msおきに到着するパケットについても、
tの値(現在時刻と7個前のパケットの送信時刻の差)が32msより小さくなることはないため、いずれも直ちに送信される。
【0122】
この図10に示すように、本実施形態によれば、パケットを配信サーバ内に大量に溜め込むことが避けられ、かつ配信サーバから外に送信されたパケットの廃棄も回避される。
【0123】
次に第2実施形態の各種変形例を説明する。
【0124】
上記の第2実施形態では、送信先ポート番号はユーザが既に知っているか又はアプリケーションが知っていることを前提としている。これに対し、以下の第1変形例では、ドライバがストリーミング配信用パケットを識別し、そのパケット自体からポート番号を自動認識する例である。ポート番号自動認識処理を行なう場合はユーザあるいはアプリケーションはストリーミング配信用パケットを識別するための条件を、ドライバBにコンフィギュレーションプロパティ(configuration properties)などで通知しておく構成としてもよい。通知しておけば、その条件に合致したパケットが本件における処理の対象となる。特に通知がない場合は、TCP/UDPであるか、それ以外のパケットであるかという点のみを判定し、TCPがストリーミング配信に使用されている場合はTCPパケット全てが、UDPならばUDPパケット全てが処理の対象となる。
【0125】
図11は、この第1変形例における制御表の初期状態を示す図である。
【0126】
この第1変形例では、ドライバBの起動時に、図11に示すような制御表のフォーマットのみの制御表が作成される。送信ポート番号はドライバBの動作開始後に自動認識されて各送信ポート番号ごとの領域が作成され、図3と同形式の制御表が形成される。
【0127】
この第1変形例においても、図4に示す送信処理が行われる。ただし、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)のアルゴリズムは前述の第2実施形態のアルゴリズム(図5参照)とは異なっている。
【0128】
図12は、この第1変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)の処理内容を示したフローチャートである。
【0129】
この図12における、各ステップS11〜ステップ15は、前述の第2実施形態においては図5の各ステップS11〜ステップS15とそれぞれ同一の処理内容であり、ここでの重複説明は省略する。
【0130】
ステップS31ではポート番号自動認識処理が行われる。次いで、制御表にポート番号が追加されたか否かが判定され(ステップS32)、ポート番号が追加されたときはステップS12に進み、追加されなかったときはステップ13に進む。
【0131】
図13は、図12におけるポート番号自動識別処理(ステップ31)のフローチャートである。
【0132】
ここでは先ず、判定対象のパケットがストリーミング配信用パケットの条件に合致するか否かが判定される(ステップS311)。合致するときは、ステップS312に進み、制御表にそのパケットのポート番号の行が追加され、かつメモリ(図示せず)上にそのポート番号用のキューが1個生成される。さらに、そのキューのベースアドレスが制御表に追加され、X−1個前のパケット番号=0、直近のパケット番号=X−1、時刻(0)〜時刻(X−1)=Sで初期化される(図3参照)。時刻Sは、図3での説明と同じく、送信開始よりも十分に辿った時刻である。
【0133】
図13のステップS311で、ストリーミング配信用パケットの条件に合致しないと判定されると、制御表に追加することなくこのポート番号自動認識処理を通過する。
【0134】
この第1変形例によれば、ストリーミング配信用のパケットの送信先ポート番号が自動認識される。
【0135】
図14は、第2変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)の処理内容を示した図である。
【0136】
この図14におけるステップS11〜ステップS15も、図12の場合と同様、図5におけるステップS11〜ステップS15とそれぞれ同一であり、重複説明は省略する。
【0137】
ステップS41では、
t=現在の時刻−時刻(X−1個前のパケット番号)
が計算される。
【0138】
ステップS42ではキューに既にパケットが存在するか否か、およびt≦X・T1を満足するか否かが判定される。キューに既にパケットが存在するときは、今回のパケットもキューに登録される(ステップS12)、また、キューは空であってもt≦X・T1を満足するときは、この場合もステップS12に進み、今回のパケットがキューに登録される。
【0139】
パケットが空であって、かつt>X・T1のときは、待ち処理は不要であり、この第2変形例では今回のパケットをキューに登録することなく、パケット送信のための処理が行われる。すなわち、この場合、制御表の、時刻(直近のパケット番号)に現在時刻が記録され(ステップS43)、パケット送信処理が行われ(ステップS44)、さらに、制御表のX−1個前のパケット番号、および直近のパケット暗号にそれぞれ1が加えられる(ステップS45)。1を加えた結果、X−1を超えた場合は、0に戻される。
【0140】
前述の第2実施形態の場合、送信待ちをせず直ちに送信可能な状態にあっても一旦はキューに登録する処理が行われ(図5のステップS12参照)、その後、送信スレッドを経由して送信が行われる。このようにキューへの登録や送信スレッドを経由させると僅かではあっても遅れが発生することになる。この第2変形例の場合、待ちが必要な場合だけキューに登録し、待ちが不要な場合はキューに登録せずにそのまま送信される。このため第2変形例によれば、キューに登録することにより発生する遅延を防止することができる。
【0141】
上記の第2実施形態、第1変形例および第2変形例は、図2に示すシステムにおける配信サーバ30のドライバで実施することを前提にしたものである。ただし本件の実施形態は、図2に示すシステムを考えた場合であっても、配信サーバ30のドライバのみで実現可能なものではなく、他の要素上でも実現可能である。以下にその例を説明する。
【0142】
図15は、第2実施形態の第3変形例を示す図である。
【0143】
この図15において、実線の矢印は処理の流れを表わし、点線の矢印はデータの参照または書き込みを表わしている。
【0144】
この図15に示す第3変形例は、前述の第2実施形態と同等の処理を図2の配信サーバ30のアダプタBで実施する例である。
【0145】
ここでも制御表65が作成される。制御表については説明済みであり、ここでの重複説明は省略する。ドライバBで実施する場合は、制御表は配信サーバ30のメインメモリ上に作成されるが、アダプタで実施する場合は、制御表はアダプタ内のメモリに作成される。
【0146】
上記の第2実施形態においてユーザまたはアプリケーションからドライバに通知されていた情報(ポート番号、パラメータX、T、T1などの値)は、この第3変形例(アダプタでの実施)においては、ドライバに通知された後ドライバからさらにアダプタに通知される。このアダプタで実施する場合も、上述の第1変形例と同様、ポート番号自動認識処理を行なうことも可能である。
【0147】
アダプタBは、送信用パケットをドライバBから受け取り、中継器A41(図2参照)に向けて送信する。
【0148】
アダプタBは、ドライバBからパケットを受け取ると、先ずポート番号自動判定部61において、今回受け取ったパケットが制御表65に登録されているポート番号のパケットであるか否かが判定される。制御表65には登録されていないポート番号のパケットであったときは、ここでの制御対象外のパケットであるので、キューイング部62および待ち挿入部63を何もせずに通過し、送信処理部64によりそのまま送信される。このポート番号自動判定部61における処理は前述の第2実施形態として説明した図5のステップS11に相当する。また、制御表65に登録されてないポート番号のパケットの送信処理は図5のステップS13に相当する。
【0149】
ポート番号自動判定部61で制御表65に登録されているポート番号のパケットであると判定されると、そのパケットはキューイング部62により、キュー66に登録される(図5のステップS12に相当する)。
【0150】
待ち挿入部63は、制御表65を参照して、キューに登録されたパケットの送信を待つ必要があるか否かを判定し、待つ必要があると判定した場合に計算で求めた時間だけ待った後に送信処理部64に送信を指示する。一方、待ち挿入部63は、パケットの送信を待つ必要がないと判定したときは送信処理部64に対しパケットの送信を直ちに指示する。
【0151】
送信処理部64は、待ち挿入部63からの送信指示を受けキュー66からパケットを取り出して中継器Aに向けて送信する。
【0152】
待ち挿入部63および送信処理部64の処理は、前述の第2実施形態における図6に示す処理に相当する。ただし、図6の処理では、キューからパケットを取り出した後、必要に応じてパケットを待たせているが、図15の場合は必要に応じて待ち時間を置いた後にキュー65からパケットを取り出している点が異なっている。これはドライバとアダプタという実施箇所が異なっていることに起因するものではなく、いずれにおいても実施可能な変形例である。
【0153】
図16は第4変形例における制御表を示した図である。
【0154】
ここでは前述の第2実施形態の機能を図2に示す配信サーバ30のアプリケーションに搭載した例を説明する。
【0155】
アプリケーションにおいてもドライバと同様な処理が可能である。
【0156】
ただし、アプリケーションの1個のプロセス(またはスレッド)は、1個のTCPポートまたはUDPポートに対応している。このため、アプリケーションの各プロセス(またはスレッド)では複数のTCPポートまたはUDPポートを制御する必要はなく、制御表は図16に示す例のように1つのポート番号のみの制御表となる。この制御表の各欄については図3で説明済みであり、ここでの説明は省略する。
【0157】
なお、アプリケーションで実施した場合、このアプリケーションでの実施を実効あるものにするためには、アプリケーションからドライバにデータが転送されるまでの、TCP(またはUDP)層およびIP層(図2参照)でバーストが発生しないことが前提条件となる。
【0158】
次に、図2の中継器Aで実施した例を第5変形例として説明する。
【0159】
図2に示す中継器B又はクライアント端末上に最小のキューが存在する場合、第2実施形態や各変形例の機能を中継器Aに組み込んで、バッファ(キュー)のオーバフローを防止することも可能である。
【0160】
ただし、中継器で実施した場合、パラメータT、X、T1などを自動的に求めるのは困難な場合が多い。その場合は、それらのパラメータ等をユーザが中継器に直接に指定する必要がある。
【0161】
以上で各種変形例の説明を終了し、以下では、パラメータT、X、T1の決定方法の各1例を説明する。
【0162】
パラメータT、X、T1は、ユーザがあらかじめ知っていればユーザがその値を指定すればよいが、必ずしも知っているとは限らない。そこでここでは、測定プログラムを組み込み、その測定プログラムによって、それらの値を求める方法について説明する。また、配信サーバ30上のアプリケーション、ドライバ、アダプタであれば、以下に説明するようにして自動的に求められた各値を自動測定することも可能である。ただし上述の通り、中継器はその測定プログラムを組み込んで実行させるほどの能力を持たない場合が多い。
【0163】
ここでは、TCPが使用されることを前提にして説明する。UDPの場合は変更が必要であり、その変更点については後述する。
【0164】
図17は、測定プログラムの配置位置を示した図である。
【0165】
TCPが使用される場合はユニキャストで送信され、1個のTCPポート番号が1個のクライアント端末に対応している。測定プログラムは、図17に示す通り、配信サーバのTCP/IPとドライバとの間で動作する。
【0166】
図2に示すエンコーダ21からストリーミング配信のパケットが送信されている状態において測定プログラムを起動すると、以下の(1)〜(5)の手順で、T、X、T1の各値がこの順に決定される。
【0167】
(1)Tを求める。
【0168】
測定プログラムで多数(例えば10000個)のパケットの送信間隔の平均を求め、その値をTとする。パケット同士の時間間隔に偏りが発生している可能性もあるが、多数の平均をとれば、本来のパケット間隔Tとほぼ一致する。
【0169】
(2)Xを求める。
【0170】
測定プログラムでK個のパケットを溜め込んだあと、K個のパケットをパケット同士の時間間隔0で送信する。この場合、伝送路上では、パケット同士の間隔は、微小な時間間隔(IEEE802.3規定されたInter Packet Gap)以上となるが、ストリーミング配信でのパケット同士の時間間隔に比べれば無視できるほど小さい。
【0171】
Kは2から初めて、3,4,5,6,・・・と1ずつ大きくしていく。
【0172】
K個のパケットを送信した後、TCPによる再送が検出されなければ、K+1個のパケットを時間間隔0で送信する。
【0173】
このようにして時間間隔0で送信するパケット数Kを増やしていき、TCPによる再送が検出されたところで、そのときのKから2を引いた数(K−2)をXとする。
【0174】
図18は、X+1個のパケットを時間間隔0で送信した場合を示す模式図である。
【0175】
配信サーバからX+1個のパケットが同時に送信されたものとする。
【0176】
その場合、先頭の1個のパケットは最小のキューを持つ装置の処理部によりその最小のキューから直ちに取り出され、2個目〜X+1個目のX個のパケットによりその最小のキューが一気に満杯の状態となる。
【0177】
ただし、この場合、オーバフローは発生しない。
【0178】
図19は、X+2個のパケットを時間間隔0で送信した場合を示す模式図である。
【0179】
配信サーバからX+2個のパケットが同時に送信された場合、最後(X+2個目)の1個のパケットがキューに入りきらずオーバフローが発生する。これはパケットロストとなり、TCPによる再送が発生する原因となる。
【0180】
したがって上記の通り、TCPによる再送が検出された時点で、その時のKから2を引いた数(K−2)がXとなる。
【0181】
(3)T1を求める。
【0182】
はじめに、測定プログラムでパケットをX+2個のパケット溜め込んだあと、X+2個のパケットをパケット同士の時間間隔Mで送信する。
【0183】
Mは1ミリ秒からはじめて、2ミリ秒、3ミリ秒、4ミリ秒・・・と1ミリ秒ずつ大きくしていく。
【0184】
X+2個のパケットをMミリ秒間隔で送信した後、TCPによる再送が検出されれば、再度X+2個のパケットを溜め込んで、Mの値を1増やす。
【0185】
Mミリ秒間隔でパケットを送信した後、TCPによる再送が検出されなければ、その時のMをM_2とする。
【0186】
次に、測定プログラムでパケットをX+3個のパケット溜め込んだあと、X+3個のパケットをパケット同士の時間間隔Mで送信する。MはM_2からはじめて、以降X+2個の時と同様な処理を行って、TCPによる再送が検出されなくなったときのMをM_3とする。
【0187】
次に、測定プログラムでパケットをX+4個のパケット溜め込んだあと、X+4個のパケットをパケット同士の時間間隔Mで送信する。MはM_3からはじめて、以降X+2個の時と同様な処理を行って、TCPによる再送が検出されなくなったときのMをM_4とする。
【0188】
以降、同様な処理をX+n個(n=5、6・・・)のパケットを溜め込んで繰り返す。
【0189】
M_nが増えないことが何回か(例えば4回)連続で検出された場合、そのM_nをT1とする。例えば、M_100=M_101=M_102=M_103となった場合、その値をT1とする。
【0190】
なおこの例では最小の時間の刻みを1ミリ秒としたが、T1を更に高精度に求める場合100マイクロ秒などとしても同様な方式でT1を求めることが可能である。
【0191】
上記の方法で求めたT1が、経路上のキューでパケット1個が処理される時間に相当することを図を用いて説明する。
【0192】
図20は、パケットを送信時間間隔T1で送信したときの様子を示す図である。
【0193】
経路上の最小のキューは最初は空、かつその最小のキューを持つ装置の処理部で処理中のパケットもなかったという前提とする。
【0194】
この場合、1個前に受信したパケットについて次のパケットを受信する直前に処理部での処理が完了しているためキューにパケットが溜まることはなく、パケットを何個送信してもキューのオーバフローは発生しない。
【0195】
尚ここでは、キューは空である、という前提を置いて説明したが、パケットを送信時間間隔T1で送信する場合、キューに1個分でも空きがあればオーバフローは発生しない。
【0196】
図21は、パケットを送信時間間隔0.99・T1で送信したときの様子を示す図である。
【0197】
ここでも、経路上の最小のキューは最初は空、かつ、その最小のキューを持つ装置の処理部で処理中のパケットもなかったという前提とする。
【0198】
最初のパケットは、キューを素通りしてその装置の処理部で処理が行なわれる。
【0199】
2番目のパケットが送信された時点では、最初のパケットが処理部で未だ処理中のためキューに一旦溜まる。その2番目のパケットがキューに一旦溜まった後、0.01・T1後に1番目のパケットの処理が完了し、2番目のパケットが処理部に移される。
【0200】
3番目のパケットが送信された時点では、2番目のパケットが処理部で処理されている途中であり、キューに一旦溜まる。2番目のパケットの処理は、3番目のパケットがキューに溜まった後0.02・T1後に完了し、キューに溜めていた3番目のパケットが処理部に移される。
【0201】
このようにして、101個目のパケットの送信まではキューにパケットが1個溜まる状況が続く。102個目〜201個目のパケットの送信ではキューにパケットが2個溜まる状況となる。同様にして202個目〜301個目の送信ではキューにパケットが3個溜まる状況となる。さらに同様にして、100・(X−1)+2〜100・X+1個目のパケットの送信ではキューにパケットがX個溜まる状況となり、パケットを100・X+2個送信するとキューがオーバフローする。ここでもキューは最初は空の状態にあることを前提としたが、キューに既にパケットが溜まっている状態では更に早い時点でオーバフローが発生する。
【0202】
このように、送信時間間隔がT1以上でパケットを送信すると最小のキューでのオーバフローが避けられ、T1よりも僅かでも短い時間間隔でパケットを送信すると最小のキューでオーバフローが発生する。
【0203】
したがって、上記(3)の方法により、最小のキューに収容されているパケットがその最小のキューから順次取り出される時間間隔T1が求められる。
【0204】
(4)表示または設定
上記(1)〜(3)により求められたT、X、T1は、ディスプレイ(図示せず)上に表示される。あるいは、これらの値T、X、T1は、測定プログラムによりアプリケーション、ドライバ、又はアダプタに自動設定される。
【0205】
(5)測定プログラム終了
測定プログラムの実行が終了する。測定プログラムは、起動した後、(1)〜(4)を行なえば自動的に終了する。
【0206】
以上の各パラメータT、X、T1の決定方法は、ストリーム配信にTCPが使用されていることを前提とする求め方である。そこで次に、TCPに代わりUDPが使用される場合のパラメータT、X、T1の決定方法を説明する。
【0207】
Tの決定方法については、TCPとUDPで違いはなく、上記の(1)で説明した方法がそのまま採用可能である。
【0208】
UDPの場合は、TCPのように再送処理は存在しない。
【0209】
また、TCPはユニキャストの送信しかできないので、ポート番号は1個のクライアント端末に対応していたが、UDPでは多くの場合マルチキャストでの送信が行われており、その場合、ポート番号は複数のクライアント端末に対応している。
【0210】
UDPの場合は、そのポート番号が対応しているクライアント端末のどれか1台に、パケットロストを検出して送信元に通知するパケットロスト検出プログラムを導入する。パケットロスト検出プログラムがパケットロストを検出し、その結果を配信サーバ側に送り返すことで、上記の(2)、(3)と同様な方法で、X、T1を決定することができる。
【0211】
図22、23では、UDPを使用した場合の、測定プログラムおよびパケットロストプログラムの各動作位置を示した図である。
【0212】
図22には、図22(A)に示すように測定プログラムが配信サーバのUDP/IPとドライバとの間で動作し、図22(B)に示すようにパケットロストプログラムがクライアント端末のUDP/IPとドライバとの間で動作することが示されている。また図23には、図23(A)に示すように、測定プログラムが配信サーバのアプリケーションとUDP/IPとの間で動作し、パケットロストプログラムがクライアント端末のアプリケーションとUDP/IPとの間で動作することが示されている。
【0213】
このように、測定プログラムおよびパケットロストプログラムは、図22に示すようにUDP/IPとドライバとの間で動作させてもよく、図23に示すようにアプリケーションとUDP/IPとの間で動作させてもよい。
【符号の説明】
【0214】
10 パケット送信装置
11 パケット受信部
12 待ち処理部
13 パケット送信部
14 経過時間判定部
15 制御表記憶部
15a 制御表
16 制御表更新部
17 測定部
18 再送要求受信部
20 コンテンツ
21 エンコーダ
30 配信サーバ
41 中継器A
42 インターネット
43_1,43_2 中継器B
50_1,50_2,・・・,50_n クライアント端末
51_1,51_2,・・・,51_n 映像装置
61 ポート番号自動判定部
62 キューイング部
63 待ち挿入部
64 送信処理部
65 制御表
66 キュー
【技術分野】
【0001】
本件は、パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置およびパケット送信方法、並びに演算処理装置内にパケット送信装置を構築するパケット送信プログラムに関する。
【背景技術】
【0002】
例えば動画配信等のストリーミング配信における1つの問題としていわゆるバースト問題がある。すなわち、大量のパケットが短時間に配信されることによって中継装置(スイッチ、ルータ、コンバータなど)や送信先装置のバッファ(キュー)がオーバフローする。オーバフローしたパケットは廃棄され、その結果、例えば動画配信における再生画像が乱れるなどの障害が生じる。これをバースト問題と称する。
【0003】
従来、このバースト問題の緩和のために、トラフィックシェービングと呼ばれる手法とトラフィックポリシングと呼ばれる手法が知られている。トラフィックシェービングは送信しようとしているパケットをバッファ(キュー)に一旦溜め込んでおき、一定の時間間隔でパケットを転送する方式である。また、トラフィックポリシングは、トラフィックが一定レート以上になるとパケットを破棄する方式である。
【0004】
ここで、トラフィックシェービングは、アンダフロー(キューに溜め込まれたパケットの枯渇)が原因で一定時間間隔での送信ができなくなることを避けるために、大量のパケットを常にキューに溜め込んでおくように実装される。このため、トラフィックシェービングでは、キューに溜め込まれた大量のパケットに相当する時間分の遅延が常に発生した状態で送信を行なうことになる。さらにこのトラフィックシェービングでは、何らかの理由で送信が一定時間行なえなかった場合、キューに溜め込まれるパケットの数がさらに増加することになる。
【0005】
一方、トラフィックポリシングでは、パケット廃棄が発生しやすい。このトラフィックポリシングでは、パケットがまとまって大量に破棄される可能性は小さいため、大きい画像乱れにはつながりにくいが、小規模なパケット破棄による小規模な画像乱れが発生しやすい。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2004−186882号公報
【特許文献2】特開2007−13449号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
本件のパケット送信装置、パケット送信方法、およびパケット送信プログラムの課題は、上記のバースト問題の一層の緩和を図ることにある。
【課題を解決するための手段】
【0008】
本件開示のパケット送信装置は、パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置であって、パケット受信部と、経過時間判定部と、待ち処理部と、パケット送信部とを有する。
【0009】
パケット受信部は、パケットを受信する。
【0010】
また、経過時間判定部は、経過時間tと、第1の閾値時間X・T1との大小を判定する。ここで、受信したパケットを送信先装置に向けて送信したときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をXとする。また、その最小のキューに収容されているパケットがその最小のキューから順次取り出される時間間隔をT1とする。さらに経過時間tは、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間をいう。
【0011】
また、待ち処理部は、経過時間判定部により、経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合に、上記の未送信パケットの送信を待たせる処理を行なう。
【0012】
さらに、パケット送信部は、上記未送信パケットを、経過時間判定部により経過時間tが第1の閾値時間X・T1よりも大きいと判定された場合には前記現時刻に送信する。また、このパケット送信部は、上記未送信パケットを、経過時間判定部により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合には待ち処理部により待たされた後に送信する。
【0013】
また、本件開示のパケット送信方法は、上記のパケット送信装置で実行される処理を方法として捉えたものである。
【0014】
さらに、本件開示のパケット送信プログラムは、プログラムを実行する演算処理装置内で実行され、その演算処理装置内に上記のパケット送信装置を構築するプログラムである。
【発明の効果】
【0015】
本件開示のパケット送信装置等によれば、バースト問題の一層の緩和が図られる。
【図面の簡単な説明】
【0016】
【図1】第1実施形態のパケット送信装置の機能ブロック図である。
【図2】第2実施形態を含む全体システムを示すブロック図である。
【図3】制御表の一例を示した図である。
【図4】配信サーバ中のドライバBにおける送信処理を示すフローチャートである。
【図5】図4に示す送信処理のうちの「キューイングおよびストリーミング配信以外のパケット送信部」のフローチャートである。
【図6】図3の送信スレッド部の処理を示すフローチャートである。
【図7】送信間隔を調整することなく送信を行なった場合の例を示す図である。
【図8】トラフィックシェービングを適用した場合の例を示す図である。
【図9】時刻Zmsの時点における制御表を示した図である。
【図10】図4〜図6に示す送信処理の具体例を示す図である
【図11】この第1変形例における制御表の初期状態を示す図である。
【図12】この第1変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」の処理内容を示したフローチャートである。
【図13】図12におけるポート番号自動識別処理(ステップ31)のフローチャートである。
【図14】第2変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」の処理内容を示した図である。
【図15】第2実施形態の第3変形例を示す図である。
【図16】第4変形例における制御表を示した図である。
【図17】測定プログラムの配置位置を示した図である。
【図18】X+1個のパケットを時間間隔0で送信した場合を示す模式図である。
【図19】X+2個のパケットを時間間隔0で送信した場合を示す模式図である。
【図20】パケットを送信時間間隔T1で送信したときの様子を示す図である。
【図21】パケットを送信時間間隔0.99・T1で送信したときの様子を示す図である。
【図22】UDPを使用した場合の、測定プログラムおよびパケットロストプログラムの各動作位置を示した図である。
【図23】UDPを使用した場合の、測定プログラムおよびパケットロストプログラムの各動作位置を示した図である。
【発明を実施するための形態】
【0017】
以下、実施形態を説明する。
【0018】
図1は、第1実施形態のパケット送信装置の機能ブロック図である。
【0019】
この図1において、実線の矢印は送信データ(パケット)の流れを表わし、点線の矢印は、その他のデータ(制御情報)の流れを表わしている。
【0020】
この図1に示すパケット送信装置10は、パケット受信部11、待ち処理部12、およびパケット送信部13を有する。
【0021】
パケット受信部11は、パケットを受信する。
【0022】
待ち処理部12は、後述する条件に合致する場合には、パケット受信部11で受信したパケットをパケット送信部13で直ちには送信させずに、その送信を延期させる待ち処理を行なう。
【0023】
パケット送信部13は、待ち処理部12から渡されたパケットを送信先装置(図示せず)に向けて送信する。
【0024】
また、この図1に示すパケット送信装置10は、経過時間判定部14を有する。この経過時間判定部14では、待ち処理部12に待ち処理を実行させるための条件判定を行なう。その条件判定の説明にあたり、ここでは以下の通りパラメータを定義する。
【0025】
X:受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数。送信経路の具体例については、後述の第2実施形態で説明する。
【0026】
T1:その最小のキューに収容されているパケットがその最小のキューから順次取り出される時間間隔
t:直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間
X・T1:第1の閾値時間
経過時間判定部14は、経過時間tと第1の閾値時間X・T1との大小を判定する。
【0027】
そして待ち処理部12は、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合に、パケット受信部11から受け取った未送信パケットの送信を延期させる待ち処理を行なう。
【0028】
さらにパケット送信部13は、その未送信パケットを、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも大きいと判定された場合には待ち処理部12による待ち処理を経ることなく送信する。すなわちこの場合、パケット送信部13は未送信パケットを待ち処理部12から直ちに受け取って送信する。また、このパケット送信部13は、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合には、未送信パケットを、待ち処理部12による待ち処理を経た後に送信する。
【0029】
ここで、さらにパラメータを定義する。
【0030】
T:パケット受信部11におけるパケット平均受信時間間隔
T2:T1<T2<Tを満たす時間間隔。例えばT2=(T1+T)/2
待ち処理部12は、具体的には、経過時間判定部14により経過時間tが第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を、現在時刻から(第2の閾値時間X・T2−経過時間t)の待ち時間だけ待たせる待ち処理を行なう。
【0031】
図1に示すパケット送信装置10は、さらに、制御表記憶部15と制御表更新部16を有する。制御表記憶部15は制御表15aを記憶する記憶部である。この制御表15aには、直近の送信済パケットから数えてX−1個前の送信済パケットまでの、その直近の送信済パケットを含むX個の送信済パケットの各送信時刻が記録される。また、制御表更新部16は、パケット送信部13による未送信パケットの送信を受けて制御表中の送信時刻を更新する。
【0032】
上記の経過時間判定部14は、制御表15aを参照することによりX−1個前の送信済パケットの送信時刻を求めて経過時間tを算出し、その経過時間tと第1の閾値時間X・T1との大小を判定する。
【0033】
ここで、パケットの送信先が複数存在するときは、制御表15aには、各送信先ごとの各領域に、各送信先に向けて送信された送信済パケットの各送信時刻が記録される。この場合、制御表更新部16は、制御表15a中の送信時刻をパケットの送信先ごとに更新する。
【0034】
制御表15aに記録される送信先は、あらかじめ分かっているときは、その分かっている送信先が初期設定として制御表15aに記録される。あるいは、送信先があらかじめ不明な場合、制御表更新部16にパケットの送信先を監視させ、新たな送信先に向けて送信されるパケットを検出したときに制御表15aにその新たな送信先に対応する領域を追加させる構成を採用してもよい。
【0035】
制御表15aの具体例については、後述の第2実施形態で説明する。
【0036】
図1に示すパケット送信装置10はさらに、測定部17と再送要求受信部18を有する。再送要求受信部18は、パケット送信部13から送信先装置に向けて送信したパケットの再送要求を受信する受信部である。この再送要求受信部18で再送要求を受信すると、再送要求があったことが測定部17に通知される。
【0037】
測定部17は、以下の3つの役割りを担っている。
(1)パケット平均受信時間間隔Tを求める平均受信時間算出部としての役割り。
(2)収容可能パケット数Xを求める収容可能パケット数検出部としての役割り。
(3)時間間隔T1を求めるキュー取出し時間検出部としての役割り。
【0038】
この測定部17は、上記(1)のパケット平均受信時間間隔Tを求めるにあたっては、以下の処理を行なう。すなわち、この測定部17は、パケット受信部11において順次受信する複数のパケットの受信間隔の平均値を算出する。この算出された平均値が上記の平均受信時間間隔Tである。
【0039】
また、測定部17は、上記(2)の収容可能パケット数Xを求めるにあったては、以下の処理を行なう。すなわち、測定部17は、パケット送信部13に、複数個のパケットを送信先装置に向けてほぼ同時に送信する過程を、ほぼ同時に送信するパケットの個数を順次変更しながら繰り返させ、再送要求の発生を免れる最大パケット数を検出する。この再送要求の発生を免れる最大パケット数が送信先装置に向けてパケットを送信したときの送信経路上に存在するキューのうちの最小のキーの収容可能なパケット数Xである。
【0040】
さらに、測定部17は、上記(3)の時間間隔T1を求めるにあたっては、以下の処理を行なう。すなわち測定部17は、パケット送信部13に、複数個のパケットを所定の時間間隔で送信する過程を、パケットの個数および所定の時間間隔を変更しながら繰り返させて、パケットの個数を増やしても再送要求が検出されない最短の時間間隔を検出する。この最短の時間間隔が、上記の時間間隔T1である。
【0041】
尚、この図1に示す第1実施形態では、測定部17を備えてパケット平均受信時間間隔T、収容可能パケット数X、および時間間隔T1を求めているが、それらがあらかじめ分かっているシステムの場合は、この測定部17は不要である。
【0042】
測定部17で求められた各値T、X、T1は、待ち処理部12および経過時間判定部14での上述の各処理や、制御表記憶部15に記憶されている制御表15aに記録される送信時刻の数の指標として用いられる(制御表15aについては後述の第2実施形態を参照)。
【0043】
ここでは、パケット送信装置10について説明したが、このパケット送信装置10で行われる処理をパケット送信方法として捉えることもできる。また、この図1のパケット送信装置10を、プログラムを実行するCPU(Central Processing Unit)が搭載された演算処理装置内で実行されたときに、その演算処理装置内にパケット送信装置を構築するパケット送信プログラムとして捉えることもできる。
【0044】
以上で第1実施形態の説明を終了し、次に第2実施形態を説明する。
【0045】
図2は、本件の第2実施形態を含む全体システムを示すブロック図である。
【0046】
ここでは、パケットは、コンテンツ20(ここでは動画コンテンツとする)からエンコーダ21に取り込まれ、そのエンコーダ21から配信サーバ30が受信するものとする。ここで、エンコーダ21は、例えば多数のコンテンツを蓄積しておき、要求に応じたコンテンツを表わすパケットを要求先に向けてストリーム配信するコンテンツストレージ装置等を代表させて示したものである。
【0047】
配信サーバ30に到着したパケットは、アダプタAで受信され、ドライバAが受け取ってIP(Internet Protocal)に渡され、さらにTCP(Transmission Control Protocal)に受け渡される。ここで、後述する態様によってはTCPに代わりUDP(User Datagram Protocol)を採用した場合に言及する。基本的にはTCPとして説明する。
【0048】
TCPは、ユニキャストの送信を行なうプロトコルである。したがって、1つのポート番号は1個の送信先装置に対応している。またTCPでは、送信経路上でパケットロストがあるとパケットの再送処理が行なわれる。
【0049】
一方UDPでは多くの場合マルチキャストでの送信が行なわれており、その場合1つのポート番号が複数の送信先装置に対応している。またUDPではそのままでは再送処理は行われない。したがって送信元では、パケットロストを検出するとその結果を送り返すパケットロスト検出プログラムを送信先側に導入して初めてパケットロストがあったことを知ることができる。
【0050】
配信サーバ30のTCPに受け渡されたパケットは、さらにアプリケーションプログラムを経由して今度は逆順を辿り、TCP、IPと進み、次にはドライバB、アダプタBと進んで、配信サーバ30から送信先装置(ここではクライアント端末50_1,50_2,・・・,50_n.・・・のうちのいずれか)に向けて送信される。
【0051】
配信サーバ30から送信されたパケットは中継器A41,インターネット42(または専用線でもよい)、およびいずれかの中継器B43_1,43_2,・・・を経由して、いずれかのクライアント端末50_1,50_2,・・・,50_n,・・・で受信される。受信されたパケットはそのクライアント端末に接続された映像装置51_1,51_2,・・・,51_n−1,51_n,・・・により映像として可視化される。
【0052】
ここで、配信サーバ30は、図示しないCPUやメモリ等、演算処理を行なうハードウェアを有する。
【0053】
図2に示したドライバA、IP、TCP(またはUDP)、およびアプリケーションは、そのハードウェア上で実行されるソフトウェアを表わしている。ここでは、説明の簡素化のため、それらのソフトウェアがCPUで実行されることにより実現する機能を、ソフトウェア自体と区別せずに説明する。
【0054】
以下では、本件の機能をドライバBで実現した例について先ず説明し、その後、実現形態の異なる各種の例について説明する。
【0055】
尚、以下の説明においても、X,T,T1,T2,tの各パラメータは前述の第1実施形態で説明した通りのものとする。X,T,T1は、ユーザがあらかじめ知っていてドライバBのコンフィギュレーションプロパティ(Configuration Properties)などで指定したものが用いられる。あるいは後述する方法により求められ、ユーザあるいはアプリケーションにより指定されたものが用いられる。
【0056】
図3は、制御表の一例を示した図である。
【0057】
ここでは、送信先ポート番号や各種パラメータはユーザが既に知っていて、ドライバBのプロパティ(Configuration Properties)などで指定されるものとする。あるいはアプリケーションが知っていてそのアプリケーションがドライバBに指定するものであってもよい。
【0058】
この図3に示す制御表中の「送信先ポート番号」は、上記の通りユーザ又はアプリケーションにより指定されたものである。この制御表は送信先ポート番号ごとに横一行の領域が設けられており、各送信先ポート番号ごとに以下に説明する値が記録される。また、ここでは、ドライバBが、パケットを一時的に格納しておくキューを各送信先ポート番号ごとにメモリ(図示せず)上に作成するものとし、「キューのベースアドレス」には、そのメモリ上に作成されたキューの所在をあらわすアドレスが記録される。
【0059】
また、「X−1個前のパケット番号」は、直近の送信済のパケットから数えてX−1個前の送信要済パケットのパケット番号である。ここでは、このパケット番号は0〜X−1で指定され、パケットを1つ送信するたびに0→1→・・・→X−1の順にインクリメントされ、(X−1)に達したら次は(0)に戻される。これら0,1,・・・,X−1は、この制御表内の時刻(0),時刻(1),・・・,時刻(X−1)にそれぞれ対応している。図3では、初期値として全て0が記録されている。
【0060】
「直近のパケット番号」は、直近の送信済のパケットの番号である。この「直近パケット番号」についてもパケットを1つ送信するたびに0→1→・・・→X−1→0→・・・の順に循環的に更新される。図3には初期値として全てX−1が記録されている。
【0061】
「時刻(0)」,「時刻(1)」,・・・,「時刻(X−1)」は、それぞれ、パケット番号0,1,・・・,X−1の送信済パケットの各送信時刻である。図3では初期値として全てSが記録されている。この初期値Sは、パケット送受信を開始する時刻よりも時間的に十分に辿った時刻である。例えば図2の配信サーバ30が起動した時刻を0としたとき、起動後数分はパケット送受信を開始しないであれば、S=0でよい。
【0062】
未送信のパケットを1個送信すると、「直近のパケット番号」に記録されているパケット番号に対応する時刻(直近のパケット番号)に現在時刻が記録され、「X−1個前のパケット番号」および「直近のパケット番号」に1が加えられる。ただし、1を加えた結果X−1がXに値が変ったときは、そのパケット番号は0に戻される。
【0063】
尚ここでは、収容可能なパケット数が最小のキューは、図2の中継器B43_1,43_2,・・・に存在し、かつ各中継器B43_1,43_2,・・・のキューの収容可能なパケット数は、いずれの中継器B43_1,43_2,・・・も同一の数Xであるとしている。
【0064】
図4は、配信サーバ中のドライバBにおける送信処理を示すフローチャートである。
【0065】
ドライバBではIPからの関数コールによりこの図4に示す送信処理が実行される。
【0066】
この送信処理は、「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)と「送信スレッド部」(ステップS02)とから成り立っている。
【0067】
図5は、図4に示す送信処理のうちの「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)のフローチャートである。
【0068】
この図5、およびそれ以降の図において「TCP/UDP」は、そのシステムでストリーム配信にTCPが使用されていればTCPを、UDPが使用されていればUDPを意味するものとする。
【0069】
ここでは先ず、今回送信しょうとしているパケットがここで対象としているTCP/UDPパケットであり、かつポート番号が制御表(図3参照)に含まれるポート番号であるか否かが判定される(ステップS11)。
【0070】
このステップS11の条件を満たすパケットの場合は、そのパケットが送信待ちのパケットを並べておくキューに登録され(ステップS12)、送信スレッドが起動していなければ送信スレッドが起動される(ステップS13)。この送信スレッドは、図4に示す送信スレッド部(ステップS02)の処理を行なうプログラムである。送信スレッド部(ステップS02)の処理については後述する。
【0071】
ステップS11の条件を満足しない場合、すなわち、送信しようとするパケットがここでの制御対象としているTCP/UDPパケット以外のパケットである場合、および、TCP/UDPパケットではあっても制御表に制御対象として登録されているポート番号以外のポート番号のパケットであった場合は、ステップS14に進み、ここではそのまま、従来と同様のパケット送信処理が行なわれる。
【0072】
以上の処理が、今回送信しようとしている全てのパケットについて繰り返される(ステップS15)。
【0073】
図6は、図4の送信スレッド部(ステップS02)の処理を示すフローチャートである。
【0074】
ここでは、初期には送信スレッドがスリープ状態にあるものとする。(ステップS21)。
【0075】
図5のステップS15で起動をかけられると送信スレッドが動作を開始し、ステップS22以下の処理が行われる。
【0076】
ここでは先ずキューからパケットが1個取出される(ステップS22)。次いで直近の送信済パケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの経過時間tが算出される(ステップS22)。この経過時間tは、図3に示す制御表が参照され、
t=現在の時刻−時刻(X−1個前のパケット番号)
により算出される。
【0077】
次に、この算出された経過時間tと、第1の閾値時間X・T1とが比較される(ステップS24)。t≦X・T1のときは待ちが必要と判断され、(X・T2−t)の時間待つ(ステップS25)。t>X・T1のときは、待ちは不要と判断され、ステップS25はスキップされる。
【0078】
次に、制御表(図3参照)の、時刻(直近のパケット番号)に送信時の現在時刻が記録され(ステップS26)、それに続き、パケット送信処理が行われる(ステップS27)。
【0079】
さらに、制御表の、X−1個前のパケット番号、および直近のパケット番号に1が加えられる(ステップS28)。1を加えた結果X−1よりも大きな値となったときは0に戻される。
【0080】
ステップS29では、キューに未送信のパケットが残ってるか否かが判定され、残っているときはステップS22に戻り、残りの未送信パケットのうちの1個のパケットが取出されて、上記と同様の処理が繰り返される。
【0081】
一方、ステップS29において、キューに未送信パケットが残っていないと判定されたときはステップS21に戻り、この送信スレッドはスリープ状態に戻る。
【0082】
この図6に示す処理によれば、連続するX個のパケットの先頭から末尾までの間隔はX・T1より大きくなるため、このままのパケット間隔で中継器Bに到達すれば中継器Bのキューがオーバフローすることはない。
【0083】
ここで、連続するX個のパケットの先頭から末尾までの間隔がX・T1より大きい場合、任意の1個のパケットが中継器Bに到達したときに中継器Bのキューに最低限1個の空きがあることを説明する。その1個のパケットよりもX−1個前のパケットは、少なくともX・T1の間隔が開いている。このため仮にX−1個前のパケットが中継器Bに到着したときにそのX−1個前のパケットが中継器Bのキューの末尾に登録されたとしても、今回のパケットが中継器Bに到着したときには、そのX−1個前のパケットはその中継器Bのキューの外に取り出されている。したがって任意の1個のパケットが中継器Bに到着したときには、中継器Bのキューに最低1個の空きが存在する。したがって、図6に示す処理によれば、中継器Bのキューでのオーバフローを避けることができる。
【0084】
ここで図4〜図6に示す送信処理によるパケット送信例を比較例とともに具体的に説明する。
【0085】
図7は、送信間隔を調整することなく送信を行なった場合の例を示す図である。この図7は本件に対する比較例に相当する。ここでは、この図7に示す比較例を第1比較例と称する。
【0086】
この図7および後述する図8、図10並びにそれらの図の説明で用いている記号は、以下の通り定義されるものとする。
【0087】
T、X、T1、T2、tの意味は、第1実施形態の説明の通りとする。
【0088】
msはミリ秒を表す。ここでは、T=10ms、中継器Bのキューが最小であってX=8個、T1=4ms、T2=6msの場合を考える。
【0089】
Q1は、配信サーバ30のIPのキューである。そのQ1の欄に記載されている「なし」、「1」、「2」等は、そのQ1に並んでいるパケットの数を表わしている。
【0090】
Q2は、配信サーバ中のドライバBのキューである。そのQ2の欄に記載されている、「なし」、「100」(図8参照)等は、そのQ2に並んでいるパケットの数を表している。ただし、このパケットの数は、Q2から取り出された直後の、未送信のパケットを含んでいる。
【0091】
時刻Z+10−0ms、Z+20−0ms(図7参照)等の−0msは、時刻Z+10ms、Z+20ms等よりもわずかに前の時刻であることを意味している。
【0092】
また、時刻Z+10+0ms、Z+20+0ms(図8参照)等の+0msは、時刻Z+10ms、Z+20msよりもわずかに後の時刻を意味している。
【0093】
またここで登場するパケットは、送信先ポート番号がすべて同一(ここでは送信先ポート番号28001)であるとする。
【0094】
時刻Zmsは、既に何パケットか送信された後の状態にある時刻である。
この時刻Zms以前は、パケットは10msの等間隔で受信され、Q1、Q2を通過し、さらに、配信サーバ30の外にもそのまま10msの等間隔で送信されたものとする。時刻Zms以降も、Q1には10msの等間隔でパケット届いているものとする、尚パケットがQ1に到着する時刻は、Z+10−0ms、Z+20−0ms等、Z+10ms、Z+20ms等よりもわずかに前の時刻であるとする。
【0095】
そして、時刻Z〜Z+10msの間のどこか(例えば時刻Z+5ms)から時刻Z+100−0msまでの間、CPUでは、パケットの送信とは無関係の、それよりも優先順位の高い何らかのソフトウェアが動作したために、ドライバBでの送信処理にはCPUが割り当てられず、送信処理が中断した状態にあったものと仮定する。
【0096】
この場合、送信間隔を調整することなく送信を行なうと、図7に示す通りとなる。
【0097】
すなわち、図7に示すように、時刻Z+10−0ms〜時刻Z+100−0msの間に到達したパケットは、送信処理が中断しているためQ1に格納されたままとなる。時刻Z+100−0msにCPUに送信処理が割り当てられたことにより、時刻Z+100+0msには、Q1に格納された10個のパケットがほぼ同時に配信サーバ30の外に送信される。
【0098】
この場合、最小のキューを持つ中継器B(X=8個)で10−8=2個のパケットが廃棄される結果となる。
【0099】
図8は、トラフィックシェービングを適用した場合の例を示す図である。ここでも図7の場合と同じ条件が適用されている。
【0100】
トラフィックシェービングは、前述のとおり、パケットをキューに一旦溜め込んでおき、等間隔の時間でパケットを送信する方式である。この図8に示す例では、Q2に100個のパケットが溜め込まれ、そのパケットが10ms間隔で送信されている。また、同じ10ms間隔で新たなパケットが到着している。
【0101】
この場合、図8に示すように、時刻Z+10−0ms〜時刻Z+100−0msの間に到達したパケットは、送信処理が中断しているためQ1に格納されたままとなる。また送信処理が中断したため、Q2に溜まっているパケットも溜まったままとなり、配信サーバ30から外への送信も中断する。時刻Z+100−0msに送信処理が再開されると、直後の時刻Z+100+0msに、時刻Z+100−0msにQ1に到着したパケットを含む、それまでQ1に溜まっていた10個のパケットがQ2に移る。送信処理が再開されたことに伴い、その時刻Z+100+0msには、Q2からパケットが1個取り出されて配信サーバ外に送信され、その後もQ2からは10ms間隔でパケットが取り出されて送信される。
【0102】
この場合、配信サーバ30から送信された後の送信経路上ではパケットの廃棄は生じないが、パケット配信が中断したことによる映像の乱れが生じる可能性がある。またQ2には、中断以前のパケット数よりも多い数のパケットが蓄えられ、その分、送信が全体としてさらに遅れることになる。
【0103】
次に図4〜図6に示す送信処理の具体例を説明する。
【0104】
図9は、時刻Zmsの時点における制御表を示した図である。ただしここでは、送信先ポート番号28001についてのみ示してある。
【0105】
また図10は、図4〜図6に示す送信処理の具体例を示す図である。ここでも図7の場合と同じ条件が適用されている。
【0106】
時刻Z−0msにIPに到達したパケットはドライバBに直ちに転送される。ドライバBでは、図4に示す「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)、すなわち図5のフローチャートが実行され、図5のステップS11→ステップS12と進んでドライバBのキューQ2に登録される。さらにステップS15に進んで送信スレッドが起動される。
【0107】
すると、今度は、図6のステップS21→ステップS22→ステップS23と進む。すなわち、ドライバBの送信スレッドがスリープ状態から起動し(ステップ21)、Q2からパケットが取り出され(ステップS22)、経過時間tが
t=現在の時刻−時刻(7個前のパケット番号)
=Zms−時刻(1)の時刻
=Zms−(Z−70ms)
=70ms
と、算出される(ステップS23)。
【0108】
ここで、第1の閾値時間X・T1は、
X・T1=8×4=32ms
であるので、
t=70ms>X・T1=32ms
であり、ステップS24では「偽」(待ち不要)と判定される。すなわち、ここでは、ステップ25の待ち処理は行われずに、制御表の、時刻(直近のパケット番号)=時刻(0)に現在の時刻が記録されて(ステップS26)Q2から取り出したパケットが直ちに送信される(ステップS27)。そして、制御表の、7個前のパケット番号、および直近のパケット番号に1が加えられて、それぞれ2、1となる(ステップS28)。
【0109】
時刻Z〜Z+10msの間のどこか(例えば時刻Z+5ms)から時刻Z+100−0msまでの間はドライバBにはCPUが割り当てられていなかったためパケットの送信処理が中断している。そのため、時刻Z+100−0msの時点では、IPのキューQ1に10個のパケットが溜まった状態となる。
【0110】
時刻Z+10+0ms時点では、ドライバBにCPUが再び割り当てられて送信処理が再開したため、IPのキューQ1に溜まっていた10個のパケットがドライバBに転送され、図4〜図6に示す送信処理が再開される。
【0111】
これら10個のパケット全てについて図5のステップS11の判定結果は「含まれる」であり、それら10個のパケット全てがドライバBのキューQ2に登録され(ステップS12)、ドライバBの送信スレッドが起動される(ステップS15)。
【0112】
図6のステップS23で算出される経過時間tは、Q2に登録された10個のパケットのうちの1〜7個目のパケットに関し、
パケット番号1:t=Z+100ms−時刻(2)=Z+100−(Z−60)=160ms>32ms=X・T1
パケット番号2:t=Z+100ms−時刻(3)=Z+100−(Z−50)=150ms>32ms=X・T1
パケット番号3:t=Z+100ms−時刻(4)=Z+100−(Z−40)=140ms>32ms=X・T1
パケット番号4:t=Z+100ms−時刻(5)=Z+100−(Z−30)=130ms>32ms=X・T1
パケット番号5:t=Z+100ms−時刻(6)=Z+100−(Z−20)=120ms>32ms=X・T1
パケット番号6:t=Z+100ms−時刻(7)=X+100−(Z−10)=110ms>32ms=X・T1
パケット番号7:t=Z+100ms−時刻(0)=Z+100−Z=100ms>32ms=X・T1
であるためステップS25における待ち処理はスキップされる。
【0113】
8個目のパケットについては、
パケット番号0:t=Z+100ms−時刻(1)=Z+100−(Z+100)=0ms<32ms=X・T1
であるため、
X・T2−t=8×6−0=48ms
の待ちが挿入される。
【0114】
この待ちを行なっている48msの間の各時刻Z+110、Z+120、Z+130、Z+140msに、それぞれ1個づつ(合計4個)のパケットがドライバBに到着し、それらのパケットは、図5の処理によりドライバBのキューQ2に登録される。
【0115】
時刻Z+148msに達した時点で、先ずは8個目のパケット(パケット番号0)が送信され、9個目、10個目のパケット(パケット番号1,2)も、
パケット番号1:t=Z+148ms−時刻(2)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号2:t=Z+148ms−時刻(3)=Z+148−(Z+100)=48ms>32ms=X・T1
であるため直ちに送信される。
【0116】
さらに、時刻Z+100ms〜Z+148msの間に到着した4個のパケット(パケット番号3、4、5、6)についても、
パケット番号3:t=Z+148ms−時刻(4)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号4:t=Z+148ms−時刻(5)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号5:t=Z+148ms−時刻(6)=Z+148−(Z+100)=48ms>32ms=X・T1
パケット番号6:t=Z+148ms−時刻(7)=Z+148−(Z+100)=48ms>32ms=X・T1
であるため、時刻Z+148msの時点で直ちに送信される。
【0117】
時刻150msに到着したパケット(パケット番号7)は、
パケット番号7:t=Z+150ms−時刻(8)=Z+150−(Z+148)=2ms<32ms=X・T1
であるため、
X・T2−t=8・6−2=46ms
の待ちが挿入される。ここで求めた46msは時刻Z+150msからの間隔であるため、時刻Z+148msからの間隔は48msとなる。つまり、Z+150ms+46ms=Z+196msまでは送信を待つことになる。
【0118】
この待ちをしている間、時刻Z+160,Z+170,Z+180,Z+190msに各々1個のパケットがドライバBに到着するが、Z+150msに到着したパケットが未送信であるため、ドライバのキュー(Q2)でそのまま待つことになる。
【0119】
時刻196msに達したとき、まず150msの時点でに到着していたパケット(パケット番号6)が送信され、各時刻Z+160,Z+170,Z+180,Z+190msに到着していたパケットについても、
パケット番号0:t=Z+196ms−時刻(1)=Z+196−(Z+148)=48ms> 2ms=X・T1
パケット番号1:t=Z+196ms−時刻(2)=Z+196−(Z+148)=48ms>32ms=X・T1
パケット番号2:t=Z+196ms−時刻(3)=Z+196−(Z+148)=48ms>32ms=X・T1
パケット番号3:t=Z+196ms−時刻(4)=Z+196−(Z+148)=48ms>32ms=X・T1
であるため、直ちに送信される。
【0120】
時刻200msに達したとき、パケットがドライバBに1個到着するが、そのパケットは、
パケット番号4:t=Z+200ms−時刻(5)=Z+200−(Z+148)=52ms>32ms=X・T1
であるため、直ちに送信される。
【0121】
これ以降、時刻Z+210ms,Z+220ms,Z+230ms…と10msおきに到着するパケットについても、
tの値(現在時刻と7個前のパケットの送信時刻の差)が32msより小さくなることはないため、いずれも直ちに送信される。
【0122】
この図10に示すように、本実施形態によれば、パケットを配信サーバ内に大量に溜め込むことが避けられ、かつ配信サーバから外に送信されたパケットの廃棄も回避される。
【0123】
次に第2実施形態の各種変形例を説明する。
【0124】
上記の第2実施形態では、送信先ポート番号はユーザが既に知っているか又はアプリケーションが知っていることを前提としている。これに対し、以下の第1変形例では、ドライバがストリーミング配信用パケットを識別し、そのパケット自体からポート番号を自動認識する例である。ポート番号自動認識処理を行なう場合はユーザあるいはアプリケーションはストリーミング配信用パケットを識別するための条件を、ドライバBにコンフィギュレーションプロパティ(configuration properties)などで通知しておく構成としてもよい。通知しておけば、その条件に合致したパケットが本件における処理の対象となる。特に通知がない場合は、TCP/UDPであるか、それ以外のパケットであるかという点のみを判定し、TCPがストリーミング配信に使用されている場合はTCPパケット全てが、UDPならばUDPパケット全てが処理の対象となる。
【0125】
図11は、この第1変形例における制御表の初期状態を示す図である。
【0126】
この第1変形例では、ドライバBの起動時に、図11に示すような制御表のフォーマットのみの制御表が作成される。送信ポート番号はドライバBの動作開始後に自動認識されて各送信ポート番号ごとの領域が作成され、図3と同形式の制御表が形成される。
【0127】
この第1変形例においても、図4に示す送信処理が行われる。ただし、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)のアルゴリズムは前述の第2実施形態のアルゴリズム(図5参照)とは異なっている。
【0128】
図12は、この第1変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)の処理内容を示したフローチャートである。
【0129】
この図12における、各ステップS11〜ステップ15は、前述の第2実施形態においては図5の各ステップS11〜ステップS15とそれぞれ同一の処理内容であり、ここでの重複説明は省略する。
【0130】
ステップS31ではポート番号自動認識処理が行われる。次いで、制御表にポート番号が追加されたか否かが判定され(ステップS32)、ポート番号が追加されたときはステップS12に進み、追加されなかったときはステップ13に進む。
【0131】
図13は、図12におけるポート番号自動識別処理(ステップ31)のフローチャートである。
【0132】
ここでは先ず、判定対象のパケットがストリーミング配信用パケットの条件に合致するか否かが判定される(ステップS311)。合致するときは、ステップS312に進み、制御表にそのパケットのポート番号の行が追加され、かつメモリ(図示せず)上にそのポート番号用のキューが1個生成される。さらに、そのキューのベースアドレスが制御表に追加され、X−1個前のパケット番号=0、直近のパケット番号=X−1、時刻(0)〜時刻(X−1)=Sで初期化される(図3参照)。時刻Sは、図3での説明と同じく、送信開始よりも十分に辿った時刻である。
【0133】
図13のステップS311で、ストリーミング配信用パケットの条件に合致しないと判定されると、制御表に追加することなくこのポート番号自動認識処理を通過する。
【0134】
この第1変形例によれば、ストリーミング配信用のパケットの送信先ポート番号が自動認識される。
【0135】
図14は、第2変形例における、図4の中の「キューイングおよびストリーミング配信以外のパケット送信部」(ステップS01)の処理内容を示した図である。
【0136】
この図14におけるステップS11〜ステップS15も、図12の場合と同様、図5におけるステップS11〜ステップS15とそれぞれ同一であり、重複説明は省略する。
【0137】
ステップS41では、
t=現在の時刻−時刻(X−1個前のパケット番号)
が計算される。
【0138】
ステップS42ではキューに既にパケットが存在するか否か、およびt≦X・T1を満足するか否かが判定される。キューに既にパケットが存在するときは、今回のパケットもキューに登録される(ステップS12)、また、キューは空であってもt≦X・T1を満足するときは、この場合もステップS12に進み、今回のパケットがキューに登録される。
【0139】
パケットが空であって、かつt>X・T1のときは、待ち処理は不要であり、この第2変形例では今回のパケットをキューに登録することなく、パケット送信のための処理が行われる。すなわち、この場合、制御表の、時刻(直近のパケット番号)に現在時刻が記録され(ステップS43)、パケット送信処理が行われ(ステップS44)、さらに、制御表のX−1個前のパケット番号、および直近のパケット暗号にそれぞれ1が加えられる(ステップS45)。1を加えた結果、X−1を超えた場合は、0に戻される。
【0140】
前述の第2実施形態の場合、送信待ちをせず直ちに送信可能な状態にあっても一旦はキューに登録する処理が行われ(図5のステップS12参照)、その後、送信スレッドを経由して送信が行われる。このようにキューへの登録や送信スレッドを経由させると僅かではあっても遅れが発生することになる。この第2変形例の場合、待ちが必要な場合だけキューに登録し、待ちが不要な場合はキューに登録せずにそのまま送信される。このため第2変形例によれば、キューに登録することにより発生する遅延を防止することができる。
【0141】
上記の第2実施形態、第1変形例および第2変形例は、図2に示すシステムにおける配信サーバ30のドライバで実施することを前提にしたものである。ただし本件の実施形態は、図2に示すシステムを考えた場合であっても、配信サーバ30のドライバのみで実現可能なものではなく、他の要素上でも実現可能である。以下にその例を説明する。
【0142】
図15は、第2実施形態の第3変形例を示す図である。
【0143】
この図15において、実線の矢印は処理の流れを表わし、点線の矢印はデータの参照または書き込みを表わしている。
【0144】
この図15に示す第3変形例は、前述の第2実施形態と同等の処理を図2の配信サーバ30のアダプタBで実施する例である。
【0145】
ここでも制御表65が作成される。制御表については説明済みであり、ここでの重複説明は省略する。ドライバBで実施する場合は、制御表は配信サーバ30のメインメモリ上に作成されるが、アダプタで実施する場合は、制御表はアダプタ内のメモリに作成される。
【0146】
上記の第2実施形態においてユーザまたはアプリケーションからドライバに通知されていた情報(ポート番号、パラメータX、T、T1などの値)は、この第3変形例(アダプタでの実施)においては、ドライバに通知された後ドライバからさらにアダプタに通知される。このアダプタで実施する場合も、上述の第1変形例と同様、ポート番号自動認識処理を行なうことも可能である。
【0147】
アダプタBは、送信用パケットをドライバBから受け取り、中継器A41(図2参照)に向けて送信する。
【0148】
アダプタBは、ドライバBからパケットを受け取ると、先ずポート番号自動判定部61において、今回受け取ったパケットが制御表65に登録されているポート番号のパケットであるか否かが判定される。制御表65には登録されていないポート番号のパケットであったときは、ここでの制御対象外のパケットであるので、キューイング部62および待ち挿入部63を何もせずに通過し、送信処理部64によりそのまま送信される。このポート番号自動判定部61における処理は前述の第2実施形態として説明した図5のステップS11に相当する。また、制御表65に登録されてないポート番号のパケットの送信処理は図5のステップS13に相当する。
【0149】
ポート番号自動判定部61で制御表65に登録されているポート番号のパケットであると判定されると、そのパケットはキューイング部62により、キュー66に登録される(図5のステップS12に相当する)。
【0150】
待ち挿入部63は、制御表65を参照して、キューに登録されたパケットの送信を待つ必要があるか否かを判定し、待つ必要があると判定した場合に計算で求めた時間だけ待った後に送信処理部64に送信を指示する。一方、待ち挿入部63は、パケットの送信を待つ必要がないと判定したときは送信処理部64に対しパケットの送信を直ちに指示する。
【0151】
送信処理部64は、待ち挿入部63からの送信指示を受けキュー66からパケットを取り出して中継器Aに向けて送信する。
【0152】
待ち挿入部63および送信処理部64の処理は、前述の第2実施形態における図6に示す処理に相当する。ただし、図6の処理では、キューからパケットを取り出した後、必要に応じてパケットを待たせているが、図15の場合は必要に応じて待ち時間を置いた後にキュー65からパケットを取り出している点が異なっている。これはドライバとアダプタという実施箇所が異なっていることに起因するものではなく、いずれにおいても実施可能な変形例である。
【0153】
図16は第4変形例における制御表を示した図である。
【0154】
ここでは前述の第2実施形態の機能を図2に示す配信サーバ30のアプリケーションに搭載した例を説明する。
【0155】
アプリケーションにおいてもドライバと同様な処理が可能である。
【0156】
ただし、アプリケーションの1個のプロセス(またはスレッド)は、1個のTCPポートまたはUDPポートに対応している。このため、アプリケーションの各プロセス(またはスレッド)では複数のTCPポートまたはUDPポートを制御する必要はなく、制御表は図16に示す例のように1つのポート番号のみの制御表となる。この制御表の各欄については図3で説明済みであり、ここでの説明は省略する。
【0157】
なお、アプリケーションで実施した場合、このアプリケーションでの実施を実効あるものにするためには、アプリケーションからドライバにデータが転送されるまでの、TCP(またはUDP)層およびIP層(図2参照)でバーストが発生しないことが前提条件となる。
【0158】
次に、図2の中継器Aで実施した例を第5変形例として説明する。
【0159】
図2に示す中継器B又はクライアント端末上に最小のキューが存在する場合、第2実施形態や各変形例の機能を中継器Aに組み込んで、バッファ(キュー)のオーバフローを防止することも可能である。
【0160】
ただし、中継器で実施した場合、パラメータT、X、T1などを自動的に求めるのは困難な場合が多い。その場合は、それらのパラメータ等をユーザが中継器に直接に指定する必要がある。
【0161】
以上で各種変形例の説明を終了し、以下では、パラメータT、X、T1の決定方法の各1例を説明する。
【0162】
パラメータT、X、T1は、ユーザがあらかじめ知っていればユーザがその値を指定すればよいが、必ずしも知っているとは限らない。そこでここでは、測定プログラムを組み込み、その測定プログラムによって、それらの値を求める方法について説明する。また、配信サーバ30上のアプリケーション、ドライバ、アダプタであれば、以下に説明するようにして自動的に求められた各値を自動測定することも可能である。ただし上述の通り、中継器はその測定プログラムを組み込んで実行させるほどの能力を持たない場合が多い。
【0163】
ここでは、TCPが使用されることを前提にして説明する。UDPの場合は変更が必要であり、その変更点については後述する。
【0164】
図17は、測定プログラムの配置位置を示した図である。
【0165】
TCPが使用される場合はユニキャストで送信され、1個のTCPポート番号が1個のクライアント端末に対応している。測定プログラムは、図17に示す通り、配信サーバのTCP/IPとドライバとの間で動作する。
【0166】
図2に示すエンコーダ21からストリーミング配信のパケットが送信されている状態において測定プログラムを起動すると、以下の(1)〜(5)の手順で、T、X、T1の各値がこの順に決定される。
【0167】
(1)Tを求める。
【0168】
測定プログラムで多数(例えば10000個)のパケットの送信間隔の平均を求め、その値をTとする。パケット同士の時間間隔に偏りが発生している可能性もあるが、多数の平均をとれば、本来のパケット間隔Tとほぼ一致する。
【0169】
(2)Xを求める。
【0170】
測定プログラムでK個のパケットを溜め込んだあと、K個のパケットをパケット同士の時間間隔0で送信する。この場合、伝送路上では、パケット同士の間隔は、微小な時間間隔(IEEE802.3規定されたInter Packet Gap)以上となるが、ストリーミング配信でのパケット同士の時間間隔に比べれば無視できるほど小さい。
【0171】
Kは2から初めて、3,4,5,6,・・・と1ずつ大きくしていく。
【0172】
K個のパケットを送信した後、TCPによる再送が検出されなければ、K+1個のパケットを時間間隔0で送信する。
【0173】
このようにして時間間隔0で送信するパケット数Kを増やしていき、TCPによる再送が検出されたところで、そのときのKから2を引いた数(K−2)をXとする。
【0174】
図18は、X+1個のパケットを時間間隔0で送信した場合を示す模式図である。
【0175】
配信サーバからX+1個のパケットが同時に送信されたものとする。
【0176】
その場合、先頭の1個のパケットは最小のキューを持つ装置の処理部によりその最小のキューから直ちに取り出され、2個目〜X+1個目のX個のパケットによりその最小のキューが一気に満杯の状態となる。
【0177】
ただし、この場合、オーバフローは発生しない。
【0178】
図19は、X+2個のパケットを時間間隔0で送信した場合を示す模式図である。
【0179】
配信サーバからX+2個のパケットが同時に送信された場合、最後(X+2個目)の1個のパケットがキューに入りきらずオーバフローが発生する。これはパケットロストとなり、TCPによる再送が発生する原因となる。
【0180】
したがって上記の通り、TCPによる再送が検出された時点で、その時のKから2を引いた数(K−2)がXとなる。
【0181】
(3)T1を求める。
【0182】
はじめに、測定プログラムでパケットをX+2個のパケット溜め込んだあと、X+2個のパケットをパケット同士の時間間隔Mで送信する。
【0183】
Mは1ミリ秒からはじめて、2ミリ秒、3ミリ秒、4ミリ秒・・・と1ミリ秒ずつ大きくしていく。
【0184】
X+2個のパケットをMミリ秒間隔で送信した後、TCPによる再送が検出されれば、再度X+2個のパケットを溜め込んで、Mの値を1増やす。
【0185】
Mミリ秒間隔でパケットを送信した後、TCPによる再送が検出されなければ、その時のMをM_2とする。
【0186】
次に、測定プログラムでパケットをX+3個のパケット溜め込んだあと、X+3個のパケットをパケット同士の時間間隔Mで送信する。MはM_2からはじめて、以降X+2個の時と同様な処理を行って、TCPによる再送が検出されなくなったときのMをM_3とする。
【0187】
次に、測定プログラムでパケットをX+4個のパケット溜め込んだあと、X+4個のパケットをパケット同士の時間間隔Mで送信する。MはM_3からはじめて、以降X+2個の時と同様な処理を行って、TCPによる再送が検出されなくなったときのMをM_4とする。
【0188】
以降、同様な処理をX+n個(n=5、6・・・)のパケットを溜め込んで繰り返す。
【0189】
M_nが増えないことが何回か(例えば4回)連続で検出された場合、そのM_nをT1とする。例えば、M_100=M_101=M_102=M_103となった場合、その値をT1とする。
【0190】
なおこの例では最小の時間の刻みを1ミリ秒としたが、T1を更に高精度に求める場合100マイクロ秒などとしても同様な方式でT1を求めることが可能である。
【0191】
上記の方法で求めたT1が、経路上のキューでパケット1個が処理される時間に相当することを図を用いて説明する。
【0192】
図20は、パケットを送信時間間隔T1で送信したときの様子を示す図である。
【0193】
経路上の最小のキューは最初は空、かつその最小のキューを持つ装置の処理部で処理中のパケットもなかったという前提とする。
【0194】
この場合、1個前に受信したパケットについて次のパケットを受信する直前に処理部での処理が完了しているためキューにパケットが溜まることはなく、パケットを何個送信してもキューのオーバフローは発生しない。
【0195】
尚ここでは、キューは空である、という前提を置いて説明したが、パケットを送信時間間隔T1で送信する場合、キューに1個分でも空きがあればオーバフローは発生しない。
【0196】
図21は、パケットを送信時間間隔0.99・T1で送信したときの様子を示す図である。
【0197】
ここでも、経路上の最小のキューは最初は空、かつ、その最小のキューを持つ装置の処理部で処理中のパケットもなかったという前提とする。
【0198】
最初のパケットは、キューを素通りしてその装置の処理部で処理が行なわれる。
【0199】
2番目のパケットが送信された時点では、最初のパケットが処理部で未だ処理中のためキューに一旦溜まる。その2番目のパケットがキューに一旦溜まった後、0.01・T1後に1番目のパケットの処理が完了し、2番目のパケットが処理部に移される。
【0200】
3番目のパケットが送信された時点では、2番目のパケットが処理部で処理されている途中であり、キューに一旦溜まる。2番目のパケットの処理は、3番目のパケットがキューに溜まった後0.02・T1後に完了し、キューに溜めていた3番目のパケットが処理部に移される。
【0201】
このようにして、101個目のパケットの送信まではキューにパケットが1個溜まる状況が続く。102個目〜201個目のパケットの送信ではキューにパケットが2個溜まる状況となる。同様にして202個目〜301個目の送信ではキューにパケットが3個溜まる状況となる。さらに同様にして、100・(X−1)+2〜100・X+1個目のパケットの送信ではキューにパケットがX個溜まる状況となり、パケットを100・X+2個送信するとキューがオーバフローする。ここでもキューは最初は空の状態にあることを前提としたが、キューに既にパケットが溜まっている状態では更に早い時点でオーバフローが発生する。
【0202】
このように、送信時間間隔がT1以上でパケットを送信すると最小のキューでのオーバフローが避けられ、T1よりも僅かでも短い時間間隔でパケットを送信すると最小のキューでオーバフローが発生する。
【0203】
したがって、上記(3)の方法により、最小のキューに収容されているパケットがその最小のキューから順次取り出される時間間隔T1が求められる。
【0204】
(4)表示または設定
上記(1)〜(3)により求められたT、X、T1は、ディスプレイ(図示せず)上に表示される。あるいは、これらの値T、X、T1は、測定プログラムによりアプリケーション、ドライバ、又はアダプタに自動設定される。
【0205】
(5)測定プログラム終了
測定プログラムの実行が終了する。測定プログラムは、起動した後、(1)〜(4)を行なえば自動的に終了する。
【0206】
以上の各パラメータT、X、T1の決定方法は、ストリーム配信にTCPが使用されていることを前提とする求め方である。そこで次に、TCPに代わりUDPが使用される場合のパラメータT、X、T1の決定方法を説明する。
【0207】
Tの決定方法については、TCPとUDPで違いはなく、上記の(1)で説明した方法がそのまま採用可能である。
【0208】
UDPの場合は、TCPのように再送処理は存在しない。
【0209】
また、TCPはユニキャストの送信しかできないので、ポート番号は1個のクライアント端末に対応していたが、UDPでは多くの場合マルチキャストでの送信が行われており、その場合、ポート番号は複数のクライアント端末に対応している。
【0210】
UDPの場合は、そのポート番号が対応しているクライアント端末のどれか1台に、パケットロストを検出して送信元に通知するパケットロスト検出プログラムを導入する。パケットロスト検出プログラムがパケットロストを検出し、その結果を配信サーバ側に送り返すことで、上記の(2)、(3)と同様な方法で、X、T1を決定することができる。
【0211】
図22、23では、UDPを使用した場合の、測定プログラムおよびパケットロストプログラムの各動作位置を示した図である。
【0212】
図22には、図22(A)に示すように測定プログラムが配信サーバのUDP/IPとドライバとの間で動作し、図22(B)に示すようにパケットロストプログラムがクライアント端末のUDP/IPとドライバとの間で動作することが示されている。また図23には、図23(A)に示すように、測定プログラムが配信サーバのアプリケーションとUDP/IPとの間で動作し、パケットロストプログラムがクライアント端末のアプリケーションとUDP/IPとの間で動作することが示されている。
【0213】
このように、測定プログラムおよびパケットロストプログラムは、図22に示すようにUDP/IPとドライバとの間で動作させてもよく、図23に示すようにアプリケーションとUDP/IPとの間で動作させてもよい。
【符号の説明】
【0214】
10 パケット送信装置
11 パケット受信部
12 待ち処理部
13 パケット送信部
14 経過時間判定部
15 制御表記憶部
15a 制御表
16 制御表更新部
17 測定部
18 再送要求受信部
20 コンテンツ
21 エンコーダ
30 配信サーバ
41 中継器A
42 インターネット
43_1,43_2 中継器B
50_1,50_2,・・・,50_n クライアント端末
51_1,51_2,・・・,51_n 映像装置
61 ポート番号自動判定部
62 キューイング部
63 待ち挿入部
64 送信処理部
65 制御表
66 キュー
【特許請求の範囲】
【請求項1】
パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置であって、
パケットを受信するパケット受信部と、
受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取り出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定する経過時間判定部と、
前記経過時間判定部により、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行なう待ち処理部と、
前記未送信パケットを、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも大きいと判定された場合には前記待ち処理部による待ち処理を経ることなく送信し、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合には前記待ち処理部による待ち処理を経た後に送信するパケット送信部とを有することを特徴とするパケット送信装置。
【請求項2】
前記パケット受信部におけるパケット平均受信時間間隔をT、および時間間隔T2をT1<T2<Tとしたとき、前記待ち処理部は、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、前記未送信パケットの送信を、前記現在時刻から(第2の閾値時間X・T−経過時間t)の待ち時間だけ待たせる待ち処理を行なうものであることを特徴とする請求項1記載のパケット送信装置。
【請求項3】
直近の送信済パケットから数えてX−1個前の送信済パケットまでの、該直近の送信済パケットを含むX個の送信済パケットの各送信時刻が記録される制御表を記憶する制御表記憶部と、
前記パケット送信部による未送信パケットの送信を受けて前記制御表中の送信時刻を更新する制御表更新部とを有し、
前記経過時間判定部は、前記制御表を参照することにより前記X−1個前の送信済パケットの送信時刻を求めて前記経過時間tを算出し、該経過時間tと前記第1の閾値時間X・T1との大小を判定するものであることを特徴とする請求項1又は2のパケット送信装置。
【請求項4】
前記制御表は、各送信先ごとの各欄に、該各送信先に向けて送信された送信済パケットの各送信時刻が記録される制御表であって、
前記制御表更新部は、前記制御表中の送信時刻をパケットの送信先ごとに更新するものであることを特徴とする請求項3記載のパケット送信装置。
【請求項5】
前記制御表更新部は、パケットの送信先を監視し、新たな送信先に向けて送信されるパケットを検出すると前記制御表に該新たな送信先に対応する領域を追加するものであることを特徴とする請求項4記載のパケット送信装置。
【請求項6】
前記パケット受信部において順次受信する複数のパケットの受信間隔の平均値を算出することにより前記平均受信時間間隔Tを求める平均受信時間間隔算出部を有することを特徴とする請求項2から5のうちいずれか1項記載のパケット送信装置。
【請求項7】
複数個のパケットを送信先装置に向けてほぼ同時に送信する過程を、ほぼ同時に送信するパケットの個数を順次変更しながら繰り返し、再送要求の発生を免れる最大パケット数を検出することにより、該送信先装置に向けてパケットを送信したときの送信経路上に存在するキューのうちの前記最小のキーの収容可能なパケット数Xを求める収容可能パケット数検出部を有することを特徴とする請求項1から6のうちいずれか1項記載のパケット送信装置。
【請求項8】
複数個のパケットを所定の時間間隔で送信する過程を、パケットの個数および該所定の時間間隔を変更しながら繰り返して、パケットの個数を増やしても再送要求が検出されない最短の時間間隔を検出することにより、前記時間間隔T1を求めるキュー取出し時間検出部を有することを特徴とする請求項1から7のうちいずれか1項記載のパケット送信装置。
【請求項9】
パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信方法であって、
パケットを受信し、
受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定し、
前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行ない、
前記未送信パケットを、前記経過時間tが前記第1の閾値時間X・T1よりも大きいと判定された場合には前記待ち処理を経ることなく送信し、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合には前記待ち処理を経た後に送信することを有することを特徴とするパケット送信方法。
【請求項10】
プログラムを実行する演算処理装置内で実行され、該演算処理装置内に、パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置を構築するパケット送信プログラムであって、
前記演算処理装置内に、
パケットを受信するパケット受信部と、
受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定する経過時間判定部と、
前記経過時間判定部により、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行なう待ち処理部と、
前記未送信パケットを、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも大きいと判定された場合には前記待ち処理部による待ち処理を経ることなく送信し、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合には前記待ち処理部による待ち処理を経た後に送信するパケット送信部とを有するパケット送信装置を構築することを特徴とするパケット送信プログラム。
【請求項1】
パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置であって、
パケットを受信するパケット受信部と、
受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取り出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定する経過時間判定部と、
前記経過時間判定部により、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行なう待ち処理部と、
前記未送信パケットを、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも大きいと判定された場合には前記待ち処理部による待ち処理を経ることなく送信し、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合には前記待ち処理部による待ち処理を経た後に送信するパケット送信部とを有することを特徴とするパケット送信装置。
【請求項2】
前記パケット受信部におけるパケット平均受信時間間隔をT、および時間間隔T2をT1<T2<Tとしたとき、前記待ち処理部は、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、前記未送信パケットの送信を、前記現在時刻から(第2の閾値時間X・T−経過時間t)の待ち時間だけ待たせる待ち処理を行なうものであることを特徴とする請求項1記載のパケット送信装置。
【請求項3】
直近の送信済パケットから数えてX−1個前の送信済パケットまでの、該直近の送信済パケットを含むX個の送信済パケットの各送信時刻が記録される制御表を記憶する制御表記憶部と、
前記パケット送信部による未送信パケットの送信を受けて前記制御表中の送信時刻を更新する制御表更新部とを有し、
前記経過時間判定部は、前記制御表を参照することにより前記X−1個前の送信済パケットの送信時刻を求めて前記経過時間tを算出し、該経過時間tと前記第1の閾値時間X・T1との大小を判定するものであることを特徴とする請求項1又は2のパケット送信装置。
【請求項4】
前記制御表は、各送信先ごとの各欄に、該各送信先に向けて送信された送信済パケットの各送信時刻が記録される制御表であって、
前記制御表更新部は、前記制御表中の送信時刻をパケットの送信先ごとに更新するものであることを特徴とする請求項3記載のパケット送信装置。
【請求項5】
前記制御表更新部は、パケットの送信先を監視し、新たな送信先に向けて送信されるパケットを検出すると前記制御表に該新たな送信先に対応する領域を追加するものであることを特徴とする請求項4記載のパケット送信装置。
【請求項6】
前記パケット受信部において順次受信する複数のパケットの受信間隔の平均値を算出することにより前記平均受信時間間隔Tを求める平均受信時間間隔算出部を有することを特徴とする請求項2から5のうちいずれか1項記載のパケット送信装置。
【請求項7】
複数個のパケットを送信先装置に向けてほぼ同時に送信する過程を、ほぼ同時に送信するパケットの個数を順次変更しながら繰り返し、再送要求の発生を免れる最大パケット数を検出することにより、該送信先装置に向けてパケットを送信したときの送信経路上に存在するキューのうちの前記最小のキーの収容可能なパケット数Xを求める収容可能パケット数検出部を有することを特徴とする請求項1から6のうちいずれか1項記載のパケット送信装置。
【請求項8】
複数個のパケットを所定の時間間隔で送信する過程を、パケットの個数および該所定の時間間隔を変更しながら繰り返して、パケットの個数を増やしても再送要求が検出されない最短の時間間隔を検出することにより、前記時間間隔T1を求めるキュー取出し時間検出部を有することを特徴とする請求項1から7のうちいずれか1項記載のパケット送信装置。
【請求項9】
パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信方法であって、
パケットを受信し、
受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定し、
前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行ない、
前記未送信パケットを、前記経過時間tが前記第1の閾値時間X・T1よりも大きいと判定された場合には前記待ち処理を経ることなく送信し、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合には前記待ち処理を経た後に送信することを有することを特徴とするパケット送信方法。
【請求項10】
プログラムを実行する演算処理装置内で実行され、該演算処理装置内に、パケットを受信し受信したパケットを送信先装置に向けて送信するパケット送信装置を構築するパケット送信プログラムであって、
前記演算処理装置内に、
パケットを受信するパケット受信部と、
受信したパケットを送信先装置に向けて送信するときの送信経路上に存在する、送信されてきたパケットを一時的に収容しておくキューのうちの収容可能なパケットの数が最小のキューの収容可能なパケット数をX、該最小のキューに収容されているパケットが該最小のキューから順次取出される時間間隔をT1としたとき、直近の送信済のパケットから数えてX−1個前の送信済パケットの送信時刻から現在時刻までの間の経過時間tと、第1の閾値時間X・T1との大小を判定する経過時間判定部と、
前記経過時間判定部により、前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合に、未送信パケットの送信を延期させる待ち処理を行なう待ち処理部と、
前記未送信パケットを、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも大きいと判定された場合には前記待ち処理部による待ち処理を経ることなく送信し、前記経過時間判定部により前記経過時間tが前記第1の閾値時間X・T1よりも小さいと判定された場合には前記待ち処理部による待ち処理を経た後に送信するパケット送信部とを有するパケット送信装置を構築することを特徴とするパケット送信プログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図21】
【図22】
【図23】
【公開番号】特開2011−259329(P2011−259329A)
【公開日】平成23年12月22日(2011.12.22)
【国際特許分類】
【出願番号】特願2010−133514(P2010−133514)
【出願日】平成22年6月11日(2010.6.11)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成23年12月22日(2011.12.22)
【国際特許分類】
【出願日】平成22年6月11日(2010.6.11)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]