(57)【特許請求の範囲】
【請求項１】
通信対象のデータに対してチェックサム演算を行う演算装置であって、
複数のメモリと、
チェックサムが付与されたデータを出力するインターフェースと、
前記複数のメモリの間で対象データを転送すると共に、当該対象データに対してチェックサム演算を行う機能を備えた第１の転送手段と、
前記複数のメモリに含まれるメモリと前記インターフェースとの間で対象データを転送すると共に、当該対象データに対してチェックサム演算を行う機能を備えた第２の転送手段と、
前記対象データの通信方式に基づき、前記第１の転送手段及び前記第２の転送手段のうちのいずれかの転送手段にチェックサム演算を行わせるように制御する制御手段と、
を備えることを特徴とする演算装置。
【請求項２】
前記第１の転送手段は、前記複数のメモリのうちの第１のメモリから前記対象データを読み出して前記複数のメモリのうちの第２のメモリへ転送し、
前記第２の転送手段は、前記第２のメモリから前記対象データを読み出して前記インターフェースへ転送し、
前記制御手段は、前記対象データのサイズが所定のサイズよりも大きい通信方式の場合は、前記第１の転送手段にチェックサム演算を行わせることを特徴とする請求項１に記載の演算装置。
【請求項３】
前記制御手段は、前記対象データのサイズが前記所定のサイズよりも大きくない通信方式の場合は、前記第２の転送手段にチェックサム演算を行わせることを特徴とする請求項２に記載の演算装置。
【請求項４】
前記制御手段は、前記対象データがユーザ・データグラム・プロトコルにより通信される場合に、前記第１の転送手段にチェックサム演算を行わせることを特徴とする請求項１に記載の演算装置。
【請求項５】
前記制御手段は、前記対象データがトランスミッション・コントロール・プロトコルにより通信される場合に、前記第２の転送手段にチェックサム演算を行わせることを特徴とする請求項１または４に記載の演算装置。
【請求項６】
データに対して暗号処理を施す暗号処理手段をさらに備え、
前記制御手段は、前記対象データが暗号通信の対象であるか否かに基づき、前記対象データの転送先を前記第１の転送手段に設定するとともに前記対象データの転送元を第２の転送手段に設定することを特徴とする請求項１に記載の演算装置。
【請求項７】
前記制御手段は、前記対象データが暗号通信の対象である場合に、
前記第１の転送手段に、前記複数のメモリのうちの第１のメモリから前記対象データを読み出し、チェックサム演算を行って、前記複数のメモリのうちの第２のメモリへ転送させ、
前記暗号処理手段に、前記第２のメモリから前記対象データを読み出し、当該対象データに対して暗号処理を施して、前記複数のメモリのうちの第３のメモリへ転送させ、
前記第２の転送手段に、前記第３のメモリから前記対象データを読み出して前記インターフェースへ転送させることを特徴とする請求項６に記載の演算装置。
【請求項８】
前記制御手段は、前記対象データが暗号通信の対象でない場合に、
前記第１の転送手段に、前記第１のメモリから前記対象データを読み出して前記第２のメモリへ転送させ、
前記第２の転送手段に、前記第２のメモリから前記対象データを読み出して前記インターフェースへ転送させ、
前記対象データのサイズが所定のサイズよりも大きい通信方式の場合は、前記第１の転送手段にチェックサム演算を行わせることを特徴とする請求項７に記載の演算装置。
【請求項９】
前記制御手段は、前記対象データが暗号通信の対象でない場合であって、該対象データのサイズが前記所定のサイズよりも大きくない通信方式の場合は、前記第２の転送手段にチェックサム演算を行わせることを特徴とする請求項８に記載の演算装置。
【請求項１０】
前記第１の転送手段及び前記第２の転送手段は、対象データにチェックサム演算を行う演算手段をそれぞれ備えることを特徴とする請求項１から９のいずれか１項に記載の演算装置。
【請求項１１】
対象データにチェックサム演算を行う演算手段をさらに備え、
前記第１の転送手段及び前記第２の転送手段は、前記演算手段を用いて対象データにチェックサム演算を行うことを特徴とする請求項１から９のいずれか１項に記載の演算装置。
【請求項１２】
前記制御手段は、前記複数のメモリの間の転送と、前記メモリ及び前記インターフェースの間の転送とを並列して行わせることを特徴とする請求項１から１１のいずれか１項に記載の演算装置。
【請求項１３】
請求項１から１２のいずれか１項に記載の演算装置を備えた通信装置。
【請求項１４】
複数のメモリと、チェックサムが付与されたデータを出力するインターフェースと、を備える演算装置における演算方法であって、
前記複数のメモリの間で対象データを転送する第１の転送工程と、
前記複数のメモリに含まれるメモリと前記インターフェースとの間で対象データを転送する第２の転送工程と、
前記対象データの通信方式に基づき、前記第１の転送工程及び前記第２の転送工程のうちのいずれかの転送工程において、前記対象データを転送すると共に、前記対象データに対してチェックサム演算を行うように制御する制御工程と、
を備えることを特徴とする演算方法。
【請求項１５】
コンピュータに請求項１４に記載の演算方法の各工程を実行させることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は演算装置及び演算方法、通信装置に関し、特に、チェックサム処理を効率的に行うための技術に関する。
【背景技術】
【０００２】
通信分野においてチェックサム処理が必要な場合がある。チェックサムは誤り検出に必要な情報である。今日のインターネットで広く使用されているＴＣＰ／ＩＰ通信におけるＴＣＰチェックサムの処理には、ＴＣＰパケット中のペイロード部分を全て演算する必要がある。このＴＣＰチェックサム処理をコンピュータプログラムに基づきＣＰＵで行うにもＨ／Ｗ（ハードウェア）で行うにも、全ペイロードを演算部に送る必要があり、したがってデータを移動させる転送が必要となる。
【０００３】
特許文献１には、チェックサム演算可能なネットワークアダプタに関する構成が記載されている。この構成では、記憶装置に記憶されたチェックサム未処理パケットと、チェックサム制御情報をネットワークアダプタに転送する。ネットワークアダプタは、制御情報に基づきチェックサム未処理パケットに対してチェックサム処理実行を行い、完成したパケットをインターフェースへ転送してネットワークへ送信する。
【０００４】
特許文献２には、ＴＣＰ／ＩＰパケットの送受信において、ＩＰチェックサム、ＴＣＰチェックサムをハードウェアで実現することについて記載されている。この構成では、ＴＣＰ／ＩＰパケット送信時において、先のチェックサム処理はＤＭＡ処理部からＭＡＣブリッジ回路へ転送する途中に実施されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平６−７８０２４号公報
【特許文献２】特開２００６−３０３７６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
チェックサム未処理パケットをメモリから読み込み、チェックサム処理を施して完成したパケットとしてインターフェースへ転送する処理を行う転送器は、以下の機能を具備する。
（１）メモリからチェックサム未処理パケットの読み込み処理。
（２）未処理パケットのヘッダの解析処理。
（３）解析結果に応じたチェックサム演算処理。
（４）未処理パケットに対するチェックサム演算結果の上書き処理。
（５）上書き処理により完成したパケットをインターフェースへ送信する処理。
上記機能を持つ転送器でチェックサム演算を実施したデータ転送には、以下の２つの課題がある。
【０００７】
第一の課題は、チェックサムを用いた通信の性質に起因する。チェックサムは、ヘッダ部、つまりパケットの先頭部に付与される。よって、チェックサム演算は、パケットの末尾まで計算対象に含む必要がある場合、チェックサムを上書きするデータ位置からパケットの末尾データまで、一時的に転送器内にデータをため込む必要がある。このことは、とりわけＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）サイズより大きいパケットのチェックサム処理を上記転送器で実現する場合に、転送器内に大きなバッファが必要となることを意味する。したがって、転送器に大きなバッファを設けなければならないというコスト的な課題がある。
【０００８】
第二の課題は、暗号通信時におけるものである。メモリに用意されたパケットが暗号パケットであった場合、解析対象となるヘッダ部や、演算対象となるデータも暗号化されることがある。その場合、チェックサム処理が必要な通信プロトコルであっても、そのメモリとインターフェース間で実施される転送器由来のチェックサム処理では正しくチェックサム処理ができない。仮に実施した場合、本来送るべきパケットを破壊してしまうといったことが起こり得る。
【０００９】
本発明はこれらの課題に鑑みなされたものであり、様々な通信方式に対応して効率的なチェックサム演算を行うことが可能な技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、本発明による演算装置は以下の構成を備える。即ち、
通信対象のデータに対してチェックサム演算を行う演算装置であって、
複数のメモリと、
チェックサムが付与されたデータを出力するインターフェースと、
前記複数のメモリの間で対象データを転送すると共に、当該対象データに対してチェックサム演算を行う機能を備えた第１の転送手段と、
前記複数のメモリに含まれるメモリと前記インターフェースとの間で対象データを転送すると共に、当該対象データに対してチェックサム演算を行う機能を備えた第２の転送手段と、
前記対象データの通信方式に基づき、前記第１の転送手段及び前記第２の転送手段のうちのいずれかの転送手段にチェックサム演算を行わせるように制御する制御手段と、
を備える。
【発明の効果】
【００１１】
本発明によれば、様々な通信方式に対応して効率的なチェックサム演算を行うことが可能な技術を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】通信装置の構成を示すブロック図
【図２】ＴＣＰ／ＩＰパケット（非暗号）の送信処理を示す図
【図３】各フェーズにおけるメモリ内データの格納状態を示す図
【図４】ＴＣＰ／ＩＰパケット（暗号）の送信処理を示す図
【図５】各フェーズにおけるメモリ内データの格納状態を示す図
【図６】ＭＴＵサイズを超えたサイズを持つＵＤＰ（非暗号）の送信処理を示す図
【図７】各フェーズにおけるメモリ内データの格納状態を示す図
【図８】通信装置の構成を示すブロック図
【発明を実施するための形態】
【００１３】
以下、添付図面を参照して本発明の実施の形態を詳細に説明する。
【００１４】
＜実施形態１＞
（通信装置）
以下、本発明の一実施形態（実施形態１）を説明する。図１は、本実施形態に係る通信装置００１の構成を示すブロック図である。通信装置００１のシステムバス１００には、ＣＰＵ１０１、メモリ１（１０２）、メモリ２（１０３）、メモリ３（１０４）、暗号・認証処理部１０５、転送器１（１１０）、転送器２（１２０）の７つのモジュールが接続されている。
【００１５】
ＣＰＵ１０１は、通信装置００１で実行される通信処理全般の処理・制御を担う。具体的には、ＴＣＰ（トランスミッション・コントロール・プロトコル）通信を行うためのプロトコル処理や、各種モジュールの制御が含まれる。メモリ１（１０２）、メモリ２（１０３）、メモリ３（１０４）には、ネットワーク１０７と通信装置００１間で送受信されるパケットデータや、ＣＰＵ１０１や各種モジュールが処理を行うために必要な一時データが格納される。暗号・認証処理部１０５は、パケットの暗号・認証処理を含む暗号処理を担う。本実施形態では、データの暗号化だけでなく暗号化されたデータの復号、認証処理など安全なデータ転送に関するさまざまな処理を総称して暗号処理と呼ぶ。
【００１６】
転送器１（１１０）は、メモリ１〜３（１０２〜１０４）のうち１つ以上のメモリを転送元とし、同じくメモリ１〜３（１０２〜１０４）のうち１つ以上のメモリを転送先としたＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）転送を実行する。転送器１（１１０）は、それぞれレジスタが設けられた、演算部１（１１２）、リード部１（１１１）、及び、ライト部１（１１３）を備えている。ＤＭＡ転送されたデータに対するチェックサム演算を演算部１（１１２）で実行できる構成になっている。リード部１（１１１）はメモリ１〜３（１０２〜１０４）等からデータを読み出すために用いられ、ライト部１（１１３）はメモリ１〜３（１０２〜１０４）等にデータを書き込むために用いられる。このように、転送器１（１１０）は、複数のメモリの間で対象データを転送する装置であり、当該対象データに対してチェックサム演算を行う機能（チェックサム演算機能）を備えている。
【００１７】
転送器２（１２０）は、メモリ１（１０２）、メモリ２（１０３）、メモリ３（１０４）うち１つ以上のメモリと、インターフェース１０６間のＤＭＡ転送を実行する。転送器２（１２０）は、その内部に演算部２（１２２）とリード部２（１２１）を具備し、演算部２（１２２）とリード部２（１２１）はそれぞれレジスタを備えている。この演算部２（１２２）では、転送器２（１２０）が転送するデータがＭＴＵサイズ以下のサイズの所定のパケットであって暗号化されてない場合に、そのデータを演算部２（１２２）のレジスタに設定することで、チェックサム演算が実施できる。ＭＴＵサイズは、Ｅｔｈｅｒｎｅｔ（登録商標）では１５００Ｂｙｔｅｓである。リード部２（１２１）はメモリ１〜３（１０２〜１０４）等からデータを読み出すために用いられる。このように、転送器２（１２０）は、複数のメモリに含まれるメモリとインターフェースとの間で対象データを転送する装置であり、当該対象データに対してチェックサム演算を行う機能を備えている。
【００１８】
インターフェース１０６は、通信装置００１におけるネットワーク１０７とのインターフェースである。通信に必要なＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｏｒｏｌ）、およびＰＨＹ（物理層）の処理を主に担う。後述するように、チェックサムが付与されたデータを出力する。以上がブロック図の説明である。
【００１９】
（平文通信時の処理手順）
次に、通信装置００１が、ＴＣＰ／ＩＰパケットを暗号化せずに送信する場合のフローについて図２を用いて説明する。図２は、平文を通信する際の処理手順を示すシーケンスチャートである。また、各フローにおける各メモリのデータ格納状態に関して図３を補足的に用いて説明する。図３は、メモリ１（１０２）、メモリ２（１０３）の使用状態を示す図である。
【００２０】
まず、Ｓ２０１〜Ｓ２０５において、ＣＰＵ１０１は、メモリ１（１０２）上にあるユーザバッファに格納されたデータグラムを、メモリ２（１０３）に確保してあるワークエリアにコピーする。このコピーには転送器１（１１０）を使用する。パケットを暗号化せずにインターフェース１０６に転送する場合、転送器２（１２０）の具備する演算部２（１２２）によるチェックサム処理が可能である。すなわち、転送器１（１１０）ではチェックサム演算を行う必要がない。そこで、演算部１（１１２）に、チェックサムＯＦＦ（スルー設定）を行う（Ｓ２０１）。なお、この判断及び設定はＣＰＵ１０１が行う。そして、リード部１（１１１）に対して、コピー元情報（ここでは、メモリ１（１０２）にあるユーザバッファのアドレスと転送サイズ）を設定する（Ｓ２０２）。そして、ライト部１（１１３）に対して、コピー先情報（ここでは、メモリ２（１０３）にあるワークエリアのアドレスと転送サイズ）を設定する（Ｓ２０３）。
【００２１】
Ｓ２０１〜Ｓ２０３によるリード部１（１１１）へのセットに応じて、メモリ１（１０２）からメモリ２（１０３）へのデータ転送が開始される（Ｓ２０４）。具体的にはＳ２０４では、メモリ１（１０２）から、リード部１（１１１）、演算部１（１１２）、ライト部１（１１３）、メモリ２（１０３）へと順次データが転送される。本実施形態では、パケット３つ分のデータを送る場合の例を説明する。ライト部１（１１３）まで送信されたあと、メモリ２（１０３）にデータが格納される。ライト部１（１１３）の機能／設定により、図２のように、パケット１、パケット２、パケット３のデータがそれぞれ分割されて転送（スキャッタリング転送）できるような構成にしてもよい。全ての転送完了後、ライト部１（１１３）は、ＣＰＵ１０１に対し、完了通知を行う（Ｓ２０５）。
【００２２】
この処理においてメモリ１（１０２）とメモリ２（１０３）におかれているデータを図３に示す。図３（Ａ）はメモリ１（１０２）に格納された、転送対象の３つのパケットのペイロードデータを模式的に示している。図３（Ｂ）は、メモリ１（１０２）から転送されてメモリ２（１０３）に格納された、３つのパケットのペイロードデータを模式的に示している。
【００２３】
完了通知を受け取ったＣＰＵ１０１は、Ｓ２０６〜Ｓ２１４において、ＴＣＰ／ＩＰのパケットを作成する。具体的には、ＴＣＰヘッダ、ＩＰヘッダを作成する（Ｓ２０６）。なお、ＴＣＰヘッダのチェックサムフィールドは、完成させずに‘０’データを入れておけばよい。それは、演算部２（１２２）にチェックサム演算を実施させるためである。また、演算部２がＩＰヘッダのチェックサムも計算可能であれば、ＩＰヘッダフィールドにも‘０’を入れておけばよい。本実施形態では、ＩＰチェックサムを、Ｓ２０６でＣＰＵ１０１が作成するとして説明を続ける。３つ分のＴＣＰ／ＩＰパケットの作成後（ＴＣＰチェックサムは除く）のメモリ２（１０３）におけるデータ格納状態を図３（Ｃ）に示す。図３（Ｃ）は、メモリ２（１０３）において、ペイロードデータにＩＰヘッダ及びＴＣＰヘッダが付加された、転送対象の３つのパケットを模式的に示している。図３（Ｃ）では、ＩＰヘッダは（ＩＰチェックサムを除いて）完成しているが、ＴＣＰチェックサムはまだ計算されていない状態である。
【００２４】
次に、ライト部１（１１３）は、転送器２（１２０）の演算部２（１２２）にチェックサム演算のための設定を行う（Ｓ２０７）。チェックサム演算のための設定は、演算部２（１２２）の機能に応じて、各パケットのサイズを指定する方式により行ってもよいし、あるいは、疑似ヘッダのチェックサム演算のための情報をセットして行ってもよい。演算部２（１２２）がヘッダの解析も含めたチェックサム演算を行うことが可能であれば、Ｓ２０７では、スルーモードで動作させるのか、チェックサム演算モードで動作させるのかの切り替え設定のみを行うようにしてもよい。ここでは、チェックサムモードをＯｎにした場合について説明する。
【００２５】
次に、ライト部１（１１３）は、リード部２（１２１）に対して、コピー元情報を設定する（Ｓ２０８）。具体的には、パケット１〜３それぞれが格納されているアドレスとデータ長をセットする。設定後、リード部２（１２１）はメモリ２（１０３）から、３パケット分のデータのリードして演算部２（１２２）へ受け渡す（Ｓ２０９）。パケットデータを受け取った演算部２（１２２）は、受信したパケットにおいてまだ完成していないＴＣＰチェックサムを計算し、パケット中の所定の場所に格納を行う（Ｓ２１０）。そして、演算部２（１２２）は、完成された各パケットをインターフェース１０６へ送信する（Ｓ２１１、Ｓ２１２、Ｓ２１３）。３つのパケットをインターフェース１０６への送信が完了後、演算部２（１２２）はＣＰＵ１０１に対して完了通知を行う（Ｓ２１４）。以降、同一の手順を繰り返すことにより、次パケット以降の送信もできる（Ｓ２１５、Ｓ２１６、Ｓ２１７）。
【００２６】
図２では、図の簡略化のため、完了通知Ｓ２１４後に、次の処理（Ｓ２１５〜）を行う場合を記載しているが、パイプライン処理が可能な構成にすることにより、Ｓ２１４を待たずにＳ２１５を開始することができる。具体的には、Ｓ２０８の完了通知後に、Ｓ２１５の処理を開始してよい。これにより、転送器１（１１０）によるメモリ１（１０２）からメモリ２（１０３）への転送と、転送器２（１２０）によるメモリ２（１０３）からインターフェース（１０６）への転送とを並列化することができる。また、Ｓ２０６において、３つのパケットのＩＰヘッダ／ＴＣＰヘッダを一度に作成しているが、１つずつ作成し転送器２（１２０）による転送を行ってもよい。これにより、パケットごとに、メモリ間の転送とメモリ・インターフェース間の転送とを並列化することができる。
【００２７】
またここでは、Ｓ２０１で転送器１（１１０）でのチェックサム演算をオフとした例を説明した。しかし、転送器１（１１０）のチェックサム演算のオフが難しい場合は、演算部１（１１２）においてチェックサム演算を行いつつ、チェックサム演算結果を無視するようにしてもよい。そのため、Ｓ２０１で必ずしもチェックサム演算をオフする必要はない。例えば、転送器１（１１０）にチェックサム演算を行うか否かを設定するための機能を設けないようにすることで、そのような機能を設けた構成よりも、転送器１（１１０）の構成を単純化することができる。以上がＴＣＰ／ＩＰパケット（非暗号）を送信するときのフローの説明である。
【００２８】
（暗号通信時の処理手順）
次に、暗号（例えば、ＩＰＳｅｃ）を用いたＴＣＰ／ＩＰパケットの送信時の動作フローについて図４を用いて説明する。図４は、暗号通信を行う際の処理手順を示すシーケンスチャートである。なお、ここではＥＳＰ（Ｅｎｃａｐｓｕｌａｔｉｎｇ  Ｓｅｃｕｒｉｔｙ  Ｐａｙｌｏａｄ）を用いたトランスポートモードを例に説明する。また、各フローにおける各メモリのデータ格納状態に関して図５を補足的に用いて説明する。図５は、メモリ１（１０２）、メモリ２（１０３）、メモリ３（１０４）の使用状態を示す図である。
【００２９】
まず、Ｓ４０１〜Ｓ４１１において、図２を参照して説明した平文通信時と同様に、ＣＰＵ１０１は、メモリ１（１０２）上にあるユーザバッファに格納されたデータグラムを、メモリ２（１０３）に確保してあるワークエリアにコピーする。ただし、ここでは暗号化により、１パケットに含めることのできるペイロード長が異なるため、コピーサイズは図２の処理とは異なる。また、転送器２（１２０）による転送前にチェックサム演算を行う必要があるので、転送器１（１１０）でチェックサム演算を行う。そこで、演算部１（１１２）に、チェックサムＯＮ（演算設定）を設定する（Ｓ４０１）。パケット毎に設定を行う必要があれば、例では３パケット分それぞれの転送長の設定を行う。そして、リード部１（１１１）に、コピー元情報（ここでは、メモリ１（１０２）にあるユーザバッファのアドレスと転送サイズ）を設定する（Ｓ４０２）。そして、ライト部（１１３）に、コピー先情報（ここでは、メモリ２（１０３）にあるワークエリアのアドレスと転送サイズ）を設定する（Ｓ４０３）。ここで、転送器１（１１０）からは、チェックサム演算結果も追加出力されるため、その演算結果の出力先も転送器１（１１０）の仕様に併せて設定する必要があれば設定する。ここでは、データ転送の末尾に演算結果（２Ｂｙｔｅ）が転送器１（１１０）から出力される場合について説明する。すなわち、各パケットの転送量に２Ｂｙｔｅｓ追加した転送サイズをセットし、また、転送先のアドレスをそれぞれセットする。これにより、特別にチェックサム出力アドレスを指定する必要はないことになる。
【００３０】
リード部１（１１１）へのセットに応じて、メモリ１（１０２）からメモリ２（１０３）へのデータ転送が開始される（Ｓ４０４）。具体的にはＳ４０４では、メモリ１（１０２）から、リード部１（１１１）、演算部１（１１２）、ライト部１（１１３）、メモリ２（１０３）へと順次データが転送される。演算部１（１１２）に到着したデータは演算部でチェックサム演算され、また、ライト部に入力されたデータと演算結果が出力される。メモリ２（１０３）に各データと演算結果が格納される（Ｓ４０５〜Ｓ４１０）。
【００３１】
全ての転送完了後、ライト部１（１１３）は、ＣＰＵ１０１に対し、完了通知を行う（Ｓ４１１）。この時のメモリ１（１０２）とメモリ２（１０３）に格納されているデータをそれぞれ図５（Ａ）、図５（Ｂ）に示す。図５（Ａ）は、メモリ１（１０２）に格納された、転送対象の３つのパケットのペイロードデータを模式的に示している。図５（Ｂ）は、演算器１（１１２）においてチェックサムが計算されて、メモリ２（１０３）に格納された、３つのパケットのペイロードデータを模式的に示している。図５（Ｂ）に示すメモリ２（１０３）に格納されているチェックサムは、１パケット分の（ヘッダを含まない）ペイロードデータに対してチェックサム処理を行った、一時的なデータである。
【００３２】
完了通知を受け取ったＣＰＵ１０１は、Ｓ４１２〜Ｓ４１８において、ＴＣＰ／ＩＰパケットを作成する。具体的には、まず、演算結果１〜３を確認し（Ｓ４１２）、ＴＣＰヘッダを作成する（Ｓ４１３）。なお、ＴＣＰヘッダのチェックサムフィールドは、先にＳ４１２にて確認を行ったチェックサム結果を用いてＣＰＵ１０１により完成させる。このときのメモリ２（１０３）に格納されているデータを図５（Ｃ）に示す。
【００３３】
３つ分のＴＣＰパケットの作成後、ＣＰＵ１０１は、暗号・認証処理部１０５に対し、パケットの暗号化に必要となる設定を行う（Ｓ４１４）。Ｓ４１４の設定が行われた暗号・認証処理部１０５は、メモリ２（１０３）にある３つのＴＣＰパケットに対して暗号・認証処理を行う（Ｓ４１５、Ｓ４１６）。暗号化されたＴＣＰパケットには、メモリに書き戻される。先の暗号設定時（Ｓ４１４）に書き戻し先アドレスを登録することにより、任意の場所に書き戻すことができる。本例では、メモリ３（１０４）に書き戻すように設定された場合について説明する。
【００３４】
暗号処理の完了通知を受け取ったＣＰＵ１０１は、パケット１、２、３のＩＰヘッダを作成する（Ｓ４１８）。この時点で、メモリ３（１０４）に格納されているデータについて図５（Ｄ）に示す。図５（Ｄ）のように、それぞれ完成されたＴＣＰヘッダとペイロードデータを含む各ＴＣＰパケットは、暗号化されてＥＳＰトレーラが付与された暗号化ＴＣＰパケットに変換される。暗号化された各ＴＣＰパケットにはＥＳＰヘッダとＥＳＰ認証データが付与されて、ＩＰヘッダが付与されている。
【００３５】
その後、Ｓ４１９〜Ｓ４２５では、暗号化されたパケットをインターフェース１０６へ送信するための処理を行う。まず、ＣＰＵ１０１は、転送器２（１２０）に具備された演算部２（１２２）にチェックサム演算なしのスルーモード設定をする（Ｓ４１９）。これは、メモリ３（１０４）に格納されているデータがすべてに完成されているパケット（ＭＡＣフレーム等を除く）であり、チェックサム演算の必要がないからである。
【００３６】
次に、ＣＰＵ１０１は、リード部２（１２１）に、コピー元情報設定を行う（Ｓ４２０）。具体的には、パケット１〜３それぞれが格納されているアドレスとデータ長をセットする。設定後、リード部２（１２１）はメモリ３（１０４）から、３パケット分のデータのリードを実行する（Ｓ４２１）。リード部２（１２１）から、スルーモードで動作している演算部２（１２２）を経由して、インターフェース１０６へ３つのパケットが送信される（Ｓ４２２〜Ｓ４２４）。３つのパケットを送信後、演算部２（１２２）は、完了通知をＣＰＵ１０１へ送信する(Ｓ４２５)。以上が図４に示した処理フローの大まかな流れである。
【００３７】
もちろん、本実施形態は一例であり、他の処理手順を採用してもよい。例えば、演算部１（１１２）が、ヘッダ解析、チェックサム演算（疑似ヘッダ処理含む）、チェックサム上書きといった機能を有していれば、以下のような処理手順による通信処理を実現できる。すなわち、まずメモリ１（１０２）にチェックサムフィールドのみ未完のＴＣＰヘッダを転送器１（１１０）の動作開始前に配置する。そして、ペイロード（Ｓ４０４で転送されるデータ）とＴＣＰヘッダを同時に転送し、転送器１（１１０）の処理後には、完成されたＴＣＰパケットを得るといった手法である。また、ＩＰヘッダの作成を暗号処理（Ｓ４１６）後に実施したが、転送器２（１２０）を動作させる前に作成可能であれば、どのタイミングで作成してもよいし、他の処理と並行して行ってもよい。これによりさらなる処理効率を向上させることも可能である。
【００３８】
上記のように、ＣＰＵ１０１は、対象データが暗号通信の対象である場合に、転送器１（１１０）に、メモリ１（１０２）から対象データを読み出し、チェックサム演算を行って、メモリ２（１０３）へ転送させる。また、暗号・認証処理部１０５に、メモリ２（１０３）から対象データを読み出し、当該対象データに対して暗号処理を施して、メモリ３（１０４）へ転送させる。さらに、転送器２（１２０）に、メモリ３（１０４）から対象データを読み出してインターフェース１０６へ転送させる。このように、暗号処理を行う前にチェックサム演算を行う必要がある場合は、転送器１（１１０）にチェックサム演算を行わせることで、暗号処理に対応することができる。また、メモリの間の転送と、メモリ・インターフェースの間の転送とを並列して行わせるパイプライン処理を実行することで、通信方式にかかわらず効率的な処理を行うことが可能となる。
【００３９】
また、図４では、Ｓ４２５において完了通知をしてから次のパケットについてＳ４０１以降の処理を行う例を示しているが、平文通信時と同様に、処理を並列化してもよい。例えば、メモリ１（１０２）からメモリ２（１０３）への転送、暗号・認証処理部１０５での暗号処理、及び、メモリ３（１０４）からインターフェース１０６への転送を並列化することで、処理を効率化することが可能となる。以上が暗号パケット送信時の動作フローである。
【００４０】
（ＵＤＰ通信時の処理手順）
次に、Ｅｔｈｅｎｅｔ（登録商標）のＭＴＵ（１５００Ｂｙｔｅｓ）より大きなＵＤＰ／ＩＰパケットの送信時の動作フローについて図６を用いて説明する。図６は、ＵＤＰ（ユーザ・データグラム・プロトコル）通信を行う際の処理手順を示すシーケンスチャートである。また、各フローにおける各メモリのデータ格納状態に関して図７を補足的に用いて説明する。図７は、メモリ１（１０２）、メモリ２（１０３）の使用状態を示す図である。
【００４１】
まず、Ｓ６０１〜Ｓ６０９において、先の２つの例と同様に、ＣＰＵ１０１は、メモリ１（１０２）上にあるユーザバッファに格納されたデータグラムを、メモリ２（１０３）に確保してあるワークエリアにコピーする。転送器２（１２０）による転送前にチェックサム演算を行う必要があるので、コピーの際はＳ６０４〜Ｓ６０８において、転送器１（１１０）でチェックサム演算を行う。
【００４２】
ＣＰＵ１０１は、まず、演算部１（１１２）に対して、チェックサムＯＮ（演算設定）を行う（Ｓ６０１）。ここで、チェックサム設定は、メモリ１（１０２）からの入力データをすべて演算対象とし、１つの結果のみ出力するようにセットしておく。そして、リード部１（１１１）にコピー元情報を設定し（Ｓ６０２）、ライト部（１１３）に、コピー先情報（ここでは、メモリ２（１０３）にあるワークエリアのアドレスと転送サイズ）を設定する（Ｓ６０３）。フラグメントパケットの先頭パケットは、ＵＤＰヘッダが必要になるため、Ｓ６０５の転送サイズは、他の２つ（Ｓ６０６、Ｓ６０７）のサイズよりも（ＵＤＰパケット２０Ｂｙｔｅｓ分）小さくセットしておく。全てのデータが演算部１（１１２）に入力されると、演算部１（１１２）より、チェックサムの一時演算結果が出力されメモリ２（１０３）に書きこまれる（Ｓ６０８）。
【００４３】
なお、チェックサム演算は、演算対象のデータを所定のビット長のブロックに分割し、各ブロックを加算する演算を行うものである。ここで、ブロックの加算による繰り上がりによりブロックのビット長を超えるキャリー（桁あふれ）が生じたときは、ビット１を最下位ビットに加算する。チェックサム演算はこのような手順により行われるため、演算対象のブロックの全てを加算しさえすれば、演算の途中経過を保持して演算を途中で中断・再開することができ、また、ブロックの加算はどのような順序であっても行うことができる。そこで、Ｓ６０４の演算においては、入力されたフラグメントパケットから所定ビット長のブロックを読み出し、演算部１（１１２）のバッファ（不図示）に保持されたチェックサム演算の途中結果に順次加算する処理を繰り返すことになる。
【００４４】
この時のメモリ１（１０２）とメモリ２（１０３）、それぞれのデータ格納状態を図７（Ａ）、図７（Ｂ）に示す。図７（Ａ）は、メモリ１（１０２）に格納された、転送対象の３つのパケットのペイロードデータを模式的に示している。図７（Ｂ）は、メモリ１（１０２）から転送され、チェックサムの一時演算結果が付与された、メモリ２（１０３）における３つのパケットのペイロードデータを模式的に示している。
【００４５】
暗号化通信を行う際は、各パケット用データにつきチェックサム演算を行ったが、本例では、ＵＤＰヘッダのフラグメントパケットの先頭パケットにしかチェックサムは付与されない。このため、チェックサム演算結果は１つのみでよい。この演算結果は、データ１〜３（Ｓ６０５、Ｓ６０６、Ｓ６０７）の全てのデータに対して実行された結果である。
【００４６】
チェックサム演算結果まで転送が完了すると、ライト部１（１１３）は、ＣＰＵ１０１に対して完了通知を行う（Ｓ６０９）。完了通知を受信したＣＰＵ１０１は、演算結果を確認し（Ｓ６１０）、ＵＤＰヘッダの作成を行う（Ｓ６１１）。この際、ＵＤＰヘッダに含まれるチェックサムフィールドは、先に確認した演算結果を利用して作成する。ＵＤＰヘッダまで作成完了した時のメモリ２（１０３）のデータを図７（Ｃ）に示す。続いてＣＰＵ１０１は、各パケットに対してＩＰヘッダを作成する（Ｓ６１２）。これにより、フラグメントパケットが完成する。図７（Ｄ）は、ＩＰヘッダが付与された各フラグメントパケットを示している。その後は、暗号パケット送信時と同手順で送信を行う。
【００４７】
以上のように、転送器１（１１０）は、メモリ１（１０２）から対象データを読み出してメモリ２（１０３）へ転送し、転送器（１２０）は、メモリ２（１０３）から対象データを読み出してインターフェース１０６へ転送する。そして、ＣＰＵ１０１は、ＵＤＰ通信のように対象データのサイズが所定のサイズよりも大きい通信方式の場合は、転送器１（１０１）にチェックサム演算を行わせる。これに応じて、転送器１（１１０）は、メモリ１（１０２）からメモリ２（１０３）へ各フラグメントパケットを転送する際にチェックサム演算を行い、その演算結果をメモリ２（１０３）へ転送済みのフラグメントパケットに付与する。具体的には、転送器１（１１０）は、チェックサム演算の途中結果を保持し、各フラグメントパケットを転送する際にそのフラグメントパケットを構成する所定ビット長のブロックをその途中結果に順に加算していく。そして、一つのＵＤＰパケットを構成する全てのフラグメントパケットの転送が完了した段階で、そのＵＤＰパケットに対応するチェックサム演算結果をメモリ２（１０３）へ出力する。このように、チェックサムの演算結果が付与されたＵＤＰパケットをまとめて出力するのではなく、フラグメントパケットの転送と並列に加算処理を進めて、ペイロードとチェックサム演算結果とを別々にメモリに出力する。したがって、大容量のバッファを転送器に設けることなく、効率的にＭＴＵを超える大きさのパケットに対してチェックサム演算を行うことができる。
【００４８】
なお、図６では、Ｓ６１９において完了通知をしてから次のパケットについてＳ６０１以降の処理を行う例を示しているが、平文通信時、暗号通信時と同様に、処理を並列化してもよい。例えば、メモリ１（１０２）から演算部１（１１２）への転送と、メモリ２（１０３）からインターフェース１０６への転送とを並列化することで、処理を効率化することが可能となる。以上が、ＭＴＵより大きなパケットを送信するときのチェックサム演算の処理手順である。
【００４９】
ここまでで３つの転送ケース、具体的には、
（１）ＴＣＰ／ＩＰ（暗号なし）送信。
（２）ＴＣＰ／ＩＰ（暗号あり）送信。
（３）ＭＴＵサイズ以上のＵＤＰ（暗号なし）送信。
について説明した。いずれのケースも、演算部１（１１２）は演算部２（１２２）よりも機能的に簡易なものにより実現できる。「簡易」とは、例えば、以下のような機能の一部又は全部を備えないことをいう。
（１）疑似ヘッダの演算機能。
（２）チェックサムの上書き機能。
（３）パケットのバッファリング機能。
したがって、演算部１（１１２）は、演算部２（１２２）が持つこのような機能を必ずしも備える必要はない。よって、転送器毎に演算部を持たせたいが、ゲートサイズを小さくする必要がある場合は、演算部１（１１２）の機能を演算部２（１２２）より落としてもよい。
【００５０】
上記のように、本実施形態の通信装置は、複数のメモリを備え、メモリ間でデータを転送する間にチェックサム演算、暗号・認証処理等の処理を行うことで、パイプライン処理により処理を並列化する。ここで、本実施形態では、ＴＣＰかＵＤＰか、あるいは、暗号化を行うか否か等の通信方式の内容に応じて、どの転送器でチェックサム演算を行うかをＣＰＵから設定する。このように、通信方式の内容に応じてチェックサム演算を行う転送器を選択することで、処理の並列化による効率化とさまざまな通信方式への対応とを両立させることが可能となる。
【００５１】
なお、本実施形態では、通信対象のデータに対するチェックサム演算を通信装置００１が行う場合について説明したが、上記の構成を専用の論理回路等の演算装置に実装し、その演算装置を通信装置に組み込んで利用するようにしてもよい。その場合は、例えば、演算装置に、複数のメモリ、インターフェース、メモリないしインターフェース間でデータを転送する第１、第２の転送器、及び、第１、第２の転送手段の動作を制御する制御部（ＣＰＵ等）を設けることができる。そして、制御部は、対象データの通信方式に基づき、第１、第２の転送器のいずれかの転送器にチェックサム演算を行わせるようにしてもよい。これにより、様々な通信方式に対応しつつ、パイプライン処理に基づく処理の並列化により効率的に処理を実行することが可能となる。
【００５２】
＜実施形態２＞
実施形態１では、各転送器（転送器１、転送器２）が、それぞれ独立に演算部を有する構成例を説明した。本発明の第二の実施形態（実施形態２）では、２つの転送器で１つの演算部を共用する構成をもつ通信装置００２について、図８を用いて説明する。
【００５３】
ＣＰＵ１０１、メモリ１，２，３（１０２、１０３、１０４）、暗号・認証処理部１０５、システムバス１００、インターフェース１０６は、実施形態１と同様である。転送器３（８３０）は、メモリ間データ転送を行うことができる転送器であり、実施形態１における転送器１（１１０）に相当するモジュールである。メモリ間データ転送を行う際に、チェックサム演算の有無を選択することができる。その選択は、スイッチ３（８３２）を用いて行われる。チェックサム演算を実施しない場合は、リード部３（８３１）からの出力データが、そのままライト部３（８３４）の入力となるようにスイッチを制御する。チェックサム演算が必要であれば以下のようにする。すなわち、リード部３（８３１）からの出力が一度、共用演算部８５０に入力され、その後、共用演算部８５０からの出力がライト部３（８３４）へ入力されるようにスイッチ３（８３２）を制御する。
【００５４】
転送器４（８４２）は、メモリ／インターフェース間データ転送を行うことができる転送器であり、実施形態１における転送器２（１２０）に相当するモジュールである。メモリ／インターフェース間データ転送を行う際、スイッチ４（８４２）を操作することにより、チェックサム演算の有無を選択できる点は転送器３（８３０）と同様である。共用演算部８５０は、転送器３（８３０）と転送器４（８４０）との間で共用してしようされる演算部である。その切り替えは、ＣＳスイッチ８５１と、リード部３（８３１）から出力されているＢｕｓｙ信号１（８３３）とリード部４（８４１）から出力されているＢｕｓｙ信号２（８４３）によって調停される。すなわち、どちらかの転送器で使用されている際には、その使用が完了するまで他の転送器の入力を受け付けないようにする。
【００５５】
本実施形態の通信装置００２の特徴は演算部を１つにすることができるので、ゲートサイズを通信装置００１より削減できる点である。ただし、チェックサム演算をしながらのデータ転送を転送器３（８３０）と転送器４（８４０）とで並列して実行することはできない。したがって、そのようなケースが発生しない、または発生時の通信速度劣化が許容できるシステムで使用するとよい。以上が通信装置００２の説明である。
【００５６】
なお、実施形態１と同様に、上記の構成を専用の論理回路等の演算装置に実装し、その演算装置を通信装置に組み込んで利用するようにしてもよい。また、上記各実施形態の処理手順を所定のハードウェア設計言語によりコンピュータプログラムとして記述し、当該コンピュータプログラムをコンピュータ（組込み機器、汎用装置（ＰＣ）等の情報処理装置）に読み込ませて上記処理を実行させてもよい。
【００５７】
以上のように、本発明の各実施形態によれば、ＭＴＵサイズより大きいパケット使用した通信を行う場合に、転送器内に大きなバッファを持つことなく他の処理と並列させた効率的なチェックサム処理を実行した通信を行うことが可能となる。さらに、暗号通信を行う場合にも、他の処理と並列させた効率的なチェックサム処理を実行した通信を可能とする。したがって、様々な通信形態に適応した効率的なチェックサム処理が実現される。
【００５８】
＜その他の実施形態＞
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサーがプログラムを読出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【符号の説明】
【００５９】
００１：通信装置、１０１：ＣＰＵ、１１０：転送器１、１１２：演算部１、１２０：転送器２、１２２：演算部２、１０２：メモリ１、１０３：メモリ２、１０４：メモリ３、１０５：暗号・認証処理部、１０６：インターフェース
【図１】
0006600241.tif 000002
【図２】
0006600241.tif 000003
【図３】
0006600241.tif 000004
【図４】
0006600241.tif 000005
【図５】
0006600241.tif 000006
【図６】
0006600241.tif 000007
【図７】
0006600241.tif 000008
【図８】
0006600241.tif 000009