(57)【特許請求の範囲】
【請求項１】
コネクション型の通信プロトコルに基づき相手装置と通信する通信装置であって、
第一のメモリと、
前記第一のメモリよりも高速に読み書きが可能な第二のメモリと、
相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定手段と、
前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納手段と
を備え、
前記所定の閾値は、前記相手装置から送出される確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとに基づいて決定されることを特徴とする通信装置。
【請求項２】
前記所定の閾値は、前記確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとのいずれか小さい値に決定されることを特徴とする請求項１に記載の通信装置。
【請求項３】
前記相手装置との通信で用いるＩＰアドレスのバージョンに基づいて、前記確認応答パケットの長さを取得する取得手段をさらに備え、
前記所定の閾値は、前記取得手段が取得した確認応答パケットの長さに基づいて決定される
ことを特徴とする請求項１又は２に記載の通信装置。
【請求項４】
コネクション型の通信プロトコルに基づき相手装置と通信する通信装置であって、
第一のメモリと、
前記第一のメモリよりも高速に読み書きが可能な第二のメモリと、
相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定手段と、
前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納手段と、
前記相手装置との通信で用いる通信オプションにより用いられうるデータ長に基づいて、前記確認応答パケットの長さを取得する取得手段と
を備え、
前記所定の閾値は、前記取得手段が取得した確認応答パケットの長さに基づいて決定されることを特徴とする通信装置。
【請求項５】
前記通信オプションにより用いられうるデータ長は、前記相手装置との通信コネクションを確立する際、又は、通信コネクションを解放する際に取得されることを特徴とする請求項４に記載の通信装置。
【請求項６】
前記第一及び第二のメモリは、前記相手装置へ送信するパケットを保持するバッファ手段として用いられることを特徴とする請求項１乃至５のいずれか１項に記載の通信装置。
【請求項７】
前記確認応答パケットは、ＴＣＰ（トランスミッション・コントロール・プロトコル）で用いられるＡＣＫパケットであることを特徴とする請求項１乃至６のいずれか１項に記載の通信装置。
【請求項８】
前記第一のメモリはＤＲＡＭであり、前記第二のメモリはＳＲＡＭであることを特徴とする請求項１乃至７のいずれか１項に記載の通信装置。
【請求項９】
第一のメモリと、前記第一のメモリよりも高速に読み書きが可能な第二のメモリとを備えた、コネクション型の通信プロトコルに基づき相手装置と通信する通信装置の通信方法であって、
判定手段が、相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定工程と、
格納手段が、前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納工程と
を備え、
前記所定の閾値は、前記相手装置から送出される確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとに基づいて決定されることを特徴とする通信方法。
【請求項１０】
第一のメモリと、前記第一のメモリよりも高速に読み書きが可能な第二のメモリとを備えた、コネクション型の通信プロトコルに基づき相手装置と通信する通信装置の通信方法であって、
判定手段が、相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定工程と、
格納手段が、前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納工程と、
取得手段が、前記相手装置との通信で用いる通信オプションにより用いられうるデータ長に基づいて、前記確認応答パケットの長さを取得する取得工程と
を備え、
前記所定の閾値は、前記取得工程において取得された確認応答パケットの長さに基づいて決定されることを特徴とする通信方法。
【請求項１１】
コンピュータを請求項１から８のいずれか１項に記載の通信装置が備える各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は通信装置及びその方法、コンピュータプログラムに関する。
【背景技術】
【０００２】
従来、パケット通信において、通信の信頼性を保障するため、セグメントを受け取った際にＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）と呼ばれる確認応答を用いる通信方式がある。例えば、インターネット通信において広く利用されているＴＣＰ／ＩＰでは、セグメントをオクテット単位にシーケンス番号で管理し、受け取ったセグメントのシーケンス番号をＡＣＫパケットとして応答する必要がある。ＴＣＰ／ＩＰとは、Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌの略称である。
【０００３】
ＴＣＰ／ＩＰのプロトコル処理では、通信データのパケット化や再送処理のために、ネットワークバッファが用意されている。ＴＣＰ／ＩＰパケットの送信において、ユーザのデータ送信命令に従って指定されたユーザデータがネットワークバッファにコピーされ、ＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ、最大伝送単位）に分割される。そして、ＴＣＰヘッダとＩＰヘッダが追加されたＴＣＰ／ＩＰパケットが生成される。伝送経路がＥｔｈｅｒｎｅｔ（登録商標）の場合、さらに、Ｅｔｈｅｒｎｅｔ（登録商標）ヘッダが付加されたＥｔｈｅｒｎｅｔ（登録商標）フレームが生成されて、送信される。
【０００４】
ユーザバッファからネットワークバッファへのデータコピーや、チェックサムの計算において広範囲なメモリアクセスが行われるため、メモリアクセスが遅いとＴＣＰ／ＩＰパケットを高速に生成することができない。そこで、ＴＣＰ／ＩＰ通信を高速にするため、ネットワークバッファとしてＤＲＡＭの代わりにより高速アクセスが可能なＳＲＡＭを利用した構成が知られている（特許文献１）。ＤＲＡＭはＤｙｎａｍｉｃ  ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ：書込み可能メモリ）の略称であり、ＳＲＡＭはＳｔａｔｉｃ  ＲＡＭの略称である。
【０００５】
もっとも、高速アクセス可能なＳＲＡＭは、コストやチップ面積などの制限からメモリサイズを大きくすることができず、充分な量のネットワークバッファをＳＲＡＭに割り当てることができないことが一般的である。そのため、主にデータの送信を実施する通信装置においては、高速なデータ転送を必要とするコネクションの送信パケットを格納する際に、ＳＲＡＭに割り当てたネットワークバッファを優先的に利用することが知られている。この場合、受信パケットについては、ＤＲＡＭに割り当てたネットワークバッファを利用する。また、送信パケットのうち、高速なデータ転送を必要としないコネクションの送信パケットについてはＤＲＡＭに割り当てたネットワークバッファを利用する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１０１４０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、ＴＣＰ通信では、ＡＣＫパケットの受信によって送信済みデータの到達確認をして、新たに送信するデータの決定をすることから、データの送信を行う場合でも受信したＡＣＫパケットのヘッダを効率的に解析することが求められる。そのため、受信パケットを一律にＤＲＡＭに割り当てたネットワークバッファに格納すると、受信パケットの解析に要する時間がボトルネックとなって、十分なデータ送信性能が得られないという課題があった。
【０００８】
本発明は上記課題に鑑みなされたものであり、高速にアクセス可能なメモリを有効利用して高速なデータ転送を可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明による通信装置は以下の構成を備える。即ち、
第一のメモリと、
前記第一のメモリよりも高速に読み書きが可能な第二のメモリと、
相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定手段と、
前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納手段と
を備え、
前記所定の閾値は、前記相手装置から送出される確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとに基づいて決定される。
【発明の効果】
【００１０】
本発明によれば、高速にアクセス可能なメモリを有効利用してより高速なデータ転送を可能とする技術を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】通信システムの全体構成を示す図
【図２】送信側ホストの構成を示すブロック図
【図３】送信側ホストの動作を示すフローチャート
【図４】送信側ホストの動作を示すフローチャート
【図５】送信側ホストの動作を示すフローチャート
【図６】タイムスタンプオプションのフォーマットを示す図
【図７】ＳＡＣＫオプションのフォーマットを示す図
【図８】ネットワークバッファ領域の内部を表すブロック図
【図９】送信側ホストの動作を示すフローチャート
【発明を実施するための形態】
【００１２】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１３】
＜実施形態１＞
本発明の第一の実施形態（実施形態１）では、ＴＣＰ／ＩＰプロトコルスタックの処理を行うデータ送信ホストでデータ送信を効率的に実施するために、受信したパケットをＳＲＡＭかＤＲＡＭのネットワークバッファに振り分けて転送する構成を説明する。なお、本実施形態ではトランスポート層のプロトコルとしてＴＣＰを使用する例を説明するが、トランスポート層のプロトコルとして、確認応答を伴うＴＣＰ以外のストリーム型プロトコルを使用してもよい。またトランスポート層でデータグラム型プロトコルを使用して、アプリケーション層で確認応答を伴うストリーム型通信を実現するプロトコルを使用してもよい。
【００１４】
（システム構成）
図１はデータ通信を行うシステムの全体構成図である。通信システムでは、送信側ホスト１０１と受信側ホスト１０２がネットワーク１０３を介して通信可能な状況を表している。
【００１５】
送信側ホスト１０１、受信側ホスト１０２は、ＴＣＰ／ＩＰプロトコルスタックに基づく通信を行う通信装置である。送信側ホスト１０１、受信側ホスト１０２は、パーソナルコンピュータ（ＰＣ）、タブレット端末、スマートフォン等のＴＣＰ／ＩＰ通信を行う情報処理装置や、プリンタ、複合機、デジタルカメラ等の画像処理装置により構成することができる。ネットワーク１０３は、ＴＣＰ／ＩＰプロトコルスタックに基づく通信を仲介するネットワークである。ネットワーク１０３は、典型的にはインターネットであるが、公衆通信網に限らず、例えば、Ｅｔｈｅｒｎｅｔ（登録商標）等により構築されたローカルエリアネットワーク（ＬＡＮ）により構成してもよい。また、ネットワーク１０３は有線、無線の何れであってもよい。
【００１６】
図２は本実施形態における送信側ホスト１０１のブロック図である。ＣＰＵ２０１は中央演算処理装置であり、送信側ホスト１０１全体の動作を制御する。ＲＯＭ２０２は読出し専用メモリであり、基本プログラムや基本処理に使用するデータ等を記憶する。ＣＰＵ２０１は、ＲＯＭ２０２や不図示のＨＤＤなどのメモリに格納された各種コンピュータプログラムを実行する。書き込み可能なメモリであるＤＲＡＭ２０３や、ＤＲＡＭ２０３よりも高速に読み書きが可能なＳＲＡＭ２０４は、ＣＰＵ２０１のワークメモリとして使用される。また、ＤＲＡＭ２０３、ＳＲＡＭ２０４は、通信装置が相手装置へ送信するパケットや受信したパケットを一時的に保持するバッファとして用いられる。
【００１７】
ＣＰＵ２０１が実行するプログラムにはネットワークドライバが含まれる。ネットワークドライバの実行により、送信データをパケット化するデータ処理や確認応答（ＡＣＫ）パケットの受信処理などを含むプロトコル処理の機能が実現される。
【００１８】
メディアアクセス制御モジュール（ＭＡＣ）２０５と物理レイヤモジュール（ＰＨＹ）２０６は、Ｅｔｈｅｒｎｅｔ（登録商標）２０７や無線ＬＡＮアンテナ２０８などを介して通信を行う通信部である。ＣＰＵ２０１は、ネットワークドライバを実行し、ＭＡＣ２０５やＰＨＹ２０６を制御してデータの送受信を行う。また、本実施形態の送信側ホスト１０１は、受信したパケットをＤＲＡＭ２０３とＳＲＡＭ２０４のどちらのネットワークバッファに格納するのかを決定するパケット格納先決定部２０９を備える。
【００１９】
受信側ホスト１０２も送信側ホスト１０１と同様の構成を備えているが、ＴＣＰ／ＩＰプロトコルスタックに基づく通信を行うことが可能ならば、どのような構成でもよい。
【００２０】
（処理手順）
本実施形態では、ＴＣＰプロトコルスタックに基づきデータを送信する場合に、ＡＣＫパケットの長さと、ＳＲＡＭ２０４のネットワークバッファの空き容量を比較し、より小さい方の値を閾値として設定する。そして、パケットを受信したときは、そのサイズが閾値以下のときのみそのパケットをＳＲＡＭに格納し、閾値を超えるサイズのパケットはＤＲＡＭに格納する。このため、ＳＲＡＭに空き容量がある限り、受信したＡＣＫパケットを優先的にＳＲＡＭに格納するため、ＡＣＫパケットを高速に解析して高速にデータを送信することができる。
【００２１】
図３は、本実施形態における送信側ホスト１０１による動作の手順を示したフローチャートである。図３の各ステップは、ＣＰＵ２０１の制御に基づき実行される。
【００２２】
図３のＳ３０１で、送信側ホスト１０１および受信側ホスト１０２は、ホスト間のコネクションを確立する。Ｓ３０２で送信側ホスト１０１は、アプリケーションからの命令に従い、受信側ホスト１０２に対してデータパケットの送信を行い、受信側ホスト１０２からの確認応答（ＡＣＫ）パケットを受信するまで待機する。
【００２３】
その後、Ｓ３０３でＭＡＣ２０５に受信パケットが到達したら、Ｓ３０４でパケット格納先決定部２０９を用いて、受信パケットの格納先となるネットワークバッファの選択を行うための閾値を算出する。閾値の算出は、受信側ホスト１０２から送信されるＡＣＫパケットの長さやＳＲＡＭ２０４のネットワークバッファの空き容量を基に行う。ここで、受信側ホスト１０２から送信されるＡＣＫパケットの長さを算出する手法として、例えばＥｔｈｅｒｎｅｔ（登録商標）を使用した通信を行っていた場合は、下記の式を用いることができる。
ＡＣＫパケットの長さ  ＝  Ｅｔｈｅｒｎｅｔヘッダ長（１４ｂｙｔｅｓ）
＋ＩＰｖ４ヘッダ長（２０ｂｙｔｅｓ）
＋ＴＣＰヘッダ長（２０ｂｙｔｅｓ）
ここで、Ｅｔｈｅｒｎｅｔではなく、異なるリンク層のプロトコルを使用する場合は、そのプロトコルのヘッダ長に合わせてＡＣＫパケットの長さを計算してもよい。また、送信側ホスト１０１が複数のネットワークインタフェースを持っており、かつネットワークインタフェースごとに異なるリンク層プロトコルを用いる場合がある。このような場合には、使用しているリンク層プロトコルの中で最もヘッダ長の長いプロトコルのヘッダ長を使用してもよい。これによって、ＳＲＡＭ２０４に空き容量がある限り、すべてのネットワークインタフェースから受信されるＡＣＫパケットをＳＲＡＭ２０４に格納できるようにする。上式で算出したＡＣＫパケットの長さと、ＳＲＡＭ２０４のネットワークバッファの空き容量を比較し、より小さい方の値を閾値として使用する。
【００２４】
以上の処理よって得られた閾値を用いて、Ｓ３０５でパケット格納先決定部２０９が受信パケットの長さとＳ３０４で決定した閾値とを比較する。その結果、受信パケットの長さが閾値を超える場合（Ｓ３０５でＹＥＳ）には、Ｓ３０６でＤＲＡＭ２０３のネットワークバッファに受信パケットを格納する。そうでない場合（Ｓ３０５でＮＯ）即ち受信パケットの長さが閾値以下の場合には、Ｓ３０７でＳＲＡＭ２０４のネットワークバッファに受信パケットを格納する。
【００２５】
ＤＲＡＭ２０３もしくはＳＲＡＭ２０４のいずれかのネットワークバッファに格納された受信パケットは、Ｓ３０８でプロトコルスタックの各層で解析され、必要な処理を実施する。Ｓ３０８で、送信パケットに対するＡＣＫパケットが受信されたら、Ｓ３０９で受信側ホスト１０２に対して未送信のデータがあるかどうかを判定する。未送信データがある場合（Ｓ３０９でＹＥＳ）にはＳ３０２に戻って上述の処理を繰り返し実行し、ない場合（Ｓ３０９でＮＯ）には処理を終了する。
【００２６】
以上のように、本実施形態では、受信パケットを、その長さによってＤＲＡＭ２０３かＳＲＡＭ２０４のいずれかのネットワークバッファに振り分ける。すなわち、相手装置からパケットを受信した場合に、当該パケットの長さが所定の閾値を超えるか否かを判定する。そして、パケットの長さが閾値を超えると判定されたときは、そのパケットを第一のメモリに格納し、閾値を超えないと判定されたときは、そのパケットを第一のメモリよりも高速に読み書きが可能な第二のメモリに格納する。ここで、この閾値として、確認応答パケットの長さと、ＳＲＡＭ２０４の空き容量の大きさとのいずれか小さい値に決定する。このため、大きなデータサイズを持つ受信パケットよるＳＲＡＭ２０４の占有を避けつつ、ＡＣＫパケットをＳＲＡＭ２０４のネットワークバッファに格納することが可能になる。したがって、送信データをＳＲＡＭ２０４のネットワークバッファに保持したまま、ＡＣＫパケットの解析を効率的に実施することが可能となり、データ送信速度を向上させることが可能になる。
【００２７】
なお、図３のフローチャートにおいて、Ｓ３０３でパケットを受信した後に閾値の算出を行ったが、パケットを受信する前に閾値の算出を行うようにしてもよい。例えば、Ｓ３０１のコネクションの確立後、前述した式を用いてＡＣＫパケットの長さが計算できる状態になり次第、ＡＣＫパケットの長さを算出し、ネットワークバッファの空き容量とから閾値を算出してもよい。
【００２８】
また、本実施形態では、通信相手である相手装置との通信に用いるコネクション型の通信プロトコルとしてＴＣＰ（トランスミッション・コントロール・プロトコル）を用いる例を説明したが、他のプロトコルを用いてもよい。また、本実施形態では、パケットの送受信に用いるバッファとしてＤＲＡＭとＳＲＡＭを用いた構成例を説明したが、バッファに用いられるメモリはＤＲＡＭやＳＲＡＭに限られない。すなわち、アクセス速度が異なる複数のメモリを用いたどのような構成においても本実施形態の手法を用いることができる。
【００２９】
＜実施形態２＞
以下、本発明の第二の実施形態（実施形態２）の通信処理を説明する。実施形態１では、インターネットプロトコルとしてＩＰｖ４を用いたシステムにおける構成例を説明した。本実施形態では、インターネットプロトコルのバージョンに応じて受信パケットを格納するメモリを振り分ける判断の基となるパケットサイズの閾値を変更する。これにより様々なバージョンのインターネットプロトコルに対応可能な構成例を説明する。なお、本実施形態において、実施形態１と略同様の構成については、同一符号を付して、その詳細な説明を省略する。
【００３０】
図４は、本実施形態における送信側ホスト１０１の動作を示したフローチャートである。Ｓ４０１乃至Ｓ４０３は実施形態１に記載のＳ３０１乃至Ｓ３０３の各ステップと同様の処理を行うため、詳細な説明を省略する。
【００３１】
Ｓ４０４で、送信側ホスト１０１のパケット格納先決定部２０９はパケットを受信したネットワークインタフェースに付加されているＩＰアドレスを確認して、ＩＰｖ６アドレスが付加されているか否かを判定する。
【００３２】
ＩＰｖ６アドレスが使用されていなかった場合（Ｓ４０４でＮＯ）はＩＰｖ４が使用されていると判断して、Ｓ４０５に進み、実施形態１のＳ３０４で算出したＡＣＫパケットの長さを使用する。一方で、ＩＰｖ６アドレスが付加されていた場合（Ｓ４０４でＹＥＳ）は、ＩＰ層で使用するヘッダ長が長くなる可能性があるため、Ｓ４０６に進み、以下の式を用いてＡＣＫパケットの長さを算出する。
ＡＣＫパケットの長さ  ＝  Ｅｔｈｅｒｎｅｔヘッダ長（１４ｂｙｔｅｓ）
＋ＩＰｖ６ヘッダ長（４０ｂｙｔｅｓ）
＋ＴＣＰヘッダ長（２０ｂｙｔｅｓ）
Ｓ４０５およびＳ４０６でＡＣＫパケットの長さを算出したら、Ｓ４０７で閾値を算出するために、ＡＣＫパケットの長さとＳＲＡＭ２０４のネットワークバッファの空き容量を比較し、小さい方の値を閾値として使用する。以降、Ｓ４０８乃至Ｓ４１２の処理は実施形態１に記載のＳ３０５乃至Ｓ３０９の各ステップと同様の処理を行うため、説明を省略する。
【００３３】
以上のように、本実施形態では、送信側ホスト１０１のネットワークインタフェースに付加されたＩＰアドレスの種別によって、受信パケットを格納するメモリを振り分ける判断の基となるＡＣＫパケットの長さを動的に変更する。すなわち、相手装置から受信したパケットに付されているＩＰアドレスのバージョンに基づいて、相手装置から送出される確認応答パケットの長さを取得し、その長さに基づいて閾値を決定する。このため、ＩＰｖ４とＩＰｖ６のような複数のバージョンの通信プロトコルの使用が想定されるネットワークにおいても、ＡＣＫパケットをＳＲＡＭ２０４に格納することが可能になり、効率的にデータ送信を実施することが可能となる。
【００３４】
尚、図４のフローチャートにおいて、Ｓ４０３でパケットを受信した後に閾値の算出を行ったが、パケットを受信する前に閾値の算出を行うようにしてもよい。例えば、送信側ホスト１０１がＩＰｖ６アドレスを使用するかＩＰｖ４アドレスを使用するかを予め設定しておき、その設定に基づいて、予めＡＣＫパケットの長さを算出し、ネットワークバッファの空き容量とから、事前に閾値を算出しておいてもよい。
【００３５】
＜実施形態３＞
以下、本発明の第三の実施形態（実施形態３）の通信処理を説明する。なお、本実施形態において、実施形態１および実施形態２と同様の構成については、同一符号を付して、その詳細な説明を省略する。
【００３６】
図５は、本実施形態における送信側ホスト１０１の動作を示したフローチャートである。Ｓ５０１では、実施形態１のＳ３０１と同様、送信側ホスト１０１と受信側ホスト１０２の間でコネクションを確立するステップである。このときＴＣＰコネクションでは、データ通信の際に使用可能なＴＣＰオプションをホスト間で通知しあう。そのため、Ｓ５０２で新たにコネクションを確立した際にホスト間で通知しあい、使用可能となったＴＣＰオプションの内容を確認し、そのオプションの使用に伴ってＡＣＫパケットの長さが最大でどの程度長くなるかを計算する。
【００３７】
ＴＣＰオプションの中でＡＣＫパケットの長さを拡張するものの例として、タイムスタンプオプションやＳＡＣＫ（Ｓｅｌｅｃｔｉｖｅ  Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）オプションなどが挙げられる。図６はタイムスタンプオプションのフォーマットを示す図であり、図７はＳＡＣＫオプションのフォーマットを示す図である。図６および図７に示したオプションフォーマットの通り、タイムスタンプオプションを使用する場合、ＡＣＫパケットは１０ｂｙｔｅｓ拡張され、ＳＡＣＫオプションを使用する場合、ＡＣＫパケットは最大で３４ｂｙｔｅｓ拡張される。そのため、コネクション確立時に使用が決定したＴＣＰオプション長の合計値を計算し、後述するＡＣＫパケットの長さを算出する処理で使用する。ただし、ＴＣＰオプションの最大長は４０ｂｙｔｅｓであることが定められているため、使用するＴＣＰオプション長の最大長が４０ｂｙｔｅｓを超過する場合には、ＴＣＰオプションの長さとして４０ｂｙｔｅｓを使用してＡＣＫパケットの長さを算出する。なお、ここではＴＣＰオプションの例として、タイムスタンプオプションとＳＡＣＫオプションの説明を与えたが、ＴＣＰオプションの例はこれに限られない。ＡＣＫパケットを拡張させる他のＴＣＰオプションが付加される場合には、ＡＣＫパケットの長さを算出する際に、そのオプションの長さを加算してもよい。
【００３８】
Ｓ５０２でＴＣＰオプション長を計算した後、Ｓ５０３では、Ｓ５０２で算出した新しいコネクションのＴＣＰオプション長と、送信側ホスト１０１の持つ他のコネクションのＴＣＰオプション長を比較して、いずれがより長いか判定する。そして、その結果に応じて、Ｓ５０４又はＳ５０５で“最大ＴＣＰオプション長”の導出を行う。すなわち、もし新しいコネクションのＴＣＰオプション長が他のコネクションのオプション長よりも長ければ（Ｓ５０３でＹＥＳ）、Ｓ５０４に進み、Ｓ５０２で算出したＴＣＰオプション長を最大ＴＣＰオプション長として使用する。一方で他のコネクションの中に新しく確立したコネクションよりも大きなＴＣＰオプション長を持つコネクションがあった場合（Ｓ５０３でＮＯ）には、そのコネクションのＴＣＰオプション長を最大ＴＣＰオプション長として使用する。こうして算出された最大ＴＣＰオプション長は、後述するＡＣＫパケットの長さの算出に使用される。
【００３９】
Ｓ５０６，Ｓ５０７では、それぞれ実施形態１のＳ３０２，Ｓ３０３と同様の処理を実施するため、詳細な説明を省略する。Ｓ５０８では、実施形態１、実施形態２と同様、ＡＣＫパケットの長さと、ＳＲＡＭのネットワークバッファの空き容量から閾値を決定する処理を行うが、本実施形態では、ＡＣＫパケットの長さの導出には以下の式を用いる。
ＡＣＫパケットの長さ  ＝  Ｅｔｈｅｒｎｅｔヘッダ長（１４ｂｙｔｅｓ）
＋ＩＰｖ４ヘッダ長（２０ｂｙｔｅｓ）
＋ＴＣＰヘッダ長（２０ｂｙｔｅｓ）
＋最大ＴＣＰオプション長（０〜４０ｂｙｔｅｓ）
この式ではＩＰｖ４ヘッダを使用することを想定しているが、実施形態２に記載の通り、ＩＰｖ６ヘッダを使用してもよい。以降、Ｓ５０９乃至Ｓ５１２の処理は実施形態１に記載のＳ３０５乃至Ｓ３０８の各ステップと同様の処理を行うため、説明を省略する。
【００４０】
Ｓ５１３では、未送信データがあるか否かを判定する。未送信データがあった場合（Ｓ５１３でＹＥＳ）はＳ５０６に戻り、実施形態１、実施形態２と同様、データパケットの送信を継続して実施する。一方で、未送信データが無かった場合（Ｓ５１３でＮＯ）には使用したコネクションの解放を行うが、このときにＳ５１４に進んで最大ＴＣＰオプション長の確認を行う。Ｓ５１４では解放するコネクションのＴＣＰオプション長が、そのときに送信側ホスト１０１の持つ他のコネクションのＴＣＰオプションよりも長いかどうかを判定する。もし解放されるコネクションのＴＣＰオプション長が他のコネクションのＴＣＰオプション長よりも長かった場合（Ｓ５１４でＹＥＳ）、コネクションの解放に伴って最大ＴＣＰオプション長が短くなる。そのため、Ｓ５１５に進み、最大ＴＣＰオプション長として他のコネクションの持つ最大のＴＣＰオプションの長さを設定し、他のコネクションがＡＣＫパケットの長さを算出する際に使用できるようにする。解放されるコネクションのＴＣＰオプション長が他のコネクションのＴＣＰオプション長よりも長くなかった場合（Ｓ５１４でＮＯ）は、何もせずに処理を終了する。
【００４１】
以上のように、送信側ホスト１０１の持つ各コネクションで使用するＴＣＰオプションに従って、受信パケットを格納するメモリを振り分ける判断の基となるＡＣＫパケットの長さを動的に変更する。そして、計算されたＡＣＫパケットの長さに基づいて、受信パケットを保持するバッファへの格納を振り分けるための閾値を決定する。すなわち、通信プロトコルに基づく通信オプションにより用いられうる最大データ長に基づいて、相手装置から送出される確認応答パケットの長さを取得し、この長さに基づいて閾値を決定する。なお、通信プロトコルに基づく通信オプションにより用いられうる最大データ長は、相手装置との通信コネクションを確立する際、又は、通信コネクションを解放する際に取得される。このため、同時に複数のコネクションを確立し得る送信側ホスト１０１であっても、ＳＲＡＭ２０４に空き容量がある限り、すべてのコネクションでＡＣＫパケットをＳＲＡＭ２０４に格納することが可能になる。したがって、効率的なデータ送信を実施することが可能となる。
【００４２】
＜実施形態４＞
以下、本発明の第四の実施形態（実施形態４）の通信処理を説明する。なお、本実施形態において、実施形態１乃至実施形態３と同様の構成については、同一符号を付して、その詳細説明を省略する。
【００４３】
図８は、本実施形態における送信側ホスト１０１のＳＲＡＭ２０４およびＤＲＡＭ２０３に展開されるネットワークバッファ領域の内部構造を表すブロック図である。送信側ホスト１０１のＳＲＡＭ２０４とＤＲＡＭ２０３はそれぞれネットワークバッファ領域８０１を保持している。ネットワークバッファ領域８０１の中には、データバッファ構造体８０２、ヘッダバッファ構造体８０３、及び、パケット管理構造体８０４が存在する。データバッファ構造体８０２は、送信・受信を行うデータを格納するためのバッファである。ヘッダバッファ構造体８０３は、送受信パケット（ＴＣＰ／ＩＰパケット）のヘッダ部分を格納するためのバッファである。パケット管理構造体８０４は、データバッファ構造体８０２とヘッダバッファ構造体８０３を関連付けて、パケットとして処理するためのバッファである。なお、一つのヘッダバッファ構造体に格納可能なバッファサイズはＳＲＡＭ２０４とＤＲＡＭ２０３とで同一である。
【００４４】
一般にＴＣＰ／ＩＰパケットのヘッダ長とＡＣＫパケットの長さとは同程度である。そこで本実施形態では、受信パケットのデータ長がヘッダバッファ構造体８０３に格納可能なものであるか否かに基づいて、受信パケットをＳＲＡＭ２０４とＤＲＡＭ２０３とのいずれに格納するかを決定する。
【００４５】
なお、本実施形態ではネットワークバッファ領域８０１に３種類の構造体がある場合の例を説明するが、パケット管理構造体８０４を設けない構成としてもよい。すなわち、ヘッダバッファ構造体８０３と、ヘッダバッファ構造体８０３よりも多くのデータを格納可能なデータバッファ構造体８０２の少なくとも２種類のバッファ構造体を持っていればよい。またデータバッファ構造体８０２として、長さの異なる複数種類の構造体が存在してもよい。
【００４６】
図９は、本実施形態における送信側ホスト１０１の動作を示したフローチャートである。Ｓ９０１乃至Ｓ９０３は実施形態１に記載のＳ３０１乃至Ｓ３０３の各ステップと同様の処理を行うため、説明を省略する。Ｓ９０４で、送信側ホスト１０１のパケット格納先決定部２０９は、ＳＲＡＭ２０４とＤＲＡＭ２０３に展開されたネットワークバッファ領域８０１内のヘッダバッファ構造体８０３に格納可能なバッファサイズと、受信したパケットの長さとを比較する。もし受信パケットがヘッダバッファ構造体８０３に格納可能なサイズであった場合（Ｓ９０４でＹＥＳ）は、Ｓ９０５に進む。一方でヘッダバッファ構造体８０３に格納不可能なサイズであった場合（Ｓ９０４でＮＯ）は、Ｓ９０６に進み、ＤＲＡＭ２０３のデータバッファ構造体８０２に受信パケットを格納する。
【００４７】
Ｓ９０５では、ＳＲＡＭ２０４に展開されたヘッダバッファ構造体８０３の中に、未使用のものが存在するか確認する。もし未使用のヘッダバッファ構造体が存在する場合（Ｓ９０５でＹＥＳ）は、Ｓ９０７に進みＳＲＡＭ２０４の持つヘッダバッファ構造体に受信パケットを格納する。一方で未使用のヘッダバッファ構造体が無かったら（Ｓ９０５でＮＯ）、Ｓ９０６に進み、ＤＲＡＭ２０３の持つヘッダバッファ構造体（ヘッダバッファ構造体がすべて使用済み場合はデータバッファ構造体）に受信パケットを格納する。
【００４８】
以降、Ｓ９０８およびＳ９０９の処理は、実施形態１に記載のＳ３０８およびＳ３０９とそれぞれ同様の処理を行うため、説明を省略する。
【００４９】
以上のように、送信側ホスト１０１の持つネットワークバッファ領域８０１に展開されたヘッダバッファ構造体８０３の長さを用いて、受信パケットの格納先を決定する。すなわち、受信したパケットをＤＲＡＭ２０３又はＳＲＡＭ２０４に振り分けるために用いるデータ長の閾値を、相手装置との通信に用いられるヘッダのデータ長とする。ただし、受信したパケットの長さがこの閾値を上回らないと判定されたときであっても、ＳＲＡＭ２０４の空き容量がヘッダのデータ長に満たないときは、このパケットをＤＲＡＭ２０３に格納する。このため、ＴＣＰ／ＩＰパケットのヘッダ長とおおよそ同じ長さを持つＡＣＫパケットをＳＲＡＭ２０４に格納することが可能になる。したがって、ＡＣＫパケットを効率的に解析することが可能となり、データ送信速度を向上させることができる。
【００５０】
以上のように、本発明の各実施形態においては、受信パケットのうち、ＡＣＫパケットであると想定される短いパケットのみをＳＲＡＭに割り当てられたネットワークバッファに格納する。このため、受信パケットによるＳＲＡＭの使用量を抑制して、送信パケットを優先的にＳＲＡＭに割り当てられたネットワークバッファに格納することができる。また、ＡＣＫパケットは優先的に高速なＳＲＡＭに格納されるため、ＡＣＫパケットの解析を高速に行うことができる。したがって、全体としてデータ転送を高速に行うことが可能となる。
【００５１】
＜その他の実施形態＞
上記各実施形態の説明では、確認応答パケットの一例としてＴＣＰ／ＩＰにおけるＡＣＫパケットを用いて説明したが、確認応答パケットはＡＣＫパケットに限るものではない。また、通信プロトコルとしてＴＣＰ／ＩＰ以外のプロトコルに適用することも可能である。
【００５２】
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５３】
１０１：送信側ホスト、１０２：受信側ホスト、１０３：ネットワーク、２０１：ＣＰＵ、２０２：ＲＯＭ、２０３：ＤＲＡＭ、２０４：ＳＲＡＭ、２０５：メディアアクセス制御モジュール（ＭＡＣ）、２０６：物理レイヤモジュール、２０７：Ｅｔｈｅｒｎｅｔ（登録商標）、２０８：無線ＬＡＮアンテナ、２０９：パケット格納先決定部
【図１】
0006618330.tif 000002
【図２】
0006618330.tif 000003
【図３】
0006618330.tif 000004
【図４】
0006618330.tif 000005
【図５】
0006618330.tif 000006
【図６】
0006618330.tif 000007
【図７】
0006618330.tif 000008
【図８】
0006618330.tif 000009
【図９】
0006618330.tif 000010