特許第6618330号(P6618330)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ キヤノン株式会社の特許一覧

特許6618330通信装置及びその方法、コンピュータプログラム
<>
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000002
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000003
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000004
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000005
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000006
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000007
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000008
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000009
  • 特許6618330-通信装置及びその方法、コンピュータプログラム 図000010
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】6618330
(24)【登録日】2019年11月22日
(45)【発行日】2019年12月11日
(54)【発明の名称】通信装置及びその方法、コンピュータプログラム
(51)【国際特許分類】
   H04L 29/10 20060101AFI20191202BHJP
   H04L 12/70 20130101ALI20191202BHJP
   H04L 13/08 20060101ALI20191202BHJP
【FI】
   H04L13/00 309C
   H04L12/70 Z
   H04L13/08
【請求項の数】11
【全頁数】14
(21)【出願番号】特願2015-212333(P2015-212333)
(22)【出願日】2015年10月28日
(65)【公開番号】特開2017-85378(P2017-85378A)
(43)【公開日】2017年5月18日
【審査請求日】2018年10月29日
(73)【特許権者】
【識別番号】000001007
【氏名又は名称】キヤノン株式会社
(74)【代理人】
【識別番号】100076428
【弁理士】
【氏名又は名称】大塚 康徳
(74)【代理人】
【識別番号】100115071
【弁理士】
【氏名又は名称】大塚 康弘
(74)【代理人】
【識別番号】100112508
【弁理士】
【氏名又は名称】高柳 司郎
(74)【代理人】
【識別番号】100116894
【弁理士】
【氏名又は名称】木村 秀二
(74)【代理人】
【識別番号】100130409
【弁理士】
【氏名又は名称】下山 治
(74)【代理人】
【識別番号】100134175
【弁理士】
【氏名又は名称】永川 行光
(72)【発明者】
【氏名】松本 明展
【審査官】 宮島 郁美
(56)【参考文献】
【文献】 特開2006−174265(JP,A)
【文献】 特開2015−046866(JP,A)
【文献】 特開2009−020684(JP,A)
【文献】 特開2006−211136(JP,A)
【文献】 米国特許出願公開第2006/0168281(US,A1)
【文献】 中国特許出願公開第1643872(CN,A)
(58)【調査した分野】(Int.Cl.,DB名)
H04L12/00−12/955,29/00
(57)【特許請求の範囲】
【請求項1】
コネクション型の通信プロトコルに基づき相手装置と通信する通信装置であって、
第一のメモリと、
前記第一のメモリよりも高速に読み書きが可能な第二のメモリと、
相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定手段と、
前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納手段と
を備え
前記所定の閾値は、前記相手装置から送出される確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとに基づいて決定されることを特徴とする通信装置。
【請求項2】
前記所定の閾値は、前記確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとのいずれか小さい値に決定されることを特徴とする請求項に記載の通信装置。
【請求項3】
前記相手装置との通信で用いるIPアドレスのバージョンに基づいて、前記確認応答パケットの長さを取得する取得手段をさらに備え、
前記所定の閾値は、前記取得手段が取得した確認応答パケットの長さに基づいて決定される
ことを特徴とする請求項1又は2に記載の通信装置。
【請求項4】
コネクション型の通信プロトコルに基づき相手装置と通信する通信装置であって、
第一のメモリと、
前記第一のメモリよりも高速に読み書きが可能な第二のメモリと、
相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定手段と、
前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納手段と、
前記相手装置との通信で用いる通信オプションにより用いられうるデータ長に基づいて、前記確認応答パケットの長さを取得する取得手段
え、
前記所定の閾値は、前記取得手段が取得した確認応答パケットの長さに基づいて決定されることを特徴とする信装置。
【請求項5】
前記通信オプションにより用いられうるデータ長は、前記相手装置との通信コネクションを確立する際、又は、通信コネクションを解放する際に取得されることを特徴とする請求項に記載の通信装置。
【請求項6】
前記第一及び第二のメモリは、前記相手装置へ送信するパケットを保持するバッファ手段として用いられることを特徴とする請求項1乃至のいずれか1項に記載の通信装置。
【請求項7】
前記確認応答パケットは、TCP(トランスミッション・コントロール・プロトコル)で用いられるACKパケットであることを特徴とする請求項1乃至のいずれか1項に記載の通信装置。
【請求項8】
前記第一のメモリはDRAMであり、前記第二のメモリはSRAMであることを特徴とする請求項1乃至のいずれか1項に記載の通信装置。
【請求項9】
第一のメモリと、前記第一のメモリよりも高速に読み書きが可能な第二のメモリとを備えた、コネクション型の通信プロトコルに基づき相手装置と通信する通信装置の通信方法であって、
判定手段が、相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定工程と、
格納手段が、前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納工程と
を備え
前記所定の閾値は、前記相手装置から送出される確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとに基づいて決定されることを特徴とする通信方法。
【請求項10】
第一のメモリと、前記第一のメモリよりも高速に読み書きが可能な第二のメモリとを備えた、コネクション型の通信プロトコルに基づき相手装置と通信する通信装置の通信方法であって、
判定手段が、相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定工程と、
格納手段が、前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納工程と、
取得手段が、前記相手装置との通信で用いる通信オプションにより用いられうるデータ長に基づいて、前記確認応答パケットの長さを取得する取得工程と
を備え、
前記所定の閾値は、前記取得工程において取得された確認応答パケットの長さに基づいて決定されることを特徴とする通信方法。
【請求項11】
コンピュータを請求項1からのいずれか1項に記載の通信装置が備える各手段として機能させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は通信装置及びその方法、コンピュータプログラムに関する。
【背景技術】
【0002】
従来、パケット通信において、通信の信頼性を保障するため、セグメントを受け取った際にACK(Acknowledgement)と呼ばれる確認応答を用いる通信方式がある。例えば、インターネット通信において広く利用されているTCP/IPでは、セグメントをオクテット単位にシーケンス番号で管理し、受け取ったセグメントのシーケンス番号をACKパケットとして応答する必要がある。TCP/IPとは、Transmission Control Protocol/Internet Protocolの略称である。
【0003】
TCP/IPのプロトコル処理では、通信データのパケット化や再送処理のために、ネットワークバッファが用意されている。TCP/IPパケットの送信において、ユーザのデータ送信命令に従って指定されたユーザデータがネットワークバッファにコピーされ、MTU(Maximum Transmission Unit、最大伝送単位)に分割される。そして、TCPヘッダとIPヘッダが追加されたTCP/IPパケットが生成される。伝送経路がEthernet(登録商標)の場合、さらに、Ethernet(登録商標)ヘッダが付加されたEthernet(登録商標)フレームが生成されて、送信される。
【0004】
ユーザバッファからネットワークバッファへのデータコピーや、チェックサムの計算において広範囲なメモリアクセスが行われるため、メモリアクセスが遅いとTCP/IPパケットを高速に生成することができない。そこで、TCP/IP通信を高速にするため、ネットワークバッファとしてDRAMの代わりにより高速アクセスが可能なSRAMを利用した構成が知られている(特許文献1)。DRAMはDynamic RAM(Random Access Memory:書込み可能メモリ)の略称であり、SRAMはStatic RAMの略称である。
【0005】
もっとも、高速アクセス可能なSRAMは、コストやチップ面積などの制限からメモリサイズを大きくすることができず、充分な量のネットワークバッファをSRAMに割り当てることができないことが一般的である。そのため、主にデータの送信を実施する通信装置においては、高速なデータ転送を必要とするコネクションの送信パケットを格納する際に、SRAMに割り当てたネットワークバッファを優先的に利用することが知られている。この場合、受信パケットについては、DRAMに割り当てたネットワークバッファを利用する。また、送信パケットのうち、高速なデータ転送を必要としないコネクションの送信パケットについてはDRAMに割り当てたネットワークバッファを利用する。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2006−101401号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
しかし、TCP通信では、ACKパケットの受信によって送信済みデータの到達確認をして、新たに送信するデータの決定をすることから、データの送信を行う場合でも受信したACKパケットのヘッダを効率的に解析することが求められる。そのため、受信パケットを一律にDRAMに割り当てたネットワークバッファに格納すると、受信パケットの解析に要する時間がボトルネックとなって、十分なデータ送信性能が得られないという課題があった。
【0008】
本発明は上記課題に鑑みなされたものであり、高速にアクセス可能なメモリを有効利用して高速なデータ転送を可能とする技術を提供することを目的とする。
【課題を解決するための手段】
【0009】
上記目的を達成するため、本発明による通信装置は以下の構成を備える。即ち、
第一のメモリと、
前記第一のメモリよりも高速に読み書きが可能な第二のメモリと、
相手装置からパケットを受信した場合に、当該パケットの長さが、確認応答パケットの長さに基づく所定の閾値を超えるか否かを判定する判定手段と、
前記相手装置から受信したパケットの長さが前記閾値を超えると判定された場合、当該パケットを前記第一のメモリに格納し、超えないと判定された場合、当該パケットを前記第二のメモリに格納する格納手段と
を備え
前記所定の閾値は、前記相手装置から送出される確認応答パケットの長さと、前記第二のメモリの空き容量の大きさとに基づいて決定される
【発明の効果】
【0010】
本発明によれば、高速にアクセス可能なメモリを有効利用してより高速なデータ転送を可能とする技術を提供することができる。
【図面の簡単な説明】
【0011】
図1】通信システムの全体構成を示す図
図2】送信側ホストの構成を示すブロック図
図3】送信側ホストの動作を示すフローチャート
図4】送信側ホストの動作を示すフローチャート
図5】送信側ホストの動作を示すフローチャート
図6】タイムスタンプオプションのフォーマットを示す図
図7】SACKオプションのフォーマットを示す図
図8】ネットワークバッファ領域の内部を表すブロック図
図9】送信側ホストの動作を示すフローチャート
【発明を実施するための形態】
【0012】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【0013】
<実施形態1>
本発明の第一の実施形態(実施形態1)では、TCP/IPプロトコルスタックの処理を行うデータ送信ホストでデータ送信を効率的に実施するために、受信したパケットをSRAMかDRAMのネットワークバッファに振り分けて転送する構成を説明する。なお、本実施形態ではトランスポート層のプロトコルとしてTCPを使用する例を説明するが、トランスポート層のプロトコルとして、確認応答を伴うTCP以外のストリーム型プロトコルを使用してもよい。またトランスポート層でデータグラム型プロトコルを使用して、アプリケーション層で確認応答を伴うストリーム型通信を実現するプロトコルを使用してもよい。
【0014】
(システム構成)
図1はデータ通信を行うシステムの全体構成図である。通信システムでは、送信側ホスト101と受信側ホスト102がネットワーク103を介して通信可能な状況を表している。
【0015】
送信側ホスト101、受信側ホスト102は、TCP/IPプロトコルスタックに基づく通信を行う通信装置である。送信側ホスト101、受信側ホスト102は、パーソナルコンピュータ(PC)、タブレット端末、スマートフォン等のTCP/IP通信を行う情報処理装置や、プリンタ、複合機、デジタルカメラ等の画像処理装置により構成することができる。ネットワーク103は、TCP/IPプロトコルスタックに基づく通信を仲介するネットワークである。ネットワーク103は、典型的にはインターネットであるが、公衆通信網に限らず、例えば、Ethernet(登録商標)等により構築されたローカルエリアネットワーク(LAN)により構成してもよい。また、ネットワーク103は有線、無線の何れであってもよい。
【0016】
図2は本実施形態における送信側ホスト101のブロック図である。CPU201は中央演算処理装置であり、送信側ホスト101全体の動作を制御する。ROM202は読出し専用メモリであり、基本プログラムや基本処理に使用するデータ等を記憶する。CPU201は、ROM202や不図示のHDDなどのメモリに格納された各種コンピュータプログラムを実行する。書き込み可能なメモリであるDRAM203や、DRAM203よりも高速に読み書きが可能なSRAM204は、CPU201のワークメモリとして使用される。また、DRAM203、SRAM204は、通信装置が相手装置へ送信するパケットや受信したパケットを一時的に保持するバッファとして用いられる。
【0017】
CPU201が実行するプログラムにはネットワークドライバが含まれる。ネットワークドライバの実行により、送信データをパケット化するデータ処理や確認応答(ACK)パケットの受信処理などを含むプロトコル処理の機能が実現される。
【0018】
メディアアクセス制御モジュール(MAC)205と物理レイヤモジュール(PHY)206は、Ethernet(登録商標)207や無線LANアンテナ208などを介して通信を行う通信部である。CPU201は、ネットワークドライバを実行し、MAC205やPHY206を制御してデータの送受信を行う。また、本実施形態の送信側ホスト101は、受信したパケットをDRAM203とSRAM204のどちらのネットワークバッファに格納するのかを決定するパケット格納先決定部209を備える。
【0019】
受信側ホスト102も送信側ホスト101と同様の構成を備えているが、TCP/IPプロトコルスタックに基づく通信を行うことが可能ならば、どのような構成でもよい。
【0020】
(処理手順)
本実施形態では、TCPプロトコルスタックに基づきデータを送信する場合に、ACKパケットの長さと、SRAM204のネットワークバッファの空き容量を比較し、より小さい方の値を閾値として設定する。そして、パケットを受信したときは、そのサイズが閾値以下のときのみそのパケットをSRAMに格納し、閾値を超えるサイズのパケットはDRAMに格納する。このため、SRAMに空き容量がある限り、受信したACKパケットを優先的にSRAMに格納するため、ACKパケットを高速に解析して高速にデータを送信することができる。
【0021】
図3は、本実施形態における送信側ホスト101による動作の手順を示したフローチャートである。図3の各ステップは、CPU201の制御に基づき実行される。
【0022】
図3のS301で、送信側ホスト101および受信側ホスト102は、ホスト間のコネクションを確立する。S302で送信側ホスト101は、アプリケーションからの命令に従い、受信側ホスト102に対してデータパケットの送信を行い、受信側ホスト102からの確認応答(ACK)パケットを受信するまで待機する。
【0023】
その後、S303でMAC205に受信パケットが到達したら、S304でパケット格納先決定部209を用いて、受信パケットの格納先となるネットワークバッファの選択を行うための閾値を算出する。閾値の算出は、受信側ホスト102から送信されるACKパケットの長さやSRAM204のネットワークバッファの空き容量を基に行う。ここで、受信側ホスト102から送信されるACKパケットの長さを算出する手法として、例えばEthernet(登録商標)を使用した通信を行っていた場合は、下記の式を用いることができる。

ACKパケットの長さ = Ethernetヘッダ長(14bytes)
+IPv4ヘッダ長(20bytes)
+TCPヘッダ長(20bytes)

ここで、Ethernetではなく、異なるリンク層のプロトコルを使用する場合は、そのプロトコルのヘッダ長に合わせてACKパケットの長さを計算してもよい。また、送信側ホスト101が複数のネットワークインタフェースを持っており、かつネットワークインタフェースごとに異なるリンク層プロトコルを用いる場合がある。このような場合には、使用しているリンク層プロトコルの中で最もヘッダ長の長いプロトコルのヘッダ長を使用してもよい。これによって、SRAM204に空き容量がある限り、すべてのネットワークインタフェースから受信されるACKパケットをSRAM204に格納できるようにする。上式で算出したACKパケットの長さと、SRAM204のネットワークバッファの空き容量を比較し、より小さい方の値を閾値として使用する。
【0024】
以上の処理よって得られた閾値を用いて、S305でパケット格納先決定部209が受信パケットの長さとS304で決定した閾値とを比較する。その結果、受信パケットの長さが閾値を超える場合(S305でYES)には、S306でDRAM203のネットワークバッファに受信パケットを格納する。そうでない場合(S305でNO)即ち受信パケットの長さが閾値以下の場合には、S307でSRAM204のネットワークバッファに受信パケットを格納する。
【0025】
DRAM203もしくはSRAM204のいずれかのネットワークバッファに格納された受信パケットは、S308でプロトコルスタックの各層で解析され、必要な処理を実施する。S308で、送信パケットに対するACKパケットが受信されたら、S309で受信側ホスト102に対して未送信のデータがあるかどうかを判定する。未送信データがある場合(S309でYES)にはS302に戻って上述の処理を繰り返し実行し、ない場合(S309でNO)には処理を終了する。
【0026】
以上のように、本実施形態では、受信パケットを、その長さによってDRAM203かSRAM204のいずれかのネットワークバッファに振り分ける。すなわち、相手装置からパケットを受信した場合に、当該パケットの長さが所定の閾値を超えるか否かを判定する。そして、パケットの長さが閾値を超えると判定されたときは、そのパケットを第一のメモリに格納し、閾値を超えないと判定されたときは、そのパケットを第一のメモリよりも高速に読み書きが可能な第二のメモリに格納する。ここで、この閾値として、確認応答パケットの長さと、SRAM204の空き容量の大きさとのいずれか小さい値に決定する。このため、大きなデータサイズを持つ受信パケットよるSRAM204の占有を避けつつ、ACKパケットをSRAM204のネットワークバッファに格納することが可能になる。したがって、送信データをSRAM204のネットワークバッファに保持したまま、ACKパケットの解析を効率的に実施することが可能となり、データ送信速度を向上させることが可能になる。
【0027】
なお、図3のフローチャートにおいて、S303でパケットを受信した後に閾値の算出を行ったが、パケットを受信する前に閾値の算出を行うようにしてもよい。例えば、S301のコネクションの確立後、前述した式を用いてACKパケットの長さが計算できる状態になり次第、ACKパケットの長さを算出し、ネットワークバッファの空き容量とから閾値を算出してもよい。
【0028】
また、本実施形態では、通信相手である相手装置との通信に用いるコネクション型の通信プロトコルとしてTCP(トランスミッション・コントロール・プロトコル)を用いる例を説明したが、他のプロトコルを用いてもよい。また、本実施形態では、パケットの送受信に用いるバッファとしてDRAMとSRAMを用いた構成例を説明したが、バッファに用いられるメモリはDRAMやSRAMに限られない。すなわち、アクセス速度が異なる複数のメモリを用いたどのような構成においても本実施形態の手法を用いることができる。
【0029】
<実施形態2>
以下、本発明の第二の実施形態(実施形態2)の通信処理を説明する。実施形態1では、インターネットプロトコルとしてIPv4を用いたシステムにおける構成例を説明した。本実施形態では、インターネットプロトコルのバージョンに応じて受信パケットを格納するメモリを振り分ける判断の基となるパケットサイズの閾値を変更する。これにより様々なバージョンのインターネットプロトコルに対応可能な構成例を説明する。なお、本実施形態において、実施形態1と略同様の構成については、同一符号を付して、その詳細な説明を省略する。
【0030】
図4は、本実施形態における送信側ホスト101の動作を示したフローチャートである。S401乃至S403は実施形態1に記載のS301乃至S303の各ステップと同様の処理を行うため、詳細な説明を省略する。
【0031】
S404で、送信側ホスト101のパケット格納先決定部209はパケットを受信したネットワークインタフェースに付加されているIPアドレスを確認して、IPv6アドレスが付加されているか否かを判定する。
【0032】
IPv6アドレスが使用されていなかった場合(S404でNO)はIPv4が使用されていると判断して、S405に進み、実施形態1のS304で算出したACKパケットの長さを使用する。一方で、IPv6アドレスが付加されていた場合(S404でYES)は、IP層で使用するヘッダ長が長くなる可能性があるため、S406に進み、以下の式を用いてACKパケットの長さを算出する。

ACKパケットの長さ = Ethernetヘッダ長(14bytes)
+IPv6ヘッダ長(40bytes)
+TCPヘッダ長(20bytes)

S405およびS406でACKパケットの長さを算出したら、S407で閾値を算出するために、ACKパケットの長さとSRAM204のネットワークバッファの空き容量を比較し、小さい方の値を閾値として使用する。以降、S408乃至S412の処理は実施形態1に記載のS305乃至S309の各ステップと同様の処理を行うため、説明を省略する。
【0033】
以上のように、本実施形態では、送信側ホスト101のネットワークインタフェースに付加されたIPアドレスの種別によって、受信パケットを格納するメモリを振り分ける判断の基となるACKパケットの長さを動的に変更する。すなわち、相手装置から受信したパケットに付されているIPアドレスのバージョンに基づいて、相手装置から送出される確認応答パケットの長さを取得し、その長さに基づいて閾値を決定する。このため、IPv4とIPv6のような複数のバージョンの通信プロトコルの使用が想定されるネットワークにおいても、ACKパケットをSRAM204に格納することが可能になり、効率的にデータ送信を実施することが可能となる。
【0034】
尚、図4のフローチャートにおいて、S403でパケットを受信した後に閾値の算出を行ったが、パケットを受信する前に閾値の算出を行うようにしてもよい。例えば、送信側ホスト101がIPv6アドレスを使用するかIPv4アドレスを使用するかを予め設定しておき、その設定に基づいて、予めACKパケットの長さを算出し、ネットワークバッファの空き容量とから、事前に閾値を算出しておいてもよい。
【0035】
<実施形態3>
以下、本発明の第三の実施形態(実施形態3)の通信処理を説明する。なお、本実施形態において、実施形態1および実施形態2と同様の構成については、同一符号を付して、その詳細な説明を省略する。
【0036】
図5は、本実施形態における送信側ホスト101の動作を示したフローチャートである。S501では、実施形態1のS301と同様、送信側ホスト101と受信側ホスト102の間でコネクションを確立するステップである。このときTCPコネクションでは、データ通信の際に使用可能なTCPオプションをホスト間で通知しあう。そのため、S502で新たにコネクションを確立した際にホスト間で通知しあい、使用可能となったTCPオプションの内容を確認し、そのオプションの使用に伴ってACKパケットの長さが最大でどの程度長くなるかを計算する。
【0037】
TCPオプションの中でACKパケットの長さを拡張するものの例として、タイムスタンプオプションやSACK(Selective Acknowledgement)オプションなどが挙げられる。図6はタイムスタンプオプションのフォーマットを示す図であり、図7はSACKオプションのフォーマットを示す図である。図6および図7に示したオプションフォーマットの通り、タイムスタンプオプションを使用する場合、ACKパケットは10bytes拡張され、SACKオプションを使用する場合、ACKパケットは最大で34bytes拡張される。そのため、コネクション確立時に使用が決定したTCPオプション長の合計値を計算し、後述するACKパケットの長さを算出する処理で使用する。ただし、TCPオプションの最大長は40bytesであることが定められているため、使用するTCPオプション長の最大長が40bytesを超過する場合には、TCPオプションの長さとして40bytesを使用してACKパケットの長さを算出する。なお、ここではTCPオプションの例として、タイムスタンプオプションとSACKオプションの説明を与えたが、TCPオプションの例はこれに限られない。ACKパケットを拡張させる他のTCPオプションが付加される場合には、ACKパケットの長さを算出する際に、そのオプションの長さを加算してもよい。
【0038】
S502でTCPオプション長を計算した後、S503では、S502で算出した新しいコネクションのTCPオプション長と、送信側ホスト101の持つ他のコネクションのTCPオプション長を比較して、いずれがより長いか判定する。そして、その結果に応じて、S504又はS505で“最大TCPオプション長”の導出を行う。すなわち、もし新しいコネクションのTCPオプション長が他のコネクションのオプション長よりも長ければ(S503でYES)、S504に進み、S502で算出したTCPオプション長を最大TCPオプション長として使用する。一方で他のコネクションの中に新しく確立したコネクションよりも大きなTCPオプション長を持つコネクションがあった場合(S503でNO)には、そのコネクションのTCPオプション長を最大TCPオプション長として使用する。こうして算出された最大TCPオプション長は、後述するACKパケットの長さの算出に使用される。
【0039】
S506,S507では、それぞれ実施形態1のS302,S303と同様の処理を実施するため、詳細な説明を省略する。S508では、実施形態1、実施形態2と同様、ACKパケットの長さと、SRAMのネットワークバッファの空き容量から閾値を決定する処理を行うが、本実施形態では、ACKパケットの長さの導出には以下の式を用いる。

ACKパケットの長さ = Ethernetヘッダ長(14bytes)
+IPv4ヘッダ長(20bytes)
+TCPヘッダ長(20bytes)
+最大TCPオプション長(0〜40bytes)

この式ではIPv4ヘッダを使用することを想定しているが、実施形態2に記載の通り、IPv6ヘッダを使用してもよい。以降、S509乃至S512の処理は実施形態1に記載のS305乃至S308の各ステップと同様の処理を行うため、説明を省略する。
【0040】
S513では、未送信データがあるか否かを判定する。未送信データがあった場合(S513でYES)はS506に戻り、実施形態1、実施形態2と同様、データパケットの送信を継続して実施する。一方で、未送信データが無かった場合(S513でNO)には使用したコネクションの解放を行うが、このときにS514に進んで最大TCPオプション長の確認を行う。S514では解放するコネクションのTCPオプション長が、そのときに送信側ホスト101の持つ他のコネクションのTCPオプションよりも長いかどうかを判定する。もし解放されるコネクションのTCPオプション長が他のコネクションのTCPオプション長よりも長かった場合(S514でYES)、コネクションの解放に伴って最大TCPオプション長が短くなる。そのため、S515に進み、最大TCPオプション長として他のコネクションの持つ最大のTCPオプションの長さを設定し、他のコネクションがACKパケットの長さを算出する際に使用できるようにする。解放されるコネクションのTCPオプション長が他のコネクションのTCPオプション長よりも長くなかった場合(S514でNO)は、何もせずに処理を終了する。
【0041】
以上のように、送信側ホスト101の持つ各コネクションで使用するTCPオプションに従って、受信パケットを格納するメモリを振り分ける判断の基となるACKパケットの長さを動的に変更する。そして、計算されたACKパケットの長さに基づいて、受信パケットを保持するバッファへの格納を振り分けるための閾値を決定する。すなわち、通信プロトコルに基づく通信オプションにより用いられうる最大データ長に基づいて、相手装置から送出される確認応答パケットの長さを取得し、この長さに基づいて閾値を決定する。なお、通信プロトコルに基づく通信オプションにより用いられうる最大データ長は、相手装置との通信コネクションを確立する際、又は、通信コネクションを解放する際に取得される。このため、同時に複数のコネクションを確立し得る送信側ホスト101であっても、SRAM204に空き容量がある限り、すべてのコネクションでACKパケットをSRAM204に格納することが可能になる。したがって、効率的なデータ送信を実施することが可能となる。
【0042】
<実施形態4>
以下、本発明の第四の実施形態(実施形態4)の通信処理を説明する。なお、本実施形態において、実施形態1乃至実施形態3と同様の構成については、同一符号を付して、その詳細説明を省略する。
【0043】
図8は、本実施形態における送信側ホスト101のSRAM204およびDRAM203に展開されるネットワークバッファ領域の内部構造を表すブロック図である。送信側ホスト101のSRAM204とDRAM203はそれぞれネットワークバッファ領域801を保持している。ネットワークバッファ領域801の中には、データバッファ構造体802、ヘッダバッファ構造体803、及び、パケット管理構造体804が存在する。データバッファ構造体802は、送信・受信を行うデータを格納するためのバッファである。ヘッダバッファ構造体803は、送受信パケット(TCP/IPパケット)のヘッダ部分を格納するためのバッファである。パケット管理構造体804は、データバッファ構造体802とヘッダバッファ構造体803を関連付けて、パケットとして処理するためのバッファである。なお、一つのヘッダバッファ構造体に格納可能なバッファサイズはSRAM204とDRAM203とで同一である。
【0044】
一般にTCP/IPパケットのヘッダ長とACKパケットの長さとは同程度である。そこで本実施形態では、受信パケットのデータ長がヘッダバッファ構造体803に格納可能なものであるか否かに基づいて、受信パケットをSRAM204とDRAM203とのいずれに格納するかを決定する。
【0045】
なお、本実施形態ではネットワークバッファ領域801に3種類の構造体がある場合の例を説明するが、パケット管理構造体804を設けない構成としてもよい。すなわち、ヘッダバッファ構造体803と、ヘッダバッファ構造体803よりも多くのデータを格納可能なデータバッファ構造体802の少なくとも2種類のバッファ構造体を持っていればよい。またデータバッファ構造体802として、長さの異なる複数種類の構造体が存在してもよい。
【0046】
図9は、本実施形態における送信側ホスト101の動作を示したフローチャートである。S901乃至S903は実施形態1に記載のS301乃至S303の各ステップと同様の処理を行うため、説明を省略する。S904で、送信側ホスト101のパケット格納先決定部209は、SRAM204とDRAM203に展開されたネットワークバッファ領域801内のヘッダバッファ構造体803に格納可能なバッファサイズと、受信したパケットの長さとを比較する。もし受信パケットがヘッダバッファ構造体803に格納可能なサイズであった場合(S904でYES)は、S905に進む。一方でヘッダバッファ構造体803に格納不可能なサイズであった場合(S904でNO)は、S906に進み、DRAM203のデータバッファ構造体802に受信パケットを格納する。
【0047】
S905では、SRAM204に展開されたヘッダバッファ構造体803の中に、未使用のものが存在するか確認する。もし未使用のヘッダバッファ構造体が存在する場合(S905でYES)は、S907に進みSRAM204の持つヘッダバッファ構造体に受信パケットを格納する。一方で未使用のヘッダバッファ構造体が無かったら(S905でNO)、S906に進み、DRAM203の持つヘッダバッファ構造体(ヘッダバッファ構造体がすべて使用済み場合はデータバッファ構造体)に受信パケットを格納する。
【0048】
以降、S908およびS909の処理は、実施形態1に記載のS308およびS309とそれぞれ同様の処理を行うため、説明を省略する。
【0049】
以上のように、送信側ホスト101の持つネットワークバッファ領域801に展開されたヘッダバッファ構造体803の長さを用いて、受信パケットの格納先を決定する。すなわち、受信したパケットをDRAM203又はSRAM204に振り分けるために用いるデータ長の閾値を、相手装置との通信に用いられるヘッダのデータ長とする。ただし、受信したパケットの長さがこの閾値を上回らないと判定されたときであっても、SRAM204の空き容量がヘッダのデータ長に満たないときは、このパケットをDRAM203に格納する。このため、TCP/IPパケットのヘッダ長とおおよそ同じ長さを持つACKパケットをSRAM204に格納することが可能になる。したがって、ACKパケットを効率的に解析することが可能となり、データ送信速度を向上させることができる。
【0050】
以上のように、本発明の各実施形態においては、受信パケットのうち、ACKパケットであると想定される短いパケットのみをSRAMに割り当てられたネットワークバッファに格納する。このため、受信パケットによるSRAMの使用量を抑制して、送信パケットを優先的にSRAMに割り当てられたネットワークバッファに格納することができる。また、ACKパケットは優先的に高速なSRAMに格納されるため、ACKパケットの解析を高速に行うことができる。したがって、全体としてデータ転送を高速に行うことが可能となる。
【0051】
<その他の実施形態>
上記各実施形態の説明では、確認応答パケットの一例としてTCP/IPにおけるACKパケットを用いて説明したが、確認応答パケットはACKパケットに限るものではない。また、通信プロトコルとしてTCP/IP以外のプロトコルに適用することも可能である。
【0052】
本発明は、上述の実施形態の1以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける1つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、1以上の機能を実現する回路(例えば、ASIC)によっても実現可能である。
【符号の説明】
【0053】
101:送信側ホスト、102:受信側ホスト、103:ネットワーク、201:CPU、202:ROM、203:DRAM、204:SRAM、205:メディアアクセス制御モジュール(MAC)、206:物理レイヤモジュール、207:Ethernet(登録商標)、208:無線LANアンテナ、209:パケット格納先決定部
図1
図2
図3
図4
図5
図6
図7
図8
図9