(57)【要約】【課題】送信パケットのヘッダを記憶する記憶部の空き容量が不足しても送信パケットの作成を効率的に行うことができる通信装置を提供すること。【解決手段】通信装置は、第１の処理手順で送信パケットを作成する際に前記送信パケットのヘッダを記憶する第１の記憶手段と、前記第１の記憶手段を使用して前記第１の処理手順で前記送信パケットを作成する第１の作成手段と、前記第１の処理手順とは異なる第２の処理手順で前記送信パケットを作成する際に前記送信パケットのヘッダを記憶する第２の記憶手段と、前記第２の記憶手段を使用して前記第２の処理手順で前記送信パケットを作成する第２の作成手段と、前記第１の作成手段が前記ヘッダを作成するために必要なデータサイズと、前記第１の記憶手段の空き容量とに基づいて、前記第１の作成手段または前記第２の作成手段のいずれを用いるかを制御する制御手段と、を備える。【選択図】  図３
2019057781.tif 000002
【特許請求の範囲】
【請求項１】
第１の処理手順で送信パケットを作成する際に前記送信パケットのヘッダを記憶する第１の記憶手段と、
前記第１の記憶手段を使用して前記第１の処理手順で前記送信パケットを作成する第１の作成手段と、
前記第１の処理手順とは異なる第２の処理手順で前記送信パケットを作成する際に前記送信パケットのヘッダを記憶する第２の記憶手段と、
前記第２の記憶手段を使用して前記第２の処理手順で前記送信パケットを作成する第２の作成手段と、
前記第１の作成手段が前記ヘッダを作成するために必要なデータサイズと、前記第１の記憶手段の空き容量とに基づいて、前記第１の作成手段または前記第２の作成手段のいずれを用いるかを制御する制御手段と、
を備えることを特徴とする通信装置。
【請求項２】
前記送信パケットのヘッダを作成するプロセッサをさらに備え、
前記第１の記憶手段は前記プロセッサの内部メモリであることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記第１の記憶手段の空き容量が前記データサイズ以上の場合、前記制御手段は、前記第１の作成手段を用いて前記送信パケットを作成させ、前記第１の記憶手段の空き容量が前記データサイズ未満の場合、前記制御手段は、前記第２の作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１または２に記載の通信装置。
【請求項４】
前記第１の記憶手段の空き容量が前記データサイズ未満であり、且つ、前記第１の記憶手段の解放待ち時間が前記第２の作成手段のパケット作成時間未満の場合には、前記制御手段は、前記第１の記憶手段の解放を待って前記第１の作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１〜３のいずれか１項に記載の通信装置。
【請求項５】
前記第１の記憶手段の空き容量が前記データサイズ未満であり、且つ、前記第１の記憶手段の解放待ち時間が、前記第２の作成手段のパケット作成時間以上の場合、前記制御手段は、前記第２の作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１〜４のいずれか１項に記載の通信装置。
【請求項６】
前記送信パケットが他の通信装置に送信される際に通過する通信インタフェースを特定する特定手段をさらに備え、
前記第１の記憶手段の解放待ち時間は、前記特定手段により特定された通信インタフェースに基づいて決まる時間であることを特徴とする請求項４または５に記載の通信装置。
【請求項７】
前記データサイズが、前記第１の記憶手段の空き容量以下であっても、前記送信パケットの数が１の場合には、前記制御手段は、前記第２のパケット作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１〜６のいずれか１項に記載の通信装置。
【請求項８】
前記データサイズが、前記第１の記憶手段の空き容量以下であっても、前記送信パケットが再送パケットである場合には、前記制御手段は、前記第２のパケット作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１〜７のいずれか１項に記載の通信装置。
【請求項９】
前記データサイズが、前記第１の記憶手段の空き容量以下であり、且つ、前記送信パケットの数が２以上の場合には、前記制御手段は、前記第１のパケット作成手段を用いて送信パケットを作成させることを特徴とする請求項１〜８のいずれか１項に記載の通信装置。
【請求項１０】
前記データサイズが、前記第１の記憶手段の空き容量以下であり、且つ、前記送信パケットが再送パケットでない場合には、前記制御手段は、前記第１のパケット作成手段を用いて送信パケットを作成させることを特徴とする請求項１〜９のいずれか１項に記載の通信装置。
【請求項１１】
前記第１の記憶手段の空き容量が所定数のパケットのヘッダサイズ以上の場合、前記制御手段は、前記第１の記憶手段の空き容量に基づき、前記第１の作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１〜１０のいずれか１項に記載の通信装置。
【請求項１２】
前記第１の記憶手段の空き容量が所定数のパケットのヘッダサイズ未満の場合、前記制御手段は、外部から取得した情報に基づき、前記第２の作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１〜１１のいずれか１項に記載の通信装置。
【請求項１３】
前記第１の記憶手段の空き容量が前記データサイズ未満であり、且つ、前記第２の記憶手段の空き容量が所定数のパケットのヘッダサイズ未満の場合、前記制御手段は、前記第２の記憶手段を用いず、第３の記憶手段を用いてソフトウェア処理で前記送信パケットを作成させることを特徴とする請求項１〜１２のいずれか１項に記載の通信装置。
【請求項１４】
前記第３の記憶手段が存在しない場合、前記制御手段は、前記第１の記憶手段または前記第２の記憶手段の解放を待ち、前記第１の記憶手段が解放されると前記第１の作成手段を用いて前記送信パケットを作成させ、前記第２の記憶手段が解放されると前記第２の作成手段を用いて前記送信パケットを作成させることを特徴とする請求項１３に記載の通信装置。
【請求項１５】
前記第１の処理手順は、前記送信パケットのヘッダを、前記プロセッサを利用したハードウェア処理により作成し、前記第２の処理手順は、前記送信パケットのヘッダをソフトウェア処理により作成することを特徴とする請求項２〜１４のいずれか１項に記載の通信装置。
【請求項１６】
第１の処理手順で送信パケットを作成する際に前記送信パケットのヘッダを記憶する第１の記憶手段と、前記第１の処理手順とは異なる第２の処理手順で前記送信パケットを作成する際に前記送信パケットのヘッダを記憶する第２の記憶手段と、を備える通信装置の制御方法であって、
前記第１の処理手順で前記送信パケットを作成する場合に前記ヘッダを作成するために必要なデータサイズと、前記第１の記憶手段の空き容量とに基づいて、前記第１の処理手順で送信パケットを作成するか、前記第２の処理手順で前記送信パケットを作成するかを選択するステップと、
前記第１の処理手順で送信パケットを作成することが選択された場合、前記第１の記憶手段を使用して前記第１の処理手順で前記送信パケットを作成するステップと、
前記第２の処理手順で前記送信パケットを作成することが選択された場合、前記第２の記憶手段を使用して前記第２の処理手順で前記送信パケットを作成するステップと、
を有することを特徴とする制御方法。
【請求項１７】
コンピュータを、請求項１から１５のいずれか１項に記載の通信装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置および通信装置の制御方法に関する。  
【背景技術】
【０００２】
近年、急速に増加するスマートデバイスと呼ばれる多機能端末による高解像度動画（８Ｋ／４Ｋ）のネットワーク経由による閲覧のニーズ増加に伴い、データトラフィックが増大している。また、Ｅｔｈｅｒｎｅｔ（登録商標）による１０Ｇｂｐｓ通信、移動体通信の５Ｇ通信などのネットワークの高速化に伴い、ＴＣＰ／ＵＤＰ／ＩＰなどの通信プロトコル処理のＣＰＵにかかる負荷が大きくなっている。また、ＴＣＰ／ＵＤＰ／ＩＰなどの通信プロトコルを用いた高速データ通信を実現するために、ＣＰＵにかかる通信プロトコル処理負荷を低減させる技術が提案されている。ＴＣＰはＴｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌの略であり、ＵＤＰはＵｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌの略であり、ＩＰはＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌの略である。
【０００３】
ＣＰＵにかかる通信プロトコル処理負荷を低減させる技術として、ＣＰＵで実行する通信プロトコル処理の一部（ＴＣＰセグメント処理）をオフロードすることにより、ＣＰＵにかかる負荷を低減するものがある。ＴＣＰセグメント処理は、国際標準化機構（ＩＳＯ）によって策定されたＯＳＩ参照モデルで定義されるアプリケーション層で作成された送信データを下位レイヤである通信レイヤで使用する送信パケットに変換する処理である。ＯＳＩはＯｐｅｎ  Ｓｙｓｔｅｍｓ  Ｉｎｔｅｒｃｏｎｎｅｃｔｉｏｎの略である。
【０００４】
ＴＣＰセグメント処理の一例として、特許文献１に送信パケット作成方法が開示されている。特許文献１では、ペイロード分割部が、アプリケーション層で作成された転送可能長を超える送信データを転送可能長に分割して、送信ペイロードを複数作成する。そして、ヘッダ複製部が、送信ペイロードに付与するヘッダを送信ペイロードの数だけ作成（複製）する。その後、パケット生成部が、作成されたヘッダと送信ペイロードとを合成して複数の送信パケットを生成する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２６６７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１では、ヘッダ複製部は、送信ペイロードに対応する複数のヘッダを作成してヘッダバッファに格納する。しかしながら、ヘッダバッファの空き容量が不足して、全てのヘッダを格納できない場合が有り得る。そのような場合、ヘッダバッファの解放を待ってから送信パケットを作成すると、送信パケットの作成処理時間が長くなり、通信性能が低下する。
本発明は、上記した課題を解決するものであり、その目的は、送信パケットのヘッダを格納（記憶）する記憶部の空き容量が不足しても送信パケットの作成を効率的に行うことができる通信装置を提供することである。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明の１つの態様による通信装置は、第１の処理手順で送信パケットを作成する際に前記送信パケットのヘッダを記憶する第１の記憶手段と、前記第１の記憶手段を使用して前記第１の処理手順で前記送信パケットを作成する第１の作成手段と、前記第１の処理手順とは異なる第２の処理手順で前記送信パケットを作成する際に前記送信パケットのヘッダを記憶する第２の記憶手段と、前記第２の記憶手段を使用して前記第２の処理手順で前記送信パケットを作成する第２の作成手段と、前記第１の作成手段が前記ヘッダを作成するために必要なデータサイズと、前記第１の記憶手段の空き容量とに基づいて、前記第１の作成手段または前記第２の作成手段のいずれを用いるかを制御する制御手段と、を備える。
【発明の効果】
【０００８】
本発明によれば、送信パケットのヘッダを記憶する記憶部の空き容量が不足しても送信パケットの作成を効率的に行うことができる。
【図面の簡単な説明】
【０００９】
【図１】通信装置のモジュール構成（ハードウェア構成）例を示すブロック図。
【図２】第１実施形態に係る通信装置のソフトウェア構成例を示すブロック図。
【図３】第１実施形態の送信パケット作成部の切り替え手順を示すフローチャート。
【図４】第２実施形態に係る通信装置のソフトウェア構成例を示すブロック図。
【図５】第２実施形態の送信パケット作成部の切り替え手順を示すフローチャート。
【図６】第３実施形態に係る通信装置のソフトウェア構成例を示すブロック図。
【図７】第３実施形態の送信パケット作成部の切り替え手順を示すフローチャート。
【図８】第４実施形態の送信パケット作成部の切り替え手順を示すフローチャート。
【図９】第５実施形態の送信パケット作成部の切り替え手順を示すフローチャート。
【発明を実施するための形態】
【００１０】
以下、添付図面を参照して、本発明を実施するための実施形態を詳細に説明する。以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置やシステムの構成や各種条件によって適宜修正または変更されるべきものであり、本発明は以下の実施形態に限定されるものではない。
【００１１】
第１実施形態
（装置の構成）
図１は、第１実施形態に係る通信装置１００のモジュール構成例を示すブロック図である。なお、通信装置１００が下記のすべてのモジュールを備えることは必須でないし、下記のモジュール以外のモジュールを備えてもよい。
通信装置１００は、メインＣＰＵ１０１と、メインメモリ１０２と、サブシステム１０３とを有する。サブシステム１０３は、通信プロトコル処理を実行する。通信装置１００内の各モジュール１０１〜１０３はシステムバス１０４を介して相互に接続される。
【００１２】
メインＣＰＵ１０１は、ＯＳＩ参照モデルで定義されるアプリケーション層でアプリケーションソフトウェアを実行する。また、メインＣＰＵ１０１は、通信装置１００全体の制御も実行する。メインＣＰＵ１０１がアプリケーションソフトウェアを実行する際に必要となるデータやプログラムなどは、メインメモリ１０２に記憶される。メインＣＰＵ１０１は、必要に応じてシステムバス１０４を介してデータやプログラムなどをメインメモリ１０２から読み出したり、メインメモリ１０２に書き込んだりする。メインＣＰＵ１０１は、ＭＰＵ等のプロセッサにより構成されてもよい。また、メインＣＰＵ１０１は、マルチコア等の複数のプロセッサを備えてもよい。ＭＰＵはＭｉｃｒｏ−Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔの略である。
メインメモリ１０２は、通信装置１００内の各モジュール１０１〜１０３が共有して利用可能なメモリであり、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの半導体メモリで構成される。メインメモリ１０２の内部の領域は、プログラムを格納する領域やアプリケーションソフトウェアが使用するアプリケーションバッファ領域などに分けられる。
【００１３】
サブシステム１０３は、主な機能ブロックとして、サブＣＰＵ１０６と、ローカルメモリ１０７と、ＤＭＡコントローラ１０８と、通信インタフェース１０９と、ヘッダ処理部１１０とを有する。ＤＭＡはＤｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓの略である。サブシステム１０３内の各機能ブロック１０６〜１１０はローカルバス１０５を介して相互に接続される。通信インタフェース１０９はネットワーク１１１に接続される。ヘッダ処理部１１０は、主な機能ブロックとして、レジスタ部１１２と、内部メモリ１１３と、コア部１１４とを有する。ネットワーク１１１は、有線ネットワークでもよいし、無線ネットワークでもよい。
サブシステム１０３は、上記したように、通信装置１００における通信プロトコル処理を実行する。サブシステム１０３は、ＴＣＰ／ＩＰなどの通信プロトコル処理に特化して外部機器（他の通信装置）とのネットワーク１１１を介したデータ転送処理を担う。そして、サブシステム１０３は、通信プロトコル処理専用のハードウェアを装備し、高速な通信プロトコル処理をメインＣＰＵ１０１に代わり実行する。なお、サブシステム１０３が扱う通信プロトコルは、ＴＣＰ／ＩＰ以外の通信プロトコルでもよい。
【００１４】
サブＣＰＵ１０６は、通信プロトコル処理を実行する。具体的には、サブＣＰＵ１０６は、ＩＰｖ４、ＩＰｖ６、ＵＤＰ、ＴＣＰの各通信プロトコル処理（送信シーケンス制御、輻輳制御、通信エラー制御等）を行う。ＩＰｖ４はＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ４の略であり、ＩＰｖ６はＩｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ  ｖｅｒｓｉｏｎ  ６の略である。サブＣＰＵ１０６は、１つのプロセッサで構成されてもよいし、複数のプロセッサで構成されてもよい（マルチプロセッサ構成）。また、サブＣＰＵ１０６は、プロセッサと一部の機能をアクセラレートするハードウェアとにより構成されてもよい。
ローカルメモリ１０７は、サブＣＰＵ１０６が利用可能なメモリであり、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの半導体メモリにより構成される。ローカルメモリ１０７は、メインＣＰＵ１０１からも、システムバス１０４およびローカルバス１０５を経由してアクセスすることができる。
【００１５】
ＤＭＡコントローラ１０８は、サブＣＰＵ１０６からの指示により、ＤＭＡ転送を実行する。ＤＭＡ転送はデスクリプタに記載された内容に従って実行される。デスクリプタとは、データ転送を行うソース側のアドレス情報、ディスティネーション側のアドレス情報、データ転送の転送サイズ等の情報が記載されたものである。サブＣＰＵ１０６はローカルメモリ１０７にデスクリプタを書き込んだ後、ＤＭＡコントローラ１０８にＤＭＡ転送開始指示を通知する。ＤＭＡ転送開始指示を通知する方法としては、例えば、デスクリプタを保存しているローカルメモリ１０７のアドレス情報を設定すればよい。ＤＭＡ転送開始指示の通知を受けたＤＭＡコントローラ１０８は、当該指示の内容に基づいて、メインメモリ１０２とローカルメモリ１０７との間のＤＭＡ転送、および内部メモリ１１３とローカルメモリ１０７との間のＤＭＡ転送を実行することができる。また、ＤＭＡコントローラ１０８は、ＤＭＡ転送開始指示の内容に基づいて、内部メモリ１１３と通信インタフェース１０９との間のＤＭＡ転送、およびローカルメモリ１０７と通信インタフェース１０９との間のＤＭＡ転送処理も実行することができる。
通信インタフェース１０９は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などのネットワーク１１１とのインタフェースであり、通信における物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信制御を担う。通信インタフェース１０９は、内部に送受信情報を一時的に蓄積するバッファメモリを装備し、ＤＭＡコントローラ１０８のＤＭＡ転送によって送受信情報の入出力が行われる。なお、通信インタフェース１０９は、ＤＭＡコントローラを内蔵し、当該ＤＭＡコントローラを用いてＤＭＡ送信による送受信情報の入出力を行ってもよい。通信インタフェース１０９は複数設けられてよい。例えば、ネットワーク１１１が有線ネットワークの場合には、有線ネットワークに適する通信インタフェースが使用され、ネットワーク１１１が無線ネットワークの場合には、無線ネットワークに適する通信インタフェースが使用される。
【００１６】
ヘッダ処理部１１０は、本実施形態では、サブＣＰＵ１０６に代わり、通信プロトコル処理における通信ヘッダ作成処理を実行する。ヘッダ処理部１１０は、例えば、ヘッダ処理をアクセラレートするハードウェアとして構成されてよい。
レジスタ部１１２は、ヘッダ処理のひな形となるヘッダ情報１１５（以下、「ひな形ヘッダ１１５」と称する）、通信ヘッダの作成に必要となるヘッダ編集情報１１６、コア部１１４を制御するために必要となる制御情報１１７などを記憶する。
ひな形ヘッダ１１５は、ヘッダ処理部１１０で複製されるヘッダ情報であり、複数の通信ヘッダ１１８を作成する際の基となるヘッダ情報である。ひな形ヘッダ１１５は、サブＣＰＵ１０６でソフトウェア処理により作成される。ひな形ヘッダ１１５の構成は、例えばＯＳＩ参照モデルに規定されるトランスポート層のＴＣＰヘッダとネットワーク層のＩＰヘッダに分けられる。ＴＣＰヘッダやＩＰヘッダは各層における通信プロトコル処理を実行するときに使用される。なお、ひな形ヘッダ１１５は、ＴＣＰヘッダとＩＰヘッダだけでなくＥｔｈｅｒヘッダを含んでもよい。Ｅｔｈｅｒヘッダとは、送信先のＭＡＣアドレスや送信元のＭＡＣアドレスが記載されているＯＳＩ参照モデルに規定されるデータリンク層で使用される通信ヘッダである。また、ひな形ヘッダ１１５において、ＴＣＰヘッダの代わりにＵＤＰヘッダを使用してもよい。
【００１７】
ヘッダ編集情報１１６は、通信ヘッダ１１８を作成するために必要となる編集情報であり、サブＣＰＵ１０６でソフトウェア処理により設定される。ヘッダ編集情報１１６は、ひな形ヘッダ１１５を複製する回数、作成する通信ヘッダ１１８の種別、ひな形ヘッダ１１５を複製して作成した通信ヘッダ１１８内の編集箇所、編集方法などを保持する。
制御情報１１７は、コア部１１４を制御するために必要となる情報であり、サブＣＰＵ１０６でソフトウェア処理により設定される。
内部メモリ１１３は、ヘッダ処理部１１０のコア部１１４やサブＣＰＵ１０６が利用可能なメモリであり、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などの半導体メモリにより構成されている。内部メモリ１１３は、コア部１１４により作成される通信ヘッダ１１８を記憶する。内部メモリ１１３の空き容量は符号１１９で示されている。
【００１８】
コア部１１４は、ヘッダ処理を実行するモジュールであり、レジスタ部１１２の制御情報１１７に基づいて制御される。コア部１１４は、レジスタ部１１２の制御情報１１７によりヘッダ処理を開始すると、レジスタ部１１２のヘッダ編集情報１１６に従い、ひな形ヘッダ１１５を指定された個数だけ内部メモリ１１３の通信ヘッダ１１８として複製する。そして、コア部１１４は、ヘッダ編集情報１１６に従い、通信ヘッダ１１８のヘッダ内情報を編集し、通信ヘッダ１１８の作成を完了する。
【００１９】
（ソフトウェア構成）
図２は、本実施形態に係る通信装置１００のソフトウェア構成を示すブロック図である。
通信装置１００は、制御部２０１、ＬＡＮ通信制御部２０２、記憶制御部２０３、ＴＣＰ／ＩＰ通信制御部２０４、第１のパケット作成部２０５、第２のパケット作成部２０６および第１のメモリ空き容量管理部２０７を備える。ＴＣＰ／ＩＰ通信制御部２０４は、以下、「ＴＣＰ／ＩＰ制御部２０４」と称する。
図２に示した通信装置１００の各部２０１〜２０７が担う処理は、サブシステム１０３（図１）のサブＣＰＵ１０６により実行される。なお、通信装置１００は、上記した各部２０１〜２０７の全てを備えなくてもよい。
【００２０】
制御部２０１は、通信装置１００のＬＡＮ通信制御部２０２〜第１のメモリ空き容量管理部２０７を制御する。
ＬＡＮ通信制御部２０２は、通信インタフェース１０９（図１）を制御し、他の通信装置（図示せず）とのＬＡＮ通信の制御を行う。通信装置１００が外部の無線アクセスポイント（図示せず）を経由して他の通信装置と接続する場合は、ＬＡＮ通信制御部２０２は通信インタフェース１０９を制御して無線アクセスポイントとの無線ＬＡＮ通信の制御を行う。なお、ＬＡＮ通信制御部２０２の通信方式は、上記したものに限定されず、有線ＬＡＮ通信機能など、ＩＰ通信が可能な他の通信方式を利用してもよい。
記憶制御部２０３は、メインメモリ１０２やローカルメモリ１０７を制御し、処理データ、画像コンテンツ、映像コンテンツなどのデータを記憶または削除する。
ＴＣＰ／ＩＰ制御部２０４は、ＬＡＮ通信制御部２０２を利用して、他の通信装置との間でＴＣＰ／ＩＰ方式の通信制御を行う。なお、本実施形態ではＴＣＰ／ＩＰ通信を利用する例を示すが、これに限らず、ＵＤＰなど他のプロトコルを利用してもよい。
【００２１】
第１のパケット作成部２０５は、サブシステム１０３のヘッダ処理部１１０を使用したハードウェア処理により通信ヘッダ１１８を作成し、当該通信ヘッダ１１８を用いて複数の送信パケットをまとめて作成する。第１のパケット作成部２０５は、ＴＣＰ／ＩＰ制御部２０４により利用される。
第２のパケット作成部２０６は、ソフトウェア処理により送信パケットを作成する。より具体的には、第２のパケット作成部２０６は、ソフトウェア処理により通信ヘッダを作成して、当該通信ヘッダを用いて送信パケットを作成する。第２のパケット作成部２０６は、ヘッダ処理部１１０を使用しない。第２のパケット作成部２０６は、ＴＣＰ／ＩＰ制御部２０４により利用される。
第１のメモリ空き容量管理部２０７は、内部メモリ１１３の空き容量１１９を管理する。第１のメモリ空き容量管理部２０７は、ＴＣＰ／ＩＰ制御部２０４により利用される。
【００２２】
（パケット作成部の処理手順）
ここで、第１のパケット作成部２０５の処理手順を説明する。なお、以下に説明する処理手順は第１のパケット作成部２０５の処理手順の一例であり、内部メモリ１１３に通信ヘッダ１１８を作成するパケット作成部であれば他の処理手順を採用してもよい。
第１のパケット作成部２０５（メインＣＰＵ１０１）は、まず、メインメモリ１０２のアプリケーションバッファに送信データが蓄積されたか否かを検知する。送信データは、通信装置１００が他の通信装置に送信するデータである。送信データがアプリケーションバッファに蓄積されたことを検知すると、第１のパケット作成部２０５（メインＣＰＵ１０１）は、サブシステム１０３のサブＣＰＵ１０６に送信情報（送信データのデータサイズ、蓄積場所など）を通知する。通知を受けたサブＣＰＵ１０６（第１のパケット作成部２０５）は、送信情報に基づき、ＤＭＡコントローラ１０８を使用してメインメモリ１０２からローカルメモリ１０７へ送信データを転送する。次に、第１のパケット作成部２０５（サブＣＰＵ１０６）は、ローカルメモリ１０７の送信データをパケット単位に分割し、各パケットのペイロード部を確定する。また、第１のパケット作成部２０５（サブＣＰＵ１０６）は、ヘッダ作成に必要な情報として、ひな形ヘッダ１１５、ヘッダ編集情報１１６および制御情報１１７をヘッダ処理部１１０のレジスタ部１１２に設定する。そして、第１のパケット作成部２０５は、レジスタ部１１２の情報に基づき、ヘッダ処理部１１０（コア部１１４）を用いて内部メモリ１１３に通信ヘッダ１１８を作成する。最後に、第１のパケット作成部２０５（サブＣＰＵ１０６）は、ＤＭＡコントローラ１０８を用いて、内部メモリ１１３の通信ヘッダ１１８と、ローカルメモリ１０７の送信データを結合して、ローカルメモリ１０７にパケットを作成する。
作成されたパケットは、サブＣＰＵ１０６により、ＤＭＡコントローラ１０８を用いて、通信インタフェース１０９を介して外部機器（他の通信装置）へ送信される。なお、ここではローカルメモリ１０７にパケットを作成する例を示したが、メインメモリ１０２や他のメモリに送信データを作成してもよい。
【００２３】
次に、第２のパケット作成部２０６の処理手順について説明する。なお、以下に説明する処理手順は、第２のパケット作成部２０６の処理手順の一例であり、ローカルメモリ１０７に通信ヘッダ１１８を作成するパケット作成部であれば他の処理手順を採用してもよい。
第２のパケット作成部２０６（メインＣＰＵ１０１）は、まず、メインメモリ１０２のアプリケーションバッファに送信データが蓄積されたことを検知する。当該検知の後、第２のパケット作成部２０６（メインＣＰＵ１０１）は、サブシステム１０３のサブＣＰＵ１０６に送信情報を通知する。通知を受けたサブＣＰＵ１０６（第２のパケット作成部２０６）は、送信情報に基づき、ＤＭＡコントローラ１０８を使用してメインメモリ１０２からローカルメモリ１０７へ送信データを転送する。次に、第２のパケット作成部２０６（サブＣＰＵ１０６）は、ローカルメモリ１０７の送信データをパケット単位に分割し、各パケットのペイロード部を確定する。そして、第２のパケット作成部２０６（サブＣＰＵ１０６）は、ソフトウェア処理によりローカルメモリ１０７に通信ヘッダ１１８を作成し、ペイロードと結合してパケットを作成する。
作成されたパケットは、サブＣＰＵ１０６により、通信インタフェース１０９を介して外部機器へ送信される。なお、ここではローカルメモリ１０７にパケットを作成する例を示したが、メインメモリ１０２や他のメモリにパケットを作成してもよい。
【００２４】
（パケット作成部を使い分けたパケット送信）
図３は、本実施形態に係る通信装置１００が送信パケット作成部を切り替える手順を示すフローチャートである。以下の記載において、ＳはＳｔｅｐの略である。
Ｓ３０１において、通信装置１００のＴＣＰ／ＩＰ制御部２０４は、送信パケットを作成する際に、まとめて作成できるパケット数から作成する通信ヘッダの合計サイズ（ヘッダのデータサイズ）を算出する。そして、ＴＣＰ／ＩＰ制御部２０４は、算出した通信ヘッダの合計サイズと、第１のメモリ空き容量管理部２０７で取得した空き容量１１９のサイズと比較する。より具体的には、ＴＣＰ／ＩＰ制御部２０４は、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９以下であるかを判定する。作成する通信ヘッダの合計サイズが第１のメモリ空き容量管理部２０７で取得した空き容量１１９のサイズ以下の場合（Ｓ３０１；Ｙｅｓ）、Ｓ３０２に進む。作成する通信ヘッダの合計サイズが第１のメモリ空き容量管理部２０７で取得した空き容量１１９のサイズを超える場合（Ｓ３０１；Ｎｏ）、Ｓ３０３に進む。
【００２５】
Ｓ３０２において、ＴＣＰ／ＩＰ制御部２０４は、第１のパケット作成部２０５に、送信パケットを作成することを指示する。上記したように、第１のパケット作成部２０５は、内部メモリ１１３に通信ヘッダ１１８を作成する。つまり、Ｓ３０２では、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３を使用してハードウェア処理で通信パケットを作成することを、第１のパケット作成部２０５に命ずる。これに応じて、第１のパケット作成部２０５は、送信パケットを作成する。
Ｓ３０３において、ＴＣＰ／ＩＰ制御部２０４は、第２のパケット作成部２０６に、送信パケットの作成を指示する。上記したように、第２のパケット作成部２０６は、ローカルメモリ１０７に通信ヘッダ１１８を作成する。つまり、Ｓ３０３では、ＴＣＰ／ＩＰ制御部２０４は、ローカルメモリ１０７を使用してソフトウェア処理で送信パケットを作成することを、第２のパケット作成部２０６に命ずる。これに応じて、第２のパケット作成部２０６は、送信パケットを作成する。
なお、Ｓ３０１では、ハードウェア処理で送信パケットを作成する場合にヘッダ作成に必要なデータサイズと、内部メモリの空き容量１１９に基づき、ハードウェア処理で送信パケットを作成するか、ソフトウェア処理で送信パケットを作成するかを選択している。そして、ハードウェア処理で送信パケットを作成することが選択された場合（Ｓ３０１；Ｙｅｓ）、内部メモリを使用してハードウェア処理で送信パケットを作成している。また、ソフトウェア処理で送信パケットを作成することが選択された場合（Ｓ３０１；Ｎｏ）、ローカルメモリを使用してソフトウェア処理で送信パケットを作成している。ヘッダ作成に必要なデータサイズは、ヘッダサイズと称してもよい。
また、Ｓ３０１の判定結果がＹｅｓになる場合は、内部メモリ１１３の空き容量１１９が、ヘッダを作成するために必要なデータサイズ以上の場合であると言える。Ｓ３０１の判定結果がＮｏになる場合は、内部メモリ１１３の空き容量１１９が、ヘッダを作成するために必要なデータサイズ未満の場合であると言える。
【００２６】
（第１実施形態の効果）
第１実施形態による通信装置１００は、複数の送信パケットをまとめて作成する際に、作成する通信ヘッダの合計サイズと内部メモリ１１３の空き容量１１９のサイズとに基づき、第１のパケット作成部２０５と第２のパケット作成部２０６を使い分ける。より詳しくは、内部メモリ１１３の空き容量が十分ではない場合（Ｓ３０１；Ｎｏ）、第１のパケット作成部２０５を使用せずに（内部メモリ１１３の解放を待つのではなく）、第２のパケット作成部を使用して送信パケットを作成する（Ｓ３０３）。このように、第１のパケット作成部と第２のパケット作成部２０６を使い分けることにより、内部メモリ１１３の解放待ちによる第１のパケット作成部２０５の処理待ちを防止でき、通信装置１００の通信性能の低下を防止することが可能となる。
【００２７】
（変形例）
Ｓ３０１において、通信装置１００のＴＣＰ／ＩＰ制御部２０４は、まとめて作成できるパケット数から作成する通信ヘッダの合計サイズを算出したが、レジスタ部１１２が保持する情報から、作成する通信ヘッダの合計サイズを算出・取得してもよい。
【００２８】
第２実施形態
次に、本発明の第２実施形態に係る通信処理１００Ａを図１、図４および図５を参照して説明する。なお、以下の記載において、第１実施形態と同様の構成や制御・処理については、同様な参照符号を用い、説明を省略する。
第１実施形態では、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズを超える場合（Ｓ３０１；Ｎｏ）、第２のパケット作成部２０６により送信パケットを作成した。本発明はこのような実施形態に限定されない。例えば、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズを超える場合であっても、所定の条件を満たせば、内部メモリ１１３の解放を待って第１のパケット作成部２０５で送信パケットを作成してもよい。このような処理を行う通信装置１００Ａを、第２実施形態として説明する。
【００２９】
（装置の構成）
第２実施形態に係る通信装置１００Ａのモジュール構成は、第１実施形態（図１）と同様である。第２実施形態に係る通信装置１００Ａのソフトウェア構成は、図４に示されている。図４のソフトウェア構成は、図２のソフトウェア構成（第１実施形態）に、通信インタフェース特定部２０８、メモリ解放時間管理部２０９、およびパケット作成時間算出部２１０を追加した構成である。
【００３０】
通信インタフェース特定部２０８は、パケットを送信するために使用する通信インタフェース１０９（図１）を特定する。例えば、通信インタフェース特定部２０８は、有線ネットワークに適した通信インタフェースが使用されるのか、無線ネットワークに適した通信インタフェースが使用されるのかを特定する。通信インタフェース特定部２０８は、ＴＣＰ／ＩＰ制御部２０４により利用される。通信インタフェース特定部２０８は、ＬＡＮ通信制御部２０２が通信インタフェース１０９を制御してパケットを送信する際に、パケットヘッダ情報と使用する通信インタフェース情報とを取得する。そして、通信インタフェース特定部２０８は、パケットヘッダ情報と通信インタフェース１０９を紐付けて管理する。ＴＣＰ／ＩＰ制御部２０４は、送信パケットのヘッダ情報を用いて通信インタフェース特定部２０８に、使用する通信インタフェースを問い合わせる。
【００３１】
メモリ解放時間管理部２０９は、内部メモリ１１３に通信ヘッダ１１８が作成されてからパケット送信を終えて内部メモリ１１３が解放されるまでの時間（例えば、平均解放時間）を管理する。メモリ解放時間管理部２０９は、平均解放時間を、通信装置１００Ａが備える通信インタフェース１０９の種別ごと（無線ＬＡＮ通信、有線ＬＡＮ通信など）に管理する。メモリ解放時間管理部２０９は、ＴＣＰ／ＩＰ制御部２０４により利用される。メモリ解放時間管理部２０９が保持する内部メモリ１１３の平均解放時間は、事前に設定（入力）しておく。なお、メモリ解放時間管理部２０９は、送信処理中に内部メモリ１１３の解放時間を計測し、平均解放時間を更新してもよい。
【００３２】
内部メモリ１１３に通信ヘッダ１１８が作成されてからパケット送信を終えて内部メモリ１１３が解放されるまでの時間（解放時間）は、内部メモリ１１３が解放されるまでの待ち時間（メモリ解放待ち時間）と称することもできる。
パケット作成時間算出部２１０は、ローカルメモリ１０７に通信ヘッダ１１８を作成する第２のパケット作成部２０６でパケットを作成するために必要な処理時間（例えば、平均処理時間）を取得・算出する。パケット作成時間算出部２１０は、ＴＣＰ／ＩＰ制御部２０４により利用される。パケット作成時間算出部２１０が保持する１パケットあたりの平均処理時間は、通信インタフェース１０９の種別ごとに事前に設定しておく。なお、パケット作成時間算出部２１０は、第２のパケット作成部２０６のパケット作成時間を計測し、１パケットあたりの平均処理時間を更新してもよい。
【００３３】
（パケット作成部を使い分けたパケット送信）
図５は、本実施形態に係る通信装置１００Ａが送信パケット作成部を切り替える手順を示すフローチャートである。
Ｓ５０１は、Ｓ３０１と同様のステップである。また、Ｓ５０２は、Ｓ３０２と同様のステップである。Ｓ５０１の判定結果がＮｏの場合、Ｓ５０３に進む。
Ｓ５０３において、通信装置１００ＡのＴＣＰ／ＩＰ制御部２０４は、通信インタフェース特定部２０８を使用して、送信パケットが通過する通信インタフェース１０９を特定する。そして、ＴＣＰ／ＩＰ制御部２０４は、メモリ解放時間管理部２０９から、特定した通信インタフェース１０９の平均解放時間（平均メモリ解放待ち時間）を取得する。本実施形態では、内部メモリの解放待ち時間は、特定された通信インタフェース１０９に基づいて決まる。
【００３４】
Ｓ５０４において、ＴＣＰ／ＩＰ制御部２０４は、パケット作成時間算出部２１０を使用して、これから作成するパケット数分のパケットを第２のパケット作成部２０６で作成する場合のパケット作成時間を取得する。つまり、ＴＣＰ／ＩＰ制御部２０４は、ソフト処理でパケットを作成する場合のパケット作成時間を取得する。そして、ＴＣＰ／ＩＰ制御部２０４は、第２のパケット作成部２０６でのパケット作成時間と、Ｓ５０３で取得した平均解放時間（通信インタフェースの平均メモリ解放待ち時間）とを比較する。より詳しくは、ＴＣＰ／ＩＰ制御部２０４は、ソフト処理でのパケット作成時間が通信インタフェースの平均メモリ解放待ち時間より長いか否かを判定する。第２のパケット作成部２０６でのパケット作成時間が平均解放時間より長い場合（Ｓ５０４；Ｙｅｓ）、Ｓ５０５に進む。第２のパケット作成部２０６でのパケット作成時間が平均解放時間以下の場合（Ｓ５０４；Ｎｏ）、Ｓ５０６に進む。
Ｓ５０５において、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３の解放を待ってから、内部メモリ１１３に通信ヘッダ１１８を作成する第１のパケット作成部２０５で送信パケットを作成することを指示する。つまり、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３の解放を待ち、当該解放後に、第１のパケット作成部２０５に送信パケットの作成を命ずる。これに応じて、第１のパケット作成部２０５は、ハード処理で送信パケットを作成する。
Ｓ５０６はＳ３０３と同様のステップである。
なお、Ｓ５０１からＳ５０５に進む場合は、内部メモリ１１３の空き容量１１９がヘッダのデータサイズ未満であり、且つ、内部メモリ１１３の解放待ち時間が第２のパケット作成部２０６のパケット作成時間未満の場合であると言える。また、Ｓ５０１からＳ５０６に進む場合は、内部メモリ１１３の空き容量１１９が前記データサイズ未満であり、且つ、内部メモリ１１３の解放待ち時間が、第２のパケット作成部２０６のパケット作成時間以上の場合である。
【００３５】
（第２実施形態の効果）
本実施形態の通信装置１００Ａは、複数の送信パケットをまとめて作成する際に、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズを超える場合でも、直ちにパケット作成部を切り替えない。通信装置１００Ａは、通信インタフェース１０９ごとに設定した平均解放時間に基づき、内部メモリ１１３の解放を待って第１のパケット作成部２０５で送信パケットを作成するか、第２のパケット作成部２０６で送信パケットを作成するかを判断（決定）する。このような判断（決定）により、内部メモリ１１３の空き容量１１９が不足している場合に必ず第２のパケット作成部２０６で送信パケットを作成するよりも、送信パケット作成の処理効率が向上し、通信性能の低下を防止することが可能となる。つまり、第２実施形態では、内部メモリ１１３の空き容量１１９が十分でない場合であっても、内部メモリ１１３の解放を待って第１のパケット作成部２０５を使用する方がパケット作成処理の停滞を抑制できるのであれば、内部メモリ１１３の解放を待つ。
【００３６】
（変形例）
なお、Ｓ５０３において、送信パケットが他の通信装置に送信される際に通過する通信インタフェース１０９を特定し、特定した通信インタフェース１０９に応じた平均メモリ解放待ち時間を取得したが、Ｓ５０３はこのような処理に限定されない。Ｓ５０３は、通信インタフェースに応じた（対応した）内部メモリ１１３の解放待ち時間が取得（あるいは算出）できるのであれば、どのような処理でもよい。例えば、通信インタフェース１０９を特定するという処理を省略しても通信インタフェースに対応した内部メモリ１１３の解放待ち時間が取得・算出できるのであれば、通信インタフェース１０９を特定するという処理を省略してもよい。
【００３７】
第３実施形態
次に、本発明の第３実施形態に係る通信処理１００Ｂを図１、図６および図７を参照して説明する。なお、以下の記載において、第１実施形態と同様の構成や制御・処理については、同様な参照符号を用い、説明を省略する。
第１実施形態では、送信パケット作成部を切り替えるフローチャート（図３）の最初のステップ（Ｓ３０１）において、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズ以下か否かだけを判定した。本発明はこのような実施形態に限定されない。例えば、送信パケットの数やヘッダ情報（フラグ、プロトコル種別など）も考慮に入れて、第１のパケット作成部２０５と第２のパケット作成部２０６を使い分けてもよい。このような処理を行う通信装置１００Ｂを、第３実施形態として説明する。
【００３８】
（装置の構成）
本実施形態に係る通信装置１００Ｂのモジュール構成は、第１実施形態（図１）と同様である。本実施形態に係る通信装置１００Ｂのソフトウェア構成は、図６に示されている。図６のソフトウェア構成は、図２のソフトウェア構成（第１実施形態）にパケット種別判別部２１１を追加した構成である。
本実施形態では、送信パケットの数やヘッダ情報（フラグ、プロトコル種別など）を送信パケットの種別と称する。よって、パケット種別判別部２１１は、送信パケットの数やヘッダ情報を判別する。パケット種別判別部２１１は、ＴＣＰ／ＩＰ制御部２０４により利用される。
【００３９】
（パケット作成部を使い分けたパケット送信）
図７は、第３実施形態に係る通信装置１００Ｂが送信パケット作成部を切り替える手順を示すフローチャートである。
Ｓ７０１において、通信装置１００ＢのＴＣＰ／ＩＰ制御部２０４は、Ｓ３０１の条件に加えて、送信パケットを作成する際にパケット種別判別部２１１で送信パケットの種別を判別する。具体的には、Ｓ３０１の条件に加えて、パケット種別判別部２１１は、送信パケットの数や再送フラグを確認（判別）する。Ｓ３０１の条件を満たし且つ送信パケットのパケットの数が２つ以上である場合、Ｓ７０２に進む。また、Ｓ３０１の条件を満たし且つ再送フラグを確認できない場合、Ｓ７０２に進む。なお、送信パケットに再送パケットが含まれていない（送信パケットが再送パケットでない）場合、再送フラグは確認できない。
一方、Ｓ３０１の条件を満たした場合であっても、送信パケットのパケットの数が１つの場合には、Ｓ７０３に進む。また、Ｓ３０１の条件を満たした場合であっても、再送フラグを確認できた（再送パケットが含まれている）場合には、Ｓ７０３に進む。
Ｓ７０１からＳ７０３に進む場合は、例えば、ヘッダのデータサイズが、内部メモリ１１３の空き容量以下であっても、送信パケットの数が１の場合である。
【００４０】
ひな形ヘッダ１１５はソフトウェア処理で作成されるため、送信パケットの数が１の場合は、第２のパケット作成部２０６によりローカルメモリ１０７に通信ヘッダ１１８を作成した方が送信パケットの作成処理の負荷が軽くなる。つまり、送信パケットの数が１の場合は、第１のパケット作成部２０５で内部メモリ１１３に通信ヘッダ１１８を作成するよりも、第２のパケット作成部２０６でローカルメモリ１０７に通信ヘッダ１１８を作成した方が、送信パケット作成処理負荷が軽くなる。
また、送信パケットに再送パケットが含まれている場合、再送パケット用にひな形ヘッダ１１５を作成する必要があるため、第２のパケット作成部２０６でローカルメモリ１０７に通信ヘッダ１１８を作成した方が送信パケットの作成処理の負荷が軽くなる。つまり、この場合も、第１のパケット作成部２０５で内部メモリ１１３に通信ヘッダ１１８を作成するよりも、第２のパケット作成部２０６でローカルメモリ１０７に通信ヘッダ１１８を作成した方が送信パケットの作成処理の負荷が軽くなる。
Ｓ７０２は、Ｓ３０２と同様のステップである。また、Ｓ７０３は、Ｓ３０３と同様のステップである。
【００４１】
（第３実施形態の効果）
本実施形態の通信装置１００Ｂは、複数の送信パケットをまとめて作成する際に、作成する通信ヘッダの合計サイズと送信パケットの種別（送信パケットの数、再送フラグ）とに基づき、第１のパケット作成部２０５と第２のパケット作成部２０６を使い分ける。これにより、第１実施形態と比較して、送信パケット作成の処理効率を向上することができ、通信性能の低下を抑制・防止することができる。つまり、内部メモリ１１３が使用可能である場合に必ず第１のパケット作成部２０５で送信パケットを作成する（Ｓ３０１→Ｓ３０２）よりも、送信パケット作成の処理効率が向上し、通信性能の低下を抑制・防止できる。
【００４２】
（変形例）
なお、Ｓ７０１では、Ｓ３０１の条件を満たす場合、送信パケットの数が２以上でなくても再送フラグがなければ、Ｓ７０１の判別結果はＹｅｓになる。また、Ｓ７０１では、Ｓ３０１の条件を満たす場合、再送フラグがあっても、送信パケットの数が２以上であれば、Ｓ７０１の判別結果はＹｅｓになる。本実施形態のＳ７０１はこのような処理に限定されない。例えば、Ｓ３０１の条件を満たした上で、送信パケットの数が２以上であり且つ再送フラグがない場合にのみ、Ｓ７０１の判定結果がＹｅｓになるようにしてもよい。
第３実施形態では、Ｓ３０１の条件に１つ以上の追加条件を加えて、その判定結果に基づいて第１のパケット作成部２０５を使用すべきか第２のパケット作成部２０６を使用すべきかを決定（選択）している。Ｓ７０１において追加条件を加えて判定を行うことにより、送信パケット作成の処理効率の更なる向上を図っている。
また、Ｓ７０１においてプロトコル種別に基づく判定を行ってもよい。
【００４３】
第４実施形態
次に、本発明の第４実施形態に係る通信処理１００Ｃを図１、図２および図８を参照して説明する。なお、以下の記載において、第１実施形態と同様の構成や制御・処理については、同様な参照符号を用い、説明を省略する。
第１実施形態では、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズ以下か否かに基づいて、第１のパケット作成部２０５と第２のパケット作成部２０６を使い分けた。本発明はこのような実施形態に限定されない。例えば、内部メモリ１１３の空き容量１１９が１パケットのヘッダサイズ以上であるか否かに基づいて、第１のパケット作成部２０５と第２のパケット作成部２０６を使い分けてもよい。このような処理を行う通信装置１００Ｃを、第４実施形態として説明する。
【００４４】
（装置の構成）
第４実施形態に係る通信装置１００Ｃのモジュール構成は、第１実施形態（図１）と同様である。第４実施形態に係る通信装置１００Ｃのソフトウェア構成は、図２に示したソフトウェア構成（第１実施形態）に、送信データサイズ決定部を追加した構成である。このソフトウェア構成は、図６に示したソフトウェア構成（第３実施形態）のパケット種別判別部２１１を、送信データサイズ決定部に置き換えた構成であるともいえる。
送信データサイズ決定部は、内部メモリ１１３の空き容量１１９と１パケットあたりのヘッダサイズとを比較する。また、送信データサイズ決定部は、他の通信装置から受信したパケットの通信ヘッダ情報やメモリの空き容量などに基づき、アプリケーションバッファから取り出すデータサイズを決定する。送信データサイズ決定部はＴＣＰ／ＩＰ制御部２０４により利用される。
【００４５】
（パケット作成部を使い分けたパケット送信）
図８は、第４実施形態に係る通信装置１００Ｃが送信パケット作成部を切り替える手順を示すフローチャートである。
Ｓ８０１において、通信装置１００ＣのＴＣＰ／ＩＰ制御部２０４は、送信パケットを作成する際に、送信データサイズ決定部で、内部メモリ１１３の空き容量１１９と１パケットあたりのヘッダサイズとを比較する。より詳しくは、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３の空き容量１１９が１パケットあたりのヘッダサイズ以上であるかを判定する。内部メモリ１１３の空き容量１１９が１パケットあたりのヘッダサイズ以上の場合（Ｓ８０１；Ｙｅｓ）、Ｓ８０２に進む。内部メモリ１１３の空き容量１１９が１パケットあたりのヘッダサイズ未満の場合（Ｓ８０１；Ｎｏ）、Ｓ８０４に進む。なお、図８では内部メモリ１１３の空き容量１１９と比較するサイズを１パケットあたりのヘッダサイズとしたが、複数パケットのヘッダサイズの合計値でもよい。
Ｓ８０１の判定結果がＹｅｓの場合、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３を使用できると判断する。第１実施形態では、内部メモリ１１３の空き容量１１９が通信ヘッダの合計サイズ以上である場合に内部メモリ１１３を使用できると判断したが、本実施形態では空き容量１１９が１パケットのヘッダサイズ以上であれば、内部メモリを使用できると判断する。Ｓ８０１の判定結果がＮｏの場合、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３を使用できないと判断する。
【００４６】
Ｓ８０２において、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３を使用して第１のパケット作成部２０５により送信パケットを作成するために、内部メモリ１１３の空き容量１１９に格納できるヘッダ数を算出する。ヘッダ数を算出する際、ＴＣＰ／ＩＰ制御部２０４は、送信データサイズ決定部を利用する。そして、ＴＣＰ／ＩＰ制御部２０４は、ヘッダ数分のパケットで送信できるデータサイズに基づき、送信データサイズ決定部により、送信バッファから取り出すデータサイズを決定する。つまり、Ｓ８０２において、送信データサイズ決定部は、内部メモリ１１３の空き容量１１９に基づき、送信バッファから取り出すデータサイズを決定する。
Ｓ８０３はＳ３０２と同様であるが、第１のパケット作成部２０５は、Ｓ８０２で決定したデータサイズに基づき、送信パケットを作成する。つまり、作成する送信パケットの数は、Ｓ８０２で決定したデータサイズにより決まる。
【００４７】
Ｓ８０１からＳ８０４に進む場合、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３を使用できないと判断しているので、第２のパケット作成部２０６で送信パケットを作成する。第２のパケット作成部２０６で送信パケットを作成するために、ＴＣＰ／ＩＰ制御部２０４は、Ｓ８０４において、他の通信装置から受信したパケットの通信ヘッダ情報に基づき、送信バッファから取り出すデータサイズを決定する。他の通信装置から受信したパケットの通信ヘッダ情報は、たとえば、ウインドウサイズ（Ｗｉｎｄｏｗ  Ｓｉｚｅ）などを含む。送信バッファから取り出すデータサイズを決定する際、ＴＣＰ／ＩＰ制御部２０４は、送信データサイズ決定部を利用する。
Ｓ８０５はＳ３０３と同様であるが、第２のパケット作成部２０６は、Ｓ８０４で決定したデータサイズに基づき、送信パケットを作成する。つまり、作成する送信パケットの数は、Ｓ８０４で決定したデータサイズにより決定する。
【００４８】
（第４実施形態の効果）
通信装置１００Ｃは複数の送信パケットをまとめて作成する際に、まず、内部メモリ１１３の空き容量が１パケットのヘッダサイズ以上であるかを判定する（Ｓ８０１）。内部メモリの空き容量が１パケットのヘッダサイズ以上であれば、内部メモリ１１３を使用できると判断し、第１のパケット作成部２０５で送信パケットを作成する。そして、送信バッファから取り出すデータサイズを、内部メモリ１１３の空き容量１１９に基づいて決定した後、送信パケットを作成する。このような処理により、本実施形態では、内部メモリ１１３を使い切るまで第１のパケット作成部２０５で送信パケットを作成できるため、通信性能を向上させることが可能となる。
なお、本実施形態でも、内部メモリ１１３の空き容量が十分ではない場合（Ｓ８０１；Ｎｏ）、第１のパケット作成部２０５を使用せず（内部メモリ１１３の解放を待たず）、第２のパケット作成部を使用して送信パケットを作成する（Ｓ８０４、Ｓ８０５）。よって、内部メモリ１１３の解放待ちによる第１のパケット作成部２０５の処理待ちを防止でき、通信装置１００Ｃの通信性能の低下を防止することが可能となる。
【００４９】
第５実施形態
次に、本発明の第５実施形態に係る通信処理１００Ｄを図１、図２および図９を参照して説明する。なお、以下の記載において、第１実施形態と同様の構成や制御・処理については、同様な参照符号を用い、説明を省略する。
第１実施形態では、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズより大きい場合、常に第２のパケット作成部２０６を使用している（Ｓ３０１→Ｓ３０３）。本発明はこのような実施形態に限定されない。例えば、作成する通信ヘッダの合計サイズが内部メモリ１１３の空き容量１１９のサイズより大きい場合、ローカルメモリの空き容量が所定の条件を満たすかを判定する。そして、ローカルメモリの空き容量が所定の条件を満たすならば、第２のパケット作成部２０６を使用し、そうでなければ、第２のパケット作成部２０６を使用しなくてもよい。このような処理を行う通信装置１００Ｄを、第５実施形態として説明する。
また、第５実施形態において、通信装置１００Ｄは、ローカルメモリの空き容量が所定の条件を満たさない場合には、他に使用できるメモリが存在しないかを確認し、他に使用できるメモリが存在すれば当該メモリを使用して送信パケットを作成する。他に使用できるメモリが存在しなければ、内部メモリ１１３またはローカルメモリ１０７の解放を待ち、第１のパケット作成部２０５または第２のパケット作成部２０６で送信パケットを作成する。
【００５０】
（装置の構成）
第５実施形態に係る通信装置１００Ｄのモジュール構成例は、第１実施形態（図１）と同様である。第５実施形態に係る通信装置１００Ｄのソフトウェア構成例は、図２に示したソフトウェア構成（第１実施形態）に第２のメモリ空き容量管理部を追加した構成である。このソフトウェア構成は、図６に示したソフトウェア構成（第３実施形態）のパケット種別判別部２１１を、第２のメモリ空き容量管理部に置き換えた構成であるともいえる。
第２のメモリ空き容量管理部は、ローカルメモリ１０７の空き容量を管理する。第２のメモリ空き容量管理部は、ＴＣＰ／ＩＰ制御部２０４により利用される。
【００５１】
（パケット作成部を使い分けたパケット送信）
図９は、本実施形態に係る通信装置１００Ｄが送信パケット作成部を切り替える手順を示すフローチャートである。
Ｓ９０１はＳ３０１と同様のステップである。また、Ｓ９０２はＳ３０２と同様のステップである。Ｓ９０１の判定結果がＮｏの場合、Ｓ９０３に進む。
Ｓ９０３において、通信装置１００ＤのＴＣＰ／ＩＰ制御部２０４は、送信パケットを作成する際に、第２のメモリ空き容量管理部でローカルメモリ１０７の空き容量と１パケットあたりのヘッダサイズとを比較する。より具体的には、ＴＣＰ／ＩＰ制御部２０４は、ローカルメモリ１０７の空き容量が１パケットあたりのヘッダサイズ以上であるかを判定する。ローカルメモリ１０７の空き容量が１パケットあたりのヘッダサイズ以上の場合（Ｓ９０３；Ｙｅｓ）、Ｓ９０４に進む。ローカルメモリ１０７の空き容量が１パケットあたりのヘッダサイズ未満の場合（Ｓ９０３；Ｎｏ）、Ｓ９０５に進む。Ｓ９０１からＳ９０３を経由してＳ９０５に進む場合は、内部メモリ１１３およびローカルメモリ１０７に十分な空き容量がない場合である。この場合、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３およびローカルメモリ１０７を送信パケットの作成に使用できないと判断する。
Ｓ９０４は、Ｓ３０３と同様のステップである。
【００５２】
Ｓ９０５において、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３とローカルメモリ１０７を除いて、送信パケットの作成に使用できるメモリ（図９では「他のメモリ」と記す）が存在するかどうかを判定する。送信パケットの作成に使用できる「他のメモリ」が存在する場合（Ｓ９０５；Ｙｅｓ）、Ｓ９０６に進む。送信パケットの作成に使用できる「他のメモリ」が存在しない場合（Ｓ９０５；Ｎｏ）、Ｓ９０７に進む。
Ｓ９０６において、ＴＣＰ／ＩＰ制御部２０４は、内部メモリ１１３とローカルメモリ１０７を除く他のメモリを使用して、ソフト処理で送信パケットを作成する。このとき使用する送信パケット作成部は、ローカルメモリ１０７の代わりに他のメモリを使用した第２のパケット作成部２０６でもよいし、他の手段でもよい。
【００５３】
Ｓ９０７において、ＴＣＰ／ＩＰ制御部２０４は、第１のメモリ空き容量管理部２０７と第２のメモリ空き容量管理部を用いて、内部メモリ１１３またはローカルメモリ１０７の解放を待つ。解放されたメモリが内部メモリ１１３の場合は、ＴＣＰ／ＩＰ制御部２０４は、第１のパケット作成部２０５で送信パケットを作成する。解放されたメモリがローカルメモリ１０７の場合は、ＴＣＰ／ＩＰ制御部２０４は、第２のパケット作成部２０６で送信パケットを作成する。
【００５４】
（第５実施形態の効果）
第５実施形態による通信装置１００Ｄは、第１実施形態と同様な効果を有する。つまり、複数の送信パケットをまとめて作成する際に、内部メモリ１１３の空き容量が十分ではない場合（Ｓ９０１；Ｎｏ）、第１のパケット作成部２０５を使用しない（内部メモリ１１３の解放を待たない）。そして、ローカルメモリに十分な空き容量があれば（Ｓ９０３；Ｙｅｓ）、第２のパケット作成部２０６を使用して送信パケットを作成する（Ｓ９０４）。よって、内部メモリ１１３の解放待ちによる第１のパケット作成部２０５の処理待ちを防止でき、通信装置１００Ｄの通信性能の低下を防止することが可能となる。
また、通信装置１００Ｄは複数の送信パケットをまとめて作成する際に、内部メモリ１１３とローカルメモリ１０７のいずれにも十分な空き容量がない場合、他に使用できるメモリが存在しないかを確認（判定）する。そして、他に使用できるメモリが存在すれば、当該メモリを使用して送信パケットを作成し、他に使用できるメモリが存在しなければ、内部メモリ１１３またはローカルメモリ１０７の解放を待つ。このような処理により、内部メモリ１１３とローカルメモリ１０７の双方に十分な空き容量がない場合でも、通信性能の低下を抑制することが可能となる。
【００５５】
（変形例）
図９のフローチャートでは、Ｓ９０５の判定をした後、Ｓ９０６またはＳ９０７に進んだが、他のメモリが存在していることが分かっている場合には、Ｓ９０３の判定結果がＮｏの場合に、Ｓ９０５を経由せずにＳ９０６に進んでもよい。
また、Ｓ９０３では、１パケットのヘッダサイズとローカルメモリの空き容量を比較したが、所定数（複数）のパケットのヘッダサイズとローカルメモリの空き容量を比較してもよい。
【００５６】
他の実施形態
上記した実施形態では、通信装置１００〜１００Ｄを説明したが、本発明はその他の形態でも具現化（実現）することができる。例えば、本発明は、上記した実施形態の１以上の機能を実現するプログラム（コンピュータプログラム）を、ネットワークまたは記録媒体（記憶媒体）を介して、システムまたは装置に供給し、そのシステムまたは装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行することによっても実現可能である。この場合、記録媒体から読み出されたプログラム（プログラムコード）自体が実施形態の機能を実現することになる。また、当該プログラムを記録した記録媒体は本発明を構成することができる。
また、コンピュータが読み出したプログラムを実行することにより、実施形態の機能が実現されるだけでなく、プログラムの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって上記した実施形態の機能が実現されてもよい。
【００５７】
なお、通信装置１００〜１００Ｄは、操作部や表示部を備えてもよい。操作部は、例えば、ユーザからの操作や入力を受け入れる。操作部は、例えば、キーボードやタッチパネルを含む。表示部は、視覚表示および音声の少なくとも一方を出力する機能を備える。表示部は、例えば、液晶パネル、ＬＥＤおよびスピーカを有し、メインＣＰＵ１０１の制御の下で各種の表示及び音声出力を行う。
上記した実施形態では、他の通信装置との無線通信は、図２、図４および図６のＬＡＮ通信制御部２０２で制御するとしたが、無線ＬＡＮ以外の通信で他の通信装置を行う場合には、ＬＡＮ通信制御部２０２に代わる通信制御部を使用する。他の通信装置との通信は、無線通信でもよいし、有線通信でもよい。
通信装置１００〜１００Ｄは、通信機能を備えると共に、通信ヘッダをハードウェアおよびソフトウェアで作成する機能を備える装置であればよく、例えば、パーソナルコンピュータ、タブレットコンピュータ、スマートフォン、カメラ、プロジェクタなどでもよい。ヘッダ処理部１１０はプロセッサとして構成されてもよい。
【００５８】
図２、図４および図６に示したソフトウェア構成は一例であり、複数のブロックが１つのブロックを構成するようにしてもよいし、何れかのブロックが複数の機能を行うブロックに分かれてもよい。
図２、図４および図６に示したブロックの少なくとも一部をハードウェアにより実現してもよい。ハードウェアにより実現する場合、例えば、所定のコンパイラを用いることで、各ステップを実現するためのプログラムからＦＰＧＡ上に自動的に専用回路を生成すればよい。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウェアとして実現するようにしてもよい。また、ＡＳＩＣにより実現するようにしてもよい。ＦＰＧＡは、Ｆｉｅｌｄ―Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。ＡＳＩＣは、Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略である。
【符号の説明】
【００５９】
１００…通信装置、１０６…サブＣＰＵ、１０７…ローカルメモリ、１１０…ヘッダ処理部、１１３…内部メモリ、１１８…通信ヘッダ、１１９…内部メモリの空き容量、２０１…制御部、２０５…第１のパケット作成部、２０６…第２のパケット作成部 
【図１】
2019057781.tif 000003
【図２】
2019057781.tif 000004
【図３】
2019057781.tif 000005
【図４】
2019057781.tif 000006
【図５】
2019057781.tif 000007
【図６】
2019057781.tif 000008
【図７】
2019057781.tif 000009
【図８】
2019057781.tif 000010
【図９】
2019057781.tif 000011