以下、図面を参照しながら本発明の実施の形態について説明する。
図1は、本発明を適用した通信システムの一実施の形態の構成を示すブロック図である。この通信システムにおいては、ネットワーク13に、送信装置11および受信装置12が接続され、相互に通信可能な状態となっている。
なお、ネットワーク13は、有線または無線の、通信回線、ネットワーク、またはインターネットなどからなる伝送路であり、所定の遅延時間で、送信装置11から送信されるパケットを受信装置12まで伝送する。
送信装置11は、受信装置12からの要求に応じた送信データを格納したパケットを、ネットワーク13を介して受信装置12に送信する。また、送信装置11は、TCP/IP通信中に受信した、送信データの受信確認応答としてのACKパケットを一定時間保持して、その後のACK受信処理を行うか否かを判定する。そして、送信装置11は、かかる判定結果に応じてACK受信処理を行う。
具体的には、図1に示すように、送信装置11は、ネットワークアプリケーション21、TCP/IP処理部22、送受信部23、およびACK保持部24を含むようにして構成される。
ネットワークアプリケーション21は、受信装置12等のネットワーク13に接続された機器に送信するための送信データを生成し、TCP/IP処理部22に供給する。
TCP/IP処理部22は、ネットワークアプリケーション21から供給される送信データを分割してパケットに格納するなどのプロトコル処理を行う。TCP/IP処理部22は、送信データを格納したパケットを、送受信部23に供給する。
送受信部23は、TCP/IP処理部22から供給されるパケットを、ネットワーク13を介して受信装置12に送信する。
また、送受信部23は、受信装置12から送信されてくる、送信データの受信確認応答としてのACKパケットを適宜受信し、ACK保持部24に供給する。
ACK保持部24は、送受信部23から供給されるACKパケットを、所定の時間保持するか、あるいはTCP/IP処理部22に渡すかを判定する。ACK保持部24は、ACKパケットを所定の時間保持すると判定した場合には、そのACKパケットを保持し、一方、ACKパケットをTCP/IP処理部22に渡すと判定した場合には、そのACKパケットをTCP/IP処理部22に渡す。
かかる判定の条件は、例えば、ACKパケットの保持数の最大数を定める最大ACK保持数、ACKパケットを保持する時間を定めるACK保持タイマ(ACK保持時間)、および、ACKパケットを保持する機能の有効・無効を定めるACK保持機能を設定することで、決定される。すなわち、ACK保持数、ACK保持タイマ、および、ACK保持機能の3つのパラメータを設定することで、ACKパケットが、所定の時間保持されるか、あるいは、TCP/IP処理部22に渡されるかが判定される。
例えば、ACK保持部24は、ACKパケットを保持している間に、連続する次のパケットを受信した場合、次のACKパケットを、最新のACKパケットとして保持して、ACK保持数をカウントするとともに、ACK保持タイマをセットする。そして、ACK保持部24においては、例えば、保持しているACKパケットに連続しない次のACKパケットを受信した場合、最新のACKパケットのACK保持タイマによるカウントが一定の時間を経過した場合、または、ACK保持数が最大ACK保持数に達した場合には、保持している最新のACKパケットが、TCP/IP処理部22に渡される。
なお、ACK保持数と、ACK保持タイマのパラメータであるが、送信データを受信する相手側のACKパケットの送信頻度や送信間隔を考慮した値が、相手側へのデータ転送が止まらない範囲内で設定される。また、ACK保持数およびACK保持タイマには、パラメータとして、静的な値を設定しもよいし、その値を動的に変化させてもよい。
また、ACK保持機能は、そのパラメータとして、有効が設定されている場合だけ、ACK保持部24によってACK保持処理が行われる。
TCP/IP処理部22には、ACK保持部24によって、ACKパケットをTCP/IP処理部22に渡すと判定された場合に、ACKパケットが供給され、TCP/IP処理部22は、ACKパケットの受信処理を行う。すなわち、TCP/IP処理部22は、ACK保持部24から供給されるACKパケットに格納された情報から、送信が完了したデータの範囲を認識し、送信済みとなった送信データを破棄する(通常のTCP/IP送信処理)。
また、TCP/IP処理部22は、必要に応じて、全送信データのACKパケットの確認が終了した後、ネットワークアプリケーション21に対して送信完了通知を行う。これにより、ネットワークアプリケーション21は、送信データの送信が完了したことを認識する。
以上のようにして、送信装置11は構成される。
一方、受信装置12は、ネットワーク13を介して送信装置11から送信されてきたパケットを受信する。受信装置12は、受信したパケットから送信データを抽出し、抽出した送信データを出力する。
図1に示すように、受信装置12は、TCP/IP処理部31および送受信部32を含むようにして構成される。
送受信部32は、ネットワーク13を介して、送信装置11から送信されてくる、送信データを格納したパケットを受信し、TCP/IP処理部31に供給する。
TCP/IP処理部31は、送受信部32から供給されるパケットを受け取って、そのパケットから送信データを抽出する。また、TCP/IP処理部31は、送信データの受信確認応答としてのACKパケットを送受信部32に供給する。
送受信部32は、TCP/IP処理部31から供給されるACKパケットを、ネットワーク13を介して、送信装置11に送信する。
以上のようにして、受信装置12は構成される。
以上のように構成される通信システムにおいては、送信データを格納したパケットを送信した送信装置11によって、受信確認応答としてのACKパケットが受信され、受信されたACKパケットのうち、最後に受信したACKパケットが保持され、所定のタイミングとなったとき、保持されていたACKパケットを用いたACKパケットの受信処理が行われる。
次に、図2のフローチャートを参照して、かかる送信装置11で行われる送信処理について説明する。
なお、図2の説明においては、説明を簡略化するために、送信データを格納したパケットを送信する場合において、TCPコネクションが確立される前の処理についての説明は省略し、送信装置11と受信装置12と間でのTCPコネクションが確立された後の処理について説明する。
ステップS1において、ネットワークアプリケーション21は、受信装置12に送信するための送信データを生成し、TCP/IP処理部22に供給する。
ステップS2において、TCP/IP処理部22は、ネットワークアプリケーション21から供給される送信データに対して、プロトコル処理を行う。TCP/IP処理部22は、送信データにプロトコル処理を施すことで得られる、送信データを格納したパケットを、送受信部23に供給する。
ステップS3において、送受信部23は、TCP/IP処理部22から供給されるパケットを、ネットワーク13を介して受信装置12に送信する。
すると、送信データを受信した受信装置12から受信確認応答としてのACKパケットが送信されてくるので、ステップS4において、送受信部23は、ネットワーク13を介して受信装置12から送信されてくるACKパケットを受信し、ACK保持部24に供給する。また、送受信部23は、ネットワーク13を介してパケットを受信すると、パケットの内容に関わらず、ACK保持部24に供給する。従って、ACK保持部24には、ACKパケットの他に、ネットワーク13を介して受信した他のパケットも入力される。
ステップS5において、ACK保持部24は、送受信部23から供給される各種のパケットのうちのACKパケットを、所定の時間保持するか、あるいはTCP/IP処理部22に渡すかを選択するACK保持処理を行う。
ここで、図3のフローチャートを参照して、ステップS5の処理に対応する、図1のACK保持部24によって実行されるACK保持処理の詳細について説明する。
ステップS11において、ACK保持部24は、送受信部23から供給されるパケットを取得する。ACK保持部24は、ステップS12において、ACK保持機能が有効であるか否かを判定し、ACK保持機能が無効であると判定された場合、ステップS19において、受信したパケットを保持せずに、TCP/IP処理部22に渡し、処理はステップS11に戻る。すなわち、ACK保持機能が無効に設定されている場合、ACKパケットは保持されずに、そのまま、TCP/IP処理部22に渡される。
一方、ステップS12において、ACK保持機能が有効であると判定された場合、ステップS13において、ACK保持部24は、取得したパケットが、TCP/IP通信を行っている通信相手からのACKパケットであるか否かを判定する。
ステップS13において、TCP/IP通信を行っている通信相手、すなわち、受信装置12からのACKパケットではないと判定された場合、ステップS19において、ACK保持部24は、受信したパケットを保持せずに、TCP/IP処理部22に渡し、処理はステップS11に戻る。一方、ACK保持部24は、ステップS13において、TCP/IP通信を行っている通信相手、すなわち、受信装置12からのACKパケットであると判定された場合、ステップS14において、既にACKパケットを保持しているか否かを判定する。
ステップS14において、まだACKパケットを保持していないと判定された場合、ステップS20において、ACK保持部24は、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いているか否かを判定する。
ステップS20において、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていないと判定された場合、ステップS21において、ACK保持部24は、取得した最新のACKパケットを保持するとともに、ACK保持タイマをセットする。すなわち、この場合、ACK保持部24においては、受信した最新のACKパケットがACK保持部24によって保持されるとともに、ACK保持タイマのカウントが開始される。その後、処理は、ステップS11に戻る。
一方、ステップS20において、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていると判定された場合、ステップS19において、ACK保持部24は、受信したパケットを保持せずに、そのまま、TCP/IP処理部22に渡し、処理はステップS11に戻る。なお、TCPオプション、ACKフラグ以外のTCPコントロールフラグとしては、例えば、PSHフラグやURGフラグなどがあり、それらのフラグが立っているときには、特殊な処理が要求されている場合であるので、ACKパケットは、ACK保持部24によって保持されずに、直ちに、TCP/IP処理部22に渡されることになる。
そして、ステップS14において、既にACKパケットを保持していると判定された場合、ステップS15において、ACK保持部24は、取得した最新のACKパケットが、保持しているACKパケットに連続するACKパケットであるか否かを判定する。
ステップS15において、取得した最新のACKパケットが、保持しているACKパケットには連続しないACKパケットであると判定された場合、ステップS22において、ACK保持部24は、保持しているACKパケットと、取得した最新のACKパケットをTCP/IP処理部22に渡し、処理はステップS11に戻る。すなわち、この場合、パケットロスが発生しているため、保持しているACKパケットと、最新のACKパケットの両方が、TCP/IP処理部22に渡される。
ステップS15において、取得した最新のACKパケットが、保持しているACKパケットに連続するACKパケットであると判定された場合、ステップS16において、ACK保持部24は、取得したACKパケットに、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いているか否かを判定する。
ステップS16において、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていると判定された場合、ステップS22において、ACK保持部24は、保持しているACKパケットと、最新のACKパケットをTCP/IP処理部22に渡し、処理はステップS11に戻る。一方、ステップS16において、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていないと判定された場合、ステップS17において、ACK保持部24は、ACKパケットの最大保持数に達しているか否かを判定する。
ステップS17において、ACKパケットの最大保持数に達していないと判定された場合、ステップS18において、ACK保持部24は、取得したACKパケットを、最新のACKパケットとして保持するとともに、ACK保持タイマをリセットして、ACK保持数をカウントする。すなわち、この場合、ACK保持数が最大ACK保持数には達していないので、取得したACKパケットが保持される。また、取得したACKパケットが、最新のACKパケットとして保持されるので、ACK保持部24によって、ACK保持タイマが再度セットされ、ACK保持数がインクリメントされる。
一方、ステップS17において、ACKパケットの最大保持数に達したと判定された場合、ステップS23において、ACK保持部24は、最新のACKパケットを、TCP/IP処理部22に渡すとともに、ACK保持タイマをリセットする。すなわち、この場合、ACK保持数が最大ACK保持数に達したので、取得した最新のACKパケットが、TCP/IP処理部22に渡される。また、最新のACKパケットがTCP/IP処理部22に渡されたので、ACK保持タイマが再度セットされる。ステップS18またはステップS23の処理が終了すると、処理は、ステップS11に戻る。
そして、ステップS18、ステップS19、ステップS21ないしステップS23の処理のいずれかが終了すると、処理は、ステップS11に戻り、上述した処理が繰り返される。すなわち、ステップS11ないしステップS23の処理が繰り返されることで、送信データの受信確認応答としてのACKパケットは、ACK保持部24に保持されるか、あるいはTCP/IP処理部22に渡されることになる。
なお、図3には図示していないが、ACK保持部24においては、最後にACKパケットを保持してから、ACK保持タイマで設定されたACKパケットの結合待ち時間が経過した場合には、保持しているACKパケットが、TCP/IP処理部22に渡される。
このように、ACK保持部24においては、ACKパケットを保持している間に、連続する次のACKパケットを取得した場合には、最新のACKパケットが保持され、ACK保持数がカウントされる。そして、連続しないACKパケットを取得した場合や、ACK保持タイマによるカウントが一定の時間を経過した場合、あるいは、ACK保持数が最大ACK保持数に達した場合には、ACK保持部24に保持されていた最新のACKパケットが、TCP/IP処理部22に渡される。
図2のフローチャートに戻り、ステップS6において、TCP/IP処理部22は、ACK保持部24からACKパケットが渡される任意のタイミングで、そのACKパケットに格納された情報から送信が完了したデータの範囲を認識して、送信済みのデータの破棄を行い、送信処理は終了する。
これにより、送信装置11においては、TCP/IP処理部22によるTCP/IP送信処理を行いながら、ACK保持部24によって、データ受信側から受け取るACKパケットのTCP/IP処理部22への供給を制限することが可能となるので、TCP/IP処理部22において行われるACKパケットの受信処理の処理量を軽減させることができる。このことは、特に、組み込みCPU(Central Processing Unit)等の非力なCPUを用いる場合において、顕著な効果として現れる。
ところで、図1に示した構成においては、ACK保持部24によって、ACKパケットを渡すか否かの判定処理が行われるとして説明したが、ACK保持部24は、TCP/IP処理部22からの要求に応じて、かかる判定処理を行ってもよい。そこで、次に、最新のACKパケットを保持する手段を有する送信装置11において、任意のタイミングで保持している最新のACKパケットの受信処理を行う構成について説明する。
図4は、本発明を適用した通信システムの一実施の形態の他の構成を示すブロック図である。
なお、図4では、図1と同様の箇所には、同一の符号が付してあり、処理が同じ部分に関しては、その説明は繰り返しになるので省略する。この例においては、図1と比較すると、TCP/IP処理部22およびACK保持部24の代わりに、TCP/IP処理部41およびACK保持部42がそれぞれ設けられている。
TCP/IP処理部41は、図1のTCP/IP処理部22と基本的に同様の機能を有しているが、任意のタイミングで、ACK保持部42に対してACK処理要求を通知する機能をさらに有している点が異なっている。
ここに、ACK処理要求とは、ACK保持部42に保持されている最新のACKパケットを取得する際に、TCP/IP処理部41からACK保持部42に通知される要求である。従って、TCP/IP処理部41は、ACK処理要求をACK保持部42に通知することで、ACK保持部42に保持されている最新のACKパケットを取得できる。
なお、このACK処理要求であるが、例えば、送信パフォーマンスを上げたい場合には、要求の頻度をまばらにする必要があり、また、通信のロバスト性を上げたい場合には、要求の頻度を密にする必要があるなど、それらはトレードオフの関係にある。また、送信側または受信側のハードウェアの性能や、ネットワークのスループットなどにも影響を受ける。従って、かかる要求頻度は、設計者により最適な値が適宜設定される。
ACK保持部42は、送受信部23から供給されるACKパケットを保持し、TCP/IP処理部41からのACK処理要求に応じて、保持している最新のACKパケットをTCP/IP処理部41に渡す。
なお、図4の送信装置11においては、ACK処理要求に応じてACKパケットがTCP/IP処理部41に渡されるため、最大ACK保持数およびACK保持タイマを設定する必要はないが、図1の送信装置11と同様に、それらのパラメータを設定する構成としても勿論よい。その場合、ACK保持部42においては、ACK処理要求が通知された場合と、保持しているACKパケットに連続しない次のACKパケットを受信した場合の他に、最新のACKパケットのACK保持タイマによるカウントが一定の時間を経過した場合、または、ACK保持数が最大ACK保持数に達した場合には、保持している最新のACKパケットがTCP/IP処理部41に渡される。
また、図4の通信システムにおいて、その他の構成は、図1に示した通信システムと同様である。
次に、図4の送信装置11で行われる送信処理について説明する。
かかる送信処理は、上述した、図2のフローチャートで説明した、図1の送信装置11による送信処理と比べると、ステップS5およびステップS6の処理が異なっている。従って、以下、図4のACK保持部42によって行われる、図2のステップS5に対応する処理と、図4のTCP/IP処理部41によって行われる、図2のステップS6に対応する処理について説明する。
すなわち、図2のステップS1乃至ステップS4の処理によって、図1の送信装置11と同様に、図4の送信装置11によって送信されたパケットが受信装置12に受信されると、受信確認応答としてのACKパケットが送信される。そして、ACKパケットは、送信装置11によって受信される。
すると、図2のステップS5に対応するACK保持処理として、図4のACK保持部42によって、図5のフローチャートに示す処理が実行される。すなわち、図5のフローチャートに示す処理は、図2のステップS5に対応する処理となる。
ステップS41ないしステップS44、ステップS48、およびステップS49においては、図3のステップS11ないしステップS14、ステップS19、およびステップS20と同様に、ACK保持部42によって、ACK保持機能が無効となっている場合、取得したパケットが通信相手からのACKパケットでない場合、および、通信相手からのACKパケットであって、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いている場合には、受信したACKパケットが、保持されずに、そのまま、TCP/IP処理部41に渡される。
一方、ステップS49において、まだACKパケットを保持していない場合であって、そのACKパケットに、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていないと判定された場合、ステップS50において、ACK保持部42は、受信したACKパケットを最新のACKパケットとして保持する。なお、ステップS50においては、図3のステップS21とは異なり、ACK保持タイマをセットする必要はないので、かかる処理は行われない。
ステップS45、ステップS46、およびステップS51においては、図3のステップS15、ステップS16、およびステップS22と同様に、ACK保持部42によって、取得したACKパケットが保持しているACKパケットに連続するACKパケットではない場合、保持しているACKパケットと、最新のACKパケットがTCP/IP処理部41に渡され、保持しているACKパケットに連続するACKパケットである場合、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いているか否かが判定される。そして、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていると判定された場合、ステップS51において、ACK保持部42は、保持しているACKパケットと、最新のACKパケットをTCP/IP処理部41に渡す。
一方、TCPオプション、ACKフラグ以外のTCPコントロールフラグが付いていないと判定された場合、ステップS47において、ACK保持部42は、受信したACKパケットを、最新のACKパケットとして保持する。なお、ステップS47においては、図3のステップS18の処理とは異なり、ACK保持タイマをセットしたり、ACK保持数をカウントする必要がないので、かかる処理は行われない。
このように、図4のACK保持部42においては、図1のACK保持部24と同様に、取得したACKパケットを保持する処理が行われるが、自ら保持しているACKパケットを渡す必要がないので、ACK保持タイマやACK保持数を制御する処理は行われないことになる。
図2のフローチャートに戻り、ステップS6において、図4のTCP/IP処理部41によって、ACKパケットの受信処理が行われるが、かかる処理としては、図6のフローチャートに示す処理が行われる。すなわち、図6のフローチャートに示す処理は、図2のステップS6に対応する処理となる。
ステップS61において、TCP/IP処理部41は、例えば、TCP/IP処理部41内で行われる一送信単位の処理が終了したときなどの任意のタイミングで、ACK処理要求をACK保持部42に通知する。すると、かかる要求に応じてACK保持部42からACKパケットが渡されるので、TCP/IP処理部41は、ACK保持部42に保持されていたACKパケットを取得する。
ステップS62において、TCP/IP処理部41は、ACK保持部42から渡されたACKパケットに格納された情報から送信が完了したデータの範囲を認識し、送信済みのデータを破棄するなどのACKパケットの受信処理を行う。その後、処理は、ステップS61に戻り、ステップS61およびステップS62の処理が繰り返される。
このように、ACKパケットの受信処理を行うTCP/IP処理部41からのACK処理要求に応じて、ACK保持部42がACKパケットをTCP/IP処理部41に渡すことで、ACKパケットの受信処理が行われる。
以上のように、本発明によれば、データ受信側から受け取るACKパケットのACKパケットの受信処理を行うブロックへの供給を制限することができるので、かかる処理の処理量を軽減させることが可能となり、結果として、TCP/IP通信速度を向上させることができる。このことは、特に、組み込みCPU等の非力なCPUを備えた機器において、より顕著な効果として現れる。
上述した一連の処理は、ハードウェアにより実行させることもできるし、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータ等に、プログラム記録媒体からインストールされる。
図7は、上述した一連の処理をプログラムにより実行するパーソナルコンピュータの構成の例を示すブロック図である。CPU111は、ROM(Read Only Memory)112、または記録部118に記録されているプログラムに従って各種の処理を実行する。RAM(Random Access Memory)113には、CPU111が実行するプログラムやデータ等が適宜記憶される。これらのCPU111、ROM112、およびRAM113は、バス114により相互に接続されている。
CPU111にはまた、バス114を介して入出力インターフェース115が接続されている。入出力インターフェース115には、マイクロホン等よりなる入力部116、ディスプレイ、スピーカ等よりなる出力部117が接続されている。CPU111は、入力部116から入力される指令に対応して各種の処理を実行する。そして、CPU111は、処理の結果を出力部117に出力する。
入出力インターフェース115に接続されている記録部118は、例えばハードディスクからなり、CPU111が実行するプログラムや各種のデータを記録する。通信部119は、インターネットやローカルエリアネットワーク等のネットワークを介して外部の装置と通信する。
また、通信部119を介してプログラムを取得し、記録部118に記録してもよい。
入出力インターフェース115に接続されているドライブ120は、磁気ディスク、光ディスク、光磁気ディスク、或いは半導体メモリ等のリムーバブルメディア121が装着されたとき、それらを駆動し、そこに記録されているプログラムやデータ等を取得する。取得されたプログラムやデータは、必要に応じて記録部118に転送され、記録される。
コンピュータにインストールされ、コンピュータによって実行可能な状態とされるプログラムを格納するプログラム記録媒体は、図7に示すように、磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)を含む)、光磁気ディスク、もしくは半導体メモリ等よりなるパッケージメディアであるリムーバブルメディア121、または、プログラムが一時的もしくは永続的に格納されるROM112や、記録部118を構成するハードディスク等により構成される。プログラム記録媒体へのプログラムの格納は、必要に応じてルータ、モデム等のインターフェースである通信部119を介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を利用して行われる。
なお、本明細書において、記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
なお、本発明の実施の形態は、上述した実施の形態に限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変更が可能である。
11 送信装置, 12 受信装置, 13 ネットワーク, 21 ネットワークアプリケーション, 22 TCP/IP処理部, 23 送受信部, 24 ACK保持部, 31 TCP/IP処理部, 32 送受信部, 41 TCP/IP処理部, 42 ACK保持部