(57)【要約】【課題】効率的に通信パケットを生成するパケット生成装置を提供する。【解決手段】パケット生成装置は、１つの送信データから、所定長を超えない１つ以上のパケットを生成する第１のモードと、複数の送信データからそれら送信データの個数を超えない数のパケットを生成する第２のモードと、を有する生成部と、ローカルメモリへの送信対象データの格納状態に基づいて、生成部に提供するための、送信対象データから派生する送信データを決定する決定部と、を備える。生成部は、決定部により決定された送信データの個数に応じて前記第１のモードと前記第２のモードを切り替えて動作する。【選択図】  図３
2019092035.tif 000002
【特許請求の範囲】
【請求項１】
１つの送信データから、所定長を超えない１つ以上のパケットを生成する第１のモードと、複数の送信データからそれら送信データの個数を超えない数のパケットを生成する第２のモードと、を有する生成手段と、
ローカルメモリへの送信対象データの格納状態に基づいて、前記生成手段に提供するための、前記送信対象データから派生する送信データを決定する決定手段と、を備え、
前記生成手段は、前記決定手段により決定された送信データの個数に応じて前記第１のモードと前記第２のモードを切り替えて動作することを特徴とするパケット生成装置。
【請求項２】
前記生成手段は、前記第１のモードで動作する場合に、前記送信データを前記所定長で分割し、分割された送信データごとにパケットを生成することを特徴とする請求項１に記載のパケット生成装置。
【請求項３】
前記生成手段は、前記第１のモードで動作する場合に、生成されるパケットのペイロード長とシーケンス番号を、前記所定長を用いて計算することを特徴とする請求項１に記載のパケット生成装置。
【請求項４】
前記ローカルメモリの１つの送信バッファに前記送信対象データの全体が格納されている場合、前記第１のモードが実行されることを特徴とする請求項１乃至３のいずれか１項に記載のパケット生成装置。
【請求項５】
前記所定長は、通信プロトコルで決定される最大セグメントサイズであることを特徴とする請求項１乃至４のいずれか１項に記載のパケット生成装置。
【請求項６】
前記生成手段は、前記第２のモードで動作する場合に、前記複数の送信データの送信データごとに１つのパケットを生成することを特徴とする請求項１乃至５のいずれか１項に記載のパケット生成装置。
【請求項７】
前記決定手段は、前記複数の送信データについて、隣接する送信データとの結合の要否を指示するデータ結合情報を生成し、
前記生成手段は、前記第２のモードで動作する場合に、前記データ結合情報に従って送信データを結合してパケットの生成に用いることを特徴とする請求項１乃至５のいずれか１項に記載のパケット生成装置。
【請求項８】
前記データ結合情報は、１つの送信データに対して１ビットの情報であることを特徴とする請求項７に記載のパケット生成装置。
【請求項９】
前記決定手段は、送信データが次の送信データと結合されても結合された送信データのサイズがパケットのセグメントサイズを超えない場合に、当該送信データを結合させるようにデータ結合情報を生成することを特徴とする請求項７または８に記載のパケット生成装置。
【請求項１０】
前記決定手段は、前記データ結合情報の生成において、通信相手の性能に基づいて送信データを隣接する送信データと結合するか否かを決定することを特徴とする請求項７乃至９のいずれか１項に記載のパケット生成装置。
【請求項１１】
前記決定手段は、前記第２のモードで動作する場合に、パケットの生成に用いられる送信データのサイズを使用して、パケットのペイロード長とシーケンス番号を算出することを特徴とする請求項６乃至１０のいずれか１項に記載のパケット生成装置。
【請求項１２】
前記ローカルメモリにおいて、１つの送信バッファは連続したアドレスのメモリ空間で構成され、前記送信対象データが複数の送信バッファに分かれて格納された場合、前記送信対象データは前記複数の送信バッファの個数以上の送信データとして前記生成手段に提供されることを特徴とする請求項１乃至１１のいずれか１項に記載のパケット生成装置。
【請求項１３】
前記送信対象データが複数の送信バッファに分かれて格納された場合において、１つの送信バッファに所定長を超えるサイズのデータが格納されている場合は、当該データを、前記所定長を超えない２つ以上の送信データとして前記生成手段に提供することを特徴とする請求項１２に記載のパケット生成装置。
【請求項１４】
請求項１乃至１３のいずれか１項に記載されたパケット生成装置と、
所定のアプリケーションの実行により前記送信対象データを生成する処理手段と、
前記送信対象データを前記ローカルメモリにより提供される送信バッファへ転送する転送手段と、
前記パケット生成装置により生成されたパケットを送信することにより、前記送信対象データを送信する送信手段と、を備えることを特徴とする通信装置。
【請求項１５】
パケット生成装置の制御方法であって、
１つの送信データから、所定長を超えない１つ以上のパケットを生成する第１のモードと、複数の送信データからその個数を超えない数のパケットを生成する第２のモードと、のいずれかを実行する生成工程と、
ローカルメモリにより提供された送信バッファへの送信対象データの格納状態に基づいて、前記生成工程で処理させる送信データを決定する決定工程と、を有し、
前記生成工程では、前記決定工程で決定された送信データの個数に応じて前記第１のモードと前記第２のモードを切り替えて実行することを特徴とするパケット生成装置の制御方法。
【請求項１６】
所定のアプリケーションの実行により送信対象データを生成する第１の生成工程と、
前記送信対象データをローカルメモリにより提供される送信バッファへ転送する転送工程と、
前記送信バッファへの前記送信対象データの格納状態に基づいて、パケット生成の処理に提供する送信データを決定する決定工程と、
１つの送信データから、所定長を超えない１つ以上のパケットを生成する第１のモードと、複数の送信データからその個数を超えない数のパケットを生成する第２のモードとを、前記決定工程で決定された送信データの個数に応じて切り替えて実行してパケットを生成する第２の生成工程と、
前記第２の生成工程で生成されたパケットを送信する送信工程と、を備えることを特徴とする通信装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信プロトコル処理を実行する通信装置、パケット生成装置およびそれらの制御方法に関する。
【背景技術】
【０００２】
近年、急速に増加するスマートデバイスと呼ばれる多機能端末を用いて高解像度動画（８Ｋ／４Ｋ）をネットワーク経由で閲覧するというニーズが増加しており、これに伴ってネットワークにおけるデータトラフィックが増大している。またＥｔｈｅｒｎｅｔ（登録商標）による１０Ｇｂｐｓ通信、移動体通信の５Ｇ通信などのネットワーク高速化に伴って、ＴＣＰ／ＵＤＰ／ＩＰなどの通信プロトコル処理のＣＰＵにかかる負荷が大きくなっている。これらの高速データ通信を実現するためにＣＰＵの通信プロトコル処理負荷を低減させる施策が提案されている。
【０００３】
通信プロトコル処理においてデータを送信するためには、通信ヘッダや通信フッタを付加した通信パケットを生成する必要がある。そして、この通信パケットを生成する処理の効率化は高速データ通信には欠かせないものである。特許文献１は、メインシステムから渡されるロングパケットを送信バッファに蓄積し、所定のサイズ以下に分割し、ヘッダ情報を解析してロングパケットからショートパケットを生成するパケット生成方法について記載している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−２６６７５９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１の送信パケット生成方法では、メインシステムから渡されるロングパケットを一度送信バッファに蓄積する処理が行われる。一般に、バッファにデータを格納する際に、送信対象のデータが１つのバッファに格納できるとは限らない。言い換えれば、そのデータがすべて連続領域に格納できるとは限らない。また、システムの実装やシステムの稼働状況により、バッファのサイズは一意とは限らず、状況に応じて確保するバッファの大きさを切り替えるものが存在する。特許文献１の通信パケット生成方法では、サイズが異なる複数のバッファに格納された送信データを外部に送信するには、送信処理をそのバッファの数だけ実施しなければならず、送信処理のオーバーヘッドが大きくなるという課題がある。
【０００６】
本発明は上記の課題に鑑みてなされたものであり、バッファへの送信データの格納状況に応じて通信パケットの生成の方法を切り替えるパケット生成装置、通信装置およびそれらの制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一態様によるパケット生成装置は、
１つの送信データから、所定長を超えない１つ以上のパケットを生成する第１のモードと、複数の送信データからそれら送信データの個数を超えない数のパケットを生成する第２のモードと、を有する生成手段と、
ローカルメモリへの送信対象データの格納状態に基づいて、前記生成手段に提供するための、前記送信対象データから派生する送信データを決定する決定手段と、を備え、
前記生成手段は、前記決定手段により決定された送信データの個数に応じて前記第１のモードと前記第２のモードを切り替えて動作する。
【発明の効果】
【０００８】
本発明によれば、バッファへの送信データの格納状況に応じて通信パケットの生成方法が切り替わる。
【図面の簡単な説明】
【０００９】
【図１】実施形態による通信装置の機能ブロック図。
【図２】実施形態における通信装置の送信動作を示すフローチャート。
【図３】実施形態におけるヘッダ処理部のモード選択処理を示すフローチャート。
【図４】実施形態におけるヘッダ処理部の第１のモードの処理を示すフローチャート。
【図５】実施形態におけるヘッダ処理部の第２のモードの処理を示すフローチャート。
【図６】設定情報の生成からレジスタ部への設定の処理を示すフローチャート。
【図７】送信対象データからの送信データの派生、パケットの生成を説明する図。
【発明を実施するための形態】
【００１０】
以下、添付の図面を参照して本発明の実施形態の一例について説明する。
【００１１】
図１は、実施形態による通信装置１００の内部構成を機能ブロック単位で示したブロック図である。通信装置１００は、メインＣＰＵ１０２と、メインメモリ１０３と、通信プロトコル処理を実行するサブシステム１０４とを備える。通信装置１００内の各機能ブロック（１０２〜１０４）はシステムバス１０１を介して相互に接続されている。
【００１２】
メインＣＰＵ１０２は、通信装置１００全体の制御を司るとともに、アプリケーションソフトウエアを実行する。アプリケーションソフトウエアを実行する上で必要となるデータやプログラムなどはメインメモリ１０３に記憶される。メインＣＰＵ１０２は、メインメモリ１０３に対し、必要に応じてシステムバス１０１を介してデータやプログラムの読み出しおよび書き込みを行う。メインメモリ１０３は、通信装置内の各機能ブロックが共有して利用可能なメモリであり、例えばＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に代表されるような半導体メモリで構成されている。メインメモリ１０３のメモリ領域は、プログラムを格納する領域、アプリケーションソフトウエアが使用するアプリケーションバッファ領域、などに分けられる。
【００１３】
パケット生成装置としてのサブシステム１０４は、サブＣＰＵ１０６と、ローカルメモリ１０７と、ＤＭＡコントローラ１０８と、通信インターフェース１０９と、ヘッダ処理部１１０とを備える。これらの機能ブロック（１０６、１０７、１０８，１０９、１１０）は、ローカルバス１０５によって相互に接続されている。ローカルバス１０５は、システムバス１０１と通信可能に接続されている。サブシステム１０４は、通信装置１００におけるパケット生成、通信プロトコル処理を実行するサブシステムである。サブシステム１０４は、ＴＣＰ／ＩＰプロトコルといった通信プロトコル処理に特化して、外部機器とネットワークを介したデータ転送処理の一部を担っている。サブシステム１０４は、通信プロトコル処理専用のハードウエアを装備して高速な通信プロトコル処理をメインＣＰＵ１０２に代わって実行する。なお、ＴＣＰ／ＩＰプロトコルは説明を行うために示した一例であり、他の通信プロトコルが適用されても良い。
【００１４】
サブＣＰＵ１０６は、通信プロトコル処理を実行する。具体的には、サブＣＰＵ１０６は、ＩＰｖ４（ＩＰバージョン４）、ＩＰｖ６（ＩＰバージョン６）、ＵＤＰ、ＴＣＰの各通信プロトコル処理（送信シーケンス制御や輻輳制御、通信エラー制御等）を行う。またサブＣＰＵ１０６は、１つのプロセッサによる構成としてもよいし、複数のプロセッサによるマルチプロセッサ構成としてもよいし、プロセッサと一部の機能をアクセラレートするハードウエアを含む構成としてもよい。
【００１５】
ローカルメモリ１０７は、サブＣＰＵ１０６による利用が可能なメモリであり、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に代表されるような半導体メモリで構成される。また、ローカルメモリ１０７は、システムバス１０１とローカルバス１０５を経由してメインＣＰＵ１０２からもアクセスが可能になっている。ローカルメモリ１０７は、通信プロトコル処理を実行する上で必要となる送受信データや各種の設定情報などを記憶する。ローカルメモリ１０７に対するデータの読み出しおよび書き込みは、ローカルバス１０５を介して行われる。
【００１６】
ＤＭＡコントローラ１０８は、デスクリプタに記載された内容に従ってソース側からディスティネーション側へデータ転送を実行する。デスクリプタには、データ転送元となるソース側のアドレス情報、データ転送先となるディスティネーション側のアドレス情報、データ転送の転送サイズの情報、などが記載されている。また、デスクリプタには次に実行するデスクリプタの有無とそのデスクリプタのアドレス情報を記載する領域があり、ＤＭＡコントローラ１０８への一度の転送開始指示により、複数のデスクリプタを使用した転送が可能である。
【００１７】
ローカルバス１０５に対してマスターとなる機能ブロック（例えば、サブＣＰＵ１０６）が、ローカルメモリ１０７にデスクリプタを書き込み、その後、ＤＭＡコントローラ１０８に対してＤＭＡ転送開始指示を通知する。ＤＭＡ転送開始指示の通知の方法としては、最初のデスクリプタを保存しているローカルメモリ１０７のアドレス情報をＤＭＡコントローラ１０８に設定することが挙げられる。
【００１８】
ＤＭＡコントローラ１０８についてより詳細に説明する。ＤＭＡコントローラ１０８は、ＤＭＡ転送部１８１とチェックサム演算器１８２を備える。ＤＭＡ転送開始指示の通知を受けたＤＭＡコントローラ１０８のＤＭＡ転送部１８１は、上述のデスクリプタにしたがって、メインメモリ１０３とローカルメモリ１０７の間、または、内部メモリ１１３とローカルメモリ１０７の間のＤＭＡ転送を実行する。また、ＤＭＡ転送部１８１は、内部メモリ１１３と通信インターフェースの間、ローカルメモリ１０７と通信インターフェースの間のＤＭＡ転送処理も実行する。チェックサム演算器１８２は、ＤＭＡ転送されるデータについて１６ビット単位で１の補数和を計算する演算機能を有する。ＤＭＡ転送部１８１は、転送されるデータの末尾にチェックサム演算器１８２の演算結果を付加してＤＭＡ転送する機能、あるいはチェックサム演算器１８２の演算結果だけを出力する機能を具備する。さらにこの演算機能は、複数の演算領域を指定して１つの補数和を算出することができる。チェックサム演算器１８２におけるこれら演算機能の実行は、デスクリプタにより指示されてもよいし、ＤＭＡコントローラ内のレジスタで指示されてもよい。
【００１９】
通信インターフェース１０９は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に代表されるようなネットワーク１１１とのインターフェースとなっており、通信における物理層（ＰＨＹ層）とデータリンク層（ＭＡＣ層）の通信制御を担っている。通信インターフェース１０９は、送受信情報を一時的に蓄積するバッファメモリ（不図示）を有する。このバッファメモリに対する送受信情報の入出力は、ＤＭＡコントローラ１０８のＤＭＡ転送によって行われる。なお、通信インターフェース１０９がＤＭＡコントローラを内蔵して、そのＤＭＡコントローラを使用する構成であっても良い。その場合には、ＤＭＡコントローラ１０８と同様に一度の転送開始指示で複数のデスクリプタを使用した転送ができるものが望ましい。なぜならば、送信するデータ（ペイロード）とそのヘッダは常に連続領域に格納されているとは限らないため、複数の領域から効率よくデータとヘッダを読み取ることができるほど、高速な通信速度を得られやすいからである。
【００２０】
ヘッダ処理部１１０は、コア部１１２と内部メモリ１１３を備え、通信プロトコル処理における通信ヘッダの生成処理を実行する。ヘッダ処理部１１０は、サブＣＰＵ１０６が実行する通信プロトコル処理における通信ヘッダ生成処理を肩代わりして実行する機能ブロックである。コア部１１２内のレジスタ部１９１は、ヘッダ処理部１１０を制御するための設定情報を入力する入力機能と、ヘッダ処理部１１０内の状態を確認するためのステータス情報を表示する出力機能を有する。また、レジスタ部１９１は、ステータス情報を表示するだけでなく外部へ割込み信号を使用してステータス情報を通知する機能も有している。
【００２１】
コア部１１２内の通信ヘッダ生成部１９２は、レジスタ部１９１に入力された設定情報に従って通信ヘッダを生成し、内部メモリ１１３に記憶する。レジスタ部１９１に入力される設定情報は、ひな形となるヘッダ情報（以下、ひな形ヘッダ）と通信ヘッダ生成のための編集情報を含む。内部メモリ１１３は、コア部１１２およびサブＣＰＵ１０６からアクセス可能であり、例えば、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）に代表されるような半導体メモリで構成される。内部メモリ１１３は、コア部１１２により生成された通信ヘッダを記憶する。
【００２２】
さらに、ヘッダ処理部１１０は、ローカルバス１０５に対してマスターとなる機能を有し、ＤＭＡコントローラ１０８を制御することが可能である。ヘッダ処理部１１０によるＤＭＡ転送の設定は次のように行われる。すなわち、ヘッダ処理部１１０がＤＭＡ転送の内容を記載したデスクリプタを生成して内部メモリ１１３に保存する。そして、ヘッダ処理部１１０がこのデスクリプタを保存した内部メモリ１１３のアドレス情報や各種転送にかかわる情報をＤＭＡコントローラ１０８に設定する。これにより、ＤＭＡコントローラ１０８は、内部メモリ１１３に保存されているデスクリプタに従ってＤＭＡ転送を実行する。さらに、ヘッダ処理部１１０は、レジスタ部１９１へ設定される設定情報により、第１のモードと第２のモードを切り替えて動作する機能を有している。設定情報、第１のモードおよび第２のモードの詳細については後述する。
【００２３】
次に図１に示す通信装置１００の通信動作について説明する。図２は、ネットワーク１１１を介して外部機器と接続し、その外部機器へ通信パケットを送信する際の通信装置１００の動作を示すフローチャートである。なお、以下では通信装置１００が外部機器との間でデータ転送する際に使用する通信プロトコルとしてＴＣＰ／ＩＰプロトコルを用いた例を説明するが、ＴＣＰ／ＩＰプロトコル以外の通信プロトコルであってもよいことは言うまでもない。
【００２４】
ステップＳ２０１は、このフローチャートのスタートを示す。通信装置１００がネットワーク１１１を介して外部機器と通信状態になったとき、すなわち外部機器との通信が確立したときに、図示のフローチャートによって示される処理が開始する。ステップＳ２０２において、サブＣＰＵ１０６は、自身が実行する通信プロトコル処理でもって外部機器へ送信する通信パケットの生成準備が整ったかどうかを判断する。例えば、メインＣＰＵ１０２で実行されているアプリケーションソフトウエアから外部機器へ通信パケットを送信する指示（送信指示）をサブＣＰＵ１０６が受け取った場合、通信パケットの生成準備が整ったと判断される。外部機器へ送信する通信パケットの生成準備が整ったと判断された場合、処理はステップＳ２０３へ移行し、そうでない場合、処理は現在の状態を維持する。
【００２５】
ステップＳ２０３において、サブＣＰＵ１０６は、外部機器への通信プロトコルに従った送信を実行するために、送信対象データをメインメモリ１０３からサブシステム１０４のローカルメモリ１０７へ転送する。ここではステップＳ２０２で受け取った送信指示に基づいて、メインメモリ１０３からローカルメモリ１０７へ送信対象データがＤＭＡ転送される。サブＣＰＵ１０６は、ＤＭＡコントローラ１０８を用いてこのＤＭＡ転送を行う。ＤＭＡ転送の設定はサブＣＰＵ１０６がＤＭＡ転送の内容を記載したデスクリプタを生成してローカルメモリ１０７に保存する。そして、サブＣＰＵ１０６が、このデスクリプタが保存されたローカルメモリ１０７のアドレス情報をＤＭＡコントローラ１０８に設定することでＤＭＡ転送が実行される。このＤＭＡ転送の完了をもってステップＳ２０３の処理は終了する。
【００２６】
ＤＭＡ転送の際に、メインメモリ１０３の送信対象データの全体を一つの送信バッファ（ローカルメモリ１０７の、アドレスが連続した１つのメモリ空間）に格納できるとは限らない。確保できる送信バッファの量はサブシステムの稼働状況、つまりローカルメモリ１０７の空き具合に依存するからである。また、送信データが大きいほど一つの送信バッファに格納できる確率は小さくなる傾向にある。なぜなら、一つの送信バッファを大きく取るということは、メモリの連続領域を確保する必要があるためである。受信処理で受信パケットを格納している場合、その他の通信相手に対する送信のために送信バッファを確保している場合などでは、メモリを連続領域で確保できなくなる可能性が高まる。送信バッファを可能な限り大きく取っても一つの送信バッファに送信対象データが収まらない場合は、サブＣＰＵ１０６は、送信対象データを複数の送信バッファに分割してデータを格納するようにデスクリプタを生成し、データ転送を実行する。ここで、送信対象データが１つの送信バッファに格納できたかどうかを基準に第１のモードもしくは第２のモードのどちらを使用して通信パケットを生成するかをサブＣＰＵ１０６が判断する。
【００２７】
ステップＳ２０３における送信データの転送処理が終わると、ステップＳ２０４において、サブＣＰＵ１０６は、ヘッダ処理部１１０に対してヘッダ生成処理を開始するよう命令する。そして、ステップＳ２０５において、サブＣＰＵ１０６は、ヘッダ処理部１１０によるヘッダ生成処理の完了を待つ。ステップＳ２０４におけるヘッダ生成処理の開始の命令は、サブＣＰＵ１０６が設定情報をレジスタ部１９１に設定することでなされる。以下、サブＣＰＵ１０６による設定情報の設定処理について図６のフローチャートを参照して説明する。
【００２８】
図６は、サブＣＰＵ１０６による、設定情報の生成処理を示すフローチャートである。まず、ステップＳ６０１において、サブＣＰＵ１０６はステップＳ２０２で転送した送信対象データの長さ（以下、送信データ長）と生成するパケットのパケットサイズに基づいて生成するパケット数を算出する。ステップＳ６０２〜ステップＳ６１０では、サブＣＰＵ１０６は、ローカルメモリ１０７への送信対象データの格納状態に基づいて、送信対象データから派生される、パケット生成に用いられる送信データを決定する。ステップＳ６０２において、サブＣＰＵ１０６は、ローカルメモリ１０７の１つの送信バッファ（連続したアドレスのメモリ領域）に送信対象データの全体が格納されたか否かを判定する。１つの送信バッファに送信対象データの全体が格納されている場合は、ステップＳ６０３において、サブＣＰＵ１０６は、送信対象データの全体を１つの送信データに決定する。
【００２９】
一方、ステップＳ６０２において複数の送信バッファに送信対象データが分割されて格納されていると判定された場合、ステップＳ６０４〜Ｓ６１０において、サブＣＰＵ１０６は、送信対象データから複数の送信データを決定する。この場合、送信対象データは複数の送信バッファの個数以上の送信データとしてパケット生成に提供される。まず、ステップＳ６０４において、サブＣＰＵ１０６は、先頭の送信バッファを選択する。ステップＳ６０５において、サブＣＰＵ１０６は、選択した送信バッファに格納されているデータ（送信対象データの部分データ）が送信するパケットのセグメントサイズ以下かどうかを判定する。データがセグメントサイズ以下であると判定された場合、ステップＳ６０６において、サブＣＰＵ１０６は、選択した送信バッファに格納されているデータを１つの送信データに決定する。データがセグメントサイズ以下ではないと判定された場合、ステップＳ６０７において、サブＣＰＵ１０６は、選択した送信バッファに格納されているデータをセグメントサイズ以下のデータに分割し、それぞれを送信データに決定する。
【００３０】
ステップＳ６０８において、サブＣＰＵ１０６は、決定された送信データのサイズとパケットのセグメントサイズとに基づいて、隣接する送信データの結合を行うか否かを示すデータ結合情報を生成する。本実施形態によるデータ結合情報の詳細については後述する。次に、ステップＳ６０９において、サブＣＰＵ１０６は、全ての送信バッファについて上記処理を行ったか否かを判定する。未処理の送信バッファがあると判定された場合、ステップＳ６１０においてサブＣＰＵ１０６は、次の送信バッファを選択し、ステップＳ６０５からの処理を実行する。ステップＳ６０９で未処理の送信バッファがないと判定されると、処理はステップＳ６１１へ進む。ステップＳ６１１において、サブＣＰＵ１０６は、ステップＳ６０８により生成されたデータ結合情報に基づいてステップＳ６０１で設定されたパケット数を修正する。こうして、ローカルメモリ１０７への送信対象データの格納状態に基づいて、送信対象データを送信するための送信データの構成が決定される。
【００３１】
ステップＳ６１２において、サブＣＰＵ１０６は、設定情報をヘッダ処理部１１０のレジスタ部１９１に入力（設定）する。設定情報は、パケット数、ひな形ヘッダの情報、ローカルメモリ１０７における送信データの開始アドレス、送信データの長さ、送信データの個数、初期シーケンス番号などの情報を含む。なお、送信対象データを複数の送信データとして処理するように決定された場合には、設定情報はそれぞれの送信データの開始アドレスと長さを含む。また、ヘッダ処理部１１０は、生成する通信ヘッダの開始アドレスが固定された仕様でもよいし、サブＣＰＵ１０６によって管理される仕様でもよい。前者と後者ともに内部メモリ１１３の領域に通信ヘッダを生成するように実装、もしくは指示する必要がある。後者のメリットとしては、ヘッダ処理部１１０が生成した通信ヘッダを外部へ送信する前に次の通信ヘッダの生成を実施するような場合に、生成済みでかつ未送信の通信ヘッダを上書きしないように指示することが可能となることが挙げられる。
【００３２】
なお、ローカルメモリ１０７のサイズは実装時に決定されてしまうため、前者の仕様と後者の仕様ともにひな形ヘッダの全長の上限値を事前に考慮する必要がある。その際に、ＴＣＰやＩＰｖ６の場合にはオプション設定を考慮して設定する必要がある。とくにＩＰｖ６はオプションの上限値がないため、どこまで対応するか注意が必要である。
【００３３】
上述のように、ローカルメモリ１０７において送信対象データが一つの送信バッファに格納できているのであれば送信データの個数は１である。また、送信対象データが複数の送信バッファに分割して格納されているのであれば送信データの個数はその分割数以上である。なお、送信データの個数が１である場合、サブＣＰＵ１０６は、ヘッダ処理部１１０が送信データの分割を行う分割長を指定する（設定情報に含める）必要がある。この分割長はＴＣＰにおける最大セグメントサイズ（Ｍａｘ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ、以下ＭＳＳ）と同じでもよいし、より短くても構わない。但し、少なくとも、生成するパケット数と送信データ長と分割長の間で整合性が取れている必要がある。すなわち、生成するパケット数と分割長の掛け算の計算値が、送信データ長と等しいかもしくは小さい必要がある。また、送信データ長よりも分割長のほうが大きい場合には、生成するパケット数は１とする必要がある。
【００３４】
また、ヘッダ処理部１１０は、複数の送信データが入力された場合に、複数の送信データを結合して得られるパケットのための通信ヘッダを生成する機能を持つ。仮に送信データの個数を４と入力した場合、サブＣＰＵ１０６は、１〜４のいずれかの数のパケットに対応してパケットを生成するように送信データの結合を指示することができる。但し、入力した送信データの個数よりも多くのパケットを生成することはできない。結合する送信データの個数の上限値は、ヘッダ処理部１１０に一度に入力できる送信データの数以下であればよく、実装依存である。なお、ＴＣＰプロトコルの送信ウィンドウサイズの値とＭＳＳの値から、送信データの個数の上限を算出してもよい。たとえば、送信ウィンドウサイズが６４キロバイト（６５５３６バイト）、ＭＳＳが１４６０バイトであれば、最大で４５個のパケットを一度の命令で生成できるように実装しているのが望ましい。複数の送信データを入力する場合、最終的なパケットの全長を管理するのはサブＣＰＵ１０６である。したがって、サブＣＰＵ１０６は、使用するプロトコルに準拠するようにヘッダ処理部１１０に結合を設定する必要がある。あくまでもヘッダ処理部１１０は入力されたデータを結合するかしないかを管理する。送信データの結合に関する機能の詳細は後述する。
【００３５】
また、上述のステップＳ６０７では、１つの送信バッファから複数の送信データが決定される。すなわち、送信バッファの数よりも多い数のパケットを生成することが必要となる場合がある。このように、複数の送信バッファに格納されている送信対象データから、その送信バッファ数を超える数のパケットを生成する場合は、ヘッダ処理部１１０のレジスタ部１９１に入力される設定情報を工夫する必要がある。より具体的には、設定情報に含まれる送信データの個数、送信データのアドレスと長さを工夫する必要がある。たとえば２つの送信バッファにある送信データから３つのパケットを生成する場合を例に説明する。
【００３６】
図７は送信対象データから送信データおよびパケットを生成する様子を示す図である。図７（ａ）に示されるように、２つの送信バッファをそれぞれＡバッファとＢバッファとする。Ａバッファに格納されている送信データの開始アドレスが０ｘ１０００、送信データ長が２０００バイト、Ｂバッファに格納されている送信データの開始アドレスが０ｘ２０００、送信データ長が１０００バイトとする。パケットを送信する際のＭＳＳが仮に１０００バイトである場合、バッファＡの送信データを利用して２つのパケット、バッファＢの送信データを利用して１つのパケットを生成することが可能である。そこで、サブＣＰＵ１０６は、以下の内容を示す設定情報をレジスタ部１９１に入力する。
・送信データの開始アドレスが０ｘ１０００、０ｘ１３Ｅ８（０ｘ１０００から１０００バイトオフセット）、０ｘ２０００。
・送信データ長がそれぞれ１０００バイト。
・送信データ数が３で、生成するパケット数が３。
【００３７】
この設定により、図７（ａ）に示されるように、一度の処理命令で、２つの送信データから３つのパケットを生成することが可能となる。ヘッダ処理部１１０が１つの送信データしか受け付けることができない場合、上記例では必ず二度の処理命令が必要になる。これに対し、本実施形態は、複数に分割されている送信データを一度にパケット化できるメリットがある。その結果、複数回の処理に係るオーバーヘッドを削減することが可能となる。また、図７（ａ）には、隣接する送信データとの結合の要否を示すデータ結合情報の例が示されている。本実施形態のデータ結合情報は、次の送信データとの結合の要否を示す。図７（ａ）のデータ結合情報は、全ての送信データに対して"１"となっており、次の送信データとの結合を行わないことを示している。
【００３８】
また、上述したように、データ結合情報により結合を指示することにより送信バッファの個数よりも少ない個数のパケットを生成することができる。例えば上記の例で仮にＭＳＳが１５００である場合、図７（ｂ）に示されるように、サブＣＰＵ１０６が以下の情報をレジスタ部１９１に設定することで、３つの送信データから２つのパケットを生成することができる。
・開始アドレスが０ｘ１０００、０ｘ１５ＤＣ（０ｘ１０００から１５００バイトオフセット）、０ｘ２０００。
・送信データ長がそれぞれ１５００バイト、５００バイト、１０００バイト・
・データ結合情報（二番目と三番目の送信データを結合することの指示）。
・送信データ数が３、生成するパケット数が２。
【００３９】
データ結合情報として、次の送信データと結合する送信データに"０"が付される。図７（ｂ）では、５００バイトの送信データが次の送信データ（１０００バイト）と結合されることを示している。なお、上記では、ＭＳＳを基準として設定値を決定したが、ＭＳＳを基準とする必要はない。また、データを結合せず（送信データのアドレスとデータ長はそのまま）、送信データ数が３、生成するパケット数が３としてもよい。
【００４０】
なお、上記では、送信データの結合を行うか否かを判断するための基準として送信データのサイズを用いたがこれに限られるものではない。たとえば通信インターフェースが全二重であるか半二重であるかを、送信データの結合を行うか否かの判断基準として用いてもよい。半二重である場合、一回の送信で送信できる送信データ長が大きくなる程ネットワーク利用効率が高くなるため、送信データを結合させるほうがよい。また、通信相手の性能を加味して送信データの結合を行うか否かを判断してもよい、通信相手の性能が良いほどパケット処理スピードが速くなるので、小さいパケットが増えてもパケットロスが発生する確率は少なく、通信速度の低下が発生するリスクは少ない。一方、ヘッダ処理部１１０は結合処理が入ると、その分の処理負荷が増えるため処理スピードが遅くなる。したがって、通信相手の性能に問題なければ、送信データを結合させる必要がない。なお、通信相手の性能は、確立している通信接続を用いて通信相手に問い合わせることで取得すればよい。
【００４１】
ステップＳ２０５において、サブＣＰＵ１０６は、ヘッダ処理部１１０に開始させた処理が完了したかどうかを判断する。処理の完了を判断する方法としては、例えば、ヘッダ処理部１１０からの割り込み信号の受信、ヘッダ処理部１１０のステータスレジスタのポーリング、などがある。割り込み信号の受信待ちのほうが、割り込みを待っている間に他の処理を行うことができるので処理の並列性が向上するメリットがある。サブＣＰＵ１０６は、ヘッダ処理部１１０の処理終了を検知すると、処理をステップＳ２０６へ進める。ヘッダ処理部１１０は、レジスタ部１９１に設定された設定情報に従って処理を行う。その結果、終了通知が行われる際には、指定されたパケット数と同数の通信ヘッダが内部メモリ１１３上に生成されている。
【００４２】
ステップＳ２０６において、サブＣＰＵ１０６は、ローカルメモリ１０７に格納されている送信データと内部メモリ１１３に格納されている通信ヘッダを通信インターフェース１０９に転送し、通信パケットの送信を行う。サブＣＰＵ１０６はヘッダ処理部１１０にヘッダ生成の命令（送信データの結合を含む）を発行しているため、生成されたヘッダとそのヘッダに対応するペイロード部分を識別することが可能である。したがって、ヘッダとペイロード部分が連続メモリ領域に格納されていなくても、サブＣＰＵ１０６は、通信パケットを識別することができる。通信インターフェース１０９にヘッダおよび送信データを転送する際には、ＤＭＡコントローラ１０８が使用されてもよいし、通信インターフェース１０９内に具備するＤＭＡコントローラが使用されてもよい。サブＣＰＵ１０６は１つのパケットに対してヘッダ部分のデスクリプタとペイロード部分のデスクリプタの２つを１組とし、送信するパケット数だけデスクリプタを準備してから通信インターフェース１０９へ送信する。
【００４３】
ステップＳ２０６における通信インターフェース１０９への通信パケットの送信が終了すると、ステップＳ２０７において、サブＣＰＵ１０６は、通信装置１００と外部機器の通信状態を終了させる要因が発生したかどうかを判断する。外部機器との通信状態を終了させる要因が発生していなければ、サブＣＰＵ１０６は、処理をステップＳ２０２へ戻し、上述の処理を繰り返す。外部機器との通信状態を終了させる要因が発生していると判断されると、サブＣＰＵ１０６は、処理をステップＳ２０８へ進める。外部機器との通信状態を終了させる要因としては、例えば以下のケースがある。
・メインＣＰＵ１０２で実行しているアプリケーションソフトウエアが、ユーザからの操作などで通信装置と外部機器の接続を終了させる指示を検知した場合。
・ユーザがネットワークケーブルを通信装置から抜くなどして通信回線が断絶したことを通信インターフェース１０９が検知した場合。
・通信相手である外部機器から通信回線を切断する旨の通知を含んだ通信パケットを受信した場合。
【００４４】
ステップＳ２０８において、サブＣＰＵ１０６は、通信装置１００と外部機器の通信状態を終了させる処理を行う。より詳細には、サブＣＰＵ１０６が担っている通信プロトコル処理に従って外部機器との通信回線を切断する。そして、サブＣＰＵ１０６は、ローカルメモリ１０７やヘッダ処理部１１０の内部メモリ１１３に一時的に保存している関連情報を削除する。その後、サブＣＰＵ１０６からメインＣＰＵ１０２へ通信回線の切断完了の通知が伝達されるとアプリケーションソフトウエアで通信回線が切断した事をユーザなどに示す表示が行われる。その後、本処理は終了する（ステップＳ２０９）。
【００４５】
以上により、ヘッダ処理部１１０を適切に動作せることで、効率的にパケットの生成を行うことが可能となる。
【００４６】
図３は実施形態におけるヘッダ処理部１１０の動作モードを判定する処理を示すフローチャートである。本実施形態において、図３に示される動作モードの判定処理は、ヘッダ処理部１１０が、サブＣＰＵ１０６から処理を開始する命令（ステップＳ２０４）を受け付けたことにより開始する（ステップＳ３０１）。ヘッダ処理部１１０は、サブＣＰＵ１０６により決定された（図６の処理により決定された）送信データの個数に応じて第１のモードと第２のモードを切り替える。
【００４７】
ステップＳ３０２において、ヘッダ処理部１１０は、レジスタ部１９１に設定された送信データの個数が１であるか否かを判定する。送信データの個数が１であると判定された場合、ステップＳ３０３において、ヘッダ処理部１１０は、１つの送信データから、所定長を超えない１つ以上のパケットを生成する第１のモードで動作する。本実施形態では、所定長とは分割長であり、ＭＳＳを用いることができる。第１のモードでは、分割長を用いて通信ヘッダのシーケンス番号とペイロード長が計算される。第１のモードの詳細は図４で説明する。そして処理はＳ３０５へ進み、終了する。他方、ステップＳ３０２において、送信データの個数が１以外（複数）であると判定された場合、処理はステップＳ３０４へ進む。ステップＳ３０４において、ヘッダ処理部１１０は、複数の送信データからそれら送信データの個数を超えない数のパケットを生成する第２のモードで動作する。第２のモードでは、データ結合情報を用いて通信ヘッダのシーケンス番号とペイロード長が計算される。第２のモードの詳細は図５で説明する。そして処理はＳ３０５へ進み、終了する。
【００４８】
図３のフローチャートに示される処理と並行して、ヘッダ処理部１１０は、サブＣＰＵ１０６により入力されたひな形ヘッダのコピーを内部メモリ１１３に生成する。もちろん、ひな形ヘッダのコピー完了前や完了後に図３に示される処理が行われても問題はない。ひな形ヘッダのコピーの個数は、レジスタ部１９１に設定されたパケット数と等しい。通信ヘッダの各部位の修正はこのコピーと同時に行われてもよいし、コピー後に上書きする形で行われてもよい。
【００４９】
図４は、ステップＳ３０３において実行される、第１のモードにおける各パケットのペイロード長の計算とシーケンス番号の計算の処理を示すフローチャートである。ひな形ヘッダのコピーが終了していなくてもよいが、計算とヘッダ修正の両方を同時に行う場合、該当部分のヘッダコピーは少なくとも終わっている必要がある。同時に行わない場合は、一時格納領域に計算結果を保存しておく必要がある。図中に記載されているシーケンス番号［ｉ］はｉ番目のパケットのシーケンス番号の値を表しており、最初のパケットのシーケンス番号はシーケンス番号［０］で表わされるものとする。また、図中に記載されているペイロード長［ｉ］は、ｉ番目のパケットのペイロード長を表しており、最初のパケットのペイロード長はペイロード長［０］で表わされるものとする。
【００５０】
ステップＳ４０２において、通信ヘッダ生成部１９２は、変数ｉを初期化する（ｉ＝０）。次に、ステップＳ４０３において、通信ヘッダ生成部１９２は、最初のパケットに対する処理であるかどうかを判断する。最初のパケットに対する処理であると判断された場合、処理はステップＳ４０５へすすみ、そうでない場合は、処理はステップＳ４０４へ進む。この判断基準に変数ｉを使用しても構わない。すなわち、ｉ＝０の場合は最初のパケットに対する処理であると判断し、ｉ≠０の場合は最初のパケットに対する処理ではないと判断する。
【００５１】
ステップＳ４０４において、通信ヘッダ生成部１９２は、ｉ（≠０）番目のパケットのヘッダに記載するシーケンス番号を計算する。シーケンス番号［ｉ］は、レジスタ部１９１（設定情報）に設定された初期シーケンス番号からそれまでのパケット（ｉ−１番目のパケット）のペイロード長の総和を加算したものである。たとえば、３番目のパケットに対する計算の場合、１番目のパケットのペイロード長と２番目のパケットのペイロード長の総和が、「それまでのパケットのペイロード長の総和」となる。計算が終了すると、処理はステップＳ４０６へ進む。
【００５２】
ステップＳ４０５では、通信ヘッダ生成部１９２は、ステップＳ４０４と同様にｉ番目のパケットのヘッダに記載するシーケンス番号を計算する。ステップＳ４０５に処理が到達する場合はｉ＝０であるため、シーケンス番号［ｉ］には、レジスタ部１９１に設定された初期シーケンス番号が使用される。計算が終了すると、処理はステップＳ４０６へ進む。
【００５３】
ステップＳ４０６において、通信ヘッダ生成部１９２は、最後のパケットに対する処理であるかどうかを判断する。この判断は、例えば変数ｉの値とレジスタ部１９１に設定されたパケット数を比較することにより行える。最後のパケットに対する処理ではない判定された場合、ステップＳ４０７において、通信ヘッダ生成部１９２は、ｉ番目のパケットのペイロード長を計算する。ペイロード長は、レジスタ部１９１に設定される分割長と同じとする。計算が終了すると、ステップＳ４０８において、通信ヘッダ生成部１９２は、変数ｉに１を加算する。その後、通信ヘッダ生成部１９２は、処理をステップＳ４０３に戻し、次のパケットのシーケンス番号とペイロード長を計算する。
【００５４】
ステップＳ４０６において、最後のパケットに対する処理であると判断された場合、ステップＳ４０９において、通信ヘッダ生成部１９２は、ｉ番目のパケットのペイロード長を計算する。ステップＳ４０９では、ペイロード長［ｉ］は、レジスタ部１９１に設定されている送信データ長から、分割長とパケット数から１を差し引いた値との積を差し引いた値である。すなわち、送信データ長からそれまでのパケットのペイロード分を差し引くことで残りの送信データ長を算出し、その値が最後のパケットのペイロード長となる。計算が終了すると、本処理は終了する（ステップＳ４１０）。なお、図４のフローチャートは第１のモードの処理であり、ヘッダ処理部１１０に入力される送信データの個数は１つである。そのため、フローチャートに記載されている送信データ長に対して明示的に番号を付加していない。
【００５５】
以上により、第１のモードにおいて、１つの送信データから各パケットのシーケンス番号とペイロード長を計算することが可能となる。
【００５６】
図５は、ステップＳ３０４において実行される、第２のモードにおける各パケットのペイロード長の計算とシーケンス番号の計算の処理を示すフローチャートである。なお、第１のモードの処理（図４）と同様に、ひな形ヘッダのコピーが終了していなくてもよいが、計算とヘッダ修正の両方を同時に行う場合は、該当部分のヘッダコピーは少なくとも終わっている必要がある。同時に行わない場合は、一時格納領域に計算結果を保存しておく必要がある。図５に記載されているシーケンス番号［ｉ］とペイロード長［ｉ］は図４で説明したものと同様である。また、送信データ長［ｋ］は、ヘッダ処理部１１０に入力されたｋ番目の送信データの長さを表しており、最初の送信データの長さは送信データ長［０］で表される。
【００５７】
ステップＳ５０２において、ヘッダ処理部１１０の通信ヘッダ生成部１９２は、変数ｉと変数ｋと変数ｔｍｐを初期化する。初期化を終えると、ステップＳ５０３において、通信ヘッダ生成部１９２は、ｔｍｐに送信データ長［ｋ］の値を加算する。次に、ステップＳ５０４において、通信ヘッダ生成部１９２は、変数ｋに１を加算する。次に、ステップＳ５０５において、通信ヘッダ生成部１９２は、ｋ−１番目の送信データを次の送信データ（ｋ番目の送信データ）と結合するかどうかを判定する。結合すると判定された場合、処理はステップＳ５０３に戻り、結合しないと判定された場合、処理はステップＳ５０６へ進む。
【００５８】
次の送信データ（隣接する送信データ）を結合するか否かの判定には、データ結合の要否を示すデータ結合情報が用いられる。図７（ｂ）により上述したように、本実施形態のデータ結合情報は１つの送信データに対して１ビットの情報である。データ結合情報が０値である場合は次の送信データと結合することを示し、データ結合情報が１値である場合は次の送信データと結合しないことを示す。たとえば、送信データの数が３つであり、データ結合情報が最初の送信データから０、１、１である場合は、最初と二番目の送信データを結合してパケットを生成し、三番目の送信データだけでパケットを生成することを意味する。ヘッダ処理部１１０のレジスタに入力する生成パケット数とデータ結合情報の総和（今回の例では、０＋１＋１＝２）は等しくなるように入力しなければならない。データ結合情報の入力は専用のレジスタを用意しても構わないが、１つの送信データに１ビットの情報だけなので、他のレジスタ領域の特定フィールドを使用してもよい。たとえば、ヘッダ処理部１１０が扱える送信データの最長が６４キロバイト（一般的なＴＣＰの最大ウィンドウサイズ）である場合、最大で１６ビットしか使用しない。１つのレジスタが３２ビットで構成する場合であれば、使われないビット領域が存在するので、そのようなビット領域を活用することが可能である。
【００５９】
ステップＳ５０６において、通信ヘッダ生成部１９２は、ｉ番目のパケットのペイロード長（ペイロード長［ｉ］）にステップＳ５０３で計算したｔｍｐの値をセットする。次に、ステップＳ５０７において、通信ヘッダ生成部１９２は、変数ｔｍｐを０に初期化する。続いて、ステップＳ５０８において、通信ヘッダ生成部１９２は、直前までの処理が最初のパケットに対する処理であるかどうかを判定する。この判定は、例えば、ｉが０か否かにより行うことができる。
【００６０】
ステップＳ５０８において最初のパケットに対する処理ではない（ｉ≠０の場合）と判定された場合、ステップＳ５０９において、通信ヘッダ生成部１９２は、ｉ番目のパケットのヘッダに記載するシーケンス番号（シーケンス番号［ｉ］）を計算する。シーケンス番号［ｉ］は、レジスタに設定された初期シーケンス番号からそれまでのパケットのペイロード長の総和を加算したものである。その後、処理はステップＳ５１１へ進む。他方、最初のパケットに対する処理であると判定された場合（ｉ＝０の場合）、ステップＳ５１０において、通信ヘッダ生成部１９２は、シーケンス番号［ｉ］として、レジスタ部１９１（設定情報）に設定された初期シーケンス番号を設定する。その後、処理はステップＳ５１１へ進む。
【００６１】
ステップＳ５１１において、通信ヘッダ生成部１９２は、変数ｉに１を加算する。そして、ステップＳ５１２において、通信ヘッダ生成部１９２は、直前の処理が最後のパケットに対する処理であるかどうかで処理を分岐する。最後のパケットに対する処理であると判定された場合、本処理は終了する（ステップＳ５１３）。他方、直前の処理が最後のパケットに対する処理ではないと判定された場合、通信ヘッダ生成部１９２は、処理をステップＳ５０３へ戻し、上述の処理を繰り返す。なお、この判断は、例えば変数ｉの値とレジスタ部１９１に設定されたパケット数を比較することにより行える。
【００６２】
以上により、第２のモードにおいて、複数の送信データから各パケットのシーケンス番号とペイロード長を計算することが可能となる。
【００６３】
なお、図４、図５のフローチャートにより各パケットのシーケンス番号とペイロード長の計算方法を示したが、ひな形ヘッダのコピー後に各パケットのヘッダを完成させるにはその他の領域も修正する必要がある。
【００６４】
ＩＰヘッダのＬｅｎｇｔｈフィールドは図４や図５のシーケンスで計算したペイロード長とヘッダ処理部１１０に入力されるひな形ヘッダの長さから計算できる。ＩＰヘッダのＩｄｅｎｔｉｆｉｃａｔｉｏｎフィールドは各ＩＰパケットで独立した値である必要があるため、ヘッダ処理部１１０で自動的に用意してもよいし、サブＣＰＵ１０６からレジスタに入力してもらっても構わない。ＩＰヘッダのチェックサムはひな形ヘッダの情報と計算したペイロード長やひな形ヘッダの長さ、Ｉｄｅｎｔｉｆｉｃａｔｉｏｎから計算できる。ＩＰヘッダの領域のサム演算を行いながらひな形ヘッダのコピーを行えば、より効果的にＩＰヘッダのチェックサムを計算することが可能となる。
【００６５】
ＴＣＰヘッダのチェックサムに関しては、ＤＭＡコントローラ１０８に通信パケットの通信ヘッダ部分と通信パケットのペイロード部分を連続して読み込ませて１６ビット毎に１の補数和を計算させてチェックサム値を算出させる。ＤＭＡコントローラ１０８は複数の領域から補数和を計算できるため、疑似ヘッダを考慮した計算が可能である。ヘッダ処理部１１０はＴＣＰヘッダのチェックサム計算を行うために、これらを考慮してＤＭＡコントローラ１０８を制御する。さらに、算出したチェックサム値は元の通信パケットの通信ヘッダの所定の場所に書き込まれるように制御を行う。
【００６６】
（その他の実施例）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００６７】
１００：通信装置、１０１：システムバス、１０２：メインＣＰＵ、１０３：メインメモリ、１０４：サブシステム、１０５：ローカルバス、１０６：サブＣＰＵ、１０７：ローカルメモリ、１０８：ＤＭＡコントローラ、１１０：ヘッダ処理部
【図１】
2019092035.tif 000003
【図２】
2019092035.tif 000004
【図３】
2019092035.tif 000005
【図４】
2019092035.tif 000006
【図５】
2019092035.tif 000007
【図６】
2019092035.tif 000008
【図７】
2019092035.tif 000009