以下、本発明を実施するための実施の形態について図面を参照しながら説明を行う。図1は、本発明の通信装置の実施の形態の全体の接続関係を示す構成図である。送信側端末110と受信側端末120がネットワーク130を介して接続されている。送信側端末110は、ネットワーク130にパケットを送信する送信側通信装置111と、送信側通信装置111を通じてネットワーク130にパケットのデータを送り込む送信側アプリケーション112から構成されている。受信側端末120は、ネットワーク130からパケットを受信する受信側通信装置121と、受信側通信装置121からパケットのデータを取り込む受信側アプリケーション122から構成されている。なお、送信側端末110と受信側端末120の送信側、受信側の役割は説明のために便宜的に固定しているものであり、実際は随意役割を入れ替え、相互にデータを送受するとして問題ない。
(第1の実施の形態)
図2は、本発明に係る受信側通信装置の第1の実施の形態の構成図である。図2を参照すると、本発明に係る受信側通信装置(以下、通信装置200)は、ネットワークインターフェース201、データ受信部202、通信プロトコルスタック203、スヌープパケット出力部204を含む。これらの手段は次のように動作する。
ネットワークインターフェース201は図1のネットワーク130と接続し、パケットの送受信を行う。データ受信部202は、通信プロトコルスタック203及びスヌープパケット出力部204からパケットデータを受け取り、パケットデータの重複がないように、重複して届いたパケットを廃棄する。図1の受信側アプリケーション122はデータ受信部202からパケットデータを受信する。通信プロトコルスタック203はネットワークインターフェース201を通じてのパケットの送受信を管理する。スヌープパケット出力部204は、ネットワークインターフェースから受信パケットをスヌープする。ここで行われるスヌープ処理とは、ネットワークインターフェースが受信する特定のパケットを複製する処理を指す。以降、このフローを繰り返す。
なお、通信プロトコルスタック203は、図29に表されるように、ネットワークインターフェース側のプロトコルスタック2031と、データ受信部側のインターフェースとなるソケットインターフェース2032として多層的に実現することもできる。また、スヌープパケット出力部204についても、図30に示されるように、ネットワークインターフェース側のパケットスヌープ部2041と、データ受信部側のインターフェースとなるスヌープインターフェース2042のように階層的に実装することもできる。なお、このことは後述する第2から第8の実施の形態における通信プロトコルスタック、パケット監視部においても同様である。
次に図2の構成図および図3のフローチャートを参照して、本実施の形態の全体の動作について詳細に説明する。
通信装置200のスヌープパケット出力部204は、ネットワークインターフェース201から到着パケットをスヌープする(ステップS101)。データ受信部202は、スヌープパケット出力部204からパケットデータを受け取る(ステップS102)。またデータ受信部202は、ステップS102に並行して、通信プロトコルスタック203からパケットデータを受け取る(ステップS111)。データ受信部202は、図2のS102 において受け取ったパケットデータとの重複がないように、重複して受け取ったものがあればパケットデータの片方を廃棄する(ステップS103)。図示しないアプリケーションは、データ受信部202からパケットデータを受け取り、データの再現を行う(ステップS104)。
次に本発明の実施の形態の動作を図4のシーケンス図に示される、通信プロトコルとしてTCP/IPを採用した場合の一例を基にして具体的に説明する。以下では、輻輳制御及び再送制御の実施を判断するためのDuplicated ACKの受信回数を、TCP/IPで一般的に採用されている3回としている。なお、以下の記載、および図において、「# L」はシーケンス番号Lのパケットを表し、「ACK M」はシーケンス番号Mが付されたACKを表し、「Dup ACK N」はシーケンス番号Nが付されたDuplicated ACKを表すものとする。
通信装置のネットワークインターフェース201は、図1におけるネットワーク130を通じて送信側の端末110からシーケンス番号1のデータパケットを受信する(401)。通信プロトコルスタック203はデータパケットをネットワークインターフェース201から取得し(402)、シーケンス番号1の[ACK 1]をネットワークインターフェース201に送出する(403)。ネットワークインターフェース201は、送信側の端末110に[ACK 1]を送信する(408)。通信プロトコルスタック203は、パケットデータをデータ受信部に送信する(405)。通信プロトコルスタック203がパケットを取得するのに先行、または並行して、スヌープパケット出力部204は、データパケットをネットワークインターフェース201からスヌープして(404)、データ受信部202に送信する(406)。データ受信部202は、シーケンス番号1のデータパケットを重複して取得したことから、そのうち1つを廃棄して、405または406で受信したどちらかのパケットデータのみを図示しないアプリケーションに送信する(407)。
次にシーケンス番号2のパケットが損失し(409)、続いて送信側端末110からはシーケンス番号3のパケットがネットワークインターフェース201に到達したとする(410)。通信プロトコルスタック203はデータパケットをネットワークインターフェース201から取得し(411)、まだシーケンス番号2のデータパケットを受信していないことから、 Duplicated ACKと呼ばれる [Dup ACK 1]をネットワークインターフェース201に送出する(412)。ネットワークインターフェース201は、送信側端末110に[Dup ACK 1]を送信する(416)。通信プロトコルスタック203は、シーケンス番号2のデータパケットを受信していないことからパケットデータをデータ受信部202に送信することはしない。通信プロトコルスタック203がパケットを取得するのに先行、または並行して、スヌープパケット出力部204は、データパケットをネットワークインターフェース201からスヌープして(413)、データ受信部202に送信する(414)。データ受信部202は、414でスヌープパケット出力部204から受信したパケットデータを図示しないアプリケーションに送信する(415)。
シーケンス番号4、シーケンス番号5のパケットの到達においても、シーケンス番号3のパケットの到達時と同様の動作が繰り返され、送信側端末110には、2つのDuplicated ACKが到達する(418,420)。また、データ受信部202からアプリケーションには、シーケンス番号4のパケットデータ、シーケンス番号5のパケットデータが送出される(417,419)。
送信側端末110では、輻輳制御のトリガーとなる連続して3つ目のDuplicated ACKが到達したとき(420)に、輻輳制御が実施される。また、同時にシーケンス番号2のパケットが損失したことが検知され、シーケンス番号2のパケットを再送する(421)。ネットワークインターフェースがシーケンス番号2のパケットを受信すると、通信プロトコルスタック203はパケットを取得し(422)、[ACK 5]を生成してネットワークインターフェース201に送出する(423)。ここで、通信プロトコルスタックは、シーケンス番号5までのパケットを受信完了したことになるため、ACKにはシーケンス番号5が付される。通信プロトコルスタック203は、シーケンス番号2から5のデータパケットを、データ受信部202に送出する(425〜428)。通信プロトコルスタックがシーケンス番号2のパケットを取得するのに先行、または並行して、スヌープパケット出力部204は、データパケットをネットワークインターフェース201から受信して(424)、データ受信部202に送信する(429)。データ受信部202は、シーケンス番号5までのデータパケットを既に取得していることから、425から428で受信したシーケンス番号2から5のパケットを廃棄する。
なお、上記例では、シーケンス番号2のパケットのデータがアプリケーションに渡されないことになるので、アプリケーションの側でそのようなパケットの損失に対応している必要はある。例えば、映像や音声のようなアプリケーションでは、損失したパケットの前後に受信したデータから損失したパケットのデータを予測する技術を有する場合が多く、このような技術を活用することで対応が可能である。
次に、本実施の形態の効果について説明する。本実施の形態では、通信プロトコルスタックの再生制御のために損失したパケットが再送されるまで、アプリケーションにデータを提供できない場合であっても、ネットワークインターフェースから、通信プロトコルスタックが受信するデータを、直接スヌープパケット出力部がスヌープし、データ受信部202を通じて受け取ることで、損失したパケットが再送されるより前に、後続のパケットを受け取ることが可能である。図4の例では、440で示される時間の遅延を削減することが可能となる。
これにより、パケットロスによる再送制御の影響を受けることなく、損失したパケット以降のパケットを連続的に受け取ることが出来る。アプリケーションが映像や音声等を再現するものの場合を例とすると、映像や音声を途切れることなく再生することが可能となる。
さらに本実施の形態では、スヌープパケット出力部のスヌープは、通信プロトコルの再送制御には影響を与えていないため、輻輳制御は実行される。リアルタイム性を要求するアプリケーションにおいて再送制御と輻輳制御を伴う通信プロトコルでデータを送受信した場合に、輻輳制御を損なうことなく、再送制御に伴うデータを再現するまでの遅延を削減できる。
また、本実施の形態では、スヌープパケット出力部が、通信プロトコルスタックを介さずに直接ネットワークインターフェースからスヌープしている。つまり通信プロトコルに修正を加える必要がない。通信プロトコルは、コンピュータのオペレーションシステムの一部(カーネル)として実装されていることも多く、修正を施すことが困難なケースも多いが、本実施の形態の構成を取れば、通信プロトコルに手を入れる必要がない。
(第2の実施の形態)
次に本発明の第2の実施の形態について、図面を参照して説明する。
図5は、本発明に係る受信側通信装置の第2の実施の形態の構成図である。図5を参照すると、本発明に係る受信側通信装置(以下、通信装置500)は、ネットワークインターフェース501、通信プロトコルスタック502、パケット監視部503、ダミーパケット生成部504を含む。これらの手段は次のように動作する。ネットワークインターフェース501は、図1のネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック502はネットワークインターフェース501を通じたパケットの送受信を管理する。受信したパケットは通信プロトコルの制御にしたがって図1に示す受信側のアプリケーション122に送られる。なお、本実施の形態では、データの重複受信を行わない構成としたので、実施の形態1における重複したデータの削除を行うデータ受信部は構成として不要となる。
パケット監視部503は、ネットワークインターフェース501を経由して送受信されるパケットを監視し、Duplicated ACKの送信を検出する。そのDuplicated ACKが通信プロトコルにおける輻輳制御のトリガーとなるもの、つまりそのDuplicated ACKが送信側で受信された場合に、輻輳制御を起こすACKである場合、パケット監視部503はダミーパケット生成部504にダミーパケットの生成を要求する。ダミーパケット生成部504は、ダミーパケットを生成し、ネットワークインターフェース501を通じて通信プロトコルスタック502に送信する。ここで生成されるダミーパケットとは、損失したパケットに含まれるシーケンス番号等のヘッダ情報が同一であるパケットである。パケットのデータ部分は空であってもよいし、前回に受信したデータの複製データとするなどしても問題ない。
次に図5、および図6を参照して、本実施の形態の全体の動作について詳細に説明する。図6は、本発明の第2の実施の形態に係る通信装置の動作を示すフローチャートである。通信装置500のパケット監視部503は、ネットワークインターフェース501を経由して送受信されるパケットを監視する (図6のS201)。
パケット監視部503は、送受信されるパケットからDuplicated ACKの送信を検出し、そのDuplicated ACKが通信プロトコルにおける輻輳制御のトリガーとなるもの、つまりそのDuplicated ACKが送信側端末で受信された場合に、輻輳制御を起こすACKであるかを判断する(図6のS202)。輻輳制御のトリガーとなる予め定められた回数のDuplicated ACKが検出されるまで、S201、S202を繰り返す。
輻輳制御を起こすDuplicated ACKであると判断された場合、ダミーパケット生成部504に通知が行われ、ダミーパケット生成部504がダミーパケットの生成を行い、ネットワークインターフェース501を通じて通信プロトコルスタック502に送信する(図6のS203)。ここで、輻輳制御を起こすDuplicated ACKが検出されるとは、通信プロトコルがTCP/IPである場合、同一シーケンス番号が付加されたDuplicated ACKの3回目の送信が検出された場合が相当する。以降、S201からS203を繰り返す。
次に本発明の実施の形態の動作を図7のシーケンス図に示される、通信プロトコルとしてTCP/IPとした場合の一例を基にして具体的に説明する。以下では、輻輳制御及び再送制御の実施を判断するためのDuplicated ACKの受信回数を、TCP/IPで一般的に採用されている3回としている。
通信装置のネットワークインターフェース501は、図1に示すネットワーク130を通じて送信側端末110から送信されるシーケンス番号1のデータパケットを受信する(701)。通信プロトコルスタック502はデータパケットをネットワークインターフェース501から取得し(702)、シーケンス番号1の[ACK 1]をネットワークインターフェース501に送出する(703)。ネットワークインターフェース501は、送信側端末110に[ACK 1]を送信する(705)。通信プロトコルスタック502は、シーケンス番号1のパケットデータを図1に示す受信側アプリケーション122に送信する(704)。
次にシーケンス番号2のパケットが損失し(706)、続いて送信側端末110からはシーケンス番号3のパケットがネットワークインターフェース501に到達したとする(707)。通信プロトコルスタック502はデータパケットをネットワークインターフェース501から取得し(708)、まだシーケンス番号2のデータパケットを受信していないことから、シーケンス番号1までしか受信していないことを意味する、Duplicated ACKと呼ばれる[Dup ACK 1]をネットワークインターフェース501に送出する(709)。ネットワークインターフェース501は、送信側端末110に[Dup ACK 1]を送信する(710)。通信プロトコルスタック502は、シーケンス番号2のデータパケットを受信していないことからシーケンス番号3のパケットデータを受信側アプリケーション122に送信することはしない。
シーケンス番号4、シーケンス番号5のパケットの到達においても、シーケンス番号3のパケットの到達時と同様の動作が繰り返され、送信側端末110には、Duplicated ACK [ACK 1]が到達する(711〜718)。
パケット監視部503は輻輳制御のトリガーとなる連続して3つ目のDuplicated ACKを検出すると(718, 719)、ダミーパケット生成部504にダミーパケットの生成を要求する(720)。ダミーパケット生成部504は、シーケンス番号2のダミーパケットを生成し、ネットワークインターフェース501を通じて、通信プロトコルスタック502に送信する(721,722)。通信プロトコルスタック502は、シーケンス番号2のダミーパケットを受信側アプリケーション122に送信する(723)すると同時に、既に受け取っているシーケンス番号3から5のパケットを受信側アプリケーション122に送信する(724〜726)。
また、通信プロトコルスタック502は、シーケンス番号5までのパケットを受信できたことから、シーケンス番号5のACKを送出する(728, 729)。
送信側端末110では、輻輳制御のトリガーとなる連続して3つ目のDuplicated ACKが718で到達したときに、輻輳制御が働く。同時にシーケンス番号2のパケットが損失したことが検知され、シーケンス番号2のパケットが再送される(727)。ネットワークインターフェース501がこの再送パケット(シーケンス番号2)を受信し(727)、通信プロトコルスタック502はパケットを取得するが(730)、これまでにシーケンス番号5までのパケットを受信完了したことになるため、この再送パケット(シーケンス番号2)の受信において、シーケンス番号5を付したACKを生成してネットワークインターフェース501に送出する(731)。通信プロトコルスタック502は、重複して受け取ったパケット、ここでの例ではシーケンス番号2のデータパケット、については廃棄を行う(733)。
次に本実施の形態の効果について説明する。
本実施の形態では、通信プロトコルスタックの再生制御のために損失したパケットが再送されるまで、アプリケーションにデータを提供できない場合であっても、ダミーパケット生成部がダミーパケットを生成し、通信プロトコルに提供することで、損失したパケットが再送されるより前に、パケットを受け取ることが可能である。図7の例では、受信側アプリケーションにシーケンス番号2のダミーパケットのデータが到着する時刻(723)から、従来の方法で受信側アプリケーションにシーケンス番号2のパケットのデータが届く時刻(741)の間の時間分の遅延を削減することが可能となる。つまり、おおよそ、再送制御のトリガーとなるDuplicated ACKの送出から、ロスパケットが再送されるまでの時間を削減することが可能となり、パケットロスによる再送制御の影響を軽減することが出来る。アプリケーションが映像や音声等を再現する場合を例とすると、映像や音声を途切れることなく再生することが可能となる。
さらに本実施の形態では、ダミーパケットの生成を輻輳制御のトリガーとなるDuplicated ACKが送信されるのを待ってから行うため、通信プロトコルの輻輳制御に影響を与えていない。そのため、リアルタイム性を要求するアプリケーションにおいて再送制御と輻輳制御を伴う通信プロトコルでデータを送受信した場合に、輻輳制御を損なうことなく、再送制御に伴うデータを再現するまでの遅延を削減できる。
また、本実施の形態では、パケット監視部が、通信プロトコルスタックを介さずに直接ネットワークインターフェースを監視している。つまり通信プロトコルに修正を加える必要がない。通信プロトコルは、コンピュータのオペレーションシステムの一部(カーネル)として実装されていることも多く、修正を施すことが困難なケースも多いが、本実施の形態の構成を取れば、通信プロトコルに手を入れる必要がない。
(第3の実施の形態)
次に本発明の第3の発明の実施の形態について、図面を参照して説明する。
図8は、本発明に係る受信側通信装置の第3の実施の形態の構成図である。図8を参照すると、本発明に係る受信側通信装置(以下、通信装置800)は、ネットワークインターフェース801、通信プロトコルスタック802、パケット監視部803、ACK生成部804を含む。
これらの手段は次のように動作する。ネットワークインターフェース801は、図1に示すネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック802はパケットの送受信を管理し、通信プロトコルの動作にしたがってパケットのデータを図1に示す受信側アプリケーション122に送る。パケット監視部803は、ネットワークインターフェース801を経由して送受信されるパケットを監視し、Duplicated ACKの送信を検出する。Duplicated ACKの送信を検出するとパケット監視部803は、ACK生成部804にダミーのDuplicatd ACKの生成を要求する。ACK生成部804は輻輳制御を発生させるために必要な個数のDuplicated ACKを生成し、ネットワークインターフェース801を通じて、図1に示す送信側端末110に送信する。
次に図8の構成図、および図9のフローチャートを参照して、本実施の形態の全体の動作について詳細に説明する。通信装置800のパケット監視部803は、ネットワークインターフェース801を経由して送受信されるパケットを監視する (図9のS301)。パケット監視部803は、送受信されるパケットからDuplicated ACKの送信を検出する(図9のS302)。Duplicated ACKが検出されるまで、S301、S302を繰り返す。Duplicated ACKが検出された場合、パケット監視部803からダミーACK生成部804に通知が行われ、ダミーACK生成部804は、輻輳制御及び再送制御を発生させるために必要な個数のDuplicated ACKの生成を行い、ネットワークインターフェース801に送信する(図9のS303)。以降、ステップS301からステップS303を繰り返し行う。
次に本発明の実施の形態の動作を図10のシーケンス図に示される、通信プロトコルとしてTCP/IPとした場合の一例を基にして具体的に説明する。再送制御及び輻輳制御は、同一シーケンス番号のDuplicated ACKを3つ受け取ったときに発生すると設定されているとする。
通信装置のネットワークインターフェース801は、図1で示すネットワーク130を通じて送信側端末110から送出されてきたシーケンス番号1のデータパケットを受信する(1001)。通信プロトコルスタック802はデータパケットをネットワークインターフェース801から取得し(1002)、シーケンス番号1の確認応答である[ACK 1]をネットワークインターフェース801に送出する(1003)。ネットワークインターフェース801は、送信側端末110に[ACK 1]を送信する(1005)。通信プロトコルスタックは、シーケンス番号1のパケットデータを受信側アプリケーション122に送信する(1004)。
次にシーケンス番号2のパケットが損失(1006)、続いて送信側端末110からはシーケンス番号3のパケットがネットワークインターフェース801に到達したとする(1007)。通信プロトコルスタック802はシーケンス番号3のデータパケットをネットワークインターフェース801から取得し(1008)、まだシーケンス番号2のデータパケットを受信していないことから、シーケンス番号1のDuplicated ACKと呼ばれる[Dup ACK 1]をネットワークインターフェース801に送出する(1009)。ネットワークインターフェース801は、送信側端末110に[Dup ACK 1]を送信する(1010)。通信プロトコルスタック802は、シーケンス番号2のデータパケットを受信していないことからシーケンス番号3のパケットのデータを受信側アプリケーション122に送信することはしない。
ここで、パケット監視部803は、ネットワークインターフェース801からDuplicated ACKが送出されたこと(1009, 1010の処理)を検出すると(1011)、ACK生成部804に、Duplicated ACKの生成を要求する(1012)。ACK生成部804は、検出したDuplicated ACKに加えて幾つのDuplicated ACKが送信側端末に届けば、再送制御及び輻輳制御が発生するかを算出し、その算出した数の分だけのダミーのDuplicated ACKを生成する。ここでの例では、3つのDuplicated ACKが届くと、再送制御及び輻輳制御が発生することから、2個のダミーのDuplicated ACKを生成し、送出することになる(1013〜1016)。
送信側端末110では、再送制御のトリガーとなるDuplicated ACKが到達したとき(1016)に、シーケンス番号2のパケットが損失したことが検知され、シーケンス番号2のパケットが再送される(1017)。また、再送制御と同時に輻輳制御も働く。ネットワークインターフェース801がシーケンス番号2のパケットを受信すると、通信プロトコルスタック802はパケットを取得し(1018)、これまでにシーケンス番号3までのパケットを受信完了したことになるため、このシーケンス番号3を付したACKを生成してネットワークインターフェース801を通じて、送信側端末110に送出する(1021,1022)。通信プロトコルスタック802は、既に受信完了しているシーケンス番号3までのパケットのデータを、受信側アプリケーション122に送信する(1019, 1020)。
次に本実施の形態の効果について説明する。本実施の形態では、パケットが損失したことを、パケット監視部がネットワークインターフェース部においてDuplicated ACKを監視することで検出すると、直ちに再送制御が実施されるよう、ACK生成部が複数個のDuplicated ACKを追加生成し送信側端末に送信することで、従来よりも早期にロスパケットの再送が実行される。このため、ロスパケットが再送されるまでの時間を従来よりも削減できる。映像や音声等を再現するアプリケーションの場合を例とすると、映像や音声を途切れることなく再生することが可能となる。
さらに本実施の形態では、Duplicated ACKの送信を促進する方向であることから、通信プロトコルの輻輳制御を抑制しない。そのため、リアルタイム性を要求するアプリケーションにおいて再送制御と輻輳制御を伴う通信プロトコルでデータを送受信した場合に、輻輳制御を損なうことなく、再送制御に伴うデータを再現するまでの遅延を削減できる。
また、本実施の形態では、パケット監視部が、通信プロトコルスタックを介さずに直接ネットワークインターフェースを監視しており、かつ新たに生成されるDuplicated ACKも直接ネットワークインターフェースに送信されている。つまり通信プロトコルに修正を加える必要がない。通信プロトコルは、コンピュータのオペレーションシステムの一部(カーネル)として実装されていることも多く、修正を施すことが困難なケースも多いが、本実施の形態の構成を取れば、通信プロトコルに手を入れる必要がない。
(第4の実施の形態)
次に本発明の第4の実施の形態について、図面を参照して説明する。
図11は、本発明に係る受信側通信装置の第4の実施の形態の構成図である。本発明に関わる受信側通信装置(以下、通信装置1100)は、ネットワークインターフェース1101、通信プロトコルスタック1102、パケット監視部1103、ダミーパケット生成部1104、ACK生成部1105を含む。
これらの手段は次のように動作する。ネットワークインターフェース1101は、図1に示されるネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック1102はパケットの送受信を管理し、通信プロトコルの動作にしたがってパケットのデータを図1で示される受信側アプリケーション122に送信する。パケット監視部1103は、ネットワークインターフェース1101を経由して送受信されるパケットを監視し、Duplicated ACKの送信を検出する。Duplicated ACKの送信を検出するとパケット監視部1103は、ダミーパケット生成部1104及びACK生成部1105に通知を行う。ダミーパケット生成部1104は、パケット監視部1103の通知を受けると、ロスパケットのダミーパケットを生成し、ネットワークインターフェース1101を通じて、通信プロトコルスタック1102に送信する。ACK生成部1105は、パケット監視部1103の通知を受けると、輻輳制御を発生させるために必要な個数のDuplicated ACKを生成し、ネットワークインターフェース1101に送信する。
次に図11の構成図、および図12のフローチャートを参照して、本実施の形態の全体の動作について詳細に説明する。通信装置1100のパケット監視部1103は、ネットワークインターフェース1101を経由して送受信されるパケットを監視する (図12のS401)。パケット監視部1103は、送受信されるパケットからDuplicated ACKの送信を検出し、Duplicated ACKが検出された場合、パケット監視部1103からダミー生成部1104及びACK生成部1105に通知が行われる。(図12のS402)。ダミーパケット生成部1104はロスパケットのダミーパケットを生成し、ネットワークインターフェース1101を通じて、通信プロトコルスタックに送信する(図12のS403)。合わせてACK生成部1105は複数個のDuplicated ACKの生成を行い、ネットワークインターフェース1101を通じて、送信側端末110に送信する(図12のS404)。このとき、ACK生成部1105は、送信側端末110が再送制御及び輻輳制御を実行するために必要なだけのDuplicated ACKを少なくとも生成して追加する。
次に本発明の実施の形態の動作を図13のシーケンス図に示される、通信プロトコルとしてTCP/IPとした場合の一例を基にして具体的に説明する。再送制御及び輻輳制御は、同一シーケンス番号のDuplicated ACKを3つ以上、受け取ったときに発生すると設定されているとする。
通信装置のネットワークインターフェース1101は、図1に示す送信側端末110からシーケンス番号1のデータパケットを受信する(1301)。通信プロトコルスタック1102はデータパケットをネットワークインターフェース1101から取得し(1302)、シーケンス番号1の確認応答 [ACK 1]をネットワークインターフェース1101に送出する(1303)。ネットワークインターフェース1101は、送信側端末110に[ACK 1]を送信する(1305)。通信プロトコルスタック1102は、シーケンス番号1のパケットデータを図1に示す受信側アプリケーション112に送信する(1304)。
次にシーケンス番号2のパケットが損失し、続いて送信側端末110からはシーケンス番号3のパケットがネットワークインターフェース1101に到達したとする(1306,1307)。通信プロトコルスタック1102はシーケンス番号3のデータパケットをネットワークインターフェース1101から取得し(1308)、まだシーケンス番号2のデータパケットを受信していないことから、シーケンス番号1のDuplicated ACK である[Dup ACK 1]をネットワークインターフェース1101に送出する(1309)。ネットワークインターフェース1101は、送信側端末110に[Dup ACK 1]を送信する(1310)。通信プロトコルスタック1102は、シーケンス番号2のデータパケットを受信していないことからシーケンス番号3のパケットデータをアプリケーションに送信することはしない。
ここで、パケット監視部1103は、ネットワークインターフェース1101からDuplicated ACKが送出されたこと(1309,1310の処理)を検出すると(1311)、ダミーパケット生成部1104にダミーパケットの生成、ACK生成部1105に複数個のDuplicated ACKの生成を要求する(1312,1313)。ダミーパケット生成部1104は、シーケンス番号2のロスパケットのダミーパケットを生成し、ネットワークインターフェース1101を通じて、通信プロトコルスタック1102に送信する(1318)。
通信プロトコルスタック1102は、シーケンス番号2のパケットが受信できたと判断し(1319)、シーケンス番号2とシーケンス番号3のパケットのデータを受信側アプリケーション122に送信する(1320, 1321)。ダミーパケットの生成直後、または直前にACK生成部1105は、検出したDuplicated ACKに加え、幾つのDuplicated ACKが送信側端末に届けば、再送制御及び輻輳制御が発生するかを算出し、その算出した数の分だけのDuplicated ACKを生成する(1314,1316)。ここでの例では、3つのDuplicated ACKが届くと、再送制御が発生することから、2個のDuplicated ACKを追加生成して、ネットワークインターフェース1101に送出することになる(1314〜1317)。
一方、通信プロトコルスタック1102はダミーパケットを取得すると(1319)、これまでにシーケンス番号3までのパケットを受信完了したことになるため、このシーケンス番号3を付した[ACK 3]を生成してネットワークインターフェース1101に送出する(1323)。
送信側端末110では、再送制御のトリガーとなる所定の個数のDuplicated ACK、ここでの例では3個のDuplicated ACKが到達したとき(1317)に、シーケンス番号2のパケットが損失したことが検知され、シーケンス番号2のパケットが再送される(1322)。送信側では、再送制御と同時に輻輳制御も実行される。ただし、この時点ではシーケンス番号3の[ACK 3]は送信側に届いてなかったものとして説明を行っている。
ネットワークインターフェース1101が再送されたシーケンス番号2のパケットを受信すると(1322)、通信プロトコルスタック1102はシーケンス番号2のパケットを取得するが(1325)、これまでにシーケンス番号3までのパケットを受信完了したことになっているため、シーケンス番号3のパケットまで受信したことを示す[ACK 3]を生成してネットワークインターフェース1101に送出する(1326)。また、このとき、通信プロトコルスタック1102は、既に受信完了していると判断した1325で受信したシーケンス番号2のパケットを廃棄する。
次に本実施の形態の効果について説明する。本実施の形態では、パケットが損失したことを、パケット監視部がネットワークインターフェース部においてDuplicated ACKを監視することで検出すると、直ちに再送制御が実施されるよう、ACK生成部が複数個のDuplicated ACKを生成し、また、送信側端末に送信するのと同時にダミーパケット生成部がロスパケットのダミーパケットを生成する。そのため、ロスパケットの再送を待たずに後続の受信済みのパケットのデータを受信側アプリケーションが受信することができるため、第3の実施の形態よりもデータの再現までの遅延を削減することができる。より具体的に説明すれば、実施の形態3に記載したやり方では、図10の1019、1020のタイミングでしか受信側アプリケーションがパケットのデータを受信できなかったのが、1320、1321のタイミングでデータを受信できるようになり、実施の形態3と比較し、遅延を削減することが可能となる。
(第5の実施の形態)
次に本発明の第5の実施の形態について、図面を参照して説明する。
本発明に係る受信側通信装置の第5の実施の形態の構成は、図11に示される第4の実施の形態の構成と同じである。本発明に関わる受信側通信装置(以下、通信装置1100)は、ネットワークインターフェース1101、通信プロトコルスタック1102、パケット監視部1103、ダミーパケット生成部1104、ACK生成部1105を含む。
これらの手段は次のように動作する。ネットワークインターフェース1101は、図1に示すネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック1102はパケットの送受信を管理する。パケット監視部1103は、ネットワークインターフェース1101を経由して送受信されるパケットを監視し、パケットのシーケンス番号を監視する。パケットのシーケンス番号の順序性が崩れたとき、つまりパケットのシーケンス番号が1つ順に増加しておらず、シーケンス番号が連続していない、または大きいシーケンス番号のパケットが先に到着する、などが観測された場合、パケット監視部1103は、ダミーパケット生成部1104に本来受信すべきシーケンス番号のダミーパケットの生成を要求する。ダミーパケット生成部1104は、ダミーパケットを生成し、ネットワークインターフェース1101を通じて、通信プロトコルスタック1102に送信する。
また、パケット監視部1103は順序性が崩れた、つまり、正しい順番で届かなかったパケットが、その次に連続的に届くパケット、例えば、通信プロトコルがTCPであれば、輻輳制御及び再送制御の判断に必要となるDuplicated ACKの個数、一般的には3個以上、が必要になるため、既に到着したパケットに加え、その次に到着する2個のパケットに、まだ到着していないパケットが含まれるかどうかを監視する。もし、該当するパケットが含まれていなければ、パケット監視部1103は、パケット消失が発生したと判断し、ACK生成部1105に複数個のDuplicated ACKの生成を要求する。
ACK生成部1105は、送信側端末に輻輳制御を発生させるために必要となるDuplicated ACKを複数個、標準的なTCPの実装では、3個以上のDuplicated ACKを生成し、送信側端末に送信する。送信側端末は3個以上のDuplicated ACKを受信するため、再送制御及び輻輳制御を実施する。
次に、本実施の形態の全体の動作について、図11の構成図および図14のフローチャートを参照して詳細に説明する。
パケット監視部1103は、ネットワークインターフェース1101を経由して送受信されるパケットのシーケンス番号を監視する(図14のS501)。パケットのシーケンス番号の順序性が崩れた場合、例えば、パケットのシーケンス番号が1つ順に増加しないで到着する、または大きいシーケンス番号のパケットが先に到着する、などが観測された場合、パケット監視部1103はダミーパケット生成部1104にダミーパケットの生成を要求し(図14のS502)、ダミーパケット生成部1104はS502で未到着パケット、つまり、本来シーケンスの順序に沿って受信されるべきパケットで受信できていないパケット、と観測されたシーケンス番号のダミーパケットを、ネットワークインターフェース1101を通じて、通信プロトコルスタック1102に送信する(図14のS503)。
パケット監視部1103は、未到着パケットが次に連続して到着するパケット、例えば、TCPであれば、シーケンス番号通りにパケットが到着しない可能性があるため、TCPでは複数回、一般には3回のパケットを受信する間にシーケンス通りのパケットが到着することが期待されており、その間にパケットが到着しない場合のみ、再送制御及び輻輳制御を行うため、既に到着したパケットに加え、その次に到着する2個のパケット、つまり、連続して受信する3個のパケットに含まれるかどうかを監視する(図14のS504)。
該当するパケットが含まれない場合、パケット監視部1103は、ACK生成部1105にDuplicated ACKの生成を要求し、ACK生成部1105はその時点で最後に受信したパケットが損失したと仮定し、その旨を示す複数個のDuplicated ACK、例えば、TCPの場合、再送制御及び輻輳制御が実施される3個以上のDuplicated ACK、を生成し、送信者側端末110に送信する(図14のS505)。以降、図14のステップS501からS505を繰り返す。また、図14のステップS502でパケットのシーケンス番号の順序性が保たれていた場合も、ステップS501からS505を繰り返す。
次に本発明の実施の形態の動作を図15のシーケンス図に示される、通信プロトコルをTCP/IPとした場合の一例を基にして具体的に説明する。輻輳制御及び再送制御は、同一シーケンス番号のDuplicated ACKを3つ受け取ったときに発生すると設定されているとする。
ネットワークインターフェース1101は、送信側端末110から送信されたシーケンス番号1のパケットを受信する(1501)。ネットワークインターフェース1101が受信したデータは通信プロトコルスタック602に渡され(1502)、パケット監視部1103は、1501で受信したパケットをスヌープし、シーケンス番号を確認する(1503)。通信プロトコルスタック1102は、1502で受信したデータを受信側アプリケーション122へ渡す (1504)。
通信プロトコルスタック1102はデータを受信したことを意味するACKパケット[ACK 1]を、ネットワークインターフェース1101を通じて、送信側端末に通知する(1505,1506)。本シーケンスで示す例においては、次に送信側端末110から送信されるシーケンス番号2のパケットが伝送中に何らかの原因により損失したと仮定する(1507)。送信側端末110は続けてシーケンス番号3のパケットを送信する(1508)。ネットワークインターフェース1101はシーケンス番号3のパケットを受信し、通信プロトコルスタック1102に送信する(1509)。通信プロトコルスタック1102では、シーケンス番号2のパケットを受信していないため、受信側アプリケーション122にパケットを渡すことは出来ず、同時にシーケンス番号2のデータが届いていないことを通知するために[Dup ACK 1]のパケットを送信側端末110に通知する(1511, 1512)。
パケット監視部1103は、ネットワークインターフェース1101が受信したシーケンス番号3のパケットをスヌープし、シーケンス番号のチェックを行う(1510)。パケット監視部1103はシーケンス番号の欠落を検出し、欠落したシーケンス番号2を記憶しておくと同時に、ダミーパケット生成部1104にダミーパケットの生成を要求する(1513)。ダミーパケット生成部1104はシーケンス番号2のパケットに該当するダミーパケットを生成し、ネットワークインターフェース1101を通じて、通信プロトコルスタック1102に送信する(1514,1515)。
通信プロトコルスタック1102はシーケンス番号2のパケットを受信したと判断したことから、シーケンス番号2及び3のデータを受信側アプリケーション122に渡す(1516,1517)。通信プロトコルスタック1102は、データを受信したことを示す[ACK 3]を送信側端末に送信する(1518,1519)。続けて、送信側端末はシーケンス番号4のパケットを送信する(1520)。
通信プロトコルスタック1102はシーケンス番号4のデータをネットワークインターフェース1101から受け取り、受信側アプリケーション122に渡し(1521,1523)、シーケンス番号4のパケットに対する確認応答である[ACK 4]を送信側端末110に送信する(1524,1525)。パケット監視部1103は、ネットワークインターフェース1101のパケットをスヌープし、ネットワークインターフェース1101を通じて得たパケットのシーケンス番号が4であることから、シーケンス番号2のパケットが届いていないことを確認する(1522)。
送信側端末がシーケンス番号5のパケットを送信する。通信プロトコルスタック1102は通常通りの振る舞いを行う(1527,1529,1531)。パケット監視部1103はネットワークインターフェース1101のパケットをスヌープし、ネットワークインターフェース1101を通じて得たパケットのシーケンス番号が5であることからシーケンス番号2のパケットが届いていないことを確認し、連続して受信する3個のパケットにシーケンス番号2のパケットが含まれていないことから、パケットの損失が発生したと判断する(1528)。パケット監視部1103はACK生成部1105にACKの生成を要求する(1530)。ACK生成部1105は、シーケンス番号が5のパケットがロスしたとし、その旨を示す[ACK 5]を輻輳制御が発生するために必要な個数、本シーケンスではTCPの実装で多く採用されている3個、を生成し、送信側端末に送信する(1533,1534,1535,1536,1537,1538)。送信側端末はDuplicated ACKを3個以上受信したため、パケット損失が発生したと判断し、輻輳制御を実施し、データ送信を継続する。
次に、本実施の形態によるさらなる効果について説明する。本実施の形態では、パケットのシーケンス番号の順序性が崩れた場合でも、その次に連続的に届くパケットのシーケンス番号を確認し、動作するため、パケットの到着順序が狂った場合でも輻輳制御及び再送制御の実施を抑制することが出来る。
(第6の実施の形態)
次に本発明の第6の実施の形態について、図面を参照して説明する。
図16は、本発明に係る受信側通信装置の第6の実施の形態の構成図である。本発明に関わる受信側通信装置(以下、通信装置1600)は、ネットワークインターフェース1601、通信プロトコルスタック1602、パケット監視部1603、再送可否判断部1604、ダミーパケット生成部1605、ACK生成部1606、を含む。これらの手段は次のように動作する。
ネットワークインターフェース1601は、図1に示すネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック1602はパケットの送受信を管理する。パケット監視部1603は、ネットワークインターフェース1601を経由して送受信されるパケットを監視し、パケットのシーケンス番号を監視する。パケットのシーケンス番号の順序性が崩れたとき、つまりパケットのシーケンス番号が1つ順に増加しないで、シーケンス番号が連続していない、または大きいシーケンス番号のパケットが先に到着する、などが観測された場合、パケット監視部1603は、再送可否判断部1604に通知する。再送可否判断部1604は、その内部に再送可否の必要性を判断するフラグ、再送可否判断フラグを有しており、パケット監視部1603からの通知を受けた際、再送可否判断フラグがセットされている場合、ダミーパケット生成部1605に通知を行い、再送可否判断フラグがセットされていない場合、ACK生成部1606に通知を行う。ダミーパケット生成部1605は、再送可否判断部1604からの通知を受け、ダミーパケットを生成し、ネットワークインターフェース1601を通じて、通信プロトコルスタック1102に送信する。ACK生成部1606は、再送可否判断部1604からの通知を受け、Duplicated ACKを複数個生成し、ネットワークインターフェース1601を通じて、送信側端末に送信する。
次に、本実施の形態の全体の動作について、図16の構成図および図17のフローチャートを参照して詳細に説明する。
パケット監視部1603は、ネットワークインターフェース1601を経由して送受信されるパケットのシーケンス番号を監視する(図17のS601)。
パケットのシーケンス番号の順序性が崩れた場合、例えば、パケットのシーケンス番号が1つ順に増加しないで到着する、または大きいシーケンス番号のパケットが先に到着する、などが観測された場合、パケット監視部1603は再送可否判断部1604に通知する(図17のS602)。また、順番通りに届いている場合、次のパケットの到着に備える。
パケット監視部1603の通知を受けた再送可否判断部1604は、自身が有する再送可否判断フラグを確認し、再送可否判断フラグがセットされていない場合、ダミーパケット生成部1605及びACK生成部1606に通知し、再送可否判断フラグがセットされている場合は、ダミーパケット生成部1605にのみ通知を行う(図17のS603)。
再送可否判断部1604からの通知を受けたACK生成部1606は、輻輳制御及び再送制御の判断に必要となるDuplicated ACKの個数、一般的なTCPであれば、3個以上のDuplicated ACKパケットを生成し、ネットワークインターフェース1601を通じて、送信側端末110に通知し、また、再送可否判断フラグのセットを行う(図17のS604)。
再送可否判断部1605からの通知を受けたダミーパケット生成部1605は、本来受信すべきシーケンス番号を有するダミーパケットを生成し、ネットワークインターフェース1601を通じて、通信プロトコルスタック1602に送信する。以降、S601からS605を繰り返す。
再送可否判断フラグには再送可否判断部1604により、有効期間が設定される。有効期間については、TCP/IPコネクションの形成時や事前に測定されるRTT(Round Trip Time:送信側端末から受信側端末へのパケット送信に要する時間)等のパラメータから算出される数値、例えば、測定されたRTTの3倍の時間等、を採用することなどができる。また、再送可否判断フラグは、再送可否判断部1604がダミーパケット生成部1605及びACK生成部1606に通知をする際に設定され、有効期間が経過すると、再送可否判断フラグはリセット(セットされていない状態に)されるとする。
次に本発明の実施の形態の動作を図18のシーケンス図に示される、通信プロトコルをTCP/IPとした場合の一例を基にして具体的に説明する。輻輳制御及び再送制御は、同一シーケンス番号のDuplicated ACKを3つ受け取ったときに発生すると設定されているとする。
ネットワークインターフェース1601は、図1に示す送信側端末110から送信されたシーケンス番号1のパケットを受信する(1801)。ネットワークインターフェース1601が受信したデータは通信プロトコルスタック1602に渡され(1802)、パケット監視部1603は、1801で受信したパケットをスヌープし、シーケンス番号を確認する(1803)。
通信プロトコルスタック1602は、1802で受信したデータを図1に示す受信側アプリケーション122へ渡す (1804)。 通信プロトコルスタック1602はデータを受信したことを意味するACKパケット、ここではシーケンス番号1のパケットを受信したことを意味する[ACK 1]を、ネットワークインターフェース1601を通じて、送信側端末110に通知する(1805,1806)。
本シーケンスでは、次に送信側端末110から送信されるシーケンス番号2のパケットが伝送中に何らかの原因により損失したと仮定する(1807)。送信側端末110は続けてシーケンス番号3のパケットを送信する(1808)。通信プロトコルスタック1602はネットワークインターフェース1601からシーケンス番号3のデータを受信するが、シーケンス番号2のデータを受信できていないため、その旨を通知するパケット、つまり、Duplicated ACKと呼ばれるシーケンス番号1のデータまでしか受け取っていないことを示す[Dup ACK 1]を送信側端末110に送信する(1809,1811,1812)。
パケット監視部1603は、ネットワークインターフェース1601を監視し、シーケンス番号2のパケットが損失していることを検出する(1810)。パケット監視部1603は、再送可否判断部1604に通知を行う(1813)。再送可否判断部1604は、本シーケンスでは当初、再送可否判断フラグがセットされていないことを想定するとし、再送可否判断フラグがセットされていないことから、ACK生成部1606及びダミーパケット生成部1605に通知を行う(1814,1815)。
ACK生成部1606は、複数個、本シーケンスでは一般的なTCPの実装で採用されている3個以上のDuplicated ACKを生成し、送信側端末110に送信する(1816,1817,1818,1819,1820,1821)。また、ダミーパケット生成部1605は、未到着のシーケンス番号2のパケットに代わるダミーパケットを生成し、ネットワークインターフェース1601を通じて、通信プロトコルスタック1602に通知する(1822,1823)。通信プロトコルスタック1602は、シーケンス番号2のデータを受信したことから、シーケンス番号2及び3のデータを受信側アプリケーション122に送信し(1824,1825)、シーケンス番号3までのデータを受信したことを通知するため、[Dup ACK 3]のパケットを生成し、送信側端末110に通知する(1826,1827)。送信側端末110は、Duplicated ACKを3個以上連続で受信したため、輻輳制御及び再送制御を実行し、データ送信を継続する(1828,1829,1830,1831,1832)
。
ここで、送信側端末が送信したシーケンス番号4のパケットが損失したとする(1833)。送信側端末110はシーケンス番号5のパケットを送信する(1834)。パケット監視部1603はシーケンス番号4のパケットが損失していることを検出し(1836)、再送可否判断部1604に通知する(1837)。再送可否判断部1604は再送可否判断フラグを確認し、再送可否判断フラグがセットされていることから、ダミーパケット生成部1605にのみダミーパケットの生成を要求する(1838)。ダミーパケット生成部1605は、未到着のシーケンス番号4のパケットに代わるダミーパケットを生成し、ネットワークインターフェース1601を通じて、通信プロトコルスタック1602に通知する(1839,1840)。通信プロトコルスタック1602は、シーケンス番号4及び5のデータを受信し(1841,1842)、シーケンス番号5までのデータを受信したことを通知するため、[ACK 5]のパケットを生成し、送信側端末110に通知する(1843,1844)。
本実施の形態によるさらなる効果について説明する。パケットロスが断続的に発生する場合、パケットの欠落の度にDuplicated ACKを生成すると、輻輳制御が連続して発生するため、TCPとしてのパフォーマンスが大きく劣化してしまうが、本実施の形態のように、本来、Duplicated ACKが複数回送信されるのに要する時間、つまり、一般的なTCPではRTTの3倍の時間において、断続的に発生するパケットロスに関しては、Duplicated ACKの送信を抑制することで、輻輳制御の実施回数を低く抑え、TCPの大きなパフォーマンスの劣化を防止することが可能となる。
(第7の実施の形態)
次に本発明の第7の実施の形態について、図面を参照して説明する。
図19は、本発明に係る通信装置の第7の実施の形態の構成図である。本発明に関わる送信側通信装置1900は、ネットワークインターフェース1901、通信プロトコルスタック1902、パケット監視部1903、ACK生成部1904を含む。第1の実施の形態から第6の実施の形態とは異なり、これらの手段はデータを送信する側の送信側通信装置として機能する。その動作は以下に示すようになる。
ネットワークインターフェース1901は、図1に示すネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック1902は、図1に示す送信側アプリケーション112から、ネットワークインタフェース1901を通じて行われる、図1に示す受信側端末120へのパケットの送信を管理する。パケット監視部1903は、ネットワークインターフェース1901を経由して送受信されるパケットを監視し、Duplicated ACKの受信を検出する。Duplicated ACKの受信を検出すると、パケット監視部1903は、ACK生成部1904にDuplicated ACKの生成を要求する。ACK生成部1904は輻輳制御が発生するために必要な個数のDuplicated ACKを生成し、ネットワークインターフェース1901を通じて、通信プロトコルスタック1902に送信する。
次に、本実施の形態の全体の動作について図20のフローチャートを参照して詳細に説明する。
パケット監視部1903は、ネットワークインターフェース1901を経由して送受信されるパケットのシーケンス番号を監視する(S701)。パケット監視部1903は、Duplicated ACKの受信を検出すると、ACK生成部1904に通知を行う(S702)。ACK生成部1904は、複数個、例えば、一般的なTCP/IPでは、3個以上のDuplicated ACKを受信することで、輻輳制御及び再送制御が実施されるため、既に受信したDuplicated ACKを差し引いた2個以上、のDuplicated ACKを生成し、ネットワークインターフェース1901を通じて、通信プロトコルスタック1902に送信する(S703)。以降、S701からS703を繰り返す。S702において、Duplicated ACKが検出されなかった場合、パケット監視部1903は、次のパケットの到着に備える。
次に本発明の実施の形態の動作を図21のシーケンス図に示される、通信プロトコルをTCP/IPとした場合の一例を基にして具体的に説明する。輻輳制御及び再送制御は、同一シーケンス番号のDuplicated ACKを3個以上、受け取ったときに発生すると設定されているとする。
送信側の通信プロトコルスタック1902はネットワークインターフェース1901を通じて、受信側端末120へシーケンス番号1のデータを送信する(2101,2102)。受信側端末はパケットを受信したことを表す確認通知[ACK 1]を送信する(2103)。通信プロトコルスタック1902はネットワークインターフェース1901を通じて、受信側端末120の確認通知を受信する(2104)。パケット監視部1903は、ネットワークインターフェース1901を通じて、受信パケットの監視を行い、シーケンス番号1を受信した旨を示す確認応答[ACK 1]の受信を確認する(2105)。
通信プロトコルスタック1902が送信したシーケンス番号2のパケットがネットワーク伝送中に損失したとする(2106, 2107)。通信プロトコルスタック1902はシーケンス番号3のパケットを続いて送信する(2108, 2109)。受信側端末120はシーケンス番号2のパケットを受信できていないため、確認通知としてシーケンス番号1のDuplicated ACK([Dup ACK 1])を送信する(2110)。通信プロトコルスタック1902は、ネットワークインターフェース1901を通じて、確認通知[Dup ACK 1]を受信する(2111)。パケット監視部1903は、ネットワークインターフェース1901を通じて、確認通知 [Dup ACK 1]の受信を確認し、2105で受信した確認通知と同一であることから、パケットの損失を疑い、ACK生成部1904に通知を行い(2112, 2113)、シーケンス番号1のACKの生成を指示する。
通知を受け取ったACK生成部1904は、Duplicated ACKを複数個、本シーケンスでは、2個以上(一般的なTCP/IPでは、3個以上のDuplicated ACKを受信することで、輻輳制御及び再送制御が実施されるため、既に受信したDuplicated ACKを差し引いた2個以上)のシーケンス番号1までしか受け取っていない旨を示すDuplicated ACK [ACK 1]を生成し、ネットワークインターフェース1901を通じて、通信プロトコルスタック1902に送信する(2114,2115,2116,2117)。
通信プロトコルスタック1902は、シーケンス番号1のDuplicated ACKを3個以上受信したため、輻輳制御を行い、また、同時にシーケンス番号2のパケットを再送する。受信側端末120はシーケンス番号3までのデータを受信したことを表す確認通知 [ACK 3]を送信する(2120,2121)。
本実施の形態による効果について説明する。送信側において、Duplicated ACKの受信が検出された際に、輻輳制御及び再送制御の実施に必要な複数個のDuplicated ACKを生成し、輻輳制御及び再送制御を行うことで、従来よりも早期にロスパケットの再送が行われるため、映像や音声等を再現するアプリケーションの場合を例とすると、映像や音声を途切れることなく再生することが可能となる。
さらに、本実施の形態では、Duplicated ACKの送信を促進する方向であることから、通信プロトコルの輻輳制御を抑制しない。そのため、リアルタイム性を要求するアプリケーションにおいて再送制御と輻輳制御を伴う通信プロトコルでデータを送受信した場合に、輻輳制御を損なうことなく、再送制御に伴うデータを再現するまでの遅延を削減できる。
また、本実施の形態では、パケット監視部が、通信プロトコルスタックを介さずに直接ネットワークインターフェースを監視しており、かつ新たに生成されるDuplicated ACKも直接ネットワークインターフェースに送信されている。つまり通信プロトコルに修正を加える必要がない。通信プロトコルは、コンピュータのオペレーションシステムの一部(カーネル)として実装されていることも多く、修正を施すことが困難なケースも多いが、本実施の形態の構成を取れば、通信プロトコルに手を入れる必要がない。
(第8の実施の形態)
次に本発明の第8の発明を実施するための最良の形態について、図面を参照して説明する。
図22は、本発明に係る通信装置の第8の実施の形態の構成図である。本発明に関わる通信装2200は、ネットワークインターフェース2201、通信プロトコルスタック2202、パケット監視部2203、再送可否判断部2204、ACK生成部2205を含む。第7の実施の形態と同様に、これらの手段はデータを送信する側の通信装置として機能し、次のように動作する。
ネットワークインターフェース2201は、ネットワーク130と接続し、パケットの送受信を行う。通信プロトコルスタック2202は、図1に示す送信側アプリケーション112から、ネットワークインタフェース1901を通じて行われる、図1に示す受信側端末120へのパケットの送信を管理する。パケット監視部2203は、ネットワークインターフェース2201を経由して送受信されるパケットを監視し、Duplicated ACKの送信を検出した場合、再送可否判断部2204に通知する。
再送可否判断部2204は、一定期間有効な再送可否判断フラグを有しており、再送可否判断フラグがセットされているかを確認する。再送可否判断フラグがセットされていない場合、ACK生成部2205にDuplicated ACKの生成要求を通知する。再送可否判断フラグがセットされていない場合、再送可否判断部2204はそのパケットに関し、特別な処理は行わず、次のパケットの到着に備える。 ACK生成部2205は輻輳制御が発生するために必要な個数のDuplicated ACKを生成し、ネットワークインターフェース2201を通じて、通知プロトコルスタック2202に送信する。
再送可否判断フラグの有効期間については、TCP/IPコネクションの形成時や事前に測定されるRTT等のパラメータから算出される数値、例えば、測定されたRTTの3倍の時間等、を採用し、また、再送可否判断フラグは、再送可否判断部2204がパケット監視部2203からの通知を受信した際、再送可否判断フラグがセットされていない場合に設定され、有効期間が経過すると、生成時と同様、再送可否判断部2204により再送可否判断フラグはリセット(セットされていない状態に)されるとする。
次に、本実施の形態の全体の動作について図22及び図23を参照し、詳細に説明する。
パケット監視部2203は、ネットワークインターフェース2201を経由して送受信されるパケットのシーケンス番号を監視する(S801)。パケット監視部2203は、受信しているパケットがDuplicated ACKであるか判断し(S802)、Duplicated ACKである場合、再送可否判断部2204へ通知し(S803)、Duplicated ACKでなければ、次のパケットの到着に備える(S804)。
再送可否判断部2204は、再送可否判断フラグがセットされているかを確認し、再送可否判断フラグがセットされていない場合、ACK生成部2205に通知を行い、再送可否判断フラグがセットされている場合は、次のパケットの到着に備える(S805)。 ACK生成部2205は、複数個、例えば、一般的なTCP/IPでは、3個以上のDuplicated ACKを受信することで、輻輳制御及び再送制御が実施されるため、既に受信したDuplicated ACKを差し引いた2個以上、のDuplicated ACKを生成し、ネットワークインターフェース2201を通じて、通信プロトコルスタック2202に送信する(S806)。以降、S801からS806を繰り返す。
次に図24のシーケンス図に基づき、本実施の形態の動作を説明する。送信側の通信プロトコルスタック2202はネットワークインターフェース2201を通じて、受信側端末へシーケンス番号1のデータを送信する(2401、2402)。受信側端末120はパケットを受信したことを表す確認通知[ACK 1]を送信する(2403)。通信プロトコルスタック2202はネットワークインターフェース2201を通じて、受信側端末120の確認通知を受信する(2404)。
パケット監視部2203は、ネットワークインターフェース2201を通じて、受信パケットの監視を行い、確認通知[ACK 1]の受信を確認する(2405)。通信プロトコルスタック2202が送信したシーケンス番号2のパケットがネットワーク伝送中に損失したとする(2406, 2407)。通信プロトコルスタック2202はシーケンス番号3のパケットを続いて送信する(2408, 2409)。受信側端末120はシーケンス番号2のパケットを受信できていないため、その旨を示す確認通知として[Dup ACK 1]を送信する(2410)。
通信プロトコルスタック2202は、ネットワークインターフェース2201を通じて、確認通知[Dup ACK 1]を受信する(2411)。パケット監視部2203は、ネットワークインターフェース2201を通じて、確認通知[ACK 1]の受信を確認し、先に受信した確認通知(2405)と同一であることから、パケットの損失を疑い、再送可否判断部2204に通知する(2413)。
再送可否判断部2204は、再送可否判断フラグがセットされているかどうかを確認する。本シーケンスでは、再送可否判断フラグはセットされていないとし、このとき、再送可否判断部2204はACK生成部2205に通知を行い、再送可否判断フラグをセットする(2414)。
通知を受け取ったACK生成部2205は、Duplicated ACKを複数個、本シーケンスでは、2個以上(一般的なTCP/IPでは、3個以上のDuplicated ACKを受信することで、輻輳制御及び再送制御が実施されるため、既に受信したDuplicated ACKを差し引いた2個以上)のシーケンス番号1までしか受け取っていない旨を示すDuplicated ACK [ACK 1]を生成し、ネットワークインターフェース2201を通じて、通信プロトコルスタック2202に送信する(2415,2416,2417,2418)。通信プロトコルスタック2202は、Duplicated ACKを3個以上受信したため、輻輳制御を行い、また、同時にシーケンス番号2のパケットを再送する(2419.2420)。
受信側端末120はシーケンス番号2及び3のデータを受信したことを表す確認通知[ACK 3]を通知する(2421,2422,2423)。次に通信プロトコルスタック2202が送信したシーケンス番号4のパケットがネットワーク伝送中に損失したとする(2424,2425)。
通信プロトコルスタック2202は引き続き、シーケンス番号5のパケットを送信する(2426,2427)。受信側端末120はシーケンス番号4のパケットを受信していないため、確認通知[ACK 3]を送信する(2428)。通信プロトコルスタック2202はネットワークインターフェース2201を通じて、確認通知[ACK 3]を受信する(2429)。パケット監視部2203はネットワークインターフェース2201を通じて監視している受信パケットから(2430)、確認通知[ACK 3]が重複していることを確認し、再送可否判断部2204に通知する(2431)。
再送可否判断部2204は、再送可否判断フラグがセットされているため、ACK生成部2205に対しては指示を発行しない。再送可否判断フラグがセットされている期間においては、パケット監視部2203及び再送可否判断部2204を含め、通信装置2200は同様の処理を繰り返す(2432から2446)。
本実施の形態による効果としては、第7の実施の形態による効果に加え、断続的にパケットロスが発生した場合、パケットロスの発生の度に複数個のDuplicated ACKを生成すると、輻輳制御が連続して実行されるため、TCPとしてのパフォーマンスが大きく劣化してしまうが、本実施の形態のように、一定時間内に断続的に発生するパケットロスに関して、Duplicated ACKの送信を抑制することで、輻輳制御の実施回数を低く抑え、TCPの大きなパフォーマンスの劣化を防止することが可能となる。