(57)【要約】【課題】  送信バッファを用いる通信に係る処理時間を低減する。【解決手段】  通信装置１００は、通信路を介して通信装置２００へ送信されるべきデータのうち第１送信バッファの容量を超える分の超過データを第１送信バッファとは異なる第２送信バッファに記憶するか否かを、通信装置２００との間の通信状況に応じて決定する。また通信装置１００は、該超過データを第２送信バッファに記憶しないと決定した場合には、第１送信バッファに記憶された容量内データが通信装置２００へ送信された後に該超過データを第１送信バッファに記憶させる。そして通信装置１００は、第１送信バッファ又は第２送信バッファに記憶された該超過データを、該容量内データが通信装置２００へ送信された後に、通信路を介して通信装置２００へ送信する。【選択図】  図５
2018142850.tif 000002
【特許請求の範囲】
【請求項１】
通信装置であって、
前記通信装置と他の通信装置との間の論理的な通信路を介して前記他の通信装置へ送信されるべきデータを記憶するための第１送信バッファであって、前記通信路が確立される際に決定される容量の前記第１送信バッファと、
前記通信路を介して前記他の通信装置へ送信されるべきデータのうち前記第１送信バッファの容量を超える分の超過データを前記第１送信バッファとは異なる第２送信バッファに記憶するか否かを、前記通信装置と前記他の通信装置との間の通信状況に応じて決定する決定手段と、
前記超過データを前記第２送信バッファに記憶すると前記決定手段により決定された場合には、前記超過データを前記第２送信バッファに記憶させ、前記超過データを前記第２送信バッファに記憶しないと前記決定手段により決定された場合には、前記第１送信バッファに記憶された容量内データが前記他の通信装置へ送信された後に前記超過データを前記第１送信バッファに記憶させる記憶制御手段と、
前記記憶制御手段により記憶された前記超過データを、前記容量内データが前記他の通信装置へ送信された後に、前記通信路を介して前記他の通信装置へ送信する送信手段とを有する通信装置。
【請求項２】
前記通信装置から送信されたデータが前記通信路を介して前記他の通信装置により受信されたことを表す情報を受信する受信手段を有し、
前記送信手段は、前記記憶制御手段により記憶された前記超過データを、前記容量内データが前記他の通信装置により受信されたことを表す情報が前記受信手段により受信された後に、前記通信路を介して前記他の通信装置へ送信することを特徴とする請求項１に記載の通信装置。
【請求項３】
前記記憶制御手段は、前記超過データを前記第２送信バッファに記憶しないと前記決定手段により決定された場合には、前記容量内データが前記他の通信装置により受信されたことを表す情報が前記受信手段により受信された後に前記超過データを前記第１送信バッファに記憶させることを特徴とする請求項２に記載の通信装置。
【請求項４】
前記通信装置と前記他の通信装置との間の通信状況は、前記通信装置から送信されたデータであり且つ当該データが前記他の通信装置により受信されたことを表す情報が前記受信手段により受信されていないデータの量を含むことを特徴とする請求項２又は３に記載の通信装置。
【請求項５】
前記通信装置と前記他の通信装置との間の通信状況は、前記通信装置と前記他の通信装置との間の前記通信路の優先度、前記通信装置から前記他の通信装置へのデータ再送の状況、及び前記通信装置から前記他の通信装置へのデータ送信の可否の少なくとも何れかを含むことを特徴とする請求項１乃至４の何れか１項に記載の通信装置。
【請求項６】
前記記憶制御手段は、前記通信路を介して前記他の通信装置へ送信されるべきデータであって特定の通信路に対応づけされない記憶領域に記憶されたデータを、前記決定手段による決定に応じて前記第１送信バッファ又は前記第２送信バッファに記憶させることを特徴とする請求項１乃至５の何れか１項に記載の通信装置。
【請求項７】
前記通信路は、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）におけるコネクションであることを特徴とする請求項１乃至６の何れか１項に記載の通信装置。
【請求項８】
前記受信手段は、前記他の通信装置から前記情報としてＴＣＰにおけるＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）を受信することを特徴とする請求項２乃至４の何れか１項に記載の通信装置。
【請求項９】
通信装置を制御する制御方法であって、
前記通信装置と他の通信装置との間の論理的な通信路を介して前記他の通信装置へ送信されるべきデータを記憶するための第１送信バッファであって、前記通信路が確立される際に決定される容量の前記第１送信バッファを予約する予約工程と、
前記通信路を介して前記他の通信装置へ送信されるべきデータのうち前記第１送信バッファの容量を超える分の超過データを前記第１送信バッファとは異なる第２送信バッファに記憶するか否かを、前記通信装置と前記他の通信装置との間の通信状況に応じて決定する決定工程と、
前記超過データを前記第２送信バッファに記憶すると前記決定工程において決定された場合には、前記超過データを前記第２送信バッファに記憶させ、前記超過データを前記第２送信バッファに記憶しないと前記決定工程において決定された場合には、前記第１送信バッファに記憶された容量内データが前記他の通信装置へ送信された後に前記超過データを前記第１送信バッファに記憶させる記憶制御工程と、
前記記憶制御工程において記憶された前記超過データを、前記容量内データが前記他の通信装置へ送信された後に、前記通信路を介して前記他の通信装置へ送信する送信工程とを有する制御方法。
【請求項１０】
前記通信装置から送信されたデータが前記通信路を介して前記他の通信装置により受信されたことを表す情報を受信する受信工程を有し、
前記送信工程は、前記記憶制御工程において記憶された前記超過データを、前記容量内データが前記他の通信装置により受信されたことを表す情報が前記受信工程において受信された後に、前記通信路を介して前記他の通信装置へ送信することを特徴とする請求項９に記載の制御方法。
【請求項１１】
前記記憶制御工程は、前記超過データを前記第２送信バッファに記憶しないと前記決定工程において決定された場合には、前記容量内データが前記他の通信装置により受信されたことを表す情報が前記受信工程において受信された後に前記超過データを前記第１送信バッファに記憶させることを特徴とする請求項１０に記載の制御方法。
【請求項１２】
コンピュータを、請求項１乃至８の何れか１項に記載の通信装置の各手段として動作させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、送信バッファを用いて通信を行う技術に関する。
【背景技術】
【０００２】
従来、パケット通信における通信の信頼性を保障するために、ＡＣＫ（確認応答，Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）を用いる通信方式がある。例えば、インターネット通信などにおいて用いられる通信方式としてＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）がある。ＴＣＰ／ＩＰに従った通信を行う通信装置は、通信相手となる他の通信装置との間で論理的な通信路（コネクション）を確立し、通信路ごとに送信バッファを管理する。そして通信装置は、送信すべきデータのうち送信バッファの容量内に納まるデータを送信バッファに記憶して通信相手へ送信する。送信されたデータが通信相手により正しく受信されたことを示すＡＣＫを受信した場合、通信装置は、受信したＡＣＫに対応するデータを送信バッファから削除する。そして通信装置は、データの削除により生じた送信バッファの空き容量を利用して、残りの送信すべきデータを新たに送信バッファに記憶して送信する。一方、データの送信から所定時間以内にＡＣＫを受信しなかった場合、通信装置は、送信バッファに記憶されているデータを再度通信相手へ送信する。
【０００３】
特許文献１には、通信装置がＡＣＫの受信を待つことなく一度に送信可能なデータの量を、ネットワークの通信速度に応じて調整することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１６−１３６７０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、送信バッファを用いる従来の通信において、通信に係る処理時間が大きくなる場合が考えられる。例えば、通信装置が送信したデータに対するＡＣＫを受信してから次のデータを送信するまでの間に、当該次のデータを送信バッファに記憶するための処理時間を要することが考えられる。
【０００６】
本発明は上記課題に鑑み、送信バッファを用いる通信に係る処理時間を低減することを目的とする。
【課題を解決するための手段】
【０００７】
上記の課題を解決するため、本発明に係る通信装置は、例えば以下の構成を有する。すなわち、前記通信装置と他の通信装置との間の論理的な通信路を介して前記他の通信装置へ送信されるべきデータを記憶するための第１送信バッファであって、前記通信路が確立される際に決定される容量の前記第１送信バッファと、前記通信路を介して前記他の通信装置へ送信されるべきデータのうち前記第１送信バッファの容量を超える分の超過データを前記第１送信バッファとは異なる第２送信バッファに記憶するか否かを、前記通信装置と前記他の通信装置との間の通信状況に応じて決定する決定手段と、前記超過データを前記第２送信バッファに記憶すると前記決定手段により決定された場合には、前記超過データを前記第２送信バッファに記憶させ、前記超過データを前記第２送信バッファに記憶しないと前記決定手段により決定された場合には、前記第１送信バッファに記憶された容量内データが前記他の通信装置へ送信された後に前記超過データを前記第１送信バッファに記憶させる記憶制御手段と、前記記憶制御手段により記憶された前記超過データを、前記容量内データが前記他の通信装置へ送信された後に、前記通信路を介して前記他の通信装置へ送信する送信手段とを有する。
【発明の効果】
【０００８】
本発明によれば、送信バッファを用いる通信に係る処理時間を低減することができる。
【図面の簡単な説明】
【０００９】
【図１】通信システム１０の構成を説明するための図である。
【図２】通信装置１００のハードウェア構成について説明するためのブロック図である。
【図３】通信装置１００の機能構成について説明するためのブロック図である。本実施の形態に係る通信装置の構成を示すブロック図である。
【図４】データ記憶部１１２の構成について説明するための図である。
【図５】通信装置１００によるデータ送信に係る処理の一例について説明するためのフローチャートである。
【図６】通信装置１００による通信状況の判断に係る処理の一例について説明するためのフローチャートである。
【図７】通信装置１００による処理の一例について説明するためのフローチャートである。
【発明を実施するための形態】
【００１０】
以下、本発明の実施の形態について、図面を参照して説明する。
【００１１】
［システム構成］
図１は、本実施形態に係る通信システム１０の構成例を示す図である。本実施形態の通信システム１０は、通信装置１００と、通信装置１００に接続される通信装置２００−１、通信装置２００−２、・・・、通信装置２００−ｎとを備える。本実施形態において、特別な説明がない場合は、通信装置２００−１から通信装置２００−ｎまでのｎ台の通信装置を区別せず通信装置２００と記載する。通信装置１００と通信装置２００（他の通信装置）は有線及び／又は無線で接続され、相互に通信を行って静止画や動画等のコンテンツデータを送受信する。
【００１２】
なお、本実施形態では通信装置１００に複数の通信装置２００が接続されている場合を中心に説明するが、通信装置１００に接続される通信装置２００は１台であってもよい。また、本実施形態では通信装置１００と通信装置２００とがＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）に基づいて通信を行う場合を中心に説明する。ただし、通信装置１００と通信装置２００は他のプロトコルに基づく通信を行ってもよい。
【００１３】
通信装置１００及び通信装置２００の具体例としては、デジタルカメラ、デジタルビデオカメラ、ネットワークカメラ、プリンタ、デジタル複合機、デジタルテレビ、プロジェクタ、携帯電話、スマートフォン、ＰＣ、及びサーバ装置などがある。例えば、通信装置１００がデジタルカメラであり通信装置２００がＰＣである場合に、ユーザはデジタルカメラを操作してＰＣへの撮影画像の送信を指示する。指示を受けたデジタルカメラは撮影画像をＰＣに送信し、ＰＣは受信した撮影画像を表示部に表示する。
【００１４】
図２は、通信装置１００のハードウェア構成例を示すブロック図である。なお、通信装置２００も通信装置１００と同様のハードウェア構成である。通信装置１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＲＯＭ１０３、メディアアクセス制御モジュール（ＭＡＣ）１０４、物理層モジュール（ＰＨＹ）１０５、伝送部１０６、及びバス１０７を備える。なお通信装置１００は、図示した構成要素以外に、ディスプレイ等の表示部やキーボード等の操作部、ハードディスクドライブ等の補助記憶装置、及びその他の機能部などを有していてもよい。
【００１５】
ＣＰＵ１０１は、ＲＡＭ１０２やＲＯＭ１０３に格納されているコンピュータプログラムやデータを用いて通信装置１００全体の制御を行う。ＣＰＵ１０１が実行するプログラムにはネットワークドライバが含まれる。ＣＰＵ１０１はネットワークドライバを実行することで、送信データをパケット化する処理やＡＣＫ（確認応答，Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）の受信処理など、通信プロトコルに従う処理を実現する。ＲＡＭ１０２は、ＲＯＭ１０３から供給されるプログラムやデータ、及びＭＡＣ１０４を介して通信装置２００から取得されたデータなどを一時的に記憶する。ＲＯＭ１０３は、変更を必要としないプログラムやパラメータを格納する。
【００１６】
ＭＡＣ１０４は、ＣＰＵ１０１による制御に基づいてＭＡＣ層の通信処理を行う。ＰＨＹ１０５は、ＭＡＣ１０４による処理に基づいてＯＳＩ参照モデルにおける物理層の通信処理を行う。本実施形態ではＭＡＣ１０４とＰＨＹ１０５による通信処理がＥｔｈｅｒｎｅｔ（登録商標）に従うものとするが、これに限らない。例えばＩＥＥＥ（Ｉｎｓｔｉｔｕｔｅ  ｏｆ  Ｅｌｅｃｔｒｉｃａｌ  ａｎｄ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｅｎｇｉｎｅｅｒｓ）８０２．１１シリーズに則った無線ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）など他の方式に従う通信処理が行われてもよい。伝送部１０６は、ＰＨＹ１０５と通信装置１００の外部との間でデータを伝送する。伝送部１０６は具体的には、Ｅｔｈｅｒｎｅｔ（登録商標）における通信データを伝送するためのケーブルや、無線ＬＡＮにおける通信データを伝送するためのアンテナ等である。
【００１７】
図３は、本実施形態に係る通信装置１００の機能構成例を示すブロック図である。なお、通信装置２００も通信装置１００と同様の機能構成である。通信装置１００は、制御部１１１、データ記憶部１１２、プログラム記憶部１１３、タイマ管理部１１４、転送部１１５、判定部１１６、バッファ確保部１１７、及び通信部１１８を有する。データ記憶部１１２及びプログラム記憶部１１３は、ＲＡＭ１０２及びＲＯＭ１０３により実現される。その他の各構成要素は、ＣＰＵ１０１がＲＯＭ１０３に格納されたプログラムをＲＡＭ１０２に展開して実行することで実現される。ただしこれに限らず、ここで説明する各構成要素に対応させた演算部や回路を通信装置１００が有し、ＣＰＵ１０１を用いたソフトウェア処理の代替としてハードウェアによる処理を行ってもよい。
【００１８】
制御部１１１は他の各構成要素を制御する。データ記憶部１１２は各種のデータを記憶する記憶領域であり、図４に示すようにユーザバッファ１２１とネットワークバッファ１２２とを有する。ユーザバッファ１２１はアプリケーションにより管理される記憶領域である。ネットワークバッファ１２２は、ユーザバッファ１２１に記憶されたデータのパケット化や送受信処理のために使用される記憶領域であり、ネットワークバッファ１２２の一部がＴＣＰにおける送信バッファ１２３や受信バッファ１２４として割り当てられる。
【００１９】
図４の送信バッファ１２３−１はＴＣＰのコネクションが確立される際に決定される容量を有する既存の送信バッファ１２３−１であり、送信バッファ１２３−２は既存の送信バッファ１２３−１とは異なる追加の送信バッファ１２３−２である。既存の送信バッファ１２３−１と追加の送信バッファ１２３−２の用い方の詳細については後述する。本実施形態では、既存の送信バッファ１２３−１と追加の送信バッファ１２３−２とを区別しない場合には単に送信バッファ１２３と記載する。なお、図４においてはネットワークバッファ１２２内に１つのコネクションに対応する送信バッファ１２３及び受信バッファ１２４が存在している。一方、複数のコネクションが確立される場合には、コネクション毎の送信バッファ１２３及び受信バッファ１２４がネットワークバッファ１２２内に確保される。
【００２０】
プログラム記憶部１１３は各種のプログラムを記憶する。タイマ管理部１１４は、ＴＣＰにおける再送処理に用いられるタイマを管理する。具体的には、タイマ管理部１１４は、データの送信処理が行われてからの経過時間を計測する。
【００２１】
転送部１１５は、ユーザバッファ１２１に記憶されたデータをネットワークバッファ１２２に転送して記憶させる記憶制御を行う。なお、転送部１１５はＣＰＵにより実現されてもよいし、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）等の回路により実現されてもよい。判定部１１６は、通信に使用する送信バッファ１２３−２を追加するか否かを、後述する各種の条件に基づいて判定する。バッファ確保部１１７は、送信バッファ１２３として使用される記憶領域をネットワークバッファ１２２内に確保する。通信部１１８は、通信装置２００との間でデータの送受信を行う。
【００２２】
［動作フロー］
まず、ＴＣＰ／ＩＰプロトコルに基づく通信における基本的な動作を説明する。通信の開始時において、通信装置１００と通信装置２００との間にはデータの送受信を行うための論理的な通信路（コネクション）が確立される。なお通信装置１００は、１つの通信装置２００との間で１つのコネクションを確立してもよいし、１つの通信装置２００との間で複数のコネクションを確立してもよいし、複数の通信装置２００との間で複数のコネクションを確立してもよい。
【００２３】
ＴＣＰ／ＩＰプロトコルに従う通信処理を行う通信装置１００及び通信装置２００には、通信データのパケット化や再送処理のために、ネットワークバッファ１２２が用意されている。ネットワークバッファ１２２は複数のコネクションにおいて共用され、また送信処理と受信処理でも共用される。
【００２４】
ＴＣＰ／ＩＰに基づく送信処理を行う通信装置１００では、アプリケーションからのデータ送信命令に従って、特定のコネクションに対応付けされないユーザバッファ１２１に記憶されたデータのうち送信すべきデータが指定される。具体的には、送信すべきデータがソケットＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）の送信関数ｓｅｎｄ関数によって指定される。指定されたデータは、コネクション毎の送信バッファ１２３−１として予約されたネットワークバッファ１２２内の記憶領域にコピーされ、ＭＴＵ（ｍａｘｉｍｕｍ  ｔｒａｎｓｍｉｓｓｉｏｎ  ｕｎｉｔ）に応じて分割される。そして、分割された送信データにＴＣＰヘッダとＩＰヘッダが追加されたＴＣＰ／ＩＰパケットが生成される。伝送経路がＥｔｈｅｒｎｅｔ（登録商標）の場合、さらにＥｔｈｅｒｎｅｔヘッダが付加されたＥｔｈｅｒｎｅｔフレームが生成され、通信装置２００へ送信される。
【００２５】
通信装置２００は、コネクションを介して通信装置１００から送信されたデータを、受信バッファ１２４を用いて受信すると、そのデータを受信できたことを示す情報であるＡＣＫをデータ送信元の通信装置１００に送信する。ＡＣＫにはウインドウサイズが設定されており、ＡＣＫを受信した通信装置１００はウインドウサイズ以下の量のデータを、次のＡＣＫ受信を待つことなく通信装置２００へ送信することができる。具体的な処理手順としては、通信装置１００はＡＣＫを受信すると、そのＡＣＫに対応する送信済みのデータを送信バッファ１２３−１から消去し、送信すべき新たなデータを送信バッファ１２３−１に記憶して送信処理を行う。一方、データを送信してから所定時間以内にＡＣＫを受信しなかった場合、通信装置１００は、送信バッファ１２３−１に記憶されている送信済みのデータを通信装置２００に対して再送する。この再送処理により、通信の信頼性が向上する。
【００２６】
通信装置１００と通信装置２００との間のコネクションを介して通信装置２００へ送信されるべきデータを記憶するための送信バッファ１２３−１は、その送信バッファ１２３−１に対応するコネクションが確立される際に決定されるデータ容量を有する。そのため、例えば通信装置１００と通信装置２００との間でのデータ伝送に係る時間が大きい場合には、通信装置１００の送信バッファ１２３−１に記憶されているデータが全て送信済みでＡＣＫが未受信のデータとなり得る。このような場合には、通信装置１００は、通信装置２００へ新たに送信すべきデータをユーザバッファ１２１内に有していても、容量不足により送信バッファ１２３−１に記憶させることができない。そして通信装置１００は、送信バッファ１２３−１に記憶されているデータに対応するＡＣＫを受信した後に、新たに送信すべきデータを送信バッファ１２３−１に記憶し、コネクションを介して通信装置２００へ送信することになる。
【００２７】
このように、通信装置１００が送信済みのデータに対するＡＣＫを受信してから次のデータを送信するまでの間には、当該次のデータをユーザバッファ１２１から送信バッファ１２３−１に転送するための処理時間を要することになる。この処理時間を削減して送信スループットを向上させるために、本実施形態に係る通信装置１００は、送信されるべきデータのうち既存の送信バッファ１２３−１の容量を超える分の超過データを記憶するための、追加の送信バッファ１２３−２を利用する。また通信装置１００は、送信バッファ１２３として利用可能なネットワークバッファ１２２の記憶領域が枯渇しないように、追加の送信バッファ１２３−２を利用するか否かを通信装置１００と通信装置２００との間の通信状況に応じて決定する。これは特に、ネットワークバッファ１２２を利用する複数のコネクションにおける通信が行われる場合に有効である
追加の送信バッファ１２３−２を利用する場合、通信装置１００は、既存の送信バッファ１２３−１内の送信済みデータに対応するＡＣＫの受信を待たずに、超過データを追加の送信バッファ１２３−２に記憶する。そして通信装置１００は、当該送信済みデータに対応するＡＣＫを受信すると、コネクションを介して追加の送信バッファ１２３−２内の超過データを通信装置２００へ送信する。一方、追加の送信バッファ１２３−２を利用しない場合、通信装置１００は従来通り、送信済みのデータに対応するＡＣＫを受信した後に超過データを既存の送信バッファ１２３−１に記憶してから送信する。
【００２８】
ここで図５を用いて、通信装置１００によるデータ送信に係る処理の詳細について説明する。図５の処理は、通信装置１００のＣＰＵ１０１が実行するアプリケーションが、通信装置２００との間のコネクションを介する通信においてソケットＡＰＩのｓｅｎｄ関数を呼び出したタイミングで開始される。そのため、図５の処理はコネクション毎に行われ、且つｓｅｎｄ関数が呼び出される度に行われる。ただし、図５の処理の開始タイミングは上記タイミングに限定されない。図５の処理は、ＣＰＵ１０１がＲＯＭ１０３に記憶されたプログラムをＲＡＭ１０２に展開して実行することで実現される。なお、図５に示す処理の少なくとも一部をハードウェアにより実現してもよい。
【００２９】
Ｓ４０１において、判定部１１６は、データ記憶部１１２が有するユーザバッファ１２１内のデータのうちｓｅｎｄ関数により指定された送信データのデータ量が、既存の送信バッファ１２３−１の空き容量を超えるか否かを判定する。送信データのデータ量が空き容量を超える場合はＳ４０２に進み、空き容量を超えない場合はＳ４０６に進む。Ｓ４０６において、転送部１１５は、ユーザバッファ１２１内の指定された送信データを既存の送信バッファ１２３−１に転送する。一方、Ｓ４０１からＳ４０２に進む場合には、指定された送信データのうち既存の送信バッファ１２３−１の空き容量内に納まるデータのみが転送される。なお本実施形態において、通信装置１００の既存の送信バッファ１２３−１の容量は、通信装置２００の受信バッファ１２４の容量、すなわち通信装置２００から通知されるウインドウサイズの最大値と同一であるものとする。ただし送信バッファ１２３−１の容量はこれに限定されない。
【００３０】
Ｓ４０２において、判定部１１６は、既存の送信バッファ１２３−１内のデータが全て送信済みのデータであるか否か、すなわち既存の送信バッファ１２３−１内のデータに対応するＡＣＫの受信を通信装置１００が待っている状態であるか否かを判定する。既存の送信バッファ１２３−１内のデータが全て送信済みである場合はＳ４０３に進み、送信バッファ１２３−１内に未送信のデータが含まれる場合はＳ４０９に進む。Ｓ４０３において、バッファ確保部１１７は、既存の送信バッファ１２３−１とは異なる追加の送信バッファ１２３−２のための記憶領域をネットワークバッファ１２２内に確保できるか否かを判定する。追加の送信バッファ１２３−２が確保可能な場合はＳ４０４に進み、確保できない場合はＳ４０９に進む。追加の送信バッファ１２３−２が確保できない場合とは、例えばネットワークバッファ１２２の空き容量が不足している場合などである。
【００３１】
Ｓ４０９において、判定部１１６は、図５の処理フローの開始時に呼び出されたｓｅｎｄ関数がブロッキングモードで呼び出された関数であるか否かを判定する。ブロッキングモードは、呼び出された関数に対応する処理が完了するまで他の処理を開始しないモードである。一方、ブロッキングモードでない場合は、呼び出された関数に対応する処理が完了できないと判断されると他の処理が開始される。したがって、ｓｅｎｄ関数がブロッキングモードの関数である場合にはＳ４０１へ戻り、ブロッキングモードの関数でない場合にはＳ４１０へ進む。Ｓ４１０において、判定部１１６は、送信バッファ１２３の容量が不足していることをアプリケーションに通知し、図５の処理を終了する。ｓｅｎｄ関数をブロッキングモードで呼び出すか否かを決められることにより、通信装置１００は、送信処理を他の処理よりも優先して行うか否かを制御することができる。
【００３２】
Ｓ４０４において、バッファ確保部１１７は、追加の送信バッファ１２３−２として使用するための記憶領域をネットワークバッファ１２２内に確保する。ここで確保される追加の送信バッファ１２３−２の容量は、ｓｅｎｄ関数により指定されたユーザバッファ１２１内のデータのうち既存の送信バッファ１２３−１の容量を超えた超過データのデータ量に等しいものとする。ただし、確保される追加の送信バッファ１２３−２の容量はこれに限らず、例えば既存の送信バッファ１２３−１の容量と同じ容量であってもよい。Ｓ４０５において、転送部１１５は、ユーザバッファ１２１内の超過データを、追加の送信バッファ１２３−２に転送する。
【００３３】
Ｓ４０７において、通信部１１８は、送信バッファ１２３内に記憶されているデータの送信処理を行い、図５の処理を終了する。Ｓ４０４における追加の送信バッファ１２３−２を確保する処理が行われていない場合は、Ｓ４０７における送信処理の対象となる送信バッファ１２３は既存の送信バッファ１２３−１である。一方、Ｓ４０４における処理が行われた場合は、Ｓ４０７における送信処理の対象となる送信バッファ１２３には追加の送信バッファ１２３−２も含まれる。送信処理には、具体的には、送信バッファ１２３内のデータをＴＣＰ／ＩＰパケットにパケット化する処理や、Ｅｔｈｅｒｎｅｔフレームにフレーム化する処理、及び通信装置２００へ送信する処理が含まれる。通信装置１００から通信装置２００へ送信されるデータの量はウインドウサイズにより制限される。そのため、追加の送信バッファ１２３−２に記憶されたデータが実際に送信されるのは、既存の送信バッファ１２３−２に記憶された送信済みデータに対するＡＣＫが受信された後になる。
【００３４】
なお、図５を用いた以上の説明では、Ｓ４０２において判定部１１６は既存の送信バッファ１２３−１内のデータが全て送信済みであるか否かを判定するものとした。ただしこれに限らず、Ｓ４０２において判定部１１６は、既存の送信バッファ１２３−１内の送信済みのデータの量が所定の閾値以上であるか否かを判定してもよい。そして、送信済みのデータ量が閾値以上である場合にはＳ４０３へ進み、閾値未満である場合にはＳ４０９へ進むものとしてもよい。上記の所定の閾値は例えば、既存の送信バッファ１２３−１の容量の半分のデータ量など、既存の送信バッファ１２３−１の容量に基づいて決まる値であってもよい。また例えば、上記の所定の閾値は、通信装置２００の受信バッファ１２４の容量や、通信装置２００から通知されるウインドウサイズに基づいて決まる値であってもよい。
【００３５】
また、図５を用いた以上の説明では、追加の送信バッファ１２３−２が利用されていないコネクションにおいてｓｅｎｄ関数が呼び出された場合の動作について説明した。一方、既に追加の送信バッファ１２３−２が利用されているコネクションにおいてｓｅｎｄ関数が呼び出された場合にも、同様の処理が行われる。すなわち、既存の送信バッファ１２３−１と既に利用されている追加の送信バッファ１２３−２とを併せた送信バッファ１２３が新たな既存の送信バッファとして扱われ、Ｓ４０１からの処理が行われる。そして図５のフローに従って、Ｓ４０４では新たな追加の送信バッファが確保される。なお通信装置１００は、追加の送信バッファとして確保された記憶領域の容量の合計が所定値に達した場合、それ以上新たな追加の送信バッファを確保しないように制御を行ってもよい。
【００３６】
通信装置１００の判定部１１６は、送信されるべきデータのうち既存の送信バッファ１２３−１の容量を超える分の超過データを追加の送信バッファ１２３−２に記憶するか否かを、通信装置１００と通信装置２００との間の通信状況に応じて決定する。図５に示す処理フローにおいて、この通信状況とは、通信装置１００から送信されたデータであり且つ当該データに対応するＡＣＫが受信されていないデータの量、すなわち既存の送信バッファ１２３−１内の送信済みデータの量である。
【００３７】
既存の送信バッファ１２３−１内の送信済みデータ量が多い場合には、通信装置１００は追加の送信バッファ１２３−２を利用することで、ＡＣＫを受信した後に新たに送信バッファ１２３に記憶させることなく送信できるデータの量を増やすことができる。これにより通信装置１００のスループットが向上する。一方、既存の送信バッファ１２３−１内の送信済みデータ量が少ない場合には、通信装置１００はＡＣＫを受信した後に既存の送信バッファ１２３−１内の未送信のデータを送信できるので、追加の送信バッファ１２３−２を利用することによる効果は小さい。そのため、この場合には通信装置１００は追加の送信バッファ１２３−２を確保しない。これにより、他のコネクションにおける通信のためにネットワークバッファ１２２の記憶領域を残しておくことができる。
【００３８】
なお、追加のバッファにデータを記憶するか否かを決定するために判断される通信状況は、送信済みのデータ量に限らない。判断される通信状況には例えば、通信装置１００と通信装置２００との間のコネクションの優先度、通信装置１００から通信装置２００へのデータ再送の状況、及び通信装置１００から通信装置２００へのデータ送信の可否などが含まれていてもよい。
【００３９】
図６は、通信装置１００による通信状況の判断に係る処理の一例であり、図５のＳ４０２が図６の処理に置きかえられる。すなわち、Ｓ４０１において送信データのデータ量が既存の送信バッファ１２３−１の容量を超えると判定された場合に、Ｓ５０１の処理が行われる。Ｓ５０１において、判定部１１６はＳ４０２における処理と同様に、送信バッファ１２３−１内のデータが送信済みであるか否かを判定する。送信バッファ１２３−１内のデータが送信済みである場合はＳ５０２へ進み、送信済みでない場合はＳ４０９へ進む。
【００４０】
Ｓ５０２において、判定部１１６は、コネクションにおいてＴＣＰの再送処理が行われている否かを判定する。再送処理が行われているかどうかの判定は、例えばタイマ管理部１１４が管理しているタイマの値に基づいて行われる。再送処理が行われている場合はＳ４０９へ進み、行われていない場合はＳ５０３へ進む。再送処理が行われている場合、そのコネクションにおける通信の速度は低い。そこで通信装置１００は、再送処理が行われているコネクションにおける追加の送信バッファ１２３−２を確保しない。これにより、通信速度が速いコネクションにおける追加の送信バッファ１２３−２を確保するためのネットワークバッファ１２２内の記憶領域を残しておくことができる。なお、判定部１１６は、再送処理が行われているか否かの判定の代わりに、データの再送が行われた回数が所定回数以上であるか否かを判定してもよい。
【００４１】
Ｓ５０３において、判定部１１６は、通信装置１００からのデータの送信が可能であるか否かを判定する。具体的には、判定部１１６は、通信装置１００が有するネットワークインタフェース（ＭＡＣ１０４及びＰＨＹ１０５）が通信を行える状態にあるか否かを判定する。データの送信が可能である場合はＳ５０４へ進み、データを送信できない状態である場合はＳ４０９へ進む。通信装置１００がデータを送信できない状態である場合には、追加の送信バッファ１２３−２を確保してもスループットは向上しないため、通信装置１００は追加の送信バッファ１２３−２を確保しない。これにより、他のコネクションにおける通信のためにネットワークバッファ１２２の記憶領域を残しておくことができる。
【００４２】
Ｓ５０４において、判定部１１６は、コネクションの優先度が閾値より高いか否かを判定する。コネクションの優先度は、当該コネクションが確立される際に設定される値であってもよいし、当該コネクションによって接続される通信相手によって決まる値であってもよいし、その他の条件によって決まる値であってもよい。また、コネクションの優先度と比較される閾値は、予め設定される値であってもよいし、例えば通信装置１００により確立済みのコネクションの数などによって変化する値であってもよい。コネクションの優先度が閾値より高い場合はＳ４０３へ進み、閾値以下である場合はＳ４０９へ進む。
【００４３】
図５を用いて既に説明したように、Ｓ４０３に進んで且つ追加の送信バッファ１２３−２が確保可能である場合には追加の送信バッファ１２３−２にデータが記憶され、Ｓ４０９に進んだ場合には追加の送信バッファ１２３−２にデータは記憶されない。このように通信装置１００は、優先度が低いコネクションにおける追加の送信バッファ１２３−２を確保しない。これにより、優先度が高いコネクションにおける追加の送信バッファ１２３−２を確保するためのネットワークバッファ１２２内の記憶領域を残しておくことができる。その結果、優先度が高いコネクションにおける通信のスループットを向上させることができる。
【００４４】
以上のように、通信装置１００は、通信装置２００との間の通信状況に係る複数の条件に基づいて、追加の送信バッファ１２３−２を利用するか否かを決定してもよい。また通信装置１００は、Ｓ５０１からＳ５０４の判定処理のうち少なくとも何れかの判定処理を行い、追加の送信バッファ１２３−２を利用するか否かをその判定結果に基づいて決定してもよい。
【００４５】
なお、図５を用いた以上の説明においては、コネクションを介する通信に追加の送信バッファ１２３−２を利用するか否かを、そのコネクションを介する通信においてｓｅｎｄ関数が呼び出されたことに応じて決定する場合について説明した。ただし、追加の送信バッファ１２３−２を利用するか否かを決定するタイミングはこれに限らない。ここで図７を用いて、追加の送信バッファ１２３−２を利用するか否かを図５の処理とは異なるタイミングで決定する場合の処理フローの一例について説明する。
【００４６】
図７の処理は、通信装置１００が通信装置２００との通信を開始したタイミングで開始される。ただし、図７の処理の開始タイミングは上記タイミングに限定されない。図７の処理は、ＣＰＵ１０１がＲＯＭ１０３に記憶されたプログラムをＲＡＭ１０２に展開して実行することで実現される。なお、図７に示す処理の少なくとも一部をハードウェアにより実現してもよい。図７の処理と図５の処理とは、何れか一方が実行されてもよいし、両方が実行されてもよい。
【００４７】
Ｓ６０１において、判定部１１６は、通信装置１００においてネットワークスタックがアイドル状態であるか否かを判定する。ネットワークスタックがアイドル状態である場合、すなわちデータの送信処理や受信処理が行われていない場合は、Ｓ６０２に進む。一方、ネットワークスタックがアイドル状態でない場合は、アイドル状態になるまで待機する。Ｓ６０２において、判定部１１６は、ネットワークスタックにおいて有効なコネクション情報を取得する。有効なコネクション情報とは、例えば、通信装置１００が確立済みのコネクションに関する情報や、確立済みのコネクションのうち所定期間内に通信が行われたコネクションに関する情報である。
【００４８】
Ｓ６０３において、判定部１１６は、Ｓ６０２で取得したコネクション情報に対応する送信バッファ１２３−１のうち、空き容量がない送信バッファ１２３−１があるか否かを判定する。空き容量がない送信バッファ１２３−１がある場合にはＳ６０４へ進み、どの送信バッファ１２３−１にも空き容量がある場合にはＳ６０１へ戻る。なお、判定部１１６はＳ６０３において、空き容量がない送信バッファ１２３−１があるか否かを判定する代わりに、空き容量が所定値以下の送信バッファ１２３−１があるか否かを判定してもよい。
【００４９】
Ｓ６０４において判定部１１６は、Ｓ６０３において空き容量がないと判定された送信バッファ１２３−１に対して、図５のＳ４０２の処理と同様に、送信バッファ１２３−１内のデータが全て送信済みのデータであるか否かを判定する。送信バッファ１２３−１内のデータが全て送信済みのデータである場合はＳ６０５へすすみ、送信バッファ１２３−１内に未送信のデータが含まれる場合はＳ６０１へ戻る。なお、Ｓ６０４においてはＳ４０２と同様に、送信バッファ１２３−１内の送信済みのデータの量が所定の閾値以上であるか否かを判定する処理が行われてもよいし、図６を用いて説明したような通信状況に関する複数の判定処理が行われてもよい。
【００５０】
Ｓ６０５において判定部１１６は、Ｓ６０４における判定の対象となった送信バッファ１２３−１に対応するコネクション対して、図５のＳ４０３の処理と同様に、追加の送信バッファ１２３−２を確保できるか否かを判定する。追加の送信バッファ１２３−２を確保できる場合にはＳ６０６へ進み、確保できない場合はＳ６０１へ戻る。Ｓ６０６においてバッファ確保部１１７は、Ｓ６０５において追加の送信バッファ１２３−２が確保できると判定されたコネクションに対応する追加の送信バッファ１２３−２を確保する。
【００５１】
Ｓ６０７において、判定部１１６は、図７の処理を終了するか否かを判定する。処理を終了すると判定される場合とは、例えば通信装置１００に対して追加の送信バッファ１２３−２を新たに確保しないように指示が行われた場合や、通信装置１００が通信装置２００との通信を終了する場合などである。処理を終了しないと判定された場合にはＳ６０１へ戻り、そうでなければ図７の処理を終了する。以上で説明した図７の処理によれば、ネットワークスタックがアイドル状態で通信装置１００の処理負荷が低い期間に、通信状況に応じて追加の送信バッファ１２３−２を確保する処理を行うことができる。
【００５２】
以上の説明においては、通信装置１００と通信装置２００とがＴＣＰ／ＩＰに従って通信を行う場合を中心に説明した。そのため、通信装置１００と通信装置２００との間の通信路はＴＣＰにおけるコネクションであるものとした。また、通信装置１００がデータを送信するタイミングや、既存の送信バッファ１２３−１にデータを記憶するタイミングは、ＴＣＰにおけるＡＣＫの受信タイミングに応じて決まるものとした。ただし、通信装置１００が通信に使用するプロトコルはＴＣＰ／ＩＰに限らない。例えば、通信装置１００と通信装置２００は、ＨＴＴＰ（ＨｙｐｅｒＴｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）などＴＣＰよりも上位の層のプロトコルにおいて作成されたメッセージによって、ＴＣＰにおけるＡＣＫと同様の機能を実現してもよい。そしてこのような場合には、ＴＣＰの代わりにＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）に従った通信が行われてもよい。また、ＴＣＰにおけるＡＣＫと同様の機能を実現可能なその他のプロトコルを用いた通信において本実施形態で説明した処理が行われてもよい。
【００５３】
また、通信装置１００が再送制御の機能を有さないような場合にも、上述した本実施形態を適用してもよい。例えば、送信バッファ１２３−１に記憶されたデータは、通信装置１００から送信されると、通信装置２００により正しく受信されたかによらず消去されるものとする。ここで、送信されるべきデータの量が送信バッファ１２３−１の容量を超える場合、送信バッファ１２３−１に記憶された容量内データが送信された後に、容量を超えた超過データが既存の送信バッファ１２３−１に記憶され送信される。このような通信装置１００においては、容量内データが送信されてから超過データが送信されるまでの間に、超過データを送信バッファ１２３−１に記憶させるための処理時間を要することになる。そこでこの処理時間を削減するために、通信装置１００は、容量内データの送信を待たずに超過データを追加の送信バッファ１２３−２に記憶させてもよい。そして通信装置１００は、容量内データが送信された後に追加の送信バッファ１２３−２内の超過データを送信してもよい。このような構成によっても、通信装置１００のスループットを向上できる。
【００５４】
なお本実施形態では、ユーザバッファ１２１に記憶されたデータのうちの送信されるべきデータが、追加の送信バッファ１２３−２を利用するか否かの決定に応じて、既存の送信バッファ１２３−１又は追加の送信バッファ１２３−２に記憶されるものとした。ただしこれに限らず、例えば通信装置１００は生成したデータを、ユーザバッファ１２１を介さず直接既存の送信バッファ１２３−１や追加の送信バッファ１２３−２に記憶させてもよい。
【００５５】
また本実施形態では、追加の送信バッファ１２３−２に記憶された超過データが送信されるタイミングが、既存の送信バッファ１２３−１に記憶されている容量内データに対応するＡＣＫが受信された後である場合を中心に説明した。これは、通信装置２００の受信バッファ１２４の容量が不足する虞を低減するためである。ただし、例えば通信装置１００の既存の送信バッファ１２３−１の容量よりも通信装置２００の受信バッファ１２４の容量が多いような場合には、これに限らない。このような場合には、通信装置１００は、既存の送信バッファ１２３−１に記憶されている容量内データに対応するＡＣＫを受信する前に、追加の送信バッファ１２３−２に記憶された超過データを送信してもよい。
【００５６】
以上説明したように、本実施形態に係る通信装置１００は、通信装置２００との間の論理的な通信路を介して通信装置２００へ送信すべきデータを記憶するための第１送信バッファであって、通信路が確立される際に決定される容量の第１送信バッファを有する。そして通信装置１００は、通信路を介して通信装置２００へ送信されるべきデータのうち第１送信バッファの容量を超える分の超過データを第１送信バッファとは異なる第２送信バッファに記憶するか否かを、通信装置２００との間の通信状況に応じて決定する。また通信装置１００は、該超過データを第２送信バッファに記憶しないと決定した場合には、第１送信バッファに記憶された容量内データが通信装置２００へ送信された後に該超過データを第１送信バッファに記憶させる。そして通信装置１００は、第１送信バッファ又は第２送信バッファに記憶された該超過データを、該容量内データが通信装置２００へ送信された後に、通信路を介して通信装置２００へ送信する。これにより通信装置１００は、送信バッファ１２３として利用可能な記憶領域の容量の制限の下、送信バッファ１２３を用いる通信に係る処理時間を低減することができる。
【００５７】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ等）によっても実現可能である。また、そのプログラムをコンピュータにより読み取り可能な記録媒体に記録して提供してもよい。
【符号の説明】
【００５８】
１０  通信システム
１００  通信装置
１２３−１  送信バッファ
１２３−２  送信バッファ
２００  通信装置
【図１】
2018142850.tif 000003
【図２】
2018142850.tif 000004
【図３】
2018142850.tif 000005
【図４】
2018142850.tif 000006
【図５】
2018142850.tif 000007
【図６】
2018142850.tif 000008
【図７】
2018142850.tif 000009