(57)【要約】      （修正有）【課題】複数のパケットを一括して生成および送信する際に、通信スループットの低下を有効に防止してパケットをより効率的に送信する。【解決手段】通信装置は、複数のパケットのそれぞれに付加すべきＴＣＰヘッダのヘッダ長を算出し、算出されたＴＣＰヘッダのヘッダ長と、複数のパケットを送信すべきコネクションにおける最大セグメントサイズとに基づいて、送信バッファの複数の領域のそれぞれに格納すべきペイロードのペイロード長を決定し、送信バッファの複数の領域のいずれかにＴＣＰ／ＩＰヘッダを格納するとともに、決定されたペイロード長で送信データを分割し、分割された送信データを送信バッファの複数の領域の他の領域にペイロードとしてそれぞれ格納し、送信バッファに格納されたＴＣＰ／ＩＰヘッダおよび送信データを入力として、当該入力されたＴＣＰ／ＩＰヘッダおよび送信データに基づいて複数のパケットを生成する。【選択図】図６
2020136883.tif 000002
【特許請求の範囲】
【請求項１】
複数の領域を含む送信バッファと、
前記送信バッファに格納されたＴＣＰ／ＩＰヘッダおよび送信データを入力として、当該入力されたＴＣＰ／ＩＰヘッダおよび送信データに基づいて複数のパケットを生成する生成手段と、
前記ＴＣＰ／ＩＰヘッダのうち、前記複数のパケットのそれぞれに付加すべきＴＣＰヘッダのヘッダ長を算出する算出手段と、
前記算出手段により算出された前記ＴＣＰヘッダの前記ヘッダ長と、前記複数のパケットを送信すべきコネクションにおける最大セグメントサイズとに基づいて、前記送信バッファの前記複数の領域のそれぞれに格納すべきペイロードのペイロード長を決定する決定手段と、
前記決定手段により決定された前記ペイロード長で前記送信データを分割し、分割された送信データを前記送信バッファの前記複数の領域に前記ペイロードとしてそれぞれ格納して、前記生成手段に、前記決定手段により決定された前記ペイロード長で前記複数のパケットを生成させるよう制御する制御手段と
を備えることを特徴とする通信装置。
【請求項２】
前記ＴＣＰヘッダは、ＴＣＰのプロトコルにおいてオプションとされるＴＣＰオプションヘッダを含み、
前記算出手段は、前記ＴＣＰオプションヘッダのヘッダ長を算出する
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記決定手段は、前記最大セグメントサイズから前記ヘッダ長を減算することにより、前記ペイロード長を決定する
ことを特徴とする請求項２に記載の通信装置。
【請求項４】
前記算出手段は、通信対向装置から前記コネクションを介して送信されるデータの受信状況に基づいて、前記ヘッダ長を算出する
ことを特徴とする請求項１から３のいずれか１項に記載の通信装置。
【請求項５】
前記決定手段は、前記ペイロード長に前記ヘッダ長を付加したパケット長が、最大転送単位（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超えないよう、前記ペイロード長を決定する
ことを特徴とする請求項１から４のいずれか１項に記載の通信装置。
【請求項６】
前記制御手段は、前記送信データのデータ長が前記決定手段により決定された前記ペイロード長以下である場合、前記生成手段に前記複数のパケットを生成させることなく、前記送信データに前記ＴＣＰ／ＩＰヘッダを付加してパケットを生成する
ことを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項７】
前記制御手段は、前記決定手段により決定された前記ペイロード長を、前記生成手段により生成されるべき先頭のパケットのペイロード長に設定し、先頭以外のパケットのペイロード長には前記最大セグメントサイズを設定する
ことを特徴とする請求項１から６のいずれか１項に記載の通信装置。
【請求項８】
前記生成手段は、前記送信バッファに格納された前記ＴＣＰ／ＩＰヘッダを複製し、複製された複数のＴＣＰ／ＩＰヘッダを、前記送信バッファの前記複数の領域に格納された複数のペイロードにそれぞれ付加して、前記複数のパケットを生成する
ことを特徴とする請求項１から７のいずれか１項に記載の通信装置。
【請求項９】
前記算出手段は、ＴＣＰのＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫ）のオプションヘッダのヘッダ長を算出する
ことを特徴とする請求項１から８のいずれか１項に記載の通信装置。
【請求項１０】
複数のパケットを生成して送信する通信装置の制御方法であって、
前記複数のパケットのそれぞれに付加すべきＴＣＰヘッダのヘッダ長を算出するステップと、
算出された前記ＴＣＰヘッダの前記ヘッダ長と、前記複数のパケットを送信すべきコネクションにおける最大セグメントサイズとに基づいて、送信バッファの複数の領域のそれぞれに格納すべきペイロードのペイロード長を決定するステップと、
前記送信バッファの前記複数の領域のいずれかに前記ＴＣＰヘッダを含むＴＣＰ／ＩＰヘッダを格納するとともに、決定された前記ペイロード長で送信データを分割し、分割された送信データを前記送信バッファの前記複数の領域の他の領域に前記ペイロードとしてそれぞれ格納するステップと、
前記送信バッファに格納された前記ＴＣＰ／ＩＰヘッダおよび前記送信データを入力として、当該入力されたＴＣＰ／ＩＰヘッダおよび送信データに基づいて前記複数のパケットを生成するステップと
を含むことを特徴とする通信装置の制御方法。
【請求項１１】
コンピュータを、請求項１から９のいずれか１項に記載の通信装置の各手段として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数パケットを生成および送信可能な通信装置に関する。
【背景技術】
【０００２】
ネットワーク通信において、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）による通信が広く利用されている。このＴＣＰ／ＩＰは、例えばカメラやスマートフォン等の端末から画像や動画をクラウドサーバへアップロードする等の大容量データ通信でも利用されているため、近年ではより高速で通信可能であることが要請されている。
【０００３】
パケットを通信対向装置へ送信するＴＣＰ／ＩＰプロトコル処理では、まず、アプリケーションからソケットＡＰＩのｓｅｎｄ（）コールによって指定されたユーザデータが、送信バッファ（ネットワークバッファ）に転送される。次に、送信バッファに転送され格納されたユーザデータを、典型的にはユーザデータの送信単位であるＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）で切り出す。切り出されたユーザデータ（ペイロード）に対してＴＣＰヘッダおよびＩＰヘッダ等を付加することでパケットが生成される。
【０００４】
上記のＴＣＰ／ＩＰプロトコル処理に伴うＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の負荷を軽減し、パケット送信処理を高速化する技術の１つに、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）処理がある。
このＴＳＯ処理では、上記のＭＳＳに基づいたパケット単位でのＴＣＰ／ＩＰプロトコル処理を行わない。すなわち、ＴＳＯ処理では、送信バッファに転送されたユーザデータを送信単位であるＭＳＳより大きなサイズで読み出してＴＣＰ／ＩＰプロトコル処理を行った後にＭＳＳに基づいてパケット単位に分割することで、複数のパケットを一度に生成する。ＴＳＯ処理により複数のパケットを生成することで、パケットごとに実行していたＴＣＰ／ＩＰプロトコル処理が、複数パケットに１回の実行に軽減されることとなり、ＣＰＵの負荷を軽減するとともにパケット送信処理を高速化することが実現できる。
【０００５】
また、複数パケットへの分割処理を、ＣＰＵにより実行されるソフトウエア処理から、例えばＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）上に搭載されたハードウエアオフローダへオフロードして高速化することも可能である。
特許文献１は、ＴＳＯ処理を利用するか否かを、パケットロスの有無やアプリケーションに応じて、ＴＣＰセッション（アプリケーション）単位で制御することの可能なＴＣＰ送信制御装置を開示する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】ＷＯ２０１０／０７３６７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ところで、ＴＣＰプロトコルでは、ＴＣＰオプションヘッダのペイロードへの付加を許容している。しかしながら、このＴＣＰオプションヘッダをペイロードへ付加すべき場合に、単純にＭＳＳに基づいて複数パケットへ分割すると、最大転送単位であるＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超えるパケットが生成され得る。例えば、ペイロードサイズであるＭＳＳが、最大転送単位であるＭＴＵからＴＣＰヘッダおよびＩＰヘッダのサイズを減じた値に設定されている場合、さらにＴＣＰオプションヘッダが付加されることにより、ＩＰパケット全体のサイズがＭＴＵを超えてしまう。
【０００８】
このようにＭＴＵのサイズを超過したＩＰパケットは、一度に送信することができないため、ＩＰフラグメンテーション処理が実行される。すなわち、ＭＴＵのサイズを超過したＩＰパケットは、送信側で複数のＩＰパケットに分割した後に送信され、受信側で受信された複数のＩＰパケットから元のＩＰパケットへ再構成しなければならない。
パケットの送信側および受信側でこうしたＩＰフラグメンテーション処理が付加されることで、通信スループットの低下を招いてしまう。
【０００９】
本発明は、上述の課題に鑑みてなされたものであり、複数のパケットを一括して生成および送信する際に、通信スループットの低下を有効に防止してパケットをより効率的に送信することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、本発明に係る通信装置は、複数の領域を含む送信バッファと、前記送信バッファに格納されたＴＣＰ／ＩＰヘッダおよび送信データを入力として、当該入力されたＴＣＰ／ＩＰヘッダおよび送信データに基づいて複数のパケットを生成する生成手段と、前記複数のパケットのそれぞれに付加すべきＴＣＰ／ＩＰヘッダのうち、ＴＣＰヘッダのヘッダ長を算出する算出手段と、前記算出手段により算出された前記ＴＣＰヘッダの前記ヘッダ長と、前記複数のパケットを送信すべきコネクションにおける最大セグメントサイズとに基づいて、前記送信バッファの前記複数の領域のそれぞれに格納すべきペイロードのペイロード長を決定する決定手段と、前記決定手段により決定された前記ペイロード長で前記送信データを分割し、分割された送信データを前記送信バッファの前記複数の領域に前記ペイロードとしてそれぞれ格納して、前記生成手段に、前記決定手段により決定された前記ペイロード長で前記複数のパケットを生成させるよう制御する制御手段と、を備える。
【発明の効果】
【００１１】
本発明によれば、複数のパケットを一括して生成および送信する際に、通信スループットの低下を有効に防止してパケットをより効率的に送信することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施形態に係る通信装置１のハードウエアおよび機能構成の一例を示すブロック図
【図２】実施形態１における通信装置１のネットワークバッファ３４内におけるラージパケットの構成例を示す図
【図３】ＴＣＰオプションであるＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫ）が有効な場合のパケットおよびＡＣＫの送受信処理のシーケンスの一例を示す図
【図４】通信装置１におけるパケット生成および送信処理のシーケンスの一例を示す図
【図５】実施形態１における通信装置１のパケット生成および送信処理の詳細処理手順の一例を示すフローチャート
【図６】実施形態２における通信装置１のパケット生成および送信処理の詳細処理手順の一例を示すフローチャート
【図７】実施形態２における通信装置１のネットワークバッファ３４におけるラージパケットの構成例を示す図
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して、本発明を実施するための実施形態について詳細に説明する。なお、以下に説明する実施形態は、本発明の実現手段としての一例であり、本発明が適用される装置の構成や各種条件によって適宜修正又は変更されるべきものであり、本発明は以下の実施形態に必ずしも限定されるものではない。また、本実施形態で説明されている特徴の組み合わせの全てが本発明の解決手段に必須のものとは限らない。なお、同一の構成については、同じ符号を付して説明する。
【００１４】
以下、通信装置が、送信バッファのユーザデータから複数のパケットを一括生成する処理を実行する例を説明する。当該処理は例えば、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）を使用してオフロード実行されてよい。
また、パケット生成の際に送信データに付加されるヘッダは、ＴＣＰヘッダ、ＩＰヘッダおよびＥｔｈｅｒ（Ｅｔｈｅｒｎｅｔ（登録商標））ヘッダを含んでよい。これらＴＣｐヘッダ、ＩＰヘッダ、およびＥｔｈｅｒヘッダのうち１つ以上を、以下、プロトコルヘッダともいう。プロトコルヘッダとは、通信プロトコル処理において処理されるヘッダである。ＩＰヘッダおよびＴＣＰヘッダは、以下、ＴＣＰ／ＩＰヘッダとも総称される。
【００１５】
（実施形態１）
＜本実施形態のハードウエアおよび機能構成＞
図１は、本実施形態に係る通信装置のハードウエア構成および機能構成の一例を示す図である。
図１に示す通信装置１の各機能モジュールのうち、ソフトウエアにより実現される機能については、各機能モジュールの機能を提供するためのプログラムがＲＯＭ等のメモリに記憶され、ＲＡＭに読み出してＣＰＵが実行することにより実現される。ハードウエアにより実現される機能については、例えば、所定のコンパイラを用いることで、各機能モジュールの機能を実現するためのプログラムからＦＰＧＡ上に自動的に専用回路を生成すればよい。ＦＰＧＡとは、Ｆｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略である。また、ＦＰＧＡと同様にしてＧａｔｅ  Ａｒｒａｙ回路を形成し、ハードウエアとして実現するようにしてもよい。また、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）により実現するようにしてもよい。なお、図１に示した機能ブロックの構成は一例であり、複数の機能ブロックが１つの機能ブロックを構成するようにしてもよいし、いずれかの機能ブロックが複数の機能を行うブロックに分かれてもよい。
【００１６】
通信装置１は、主処理部２、および通信処理部３を備える。主処理部２は、各種アプリケーションを含む、通信装置１の全体の処理を実行する。通信処理部３は、例えばＴＣＰ／ＩＰ等の通信プロトコル処理を含む各種通信処理や制御を実行する。主処理部２および通信処理部３は、バスブリッジ４により相互接続されている。
【００１７】
主処理部２は、メインＣＰＵ２１、メインメモリ２２、およびメインバス２３を備える。
メインＣＰＵ２１は、各種プログラムの実行を行うとともに、通信装置１の全体を制御する。メインＣＰＵ２１により実行されるプログラムには、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）や各種アプリケーションが含まれる。
メインメモリ２２は、メインＣＰＵ２１や通信処理部３のサブＣＰＵ３１が各処理を実行する上で必要となるデータやプログラムなどを格納する。このメインメモリ２２は、例えば、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されてよい。
【００１８】
メインメモリ２２内部には、メインＣＰＵ２１によりユーザバッファ２４が構成され、このユーザバッファ２４にユーザデータが格納される。ユーザバッファ２４は、メインＣＰＵ２１の他、サブＣＰＵ３１からもバスブリッジ４およびメインバス２３を介してアクセス可能な領域とされる。ユーザバッファ２３に格納されるユーザデータは、メインＣＰＵ２１が通信装置１のアプリケーションからネットワーク５を介して通信対向装置へ送出したいデータを含む。以下、ユーザデータを、送信データ、または単に、データともいう。
メインバス２４は、メインＣＰＵ２１からメインメモリ２２および通信処理部３へのアクセスおよびデータ転送、または通信処理部３からメインメモリ２２へのアクセスおよびデータ転送などに使用される。
【００１９】
通信処理部３は、サブＣＰＵ３１、オンチップメモリ３３、データ転送部３５、パケット生成部３６、ＬＡＮ制御部３７、ＷＬＡＮ制御部３８、およびローカルバス３９を備える。
サブＣＰＵ３１は、各種通信処理に関するプログラムの実行を行う。サブＣＰＵ３１により実行されるプログラムは、ＯＳおよび通信プロトコル処理のための通信プロトコルスタックを含む。本実施形態では、通信プロトコル処理として、ＴＣＰ／ＩＰプロトコルスタックが実行される例を説明するが、他のプロトコルスタックであってもよい。
サブＣＰＵ３１は、ペイロードサイズ決定部３２を備える。
【００２０】
オンチップメモリ３３は、例えば、ＡＳＩＣやＦＰＧＡ内に構成される内部メモリである。オンチップメモリ３３は、通信処理部３のサブＣＰＵ３１、データ転送部３５、パケット生成部３６からアクセス可能なメモリである。このオンチップメモリ３３は、例えばＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の半導体メモリで構成されてよく、これによりメインメモリ２２より高速にアクセスされることが可能となる。また、オンチップメモリ３３は、ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）上に構成されるメモリデバイスであってもよい。
【００２１】
オンチップメモリ３３内部には、サブＣＰＵ３１により複数のネットワークバッファ３４が構成される。これらのネットワークバッファ３４は、サブＣＰＵ３１が通信対向装置との間で送受信されるデータを処理する際に使用される送信バッファである。
ネットワークバッファ３４は、送信バッファが必要になったタイミングでオンチップメモリ３３に動的に獲得され、データ送信処理が終了して不要になった際に開放される。また、ネットワークバッファ３４はそれぞれ、データ領域とネクストバッファ領域を持つ。  各ネットワークバッファ３４内のネクストバッファ領域に、別のネットワークバッファのアドレス（ポインタ）を指定する。これにより、複数のネットワークバッファを連結して各ネットワークバッファ３４のサイズより大きい送信データをパケット生成部３６へ受け渡すことができる。このネットワークバッファ３４の詳細は図２を参照して後述する。
【００２２】
データ転送部３５は、メインＣＰＵ２１、サブＣＰＵ３１およびパケット生成部３６からの指示に従って、各種データ転送を実行することが可能である。データ転送部３５は、例えば、メインメモリ２２に格納されているデータを、パケット生成部３６またはオンチップメモリ３３へ転送する。なお、データ転送部３５が実行する処理の全部または一部は、ＤＭＡＣ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌｌｅｒ）に実装してオフロード実行されてもよい。
【００２３】
パケット生成部３６は、サブＣＰＵ３１から、複数パケット生成処理を実行させるため入力されるラージパケットに基づいて、ネットワークバッファ３４に格納されているユーザデータ（ペイロード）をパケット化する。ラージパケットとは、サブＣＰＵ３１からパケット生成部３６に入力される、複数のネットワークバッファ３４を連結して格納することができる大きいサイズの送信データである。
【００２４】
まず、パケット生成部３６は、サブＣＰＵ３１から入力される、ラージパケットを構成する先頭のネットワークバッファ３４に格納されるＴＣＰ／ＩＰのヘッダ情報に基づいて、複数のパケットのための複数のヘッダを生成する。具体的には、パケット生成部３６は、先頭のネットワークバッファ３４に格納されるラージパケットのＴＣＰ／ＩＰヘッダを複製し、パケットごとに値が異なるフィールドを書き換えることで、複数のヘッダを生成する。
【００２５】
例えば、ヘッダ内のＩＰアドレス情報やポート番号情報は、ラージパケットのＴＣＰ／ＩＰヘッダ内の値が複製されるが、ＴＣＰシーケンス番号は、パケット生成部３６により書き換えられる。ラージパケットに含まれるＴＣＰシーケンス番号は先頭パケットのシーケンス番号であるため、分割されたパケットの各ペイロードサイズから次パケット以降のシーケンス番号が計算されるからである。
パケット生成部３６が生成した複数のヘッダは、パケット生成部３６の内蔵メモリへ格納してもよく、オンチップメモリ３３上にヘッダ格納用に獲得されたネットワークバッファ３４へ格納してもよい。サブＣＰＵ３１は、生成されたヘッダと、各ヘッダに対応するネットワークバッファ３４上の送信データ（ペイロード）とを連結することにより、パケット生成部３６を介してネットワークへ送信すべき複数のパケットを生成する。
【００２６】
なお、パケット生成部３６が実行する処理の全部または一部は、ＴＳＯ（ＴＣＰ  Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｏｆｆｌｏａｄ）のオフローダに実装してオフロード実行することができる。このＴＳＯは、例えばＮＩＣ上にハードウェアオフローダとして実装されてよい。
ローカルバス３９は、通信処理部３の各機能ブロックを相互接続するとともに、メインバス２３にバスブリッジ４を介して接続する。
【００２７】
ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）制御部３７は、ネットワーク５へ接続する有線通信インターフェースであり、パケットの送受信を実行する。このＬＡＮ制御部３７は、伝送メディアのＰＨＹレイヤおよびＭＡＣレイヤ（伝送メディア制御）のハードウェア回路を含む。例えば、ＬＡＮ制御部３７のインターフェースがＥｔｈｅｒｎｅｔ（登録商標）である場合、ＬＡＮ制御部３７は、イーサネット（登録商標）ＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）に相当する。
ＷＬＡＮ（Ｗｉｒｅｌｅｓｓ  ＬＡＮ）制御部３８は、ネットワーク５に接続する無線通信インターフェースであり、パケットの送受信を実行する。このＷＬＡＮ制御部３８は、ＩＥＥＥ８０２．１１ａ／ｂ／ｇ／ｎ／ａｃ等の無線ＬＡＮ制御を実行するコントローラおよびＲＦ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ）回路を含む。
パケット生成部３６およびサブＣＰＵ３１により生成された複数のパケットは、ＬＡＮ制御部３７やＷＬＡＮ制御部３８等の通信制御部に受け渡されて、ネットワーク５へ送出される。
【００２８】
＜ペイロードサイズ決定処理＞
サブＣＰＵ３１のペイロードサイズ決定部３２は、これから送信すべきパケットのＴＣＰ／ＩＰプロトコルのオプションヘッダのサイズに基づいて、ラージパケットを複数のパケットに分割する際のデータ分割サイズを決定する。
具体的には、ペイロードサイズ決定部３２は、ＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）から、ＴＣＰオプションヘッダのサイズを除いたサイズを、データ分割サイズとして決定する。ＭＳＳは、ＴＣＰセッション等の通信セッションの確立時に設定される、ユーザデータの送信単位（セグメント）の最大値、すなわち当該ＴＣＰセッションで送信可能な最大セグメントサイズである。通常、このＭＳＳは、通信対向装置から当該装置が受信できるセグメントの最大値として、コネクション確立時にＴＣＰオプションで通知される。
【００２９】
サブＣＰＵ３１は、パケット生成部３６に複数パケット生成処理を実行させるための入力情報を生成する。サブＣＰＵ３１はまた、パケット生成部３６が複数のパケットのそれぞれに付加すべき複数のＴＣＰ／ＩＰヘッダを複製により生成するためのＴＣＰ／ＩＰヘッダの情報をパケット生成部３６に入力する。
本実施形態では、パケット生成部３６にパケット分割させるため入力される入力情報を、ラージパケットという。このラージパケットを複数のネットワークバッファ３４を連結して生成し、パケット生成部３６へ入力することで、パケット生成部３６を介して、１つのラージパケットが分割された複数のパケットを生成することができる。
【００３０】
図２は、通信装置１のオンチップメモリ３３のネットワークバッファ３４上に、サブＣＰＵ３１により構成される、ラージパケットの構成例を示す。
ラージパケットは、これから送信しようとする複数パケット分のペイロードと、このペイロードに対応する一組のＴＣＰヘッダおよびＩＰヘッダとが連結されて成るＴＣＰ／ＩＰパケットの構成を有する。
【００３１】
図２に示すように、ラージパケットは、複数のネットワークバッファＮＢ１〜ＮＢ４が連結された領域に格納される。ＴＣＰ／ＩＰヘッダが格納されるネットワークバッファＮＢ１と、各ペイロードが格納されるネットワークバッファＮＢ２〜ＮＢ４とは、それぞれ別個のバッファである。各ネットワークバッファＮＢ１〜ＮＢ４に設けられたネクストバッファの領域に、当該バッファに連結されるべき次のバッファのアドレスを設定することで、複数のネットワークバッファＮＢ１〜ＮＢ４が連結される。
なお、各ネットワークバッファＮＢ１〜ＮＢ４は、必ずしもオンチップメモリ３３上の連続する領域に配置される必要はない。また、図２には４つのネットワークバッファＮＢ１〜ＮＢ４が図示されているが、ネットワークバッファの数は４つに限定されず、送信されるべきユーザデータ長やコネクションの情報等に基づいて適宜その数が決定されてよい。
【００３２】
先頭のネットワークバッファＮＢ１には、ＴＣＰ／ＩＰヘッダ（ＩＰヘッダおよびＴＣＰヘッダ）が格納される。先頭のネットワークバッファＮＢ１にはまた、ＴＣＰオプションヘッダも格納される。図２では、ＴＣＰ／ＩＰヘッダに連続するＴＣＰオプションヘッダとして、ＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫ）ブロックのオプションヘッダが格納されている。
ラージパケットが持つＴＣＰ／ＩＰヘッダに含まれる情報は、ラージパケットが複数のパケットに分割された際の先頭のパケットに対応した値となっている。また、ラージパケット内の複数のペイロードのそれぞれ（ペイロード１〜３）は、ペイロードサイズ決定部３２により決定されたデータ分割サイズを最大値として、各ネットワークバッファＮＢ２〜ＮＢ４に格納されている。
【００３３】
図２に示すラージパケットは、３パケット分のペイロードを含む。ペイロード１およびペイロード２は、ペイロードサイズ決定部３２により決定されたデータ分割サイズに相当するサイズを有する。一方、ペイロード３は、ペイロードサイズ決定部３２により決定されたデータ分割サイズに満たないサイズを有する。
【００３４】
図２にＴＣＰオプションヘッダとして図示されるＳＡＣＫブロックは、ＴＣＰのオプションであるＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫ）が有効である場合に、ペイロードの前に付加されるＴＣＰオプションヘッダの１つである。データ送信に応答する通常のＡＣＫは、ＡＣＫ番号までのデータがすべて受信されたことを通知するが、一方、ＳＡＣＫを有効にしたＡＣＫ（ＳＡＣＫ）は、部分的にデータが受信されたことを通知することができる。ＳＡＣＫオプションを有効にして、ＳＡＣＫによりデータ受信の確認応答を送信することで、データの再送効率を上げることができる。
【００３５】
図３は、ＴＣＰのオプションであるＳＡＣＫが送信側および受信側の双方でサポートされており有効である場合の、データ受信およびＡＣＫ送信のシーケンスの一例を示す。
データ送信側装置３１１から、５つの連続する送信データ（Ｓｅｑ＝１００、２００、３００、４００）が対向するデータ受信側装置３１２に送信され、そのうち送信データ（Ｓｅｑ＝３００）がデータ受信側装置３１２に未達であるとする。
これに対して、データ受信側装置３１２が、ＳＡＣＫが有効である場合に、ＳＡＣＫ（Ａｃｋ＝３００、ＳＬＥ＝４００、ＳＲＥ＝５００）を送信したものとする。
この場合、データ送信側装置３１１は、Ｓｅｑ＝３００のデータのみを再送すればよく、データ受信側装置３１２にすでに受信された後続するＳｅｑ＝４００のデータは再送する必要がない。このため、ＳＡＣＫが無効である場合にＳｅｑ＝３００、およびＳｅｑ＝４００のデータのデータを再送しなければならないことと比較して、再送効率が向上する。
【００３６】
ＳＡＣＫが有効である場合、パケットに付加されるべきＴＣＰオプションヘッダとしてのＳＡＣＫブロックが付加されるが、このＳＡＣＫブロックのサイズ（ＳＡＣＫブロック長）は、データ受信側装置３１２のデータ受信状況により可変である。具体的には、ＳＡＣＫブロック長は、４＋８＊ｎ（ｎ＝１〜４）バイトで算出されるため、ＴＣＰオプションヘッダのサイズは、＋１２バイトから＋３６バイトまで変動する。
このため、ＴＣＰオプションヘッダであるＳＡＣＫブロックが付加されたために、ＩＰパケット全体のサイズがネットワーク上の最大転送単位であるＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超過してしまう場合がある。
【００３７】
例えば、ＭＴＵのサイズが１５００バイトである場合に、ＭＳＳのサイズをＴＣＰ／ＩＰパケット長の４０バイトを減算した１４６０バイトとしているものとする。この場合、ペイロードをＭＳＳのサイズで区切っていると、ＴＣＰ／ＩＰパケットにＳＡＣＫブロックのＴＣＰオプションヘッダが付加されることで、ＩＰパケット全体のサイズがＭＴＵを超えて、ＩＰフラグメンテーションが発生する。すなわち、ＭＴＵのサイズを超過したＩＰパケットは、送信側で複数のＩＰパケットに分割した後に送信され、受信側で受信された複数のＩＰパケットから元のＩＰパケットへ再構成しなければならなず、通信スループットの低下を招いてしまう。
本実施形態では、このようなＩＰフラグメンテーションが発生しないように、サブＣＰＵ３１のペイロードサイズ決定部３２が、ペイロードサイズを決定する。
【００３８】
なお、上記では、ペイロードサイズ決定部３２が、ＴＣＰオプションヘッダとしてのＳＡＣＫブロック長に基づいて、ＭＳＳからＳＡＣＫブロック長を減算してデータ分割サイズとして決定する例を説明したが、本実施形態はこれに限定されない。例えば、ペイロードサイズ決定部３２は、ＳＡＣＫブロック以外のＴＣＰオプションヘッダのヘッダ長を算出して、データ分割サイズを決定してもよく、ＩＰオプションヘッダのヘッダ長を算出して、データ分割サイズを決定してもよい。例えば、ペイロードサイズ決定部３２は、ＩＰｖ６オプションヘッダとしてのホップバイホップルーティングヘッダのヘッダ長に基づいてデータ分割サイズを決定することができる。
【００３９】
＜通信装置１のパケット生成および送信処理シーケンス例＞
図４は、通信装置１がネットワーク５を介して通信対向装置へパケットを生成して送信する送信処理のシーケンスの一例を示す。
Ｓ４１で、メインＣＰＵ２１は、メインメモリ２２内のユーザバッファ２４へユーザデータを格納する。
Ｓ４２で、メインＣＰＵ２１は、アプリケーションからのユーザデータの送信要求として、ソケットＡＰＩであるｓｅｎｄ（）を呼び出す。
Ｓ４２でｓｅｎｄ（）の呼び出しが実行されると、サブＣＰＵ３１は、パケット送信のため、データ転送処理を開始するが、まず、ユーザバッファ２４からネットワークバッファ３４へユーザデータをコピーする。
【００４０】
このユーザデータのネットワークバッファ３４へのコピーを実行するため、Ｓ４３で、サブＣＰＵ３１は、まず、オンチップメモリ３３のネットワークバッファ３４用の領域から、ユーザデータ送信に必要なサイズ分のネットワークバッファ３４を獲得する。複数のバッファを獲得する場合、獲得された複数のバッファは、バッファ情報のネクストバッファ領域に次バッファのアドレスを設定することにより全て連結された状態となる。
Ｓ４４で、サブＣＰＵ３１は、獲得されたネットワークバッファ３４に対して、ユーザバッファ２４からユーザデータをコピー（転送）するように、データ転送部３５へ要求する。
ユーザデータのコピーを要求されたデータ転送部３５は、Ｓ４５で、ユーザバッファ２４からユーザデータを読み出し、ラージパケットを生成するため、ネットワークバッファ３４内の各バッファ領域へ分割して転送する。
【００４１】
Ｓ４５のネットワークバッファ３４へのデータ転送が完了すると、Ｓ４６で、データ転送部３５は、ユーザデータのデータ転送完了をサブＣＰＵ３１へ通知する。
ユーザデータのネットワークバッファ３４へのデータ転送完了が通知されると、Ｓ４７で、サブＣＰＵ３１は、これから送信すべきユーザデータの送信サイズを決定する。
ＴＣＰプロトコルにおける通信では、通信を行っているアプリケーションごとにコネクションが異なり、コネクションごとにウィンドウサイズ、ＭＳＳ、通信対向装置からのデータ受信状況等が管理されている。
【００４２】
本実施形態では、サブＣＰＵ３１が各コネクションの管理を実行し、各コネクションのコネクション情報は、メインメモリ２２に格納されている。
Ｓ４７では、サブＣＰＵ３１は、コネクション情報を参照して得られる送信ウインドウサイズ、輻輳ウィンドウサイズと、Ｓ４５でネットワークバッファ３４にコピーしたユーザデータのサイズを比較し、最も小さいサイズを送信サイズとして決定する。
Ｓ４８で、サブＣＰＵ３１は、複数パケットの生成処理を開始する。
【００４３】
具体的には、まず、サブＣＰＵ３１内のペイロードサイズ決定部３２により、ユーザデータからパケット生成部３６に複数のパケットを一括生成させる際のデータ分割サイズを決定する。
ペイロードサイズ決定部３２は、生成される複数のパケットが送信されるべきコネクションのコネクション情報を参照して、ＴＣＰオプションヘッダのサイズとＭＳＳから、データ分割サイズを決定する。
ペイロードサイズ決定部３２は、コネクション情報を参照し、ＴＣＰのＳＡＣＫオプションが有効である場合は、通信対向装置からのデータ受信状況を確認して、ＳＡＣＫオプション長を算出する。
ＳＡＣＫオプションは、上述のとおり、通信相手からの送信データが部分的に受信できている場合に、受信できているデータ区間をＡｃｋ番号等のパラメータにより通信相手に通知するＴＣＰのオプションである。ＳＡＣＫを受信した通信相手は、ＳＡＣＫで通知されたデータ区間以外のデータのみを再送すればよいため、再送効率を上げることができる。
【００４４】
ペイロードサイズ決定部３２は、Ｓ４８で、ＭＳＳからＳＡＣＫオプション長を除いたサイズをデータ分割サイズとして決定する。サブＣＰＵ３１は、送信データを、ペイロードサイズ決定部３２により決定されたデータ分割サイズ分ずつ分割して、パケット生成部３６に入力すべき入力情報であるラージパケットを生成する。
Ｓ４９で、サブＣＰＵ３１は、ネットワークバッファ３４から、これからパケット生成部３６により生成されるヘッダを格納するためのネットワークバッファ３４を獲得する。
なお、Ｓ４９でヘッダを格納するために獲得するネットワークバッファ３４のデータエリアは、Ｓ４３で獲得されるユーザデータを格納するネットワークバッファ３４のデータエリアより小さいサイズに制限してもよい。
【００４５】
Ｓ５０で、サブＣＰＵ３１は、パケット生成部３６へ、複数パケット生成処理を要求する。複数パケット生成処理は、ＴＳＯ処理で実行されてよい。この複数パケット生成処理の要求は、パケット生成部３６へラージパケットを指定することで実行され、一方、Ｓ４８で通常パケットが生成されていた場合には、パケット生成部３６への複数パケット生成要求は実行されない。
サブＣＰＵ３１はさらに、パケット生成部３６にＴＣＰ／ＩＰヘッダを複製により生成させるための情報として、ラージパケットに対するＴＣＰ／ＩＰヘッダの情報を生成してパケット生成部３６へ受け渡す。本実施形態において、このラージパケットに対するＴＣＰ／ＩＰヘッダの情報は、例えば、上記のＴＣＰオプションヘッダとしてのＳＡＣＫブロックの情報を含む。
パケット生成に必要な情報を設定した後、Ｓ５０で、サブＣＰＵ３１は、パケット生成部３６へパケット生成要求を行う。
【００４６】
Ｓ５１で、パケット生成部３６は、Ｓ５０でサブＣＰＵ３１から設定されたラージパケットを分割し、受け渡されたラージパケットに対するＴＣＰ／ＩＰヘッダの情報から複数のＴＣＰ／ＩＰヘッダを生成して、複数のパケットを生成する。
具体的には、パケット生成部３６は、ヘッダ生成に必要な情報のうち、送信元、宛先ＩＰアドレス、送信先、宛先ポート番号等、複数のパケット間で変化のないヘッダフィールドについては、全てラージパケットのヘッダを複製することでヘッダを生成する。
【００４７】
一方、パケット生成部３６は、例えば、ＩＰｖ４ヘッダにおけるチェックサム、データグラム長、ＴＣＰヘッダにおけるシーケンス番号、チェックサム等、複数のパケット間で変化するヘッダフィールドはラージパケットのヘッダから内容を変更する。なお、サブＣＰＵ３１が生成する、ラージパケットに対するＴＣＰ／ＩＰヘッダの情報は、テンプレートヘッダともいう。
本実施形態において、パケット生成部３６がラージパケットのヘッダを複製して生成する複数のＴＣＰ／ＩＰヘッダは、図２のネットワークバッファＮＢ１に示されるラージパケットのヘッダと同様、ＴＣＰオプションヘッダ（ＳＡＣＫブロック）を含む。複数のパケットのすべてにＴＣＰオプションヘッダであるＳＡＣＫブロックが冗長に付加されることで、通信環境が悪い場合であってもデータ送受信の確実性が向上できる。
【００４８】
Ｓ５２で、パケット生成部３６は、生成した複数のヘッダをＳ４９で獲得したネットワークバッファ３４の領域へ格納するよう、データ転送部３５に指示する。データ転送部３５は、格納を指示された複数のヘッダをネットワークバッファ３４へ格納する。
生成された複数のヘッダがネットワークバッファ３４に格納されると、Ｓ５３で、データ転送部３５は、パケット生成部３６へ、生成された複数のヘッダのネットワークバッファ３４への格納（書き込み）完了を通知する。
【００４９】
複数のヘッダのネットワークバッファ３４への格納完了を通知されると、パケット生成部３６は、生成された各ヘッダと対応する各ペイロードとをそれぞれ連結してパケットを生成するために、バッファ情報を更新する。具体的には、パケット生成部３６は、ヘッダが格納されたネットワークバッファ３４の次バッファアドレスへ、ペイロードが格納されたアドレスを設定することで、１つのパケットを形成することができる。同様の処理を、パケット数分繰り返し実行する。これにより、複数のパケットが生成される。なお、複数のヘッダから複数のパケットを生成する上記処理は、パケット生成部３６に替えてその全部または一部をサブＣＰＵ３１により実行されてもよい。
Ｓ５４で、パケット生成部３６は、複数のヘッダの生成が完了したことをサブＣＰＵ３１へ通知する。
【００５０】
Ｓ５４で複数パケットの生成が完了すると、Ｓ５５で、サブＣＰＵ３１は、パケット送信処理を開始する。
Ｓ５６で、サブＣＰＵ３１は、複数のパケットを連結した送信要求をＷＬＡＮ制御部３８へ通知する。
複数パケットの送信要求が通知されたＷＬＡＮ制御部３８は、Ｓ５７で、ネットワークバッファ３４上に格納されている複数のパケット（パケット群）を読み出して、ネットワーク５へ送信する。
【００５１】
Ｓ５８で、ＷＬＡＮ制御部３８は、全てのパケットの送信を完了すると、パケット送信の完了をサブＣＰＵ３１へ通知する。なお、上記ではＷＬＡＮ制御部３８によりパケットを送信する例を説明したが、これに替えてＬＡＮ制御部３７が同様にパケット送信してもよい。
上記のＳ４７からＳ５８までの処理が、一連の複数のパケット生成および送信処理に相当する。ネットワークバッファ３４へコピーされたユーザデータを全て送信するまで、Ｓ４７からＳ５８の処理は繰り返される。
ネットワークバッファ３４へコピーされたユーザデータがすべてパケットとして送信されると、Ｓ５９で、サブＣＰＵ３１は、メインＣＰＵ２１に対し、ｓｅｎｄ（）コールが成功した旨の応答を通知する。
【００５２】
＜通信装置１のパケット送信処理フロー＞
図５は、本実施形態において通信装置１のサブＣＰＵ３１が実行および制御するパケット送信処理の処理手順の一例を示すフローチャートである。図５に示す処理は、図４に示すＳ４３からＳ５８の処理に相当する。図５のパケット送信処理は、例えば、アプリケーションからユーザデータの送信を指示されたことを契機に起動されてよいが、これに限定されない。
Ｓ５０１で、アプリケーションからソケットＡＰＩのｓｅｎｄ（）の実行を介して呼び出されることにより、サブＣＰＵ３１は、パケット送信処理を開始し、ユーザバッファ２４からネットワークバッファ３４へ、ユーザデータをコピーする（図４のＳ４３からＳ４６に相当）。
【００５３】
Ｓ５０２で、サブＣＰＵ３１は、ネットワークバッファ３４にコピーしたユーザデータにつき、これから送信する送信サイズを決定する（図４のＳ４７に相当）。
Ｓ５０３で、サブＣＰＵ３１は、アプリケーションからのｓｅｎｄ（）で使用されるＴＣＰコネクションのコネクション情報を参照して、当該ＴＣＰコネクションにおいてＳＡＣＫオプションが有効になっているか否かを判定する。ＳＡＣＫオプションの設定は、コネクション確立時に決定されており、当該コネクションのコネクション情報を参照することにより有効化されているか無効化されているかを判定することができる。
【００５４】
当該ＴＣＰコネクションでＳＡＣＫオプションが有効になっている場合（Ｓ５０３：Ｙ）、Ｓ５０４に進み、一方、ＳＡＣＫオプションが無効になっている場合（Ｓ５０３：Ｎ）、Ｓ５０４をスキップしてＳ５０５に進む。
Ｓ５０４で、サブＣＰＵ３１は、ＴＣＰヘッダに付加されるＳＡＣＫブロック長を算出する。ＳＡＣＫは通信対向装置から受信されたデータが不連続になっている場合に使用され、ＳＡＣＫブロック長は可変であって、ＳＡＣＫブロックはＴＣＰヘッダに最大４つまで付加可能である。
なお、ＳＡＣＫオプションが有効であっても、通信対向装置から受信されたデータが連続して受信でている場合等、付加するべきＳＡＣＫブロックがない場合、ＳＡＣＫ長は０となる。
【００５５】
Ｓ５０５で、サブＣＰＵ３１のペイロードサイズ決定部３２は、データ分割サイズを算出する。データ分割サイズは、ｓｅｎｄ（）で使用されるＴＣＰコネクションに設定されているＭＳＳから、Ｓ５０４で算出されたＳＡＣＫブロック長を減算することで算出することができる。なお、ＳＡＣＫオプションが無効であるＴＣＰコネクションについては、当該ＴＣＰコネクションのＭＳＳに設定された値をそのままデータ分割サイズとすればよい。
【００５６】
Ｓ５０６で、サブＣＰＵ３１は、Ｓ５０２で決定された送信サイズとＳ５０５で算出されたデータ分割サイズとを比較する。
送信サイズがデータ分割サイズより大きい場合（Ｓ５０６：Ｙ）、Ｓ５０７に進んでラージパケットを生成する。一方、送信サイズがデータ分割サイズ以下である場合（Ｓ５０６：Ｎ）、すなわち、データ分割サイズで区切られるペイロード長以下である場合、Ｓ５０８に分岐して通常のパケットを生成して、Ｓ５１０へ進む。Ｓ５０８では、Ｓ５０２で決定された送信サイズに対応するユーザデータをペイロードとし、サブＣＰＵ３１が、パケット生成部３６を介さずに、ペイロードに対応するＴＣＰ／ＩＰヘッダを付加することで通常のパケットを生成する。
【００５７】
Ｓ５０６で送信サイズがデータ分割サイズより大きい場合、Ｓ５０７で、サブＣＰＵ３１は、データ分割サイズに基づいて、ラージパケットを生成する。
具体的には、サブＣＰＵ３１は、Ｓ５０２で決定された送信サイズに対応するユーザデータをペイロードとし、このペイロードに対応するＴＣＰ／ＩＰヘッダを生成して付加することで、ラージパケットを生成する。なお、Ｓ５０６でラージパケットに付加されるＴＣＰヘッダは、ＳＡＣＫオプションヘッダ（ＳＡＣＫブロック）を含む。
送信サイズは、ラージパケットのペイロードの全長となり、このペイロード全体を、図２に示すようにＳ５０５で算出されたデータ分割サイズ（ペイロードサイズ）によって複数のネットワークバッファ３４それぞれで区切って、複数のパケットが生成される。
【００５８】
Ｓ５０９で、サブＣＰＵ３１は、Ｓ５０７で生成されたラージパケットをパケット生成部３６に入力して、複数のパケットの一括生成処理を、例えばＴＳＯ処理により実行させる。パケット生成部３６は、サブＣＰＵ３１がＳ５０７で生成したラージパケットに付加されるＴＣＰ／ＩＰヘッダを生成される複数のパケットの数だけ複製する。ＳＡＣＫオプションを含むＴＣＰ／ＩＰヘッダは複製されて、複数のパケットのそれぞれに付加される。
Ｓ５１０で、サブＣＰＵ３１は、Ｓ５０９で生成された複数のパケット、またはＳ５０８で生成された通常のパケットのいずれかを、例えばＷＬＡＮ制御部３８を介して外部へ送信する。
Ｓ５１１で、サブＣＰＵ３１は、Ｓ５０１でネットワークバッファ３４へコピーされたユーザデータ中に未送信のユーザデータが存在するか否かを判定する。未送信であるユーザデータがネットワークバッファ３４中に存在する場合（Ｓ５１１：Ｙ）、Ｓ５０２に戻ってＳ５０２からＳ５１１のパケット送信処理が実行される。一方、Ｓ５０１でネットワークバッファ３４へコピーされたユーザデータがすべて送信されている場合、パケット送信処理を終了する。
【００５９】
なお、図５のフローではパケット送信処理を開始した後、Ｓ５０４で、パケット生成処理を実行するごとに送信ＳＡＣＫブロック長を算出している。しかしながら本実施形態では、最初に生成すべきパケットに付加すべき送信ＳＡＣＫブロック長を一旦算出した後は、都度送信ＳＡＣＫブロック長を算出することなく、送信ＳＡＣＫブロック長を固定して使用してもよい。
具体的には、初回のパケット生成処理時のみに、ＭＳＳからＳＡＣＫブロック長の最大値（例えば３６バイト）を減算することで、データ分割サイズを算出し、初回に算出されたデータ分割サイズを使用してラージパケットを生成する。二回目以降のパケット生成処理では、データ分割サイズを再度算出することなく、初回で算出されたデータ分割サイズを使用すればよい。二回目以降のデータ分割サイズの算出を省略し、ラージパケット生成処理を簡易化することで、サブＣＰＵ３１のパケット送信に係る負荷が軽減されるとともにパケット送信が高速化できる。
【００６０】
以上説明したように、本実施形態によれば、複数のパケットを一括生成する際に、ＴＣＰオプションヘッダ長が付加されても、ＩＰフラグメンテーションの発生が有効に防止された適切なペイロードサイズのパケットを生成することができる。
【００６１】
（実施形態２）
以下、実施形態２を、図６および図７を参照して、上記の実施形態１と異なる点についてのみ詳細に説明する。実施形態１では、パケット生成部３６が生成する複数のパケットのそれぞれについて同一のデータ分割サイズを算出した。これに対して、実施形態２では、先頭のパケットについて送信ＳＡＣＫブロック長を考慮してペイロードサイズを算出し、先頭のパケットに対してＴＣＰオプションヘッダであるＳＡＣＫブロックをＴＣＰ／ＩＰヘッダに付加する。一方、２つ目以降のパケットについてはラージパケットをＭＳＳで区切ってペイロードと生成し、ＴＣＰオプションヘッダであるＳＡＣＫブロックはＴＣＰ／ＩＰヘッダに付加されない。
【００６２】
実施形態２に係る通信装置１のハードウエア構成および機能構成は、図１に示される実施形態１と同様である。
実施形態２に係る通信装置１が実行するパケット生成および送信処理は、図４に示される実施形態１と同様である。
【００６３】
図６は、本実施形態において、通信装置１のサブＣＰＵ３１が制御するパケット生成および送信処理の詳細処理手順の一例を示すフローチャートである。
Ｓ５０１〜Ｓ５０４の各処理は、図５に示す実施形態１のＳ５０１〜Ｓ５０４の各処理と同様である。
Ｓ５０４でＴＣＰオプションヘッダとして付加されるべき送信ＳＡＣＫ長を算出した後、Ｓ６０１で、通信装置１のサブＣＰＵ３１は、ラージパケットの先頭のペイロードについて、データ分割サイズを算出して、Ｓ５０６へ進む。具体的算出方法は、実施形態１において、図５のＳ５０５でサブＣＰＵ３１が算出するデータ分割サイズの算出方法と同一である。ただし、本実施形態では、Ｓ６０１で算出されたデータ分割サイズは、ラージパケットの先頭のペイロードにのみ適用される。
【００６４】
Ｓ５０６の処理は、図５に示す実施携帯１のＳ５０６の処理と同様である。
Ｓ５０６で、Ｓ５０２で決定された送信サイズがＳ６０１で算出されたデータ分割サイズより大きいと判定されると（Ｓ５０６：Ｙ）、Ｓ６０２で、サブＣＰＵ３１は、ラージパケットのヘッダと先頭ペイロードを生成する。
【００６５】
本実施形態において、サブＣＰＵ３１は、ヘッダ用のネットワークバッファ３４に、ＴＣＰオプションヘッダであるＳＡＣＫブロックを含まないＴＣＰ／ＩＰヘッダを生成する。
一方、サブＣＰＵ３１は、先頭ペイロード用のネットワークバッファ３４には、まずＴＣＰオプションヘッダであるＳＡＣＫブロックを生成する。このＳＡＣＫブロックに加えて、サブＣＰＵ３１は、送信するユーザデータからＳ６０１で決定した先頭ペイロードのためのデータ分割サイズ分のユーザデータを区切ってペイロードとして生成する。
【００６６】
ヘッダ用のネットワークバッファ３４は、先頭ペイロード用のネットワークバッファ３４へ、ヘッダ用のネットワークバッファ３４のネクストバッファ領域に先頭ペイロード用のネットワークバッファ３４のアドレス（ポインタ）を指定することにより連結される。
Ｓ６０３で、サブＣＰＵ３１は、ラージパケットの２つ目以降のペイロードを生成する。これら２つ目以降のペイロードについて、ネットワークバッファ３４ごとにユーザデータ（ラージパケット）をＭＳＳで区切ってパケットを生成する。
先頭ペイロード用のネットワークバッファ３４と、２つ目以降のペイロード用のネットワークバッファ３４の間も、ネクストバッファ領域へ次のネットワークバッファ３４のアドレスを指定することにより連結される。残りの送信すべきユーザデータのすべてについてＭＳＳで区切ってパケットを生成することで、ラージパケットの生成が完了する。
【００６７】
図７は、Ｓ６０２およびＳ６０３の処理を経てネットワークバッファ３４に生成されるラージパケットの構成の一例を示す。
図７を参照して、ヘッダ用のネットワークバッファＮＢ１には、ＴＣＰオプションヘッダを含まないＴＣＰ／ＩＰヘッダが生成されている。先頭ペイロード用のネットワークバッファＮＢ２には、ＴＣＰオプションヘッダであるＳＡＣＫブロックと、先頭ペイロード用のデータ分割サイズで区切られたペイロード１が格納されている。
一方、２つ目のネットワークバッファＮＢ３、３つ目のネットワークバッファＮＢ４には、ＭＳＳで区切られたペイロード２、ペイロード３がそれぞれ格納されている。
【００６８】
図６に戻り、Ｓ５０９で、サブＣＰＵ３１は、Ｓ６０３で生成されたラージパケットをパケット生成部３６へ入力し、複数パケットの一括生成処理を実行させる。
パケット生成部３６は、Ｓ６０２でサブＣＰＵ３１により生成されたヘッダ（ＴＣＰ／ＩＰヘッダ）を生成する。このため、本実施形態では、パケット生成部３６は、ＴＣＰオプションヘッダであるＳＡＣＫブロックを含まないＴＣＰ／ＩＰヘッダを複製して、各パケットへ付加する。結果として、先頭のペイロードのネットワークバッファ３４（図７のＮＢ１）のみ、ＴＣＰ／ＩＰヘッダに続いて、ＴＣＰオプションヘッダであるＳＡＣＫブロックが付加されることになる。一方、先頭以外のペイロードのネットワークバッファ３４には、ＴＣＰオプションヘッダであるＳＡＣＫブロックは付加されない。
Ｓ５０８〜Ｓ５１１までの各処理は、図５に示すＳ５０８〜Ｓ５１１までの処理と同様である。
【００６９】
以上説明したように、本実施形態によれば、複数のパケットを一括生成する際に、先頭パケットにのみＳＡＣＫブロックを付加しつつ、２つ目以降のパケットについてはＳＡＣＫブロック長を考慮する場合より長いＭＳＳでユーザデータを区切ることができる。したがって、ＩＰフラグメンテーションの発生を有効に防止しつつ、２つ目以降のパケットをより長いペイロード長で生成することができるため、パケット送信のスループットが向上する。また、パケット受信側におけるＳＡＣＫの受信処理の負荷も軽減される。
【００７０】
また、本発明は、上述の実施形態の一部または１以上の機能を実現するプログラムによっても実現可能である。すなわち、そのプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータ（またはＣＰＵやＭＰＵ等）における１つ以上のプロセッサがプログラムを読出し実行する処理により実現可能である。また、そのプログラムをコンピュータ可読な記録媒体に記録して提供してもよい。
また、コンピュータが読みだしたプログラムを実行することにより、実施形態の機能が実現されるものに限定されない。例えば、プログラムの指示に基づき、コンピュータ上で稼働しているオペレーティングシステム（ＯＳ）などが実際の処理の一部または全部を行い、その処理によって上記した実施形態の機能が実現されてもよい。
【符号の説明】
【００７１】
１…通信装置、２…主処理部、３…通信処理部、４…バスブリッジ、５…ネットワーク、２１…メインＣＰＵ、２２…メインメモリ、２３…メインバス、２４…ユーザバッファ、３１…サブＣＰＵ、３２…ペイロードサイズ決定部、３３…オンチップメモリ、３４…ネットワークバッファ、３５…データ転送部、３６…パケット生成部、３７…ＬＡＮ制御部、３８…ＷＬＡＮ制御部、３９…ローカルバス
【図１】
2020136883.tif 000003
【図２】
2020136883.tif 000004
【図３】
2020136883.tif 000005
【図４】
2020136883.tif 000006
【図５】
2020136883.tif 000007
【図６】
2020136883.tif 000008
【図７】
2020136883.tif 000009
【手続補正書】
【提出日】令和1年12月19日(2019.12.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
通信装置であって、
前記通信装置が送信するパケットに付加されるヘッダであって、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に係るヘッダのヘッダ長を取得する取得手段と、
前記取得手段により取得された前記ヘッダ長と、前記パケットを送信するＴＣＰコネクションにおけるＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）とに基づいて、前記パケットに含めるペイロードのペイロード長を決定する決定手段と、
前記決定手段により決定された前記ペイロード長のペイロードを含むパケットを生成する第１の生成手段と、
を有することを特徴とする通信装置。
【請求項２】
前記ヘッダ長は、他の通信装置から前記ＴＣＰコネクションを介して送信されるデータの受信状況に基づいて決定される長さであることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記決定手段は、前記ＴＣＰコネクションを確立した際に前記ペイロード長を決定することを特徴とする請求項１に記載の通信装置。
【請求項４】
前記ヘッダ長は、ＴＣＰオプションヘッダのヘッダ長であることを特徴とする請求項１から３のいずれか１項に記載の通信装置。
【請求項５】
前記ＴＣＰオプションヘッダは、ＴＣＰのＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  ＡＣＫ）オプションのためのヘッダであることを特徴とする請求項４に記載の通信装置。
【請求項６】
前記決定手段は、前記ＭＳＳからＴＣＰオプションヘッダのヘッダ長を減算することにより、前記ペイロード長を決定することを特徴とする請求項４または５に記載の通信装置。
【請求項７】
前記決定手段は、前記決定手段により決定された前記ペイロード長のペイロードにＴＣＰヘッダを付加したパケット長が、ＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）を超えないよう、前記ペイロード長を決定することを特徴とする請求項１から５のいずれか１項に記載の通信装置。
【請求項８】
前記決定手段により決定された前記ペイロード長に基づいて送信データを分割する分割手段と、
前記分割手段により分割された送信データを前記第１の生成手段へ入力する入力手段と、
を更に有し、
前記第１の生成手段は、前記入力手段により入力された前記分割された送信データを用いて複数のパケットを生成することを特徴とする請求項１から７のいずれか１項に記載の通信装置。
【請求項９】
前記第１の生成手段は、前記分割された送信データを用いて、前記ペイロード長のペイロードを含む複数のパケットを生成することを特徴とする請求項８に記載の通信装置。
【請求項１０】
前記第１の生成手段は、前記分割された送信データを用いて、前記ペイロード長のペイロードを含むパケットと、前記ＭＳＳのペイロードを含むパケットと、を生成することを特徴とする請求項８に記載の通信装置。
【請求項１１】
複数の領域を有する送信バッファを更に有し、
前記分割手段は、前記分割された送信データの各々を前記複数の領域の各々に格納することを特徴とする請求項８から１０のいずれか１項に記載の通信装置。
【請求項１２】
所定のＴＣＰ／ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）ヘッダを複製することにより、複数のＴＣＰ／ＩＰヘッダを生成する第２の生成手段を更に有し、
前記第１の生成手段は、前記第２の生成手段により生成された前記複数のＴＣＰ／ＩＰヘッダを用いて複数のパケットを生成することを特徴とする請求項１から１１のいずれか１項に記載の通信装置。
【請求項１３】
前記第１の生成手段により生成されたパケットを、前記ＴＣＰコネクションを介して送信する送信手段を更に有することを特徴とする請求項１から１２のいずれか１項に記載の通信装置。
【請求項１４】
パケットを生成して送信する通信装置の制御方法であって、
前記通信装置が送信するパケットに付加されるヘッダであって、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に係るヘッダのヘッダ長を取得するステップと、
取得された前記ヘッダ長と、前記パケットを送信するＴＣＰコネクションにおけるＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）とに基づいて、前記パケットに含めるペイロードのペイロード長を決定するステップと、
決定された前記ペイロード長のペイロードを含むパケットを生成するステップと、
を含むことを特徴とする通信装置の制御方法。
【請求項１５】
コンピュータを、請求項１から１３のいずれか１項に記載の通信装置の各手段として機能させるためのプログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００９
【補正方法】変更
【補正の内容】
【０００９】
本発明は、上述の課題に鑑みてなされたものであり、通信スループットの低下を抑え、パケットをより効率的に送信することを目的とする。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
上記課題を解決するため、本発明に係る通信装置は、前記通信装置が送信するパケットに付加されるヘッダであって、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）に係るヘッダのヘッダ長を取得する取得手段と、前記取得手段により取得された前記ヘッダ長と、前記パケットを送信するＴＣＰコネクションにおけるＭＳＳ（Ｍａｘｉｍｕｍ  Ｓｅｇｍｅｎｔ  Ｓｉｚｅ）とに基づいて、前記パケットに含めるペイロードのペイロード長を決定する決定手段と、前記決定手段により決定された前記ペイロード長のペイロードを含むパケットを生成する第１の生成手段と、を有する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００１１
【補正方法】変更
【補正の内容】
【００１１】
本発明によれば、通信スループットの低下を抑え、パケットをより効率的に送信することができる。