(57)【要約】【課題】従来のネットワークインターフェース装置は、最大接続数の制限撤廃とプロセッサの接続確立処理の負荷軽減の両方を満足することはできなかった。【解決手段】ＮＩＣ１３（ネットワークインターフェース装置）は、通信の接続をポート番号で識別し、ポート毎の接続状態を主記憶１２上に設けたポートコンテキストにより管理する。ＮＩＣ１３は、該ポートコンテキストを、主記憶上に設けられたポートテーブルにより管理する。このように、通信接続の確立・切断処理をＮＩＣ１３にオフロードし、通信接続の管理を主記憶上で行うことで、プロセッサの通信処理の負荷を低減でき、かつ、維持可能な通信接続数をより多くすることができる。【選択図】図２
2010183450.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに接続され、ネットワークを介する通信を行なうインターフェース装置であって、
通信接続をポート番号により識別し、ポート毎の通信接続の状態を、記憶手段に格納されている、ポート番号に対応付けられたコンテキストで管理する第１の管理手段と、
該コンテキストの格納状態を管理する第２の管理手段と、
前記コンテキストを参照して、ポート間の通信接続の確立処理と切断処理を実行する制御手段と、
を備えるネットワークインターフェース装置。
【請求項２】
請求項１記載のネットワークインターフェース装置であって、
前記制御手段は、
前記コンピュータのプロセッサから接続要求パケットの送信を指示された場合、該指示において送信元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“待機状態”に設定されていれば、接続要求パケットを前記ネットワークに送信する。
【請求項３】
請求項２記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続要求パケットを送信した後、送信完了を前記プロセッサに通知する。
【請求項４】
請求項２記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続要求パケットを受信した場合、そのパケットにおいて接続先として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“待機状態”に設定されていれば、接続許可の応答パケットを前記ネットワークに送信して該コンテキストを“接続済み状態”に更新し、前記コンテキストが“待機状態”に設定されていなければ、接続拒否の応答パケットを前記ネットワークに送信する。（４）
【請求項５】
請求項４記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続要求パケットの受信及び前記応答パケットの送信を行い、必要に応じて前記コンテキストの更新を行い、その後、前記プロセッサに前記接続要求パケットの受信を通知する。
【請求項６】
請求項４記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続許可の応答パケットを受信した場合、該応答パケットにおいて接続元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続要求済み状態”に設定されている場合には該コンテキストを“接続済み状態”に更新する。
【請求項７】
請求項４記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続拒否の応答パケットを受信した場合、該応答パケットにおいて接続元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続済み状態”に設定されている場合には、該コンテキストを“待機状態”に戻す。
【請求項８】
請求項６または請求項７記載のネットワークインターフェース装置であって、
前記制御手段は、前記応答パケットの受信及び前記コンテキストの更新が終了した後、前記プロセッサに前記応答パケットの受信を通知する。
【請求項９】
請求項１記載のネットワークインターフェース装置であって、
前記制御手段は、コンピュータのプロセッサから切断通知パケットの送信を指示された場合、該指示において接続元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続済み状態”に設定されている場合には切断通知パケットを前記ネットワークに送信する。
【請求項１０】
請求項９記載のネットワークインターフェース装置であって、
前記制御手段は、前記切断通知パケットを受信した場合、そのパケットにおいて接続先として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続済み状態”に設定されていれば該コンテキストを“切断通知受信済み状態”に更新する。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワークインターフェース装置に関する。
【背景技術】
【０００２】
複数の演算ノードがネットワークを介して接続された構成の並列計算機が知られている。このような並列計算機においてノード間の低遅延通信を実現するためには、全ノード間で通信制御のための接続を維持することが望ましい。
【０００３】
並列計算機のノードは、ネットワークに接続するためのネットワークインターフェース装置（ＮＩＣ：Network Interface Controller または  Network Interface Card）を備えている。ノードは、ネットワークインターフェース装置を使用して、他のノードとネットワークを介する通信を行なう。このため、数万ノード規模の超並列計算機は、数万の通信接続を維持することが可能なネットワークインターフェース装置が必要となる。
【０００４】
また、Ｗｅｂサーバやデータベース・サーバなどの計算機は、端末との通信に、接続と切断が頻繁に発生する通信プロトコル（例えば、ＨＴＴＰ(Hyper Text Transfer Protocol)）を使用する。このような計算機においては、処理速度向上のために、プロセッサによる通信の接続・切断のプロトコル処理の負荷を軽減することが重要である。
【０００５】
近年は、ギガビット・イーサネット（登録商標）などに代表されるように、ネットワークの通信速度の向上が著しい。これに伴い、計算機のプロセッサでは、通信処理の割合が高まり、アプリケーション（アプリケーションプログラム）処理の割合が低くなるという問題が顕在化してきている。このため、プロセッサによる通信処理の一部をネットワークインターフェース装置に任せるオフロード機能の実装が一般的になりつつある。このオフロード機能に関する公知技術は、特開２００６−１９１５３７号公開公報や特開２００３−３３３０７６号公開公報に開示されている。特開２００６−１９１５３７号公開公報には、ＮＩＣが通信処理を行うオフロードエンジンが開示されている。また、特開２００３−３３３０７６号公開公報には、プロセッサが通信接続を確立した後、通信コンテキストをＮＩＣに移すことにより、通信処理を接続単位で選択的にオフロードする方式が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００６−１９１５３７号公開公報
【特許文献２】特開２００３−３３３０７６号公開公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
特許文献１に開示されているＮＩＣは、オフロードエンジンに搭載されるメモリ容量がプロセッサの主記憶の容量よりも小さい。したがって、特許文献１は、ノード間の最大通信接続数が制限される。
【０００８】
一方、特許文献２のＮＩＣは、プロセッサの通信接続数確立処理の負荷が大きくなる。このため、特許文献２は、プロセッサのアプリケーション処理能力が低くなる。
【課題を解決するための手段】
【０００９】
本発明の目的は、ネットワークを介するノード間の通信において、プロセッサによる通
信接続の確立と切断の処理を肩代わりすることが可能で、かつ、ノード間で維持可能な通信接続数を、より多くできるネットワークインターフェース装置を提供することである。
【００１０】
開示のネットワークインターフェース装置は、コンピュータに接続され、ネットワークを介する通信を行なう
開示のネットワークインターフェース装置は、下記の第１及び第２の管理手段と制御手段を備える。
【００１１】
第１の管理手段は、通信接続をポート番号により識別し、ポート毎の通信接続の状態を、記憶手段に格納されている、ポート番号に対応付けられたコンテキストで管理する。
第２の管理手段は、該コンテキストの格納状態を管理する。
【００１２】
制御手段は、前記コンテキストを参照して、ポート間の通信接続の確立処理と切断処理を実行する。
【発明の効果】
【００１３】
開示のネットワークインターフェース装置は、維持できる通信接続数を多くすることができる。また、プロセッサによる通信接続の確立処理と切断処理を肩代わりして実行することで、プロセッサの通信処理の負荷を低減する。
【図面の簡単な説明】
【００１４】
【図１】本実施形態を適用した並列計算機の全体システム構成を示す図である。
【図２】図１のＮＩＣの構成の一例を示すブロック図である。
【図３】プロセッサの主記憶の構成例を示す図である。
【図４】本実施形態のポート定義を示す図である。
【図５】ポートコンテキストのデータ構造の一例を示す図である。
【図６】プロセッサによって送信指示キューに書き込まれるディスクリプタのデータ構造を示す図である。
【図７】ＮＩＣの送信完了通知キュー制御部によって送信完了通知キューに書き込まれる送信完了ステータスのディスクリプタのデータ構造を示す図である。
【図８】ＮＩＣの受信完了通知キュー制御部によって受信通知キューに書きこまれる受信ステータスを示すディスクリプタのデータ構造を示す図である。
【図９】制御パケットのデータ構造を示す図である。
【図１０】転送データパケットのデータ構造を示す図である。
【図１１】本実施形態における片方向通信の動作を示すシーケンス図である。
【図１２】接続元プロセッサ１１ｓが、通信接続を確立するために、接続元ＮＩＣ１３ｓに対して「接続要求」を指示する動作を示す図である。
【図１３】接続先ＮＩＣが、接続元ＮＩＣから接続要求パケットを受信して、接続先ＮＩＣに「接続許可」の応答パケットを送信する動作を示す図である。
【図１４】接続元ＮＩＣが、接続先ＮＩＣから「接続許可」の応答パケットを受信したときの動作を示す図である。
【図１５】接続済みポート(接続元ポート)から転送データを送信する動作を示す図である。
【図１６】接続済みの接続先ポートが、接続元ポートが送信した転送データを受信する動作を示す図である。
【図１７】接続済みの接続元ポートが、接続先ポートに切断通知を送信する動作を示す図である。
【図１８】接続済みの接続先ポートが、接続元ポートから切断通知を受信する動作を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照しながら、本発明の実施形態について説明する。
まず、本実施形態で用いられる通信接続に関する主要な用語について定義する。
｛ポート｝
ポートは、以下のような属性を有する。
・ポートは通信接続の両端に位置する
・ポートには、通信接続の接続元として指定される接続元ポートと、通信接続の接続先として指定される接続先ポートの２種類がある
・ポートは、個々のアプリケーションに相当するプログラムであり、各ノードのプロセッサで実行される。ここで「アプリケーション」とは、ＯＳＩ(Open System Interconnection)参照モデルのセッション層に属する通信プログラムによって実現される通信資源であり、データの送受信を行うための仮想的な接続の確立や解放を行う、アプリケーション層に属するアプリケーションなどを考えることができる。
【００１６】
｛ポート番号｝
ポート番号は、個々のアプリケーションがポートを特定するための識別情報である。ポート番号は具体的には、例えば、各ノード１０のプロセッサ１１で実行されるアプリケーションが確立している個々の通信接続を識別するための番号であり、個々の通信接続に一意的に割り当てられる。本実施形態においては、例えば、各ポートに対して、０”、“１”、“２”、・・・“ｎ”（ｎは任意の正の整数）の連続番号を、ポート番号として割り当てる。
【００１７】
｛通信接続の管理｝
本実施形態は、通信接続をポート番号に結び付けて管理する。通信接続は、例えば、ＯＳＩ参照モデルのトランスポート層におけるノード間（エンド・ツー・エンド間）の通信接続である。本実施形態では、ポート番号を用いて、エンド・ツー・エンド間での通信を制御する。本実施形態がサポートする通信接続は、例えば、ＯＳＩ(Open System Interconnection)参照モデルのトランスポート層のプロトコルの通信接続、または、iSCSI(Internet Small Computer System Interface)プロトコルの通信接続などである。 
【００１８】
｛並列計算機のシステム構成｝
図１は、本実施形態を適用した並列計算機の全体システム構成を示す図である。
図１に示す並列計算機１は、（ｎ＋１）個のノード１０（１０−０、１０−１、・・・、１０−４９〜１０−５１、・・・、１０−ｎ）とネットワーク２０を備えている。ここで、ｎは正の整数である。
【００１９】
（ｎ＋１）個のノード１０は、ネットワーク２０を介して互いに通信する。ネットワーク２０は、例えば、相互接続網、ＬＡＮ(Local Area Network)などである。各ノード１０は、例えば、ＭＰＩ(Message Passing Interface)などに基づきコマンドやデータなどを送受信する。ノード１０間で送受信されるコマンドやデータは、例えば、パケットにより送られる。
【００２０】
各ノード１０−ｉ（ｉ＝０〜ｎ）は、プロセッサ１１（プロセッサ０、プロセッサ１、・・・、プロセッサｎ）、主記憶１２及びＮＩＣ１３を備えている。プロセッサ１１は、例えば、マイクロプロセッサ及びそのチップセットなどを備える。主記憶１２は、例えば、ＲＯＭ(Read Only memory)やＲＡＭ(Random Access Memory)などの半導体メモリである。ＮＩＣ１３は、例えば、ネットワークインターフェースコントローラやネットワークインターフェースカードなどである。
【００２１】
主記憶１２は、プロセッサが実行するＯＳ(Operating System)、ミドルウェア、アプリケーションプログラムなどのソフトウェアが格納される領域以外に、通信接続の確立や切断などの通信処理に使用される情報であるポートコンテキストを格納する領域（ポートコンテキスト格納域）、及びポートコンテキストを管理するポートテーブル（ポート管理テーブル）を格納する領域を備えている。ポートコンテキスト及びポートテーブルの詳細は、後述する。
【００２２】
ＮＩＣ１３は、プロセッサの通信処理をオフロードする機能を備えている。ＮＩＣ１３によるオフロード機能の詳細は後述する。ＮＩＣ１３は、プロセッサ１１が他のノード１０のプロセッサ１１に送信するコマンドやデータを主記憶１２から読み出し、読み出したコマンドやデータを、ネットワーク２０を介して他のノード１０のＮＩＣ１３に送信する。また、他のノード１０のＮＩＣ１３が送信するコマンドやデータを、ネットワーク２０を介して受信し、受信したコマンドやデータを主記憶１２に書き込む。コマンドやデータの送受信は、例えば、パケットを用いて行なわれる。
【００２３】
図１には、各ノード１０の主記憶１２上にポート０からポート３の４つのポートエントリを備えたポートテーブル１２１が設けられた例を示している。図１には、ノード１０−１のポート０（ポート番号が“０”のポート）とノード１０−５１のポート２（ポート番号が“２”のポート）間の通信接続３０が模式的に示されている。通信接続３０は、例えば、ＯＳＩ参照モデルのトランスポート層の通信接続である。図１に示すように、本実施形態のポートテーブル１２１は、ポート番号の降順に、そのポート番号に対応するポートエントリを格納する。
【００２４】
｛ＮＩＣ１３のハードウェア構成｝
図２は、図１のＮＩＣ１３の構成の一例を示すブロック図である。
図２に示すように、ＮＩＣ１３は、ＰＩＯ(Programmed Input/Output)制御部１３１、ＤＭＡ制御部１３２、送信指示キュー制御部１３３、パケット送信処理部１３４、送信完了通知キュー制御部１３５、パケット受信処理部１３６、受信完了通知キュー制御部１３７を備えている。ＤＭＡ制御部１３２は、バス１３８を介して、送信指示キュー制御部１３３、送信完了通知キュー制御部１３５、パケット送信処理部１３４、パケット受信処理部１３６及び受信完了通知キュー制御部１３７と接続されている。また、ＰＩＯ制御部１３１と送信指示キュー制御部１３３とは、信号線１３９で接続されている。送信指示キュー制御部１３３とパケット送信処理部１３４とは、信号線１４０で接続されている。パケット送信処理部１３４と送信完了通知キュー制御部１３５とは、信号線１４１で接続されている。パケット受信処理部１３６と受信完了通知キュー制御部１３７とは、信号線１４２で接続されている。
【００２５】
図３は、プロセッサ１１の主記憶１２の構成例を示す図である。
図３に示すように、主記憶１２には、ポートテーブル１２１、ポートコンテキスト１２３、ポートバッファ１２５、送信指示キュー１２７、送信完了通知キュー１２８及び受信通知キュー１２９が設けられる。ポートテーブル１２１、ポートコンテキスト１２３、ポートバッファ１２５、送信指示キュー１２７、送信完了通知キュー１２８及び受信通知キュー１２９のそれぞれの構成・機能の詳細は後述する。
【００２６】
ＰＩＯ制御部１３１は電気的にプロセッサ１１と接続されている。ＰＩＯ制御部１３１は、プロセッサ１１との間でコマンドやデータなどの送受信を行なう。また、ＰＩＯ制御部１３１は、必要に応じて、プロセッサ１１に割り込みをかける。
ＤＭＡ制御部１３２は、プロセッサ１１を介さずに、プロセッサ１１の主記憶１２に直接アクセスし、主記憶１２との間でデータの転送を行う。
送信指示キュー制御部１３３は、ＤＭＡ制御部１３２を介して、プロセッサ１１の主記憶
１２上に設けられた送信指示キュー１２７から、「送信指示」のディスクリプタを読み出す。そして、読み出したディスクリプタに記述されている送信パケットの作成に必要な情報を、信号線１４０を介してパケット送信処理部１３４に送る。
パケット送信処理部１３４は、送信指示キュー制御部１３３からの情報を受け取ると、受け取った情報を基に、制御パケットまたは転送データパケット（データ通信パケット）を生成する。そして、生成したパケットを、ネットワーク２０を介して、送信指示により指定されたノード１０のＮＩＣ１３に送信する。そして、パケットの送信を終了すると、送信完了したパケットの種別を、信号線１４１を介して送信完了通知キュー制御部１３５に通知する。
【００２７】
送信完了通知キュー制御部１３５は、パケット送信処理部１３４からの通知を受け取ると、「送信完了通知」のディスクリプタを作成し、作成したディスクリプタをＤＭＡ制御部１３２を介して、プロセッサ１１の主記憶１２上に設けられた送信完了通知キュー１２８に書き込む。
【００２８】
パケット受信処理部１３６は、ネットワーク２０から、送信先ノード１０のＮＩＣ１３が送信したパケットを受信する。そして、受信したパケットがデータ通信パケットであった場合には、そのパケットから転送データを取り出し、取り出した転送データをＤＭＡ制御部１３２を介して、プロセッサ１１の主記憶１２上に設けられたポートバッファ１２５に書き込む。また、パケット受信処理部１３６は、パケットを受信した場合には、受信したパケットの種別を、信号線１４２を介して受信完了通知キュー制御部１３７に通知する。受信完了通知キュー制御部１３７は、パケット受信処理部１３６から通知を受け取ると、「受信通知」のディスクリプタを作成し、作成したディスクリプタを、ＤＭＡ制御部１３２を介してプロセッサ１１の主記憶１２上に設けられた受信通知キュー１２９に書き込む。
【００２９】
＜ポート定義＞
図４は、本実施形態のポート定義を示す図である。
本実施形態では、通信の接続を、ポート番号に結び付けて管理する。通信接続の管理は、ポートテーブル１２１、ポートコンテキスト１２３、ポートバッファ１２５を利用して実施される。
【００３０】
ポートコンテキスト１２３は、ポートの通信接続状態を管理する情報である。ポートバッファ１２５は、送信する転送データ、または受信した転送データを格納するバッファである。ポートテーブル１２１は、各ポートのポートコンテキスト１２３とポートエントリ１２１１を管理するテーブである。ポートテーブル１２１は、各ポートのポートコンテキスト１２３とポートエントリ１２１１を、ポート番号に対応付けて管理している。ポートテーブル１２１のエントリであるポートエントリ１２１１のエントリ番号は、ポート番号に対応している。したがって、ポートテーブル１２１のエントリ番号が“ｎ”（ｎは、０または正の整数）のエントリには、ポート番号が“ｎ”のポートエントリ１２１１が登録される。
【００３１】
図４に示すように、ポートエントリ１２１１は、「Enable」、「TYPE」、「Context Address」、「Buffer Address」、及び「Buffer Size」の各項目の情報を格納している。“Enable”は、ポートエントリ１２１１が有効であるか否かを示すフラグである。“Enable“フラグは、有効であれば１、無効であれば０に設定される。“TYPE”は、「受信」または「送信」のいずれかを示す情報である。“Context Address”は、対応するポートのポートコンテキスト１２３の主記憶１２上の格納アドレスを示す。“Buffer Address”は、対応するポートのポートバッファ１２５の先頭アドレスを示す。“Buffer Size”は、ポートバッファ１２５のサイズ（例えば、バイト数）を示す情報である。
【００３２】
｛ポートコンテキスト１２３の構成｝
図５は、ポートコンテキスト１２３のデータ構造の一例を示す図である。
図５に示すように、ポートコンテキスト１２３は、プロトコル種別１２３１と通信状態１２３２の各情報を有している。プロトコル種別１２３１は、ポート間の通信で使用される通信プロトコルの種別を示す情報である。通信状態１２３２は、ポート間の通信接続の状態を示す情報である。通信状態１２３２には、「待機状態」、「接続済み状態」、「接続要求済み状態」、「切断通知受信済み状態」などがある。
【００３３】
｛各キューに設定されるディスクリプタの内容＞
本実施形態では、プロセッサ１１の通信処理をＮＩＣ１３にオフロードする。具体的には、「通信接続の確立」、「通信接続の切断」及び「データ通信（データ転送）」の処理を、ＮＩＣ１３にオフロードする。このオフロードの実装は、送信指示キュー１２７、送信完了通知キュー１２８及び受信通知キュー１２９を用いて行なわれる。プロセッサ１１とＮＩＣ１３は、これらのキューに対してディスクリプタの書き込み／読み出しを行なうことで情報を交換し、オフロードを実現する。
【００３４】
＜送信指示キュー１２７＞
送信指示キュー１２７は、プロセッサ１１がＮＩＣ１３に対して「通信接続の確立（接続要求）」、「データ送信（データ転送）」及び「通信接続の切断」を指示するために用いられるキューである。プロセッサ１１が送信指示キュー１２７に対して前記３つの指示を書き込み、送信指示キュー１２７に書き込まれた指示をＮＩＣ１３が送信指示キュー１２７から読み出すことで、プロセッサ１１からＮＩＣ１３に対して３つの指示が通知される。ＮＩＣ１３は、プロセッサ１１からの指示を、送信指示キュー１２７を介して受け取ると、その指示に応じた送信パケットを作成し、作成した送信パケットを、ネットワーク２０を介して通信接続相手のＮＩＣ１３へ送信する。この送信パケットには、例えば、「接続要求パケット」、「接続応答パケット」、「転送データパケット」、「切断通知パケット」などがある。
【００３５】
図６は、プロセッサ１１によって送信指示キュー１２７に書き込まれるディスクリプタのデータ構造を示す図である。図６（Ａ）〜（Ｃ）に示すように、本実施形態において送信指示キュー１２７に書き込まれるディスクリプタは３種類である。
【００３６】
図６（Ａ）に示す接続要求指示ディスクリプタ１３３１は、プロセッサ１１がＮＩＣ１３に対して「接続要求」を指示するために、プロセッサ１１が送信指示キュー１２７に書き込むディスクリプタである。接続要求指示ディスクリプタ１３３１は、指示ＩＤ１３３１ａ、接続元ポート番号１３３１ｂ、接続先アドレス１３３１ｃ及び接続先ポート番号１３３１ｄの各情報を設定するフィールドを備えている。指示ＩＤ１３３１ａは、プロセッサ１１がＮＩＣ１３に対して指示する「接続要求」に割り当てられたＩＤ(Identifier：識別子)である。接続元ポート番号１３３１ｂは、通信の接続元のポートのポート番号である。接続先アドレスは、通信の接続先のノード１０が使用するＯＳＩ参照モデルのネットワーク層のアドレスである。接続先ポート番号１３３１ｄは、通信の接続先のポートのポート番号である。ポート番号は、通信の接続先、すなわち、接続先アドレスを有するノード１０ｄで実行される、パケットの送信元のアプリケーションプログラムに割り当てられたポート番号に等しい。
【００３７】
図６（Ｂ）に示すデータ転送指示ディスクリプタ１３３２は、指示ＩＤ１３３２ａ、接続元ポート番号１３３２ｂ、データ先頭アドレス１３３２ｃ及びデータ長１３３２ｄの各情報を含んでいる。データ転送指示ディスクリプタ１３３２は、プロセッサ１１がＮＩＣ１３に対して「データ転送」を指示するために、プロセッサ１１が送信指示キュー１２７に書き込むディスクリプタである。指示ＩＤ１３３２ａは、プロセッサ１１がＮＩＣ１３に対して指示する「データ転送」に割り当てられたＩＤである。接続元ポート番号１３３
２ｂは、通信の接続元のポートのポート番号である。データ先頭アドレス１３３２ｃは、転送データパケット（データ通信パケット）に設定する送信データが格納されているポートバッファ１２５の先頭アドレスである。データ長１３３２ｄは、該ポートバッファ１２５に格納されているデータのサイズである。
【００３８】
図６（Ｃ）に示す切断通知送信指示ディスクリプタ１３３３は、指示ＩＤ１３３３ａと接続元ポート番号１３３３ｂを含む。切断通知送信指示ディスクリプタ１３３３は、プロセッサ１１がＮＩＣ１３に対して「通信接続の切断」を指示するために、プロセッサ１１が送信指示キュー１２７に書き込むディスクリプタである。指示ＩＤ１３３３ａは、プロセッサ１１がＮＩＣ１３に対して指示する「切断通知送信」に割り当てられたＩＤである。接続元ポート番号１３３３ｂは、通信の接続元のポートのポート番号である。
【００３９】
＜送信完了通知キュー１２８＞
送信完了通知キュー１２８は、ＮＩＣ１３が、プロセッサ１１から指示されたパケットの送信完了を、プロセッサ１１に通知するために用いられるキューである。ＮＩＣ１３は、プロセッサ１１から指示されたパケットの送信を完了すると、「送信完了ステータス」のディスクリプタを送信完了通知キュー１２８に書き込む。プロセッサ１１は、送信完了通知キュー１２８から送信完了ステータスを読み出すことで、ＮＩＣ１３がプロセッサ１１から指示されたたパケットを、通信接続相手のＮＩＣ１３に対して送信完了したことを確認する。
【００４０】
図７は、ＮＩＣ１３の送信完了通知キュー制御部１３４によって送信完了通知キュー１２８に書き込まれる送信完了ステータスのディスクリプタのデータ構造を示す図である。図７（Ａ）に示す接続要求送信指示完了ディスクリプタ１３５１は、プロセッサ１１からＮＩＣ１３に対して指示された「接続要求送信」に対するＮＩＣ１３の処理結果を示すディスクリプタである。接続要求送信指示完了ディスクリプタ１３５１は、ステータスコード１３５１ａを備えている。ステータスコード１３５１ａは、ＮＩＣ１３の処理結果が“正常”または“エラー”であるかを示すコードである。接続要求送信指示完了ディスクリプタ１３５１は、ＮＩＣ１３の送信完了通知キュー制御部１３４により、接続要求送信に対する「送信完了ステータス」として送信完了通知キュー１２８に書き込まれる。
ＮＩＣ１３は、プロセッサ１１が送信指示キュー１２７に書き込んだ「接続要求」を送信指示キュー１２７から読み出すと、接続要求パケットを、ネットワーク２０を介して接続先のＮＩＣ１３に送信する。そして、接続要求パケットの送信処理結果をステータスコード１３５１aに設定した接続要求送信指示完了ディスクリプタ１３５１を作成し、作成した接続要求ディスクリプタ１３５１を送信完了通知キュー１２８に書き込む。接続要求送信指示完了ディスクリプタ１３５１のステータスコード１３５１ａは、接続要求パケットの送信が正常に終了した場合には“成功”を示すコード（例えば“０”）に設定される。一方、接続要求パケットの送信が失敗した場合には、接続要求送信指示完了ディスクリプタ１３５１のステータスコード１３５１ａは“エラー”を示すコード（例えば“１”）が設定される。プロセッサ１１は、送信完了通知キュー１２８から接続要求送信指示完了ディスクリプタ１３５１を読み出す。そして、そのステータスコード１３５１ａを参照することで、ＮＩＣ１３に送信を指示した接続要求パケットが、接続先のノード１０のＮＩＣ１３に正常に送信されたか否かを確認する。
【００４１】
図７（Ｂ）に示すデータ転送指示完了ディスクリプタ１３５２は、プロセッサ１１からＮＩＣ１３に対して指示された「データ転送」に対するＮＩＣ１３の処理結果を示すディスクリプタである。データ転送指示完了ディスクリプタ１３５２は、ステータスコード１３５２ａと送信データ長１３５２ｂを備えている。ステータスコード１３５２ａは、ＮＩＣ１３の処理結果が“正常”または“エラー”であるかを示すコードである。また、送信データ長１３５２ｂは、転送データの長さを示す情報である。データ転送指示完了ディスクリプタ１３５２は、ＮＩＣ１３の送信完了通知キュー制御部１３４により、転送データ送信の「送信完了ステータス」として送信完了通知キュー１２８に書きこまれる。
【００４２】
ＮＩＣ１３は、プロセッサ１１が送信指示キュー１２７に書き込んだ「データ転送」を送信指示キュー１２７から読み出すと、データを転送するポートが“接続要求済み状態”であることを確認する。そして、ポートの状態の確認を終了すると、ポートバッファ１２５から転送データを読み出す。そして、読み出した転送データが設定された転送データパケットを生成し、生成した転送データパケットを、ネットワーク２０を介して、接続先のノード１０のＮＩＣ１３に送信する。ＮＩＣ１３は、転送データパケットの送信処理が終了すると、データ転送指示完了ディスクリプタ１３５２を作成する。データ転送指示完了ディスクリプタ１３５２は、転送データパケットの送信処理結果がステータスコード１３５２ａに設定され、転送データのデータ長が送信データ長１３５２ｂに設定されたものである。ＮＩＣ１３は、作成したデータ転送指示完了ディスクリプタ１３５２を送信完了通知キュー１２８に書き込む。
【００４３】
図７（Ｃ）に示す切断通知送信完了ディスクリプタ１３５３は、プロセッサ１１からＮＩＣ１３に対して指示された「切断通知送信」に対するＮＩＣ１３の処理結果を示すディスクリプタである。切断通知送信完了ディスクリプタ１３５３は、ステータスコード１３５３ａを備えている。ステータスコード１３５３ａは、プロセッサ１１からＮＩＣ１３に対して指示された「切断通知送信」に対するＮＩＣ１３の処理結果を示すコードである。切断通知送信完了ディスクリプタ１３５３は、ＮＩＣ１３により、切断通知送信の「送信完了ステータス」として、送信完了通知キュー１２８に書きこまれる。
【００４４】
ＮＩＣ１３は、プロセッサ１１が送信指示キュー１２７に書き込んだ「切断通知送信」を送信指示キュー１２７から読み出すと、切断通知パケットを、ネットワーク２０を介して接続先のＮＩＣ１３に送信する。そして、切断通知パケットの送信処理が終了すると、送信処理結果がステータスコード１３５３ａに設定された、切断通知送信完了ディスクリプタ１３５３を作成し、作成した切断通知送信完了ディスクリプタ１３５３を送信完了通知キュー１２８に書き込む。切断通知送信完了ディスクリプタ１３５３のステータスコード１３５３ａは、切断通知パケットの送信が正常に終了した場合には“成功”を示すコード（例えば“０”）に設定される。一方、接続要求パケットの送信に失敗した場合には、切断通知送信完了ディスクリプタ１３５３のステータスコード１３５３ａに“エラー”を示すコード（例えば“１”）が設定される。プロセッサ１１は、送信完了通知キュー１２８から切断通知送信完了ディスクリプタ１３５３を読み出す。そして、切断通知送信完了ディスクリプタ１３５３を参照して、ＮＩＣ１３に送信を指示した切断通知パケットが、接続先のノード１０のＮＩＣ１３に正常に送信されたか否かを確認する。
【００４５】
＜受信通知キュー１２９＞
受信通知キュー１２９は、ＮＩＣ１３が、通信接続相手のＮＩＣ１３から受信したパケットの種類を、プロセッサ１１に通知するために使用されるキューである。ＮＩＣ１３は、通信接続相手のＮＩＣ１３からパケットを受信すると、その受信パケットの種類に応じた受信ステータスを受信通知キュー１２９に書き込む。プロセッサ１１は、受信通知キュー１２９から受信ステータスを読み出し、読み出した受信ステータスの内容を分析することで、通信接続相手のノード１０のプロセッサ１１が送信してきた通知の内容を判断する。受信パケットの種類は、「接続要求パケット」、「接続応答パケット」、「転送データパケット」、「切断通知パケット」などである。尚、これらのパケットは制御パケットに属する。
【００４６】
図８は、ＮＩＣ１３の受信完了通知キュー制御部１３７によって受信通知キュー１２９に書きこまれる受信ステータスを示すディスクリプタのデータ構造を示す図である。図８
（Ａ）〜（Ｄ）に示すように、パケットの送信側または受信側のＮＩＣ１３の受信通知キュー１２９に書き込まれるディスクリプタは主に４種類である。
【００４７】
｛接続要求ディスクリプタ｝
図８（Ａ）に示す接続要求ディスクリプタ１３７１は、ＮＩＣ１３が接続要求パケットを受信した際に、通信接続相手からの「接続要求」を自ノード１０のプロセッサ１１に通知するために受信通知キュー１２９に書き込むディスクリプタである。
【００４８】
接続要求ディスクリプタ１３７１は、受信通知ＩＤ１３７１ａ、ポート番号１３７１ｂ、要求元アドレス１３７１ｃ及び要求元ポート番号１３７１ｄの各情報を含んでいる。
受信通知ＩＤ１３７１ａは、「接続要求」の受信通知に割当てられたＩＤ（識別子）である。ポート番号１３７１ｂは、制御パケットに設定されている「接続先ポート番号」に等しい。要求元アドレス１３７１ｃは、接続要求パケットに設定されている「接続元アドレス」に等しい。要求元ポート番号１３７１ｄは、接続要求パケットに設定されている「接続元ポート番号」に等しい。尚、接続要求パケットの詳細については後述する。
【００４９】
｛接続応答ディスクリプタ｝
図８（Ｂ）に示す接続応答ディスクリプタ１３７２は、ＮＩＣ１３が、「接続応答パケット」を受信した際に、その受信をプロセッサ１１に通知するために、受信通知キュー１２９に書き込むディスクリプタである。
【００５０】
接続応答ディスクリプタ１３７２は、受信通知ＩＤ１３７２ａ、ポート番号１３７２ｂ、応答元アドレス１３７２ｃ及び応答元ポート番号１３７２ｄの各情報を含んでいる。
受信通知ＩＤ１３７２ａは、「接続応答」の受信通知ＩＤに割り当てられたＩＤである。ポート番号１３７２ｂは、接続応答パケットの「接続先ポート番号」のフィールドに設定されているポート番号である。応答元アドレス１３７２ｃは、接続応答パケットの「接続元アドレス」のフィールドに設定されているアドレスである。応答元ポート番号１３７２ｄは、接続応答パケットの「接続元ポート番号」のフィールドに設定されているポート番号である。尚、接続応答パケットの詳細については後述する。
【００５１】
｛データ転送ディスクリプタ｝
図８（Ｃ）に示すデータ転送ディスクリプタ１３７３は、ＮＩＣ１３が、「転送データパケット」を受信した際に、その受信をプロセッサ１１に通知するために、受信通知キュー１２９に書き込むディスクリプタである。データ転送ディスクリプタ１３７３は、受信通知ＩＤ１３７３ａ、ポート番号１３７３ｂ、データ先頭アドレス１３７３ｃ及びデータ長１３７３ｄの各情報を含んでいる。受信通知ＩＤ１３７３ａは、「転送データ」の受信通知に割り当てられたＩＤである。ポート番号１３７３ｂは、転送データパケットに設定されている「接続先ポート番号」に等しい。データ先頭アドレス１３７３ｃは、ＮＩＣ１３によって転送データパケットから取り出されてポートバッファ１２５に格納された転送データのポートバッファ１２５内での先頭位置を示すアドレスである。データ長１３７３ｄは、ポートバッファ１２５に格納されている転送データのデータ長である。尚、転送データパケットの詳細については後述する。
【００５２】
｛切断通知ディスクリプタ｝
図８（Ｄ）に示す切断通知ディスクリプタ１３７４は、ＮＩＣ１３が、「切断通知パケット」を受信した際に、その受信をプロセッサ１１に通知するために、受信通知キュー１２９に書き込むディスクリプタである。受信通知ＩＤ１３７４ａは、「切断通知」の受信通知に割当てられたＩＤである。ポート番号１３７４ｂは、切断通知の受信先のポート番号（接続元ポート番号）である。これは、切断通知パケットに設定されている「接続元ポート番号」に等しい。
【００５３】
｛制御パケット｝
図９は、前記制御パケットのデータ構造を示す図である。
図９に示すように、制御パケット５０は、ネットワーク層ヘッダ５１０とトランスポート層ヘッダ５２０を備えている。ネットワーク層ヘッダ５１０は、ＯＳＩ参照モデルのネットワーク層のヘッダに相当するヘッダである。トランスポート層ヘッダ５２０は、ＯＳＩ参照モデルのトランスポート層のヘッダに相当するヘッダである。
【００５４】
ネットワーク層ヘッダ５１０は、パケット長５１１、接続先アドレス５１２及び接続元アドレス５１３を備えている。パケット長５１１は、制御パケット５００全体のサイズ（例えば、バイト長）である。接続先アドレス５１２は、制御パケット５０の送信先のノード１０のネットワーク層のアドレス（例えば、ＩＰアドレス）である。接続元アドレス５１３は、制御パケット５０を送信するノード１０のネットワーク層のアドレス（例えば、ＩＰアドレス）である。
【００５５】
トランスポート層ヘッダ５２０は、接続先ポート番号５２１、接続元ポート番号５２２、プロトコル種別５２３及びパケット種別５２４を備えている。接続先ポート番号５２１は、通信接続の接続先のアプリケーションプログラムのポート番号である。接続元ポート番号５２２は、通信接続の接続元のアプリケーションプログラムのポート番号である。プロトコル種別５２３は、通信接続で使用するトランスポート層のプロトコルの種別を示す情報である。パケット種別５２４は、通信接続で使用される制御パケットの種別を示す情報である。本実施形態が使用する制御パケットは、「接続要求パケット」、「接続応答パケット」及び「切断通知パケット」などである。プロトコル種別５２３は、これらの制御パケットの種別を示す。換言すれば、制御パケット５０を受信したとき、パケット種別５２４に設定されている情報を参照することで、制御パケット５０の種別を判別することができる。
【００５６】
｛転送データパケット｝
図１０は、前記転送データパケットのデータ構造を示す図である。
図１０に示すように、転送データパケット（データ通信パケット）６０は、ネットワーク層ヘッダ６１０、トランスポート層ヘッダ６２０及びトランスポート層データ６３０を備えている。
【００５７】
ネットワーク層ヘッダ６１０は、パケット長６１１、接続先アドレス６１２及び接続元アドレス６１３を備えている。パケット長６１１は、転送データパケット全体のサイズ（例えば、バイト長）を示す情報である。接続先アドレス６１２と接続元アドレス６１３は、それぞれ、制御パケット５０のネットワーク層ヘッダ５１０の接続先アドレス５１２と接続元アドレス５１３と同様である。
【００５８】
トランスポート層ヘッダ６２０は、接続先ポート番号６２１、接続元ポート番号６２２、プロトコル種別６２３及びパケット種別６２４を備えている。接続先ポート番号６２１、接続元ポート番号６２２及びプロトコル種別６２３は、制御パケット５０のトランスポート層ヘッダ５２０の接続先ポート番号５２１、接続元ポート番号５２２及びプロトコル種別５２３と同様である。パケット種別６２４は、転送データパケット６０の種別を示す情報である。
【００５９】
トランスポート層データ６３０は、転送データパケット６０によって運ばれるトランスポート層のプロトコル（例えば、ＴＣＰ(Transmission Control Protocol)など）のデータである。
【００６０】
［動作］
次に、本実施形態の動作を説明する。
＜全体動作＞
図１１は、本実施形態における片方向通信の動作を示すシーケンス図である。
【００６１】
図１１は、本実施形態のシステムにおいて、図1に示す接続元のノード１０（以下、ノード１０ｓと記載）から図1に示す接続先のノード１０（以下、ノード１０ｄと記載）へデータが転送される場合のシーケンスを示している。図１１において、接続元のノード１０ｓのプロセッサ１１とＮＩＣ１３は、それぞれ、プロセッサ１１ｓ、ＮＩＣ１３ｓと表記されている。また、接続先のノード１０ｄのプロセッサ１１とＮＩＣ１３は、それぞれ、プロセッサ１１ｄ、ＮＩＣ１３ｄと表記されている。
【００６２】
接続元のノード１０ｓのプロセッサ１１ｓで実行中のポート（アプリケーション）から接続先のノード１０ｄのプロセッサ１１ｄで実行中のポート（アプリケーション）へのデータ転送は、以下に述べる手順にしたがって行なわれる。
（１）接続元のノード１０ｓのプロセッサ１１ｓ（以下、接続元プロセッサ１１ｓと記載）は、自ノード１０ｓのＮＩＣ１３ｓ（以下、接続元ＮＩＣ１３ｓと記載）に「接続要求指示」を通知する。
（２）接続元ＮＩＣ１３ｓは、接続元プロセッサ１１ｓから接続要求指示を受け取ると、「接続要求」を、接続先のノード１０ｄのＮＩＣ１３ｄ（以下、接続先ＮＩＣ１３ｄと記載）に送信する。
（３）接続先ＮＩＣ１３ｄは、接続元ＮＩＣ１３ｓから接続要求を受け取ると、接続許可の応答（接続許可応答）を、接続先ＮＩＣ１３ｓに返信する。
（４）接続先ＮＩＣ１３ｄは、続いて、自ノード１０ｄのプロセッサ１１ｄ（以下、接続先プロセッサ１１ｄ）に、接続要求の受信を通知する。
（５）接続元ＮＩＣ１３ｓは、接続先ＮＩＣ１３ｄから接続許可応答を受け取ると、接続許可応答の受信（接続応答受信）を接続元プロセッサ１１ｓに通知する。
（６）接続元プロセッサ１１ｓは、接続元ＮＩＣ１３ｓからの接続応答受信の通知を受け取ると、接続元ＮＩＣ１３ｓに「データ転送」を指示する。
（７）接続元ＮＩＣ１３ｓは、接続元プロセッサ１１ｓからのデータ転送指示を受け取ると、接続元プロセッサ１１ｓにより指示された「転送データ」を接続先ＮＩＣ１３ｄに送信する。
（８）接続先ＮＩＣ１３ｄは、接続元ＮＩＣ１３ｓから転送データを受信すると、その受信（転送データ受信）を接続先プロセッサ１１ｄに通知する。
接続元プロセッサ１１ｓが、全ての転送データを接続先プロセッサ１１ｄに送信し終わるまで、上記（６）〜（８）の手順を繰り返す。
（９）接続元プロセッサ１１ｓは、全転送データを接続先プロセッサ１１ｄに送信すると、「切断通知」の送信を接続元ＮＩＣ１３ｓに指示する。
（１０）接続元ＮＩＣ１３ｓは、接続元プロセッサ１１ｓからの切断通知送信指示を受け取ると、「切断通知」を接続先ＮＩＣ１３ｄに送信する。
（１１）接続先ＮＩＣ１３ｄは、接続元ＮＩＣ１３ｓから切断通知を受信すると、その受信（切断通知受信）を接続先プロセッサ１１ｄに通知する。
【００６３】
上記（１）〜（１１）の手順の実行により、接続元ＮＩＣ１３ｓと接続先ＮＩＣ１３ｄとの間に通信接続の接続が確立され、接続元プロセッサ１１ｓから接続先プロセッサ１１ｄへデータが転送される。そして、接続元プロセッサ１１ｓが全ての転送データを接続先プロセッサ１１ｄに送信すると、接続元ＮＩＣ１３ｓと接続先ＮＩＣ１３ｄ間の通信接続が切断される。通信接続は、ＯＳＩ参照モデルのトランスポート層の通信接続である。
【００６４】
上述したように、本実施形態は、データ転送のための通信の接続と確立の処理を、接続
元ＮＩＣ１３ｓ及び接続先ＮＩＣ１３ｄが実行する。このとき、プロセッサ１１とＮＩＣ１３間の指示や通知は、上述した、ポートテーブル１２１、ポートコンテキスト１２３、ポートバッファ１２５を用いて行なわれる。これらの構成要素１２１、１２３、１２５は、ポート番号に関連付けられて管理される。
【００６５】
次に、上記（１）〜（１１）のシーケンスにおける各手順の動作を詳細に説明する。
＜接続要求送信＞
図１２は、接続元プロセッサ１１ｓが、通信接続を確立するために、接続元ＮＩＣ１３ｓに対して「接続要求」を指示する動作を示す図である。図１２に示す処理手順を説明する。
（１）初期設定
接続元プロセッサ１１ｓは、ポートコンテキスト１２３を主記憶１２（以後、主記憶１２ｓと記載）上に確保し、そのポートコンテキスト１２３の通信状態１２３２を“待機状態”に設定する（（１）−１）。そして、このポートコンテキスト１２３を主記憶１２s上のポートテーブル１２１に登録する（（１）−２）。
（２）接続要求指示
接続元プロセッサ１１ｓは、接続要求送信指示のディスクリプタ１３３１を送信指示キュー１２７に書き込む。
（３）接続要求送信指示読み出し
接続元ＮＩＣ１３ｓは、送信指示キュー１２７から接続要求送信指示のディスクリプタ１３３１を読み出す。
（４）ポートテーブル読み出し
接続元ＮＩＣ１３ｓは、接続要求送信指示のディスクリプタ１３３１から接続元ポート番号１３３１ｂを読み出す。そして、読み出したポート番号１３３１ｂに対応するポートテーブル１２１のポートエントリ１２１１から接続元ポートのポートコンテキスト１２３の格納アドレスを読み出す。
（５）ポートコンテキスト読み出し
接続元ＮＩＣ１３ｓは、読み出した格納アドレスからポートコンテキスト１２３を読み出し、ポートコンテキスト１２３に書き込まれた通信状態１２３２が“待機状態”に設定されていることを確認する。
（６）接続要求パケット送信
接続元ＮＩＣ１３ｓは、接続先ＮＩＣ１３ｄ宛の接続要求パケット５０ｃｄを作成し、作成した接続要求パケット５０ｃｄをネットワーク２０に送信する。接続要求パケット５０ｃｄは、図９に示す形式の制御パケット５０であり、パケット種別６２４には“接続要求”が設定されている。
（７）ポートコンテキスト更新
接続元ＮＩＣ１３ｓは、ポートコンテキスト１２３の通信状態１２３２を“接続要求済み状態”に更新する。
（８）送信完了通知書き込み
接続元ＮＩＣ１３ｓは、送信完了通知キュー１２８に“送信完了ステータス”のディスクリプタを書き込む。送信完了ステータスのディスクリプタは、図７（Ａ）に示す形式のディスクリプタ１３５１である。
（９）送信完了通知読み出し
接続元プロセッサ１１ｓは、送信完了通知キュー１２８から送信完了ステータスのディスクリプタを読み出す。接続元プロセッサ１１ｓは、送信完了ステータスのディスクリプタを参照して、接続先プロセッサ１１ｄに接続要求パケット５０ｃｄが正常に送信されたか調べる。接続元プロセッサ１１ｓは、送信完了ステータスが“正常”に設定されていれば、接続先プロセッサ１１ｄに接続要求パケット５０ｃｄが正常に送信されたと判断する。一方、送信完了ステータスが“エラー”に設定されていれば、接続元ＮＩＣ１３ｓが接続要求パケット５０ｃｄの送信に失敗したと判断する。
【００６６】
＜接続要求受信＞
図１３は、接続先ＮＩＣ１３ｄが、接続元ＮＩＣ１３ｓから接続要求パケット５０ｃｄを受信して、接続先ＮＩＣ１３ｄに「接続許可」の応答パケットを送信する動作を示す図である。図１３に示す処理手順を説明する。
（１）初期設定
接続先ＮＩＣ１３ｄは、ポートコンテキスト１２３を主記憶１２（以後、主記憶１２ｄと記載）上に確保し、ポートコンテキスト１２３の通信状態１２３２を“待機状態”に設定する（（１）−１）。そして、ポートコンテキスト１２３を主記憶１２ｄ上のポートテーブル１２１に登録する（（１）−２）。
（２）接続要求パケット受信
接続先ＮＩＣ１３ｄは、ネットワーク２０から、接続元ＮＩＣ１３ｓが送信した接続要求パケット５０ｃｄを受信する。
（３）ポートテーブル読み出し
接続先ＮＩＣ１３ｄは、接続要求パケット５０ｃｄに書き込まれた接続先ポート番号１３３１ｄのフィールドからポート番号を読み出し、ポートテーブル１２１のポート番号に対応するポートエントリ１２１１を参照する。そして、ポートエントリ１２１１の「Context Address」に設定されている主記憶１２ｄのアドレスを読み出す。このアドレスは、ポート番号が割り当てられている接続先ポートのポートコンテキスト１２３の主記憶１２ｄ上の格納アドレス（コンテキスト格納アドレス）である。
（４）ポートコンテキスト読み出し
接続先ＮＩＣ１３ｄは、主記憶１２ｄ上の接続先ポートのコンテキスト格納アドレスから、接続先ポートのポートコンテキスト１２３を読み出し、その通信状態１２３２が“待機状態”となっていることを確認する。
（５）接続応答パケット送信
接続先ＮＩＣ１３ｄは、通信状態の確認後、接続許可の応答パケット５０ｃａを作成し、作成した応答パケット５０ｃａをネットワーク２０に送信する。接続許可の応答パケット５０ｃａは図９に示す形式の制御パケット５０であり、そのパケット種別６２４には“接続許可”が設定されている。
（６）ポートコンテキスト更新
接続先ＮＩＣ１３ｄは、ポートコンテキスト１２３を“接続要求済み状態”に更新する。
（７）受信通知書き込み
接続先ＮＩＣ１３ｄは、主記憶１２ｄ上の受信通知キュー１２９に“受信ステータス”のディスクリプタを書き込む。このディスクリプタは、図８（Ａ）に示すディスクリプタ１３７１である。
（８）受信通知読み出し
接続先プロセッサ１１ｄは、受信通知キュー１２９から受信ステータスのディスクリプタを読み出す。接続先プロセッサ１１ｄは、受信ステータスが“正常”に設定されているか調べる。そして、受信ステータスが“正常”に設定されていれば、接続先ポＮＩＣ１３ｄが、接続元プロセッサ１１ｓから送信された接続要求パケット５０ｃｄを正常に受信したと判断する。一方、受信ステータスが“エラー”であれば、前記接続要求パケット５０ｃｄの受信に失敗したと判断する。
【００６７】
尚、接続先ＮＩＣ１３ｄは、上記（４）において接続先ポートのポートコンテキスト１２３の通信状態１２３２が“待機状態”となっていないと認識した場合には、上記（５）において接続拒否の応答パケットをネットワーク２０に送信する。
【００６８】
＜接続要求応答受信＞
図１４は、接続元ＮＩＣ１３ｓが、接続先ＮＩＣ１３ｄから「接続許可」の応答パケッ
トｃａを受信したときの動作を示す図である。図１４に示す処理手順を説明する。
（１）接続応答パケット受信
接続元ＮＩＣ１３ｓは、ネットワーク２０から「接続許可」の応答パケット５０ｃａを受信する。
（２）ポートテーブル読み出し
接続元ＮＩＣ１３ｓは、受信した応答パケット５０ｃａの接続先ポート番号１３３１ｄのフィールドからポート番号を読み出す。そして、読み出したポート番号に対応する主記憶１２ｓ上のポートテーブル１２１のポートエントリ１２１１の「Context Address」のフィールドからアドレスを読み出す。
（３）ポートコンテキスト読み出し
接続元ＮＩＣ１３ｓは、読み出した主記憶１２ｓ上のアドレスをアクセスし、そのアドレスからポートコンテキスト１２３を読み出す。そして、読み出したポートコンテキスト１２３の通信状態１２３２が“接続要求済み状態”であることを確認する。
（４）ポートコンテキスト更新
接続元ＮＩＣ１３ｓは、通信状態の確認後、主記憶１２ｓ上のポートコンテキスト１２３の通信状態１２３２を“接続済み状態”に更新する。
（５）受信通知書き込み
接続元ＮＩＣ１３ｓは、主記憶１２ｓ上の受信通知キュー１２９に「受信ステータス」のディスクリプタを書き込む。この受信ステータスのディスクリプタは、図８（Ａ）に示す形式のディスクリプタ１３７１である。
（６）受信通知読み出し
接続元プロセッサ１１ｓは、受信通知キュー１２９から「受信ステータス」のディスクリプタを読み出す。接続先プロセッサ１１ｓは、受信ステータスが“正常”に設定されているか調べる。そして、受信ステータスが“正常”に設定されていれば、接続先プロセッサ１１ｓが、「接続要求」を許可したと判断する。これにより、接続元ポートと接続先ポートとの間に通信接続が確立する。
【００６９】
接続元ＮＩＣ１３ｓが、上記（１）において前記接続拒否の応答パケットを受信し、かつ、上記（３）において前記接続先ポート番号１３３１ｄに対応するポートコンテキスト１２３の通信状態１２３２が“接続済み状態”になっていることを確認したとする。この場合、接続元ＮＩＣ１３ｓは、該ポートコンテキスト１２３の通信状態１２３２を“待機状態”に戻す。この場合、接続先ＮＩＣ１３ｓは、「接続許可」の応答パケットを、接続元ＮＩＣ１３ｓに送信しない。
【００７０】
＜転送データ送信＞
図１５は、接続済みポート(接続元ポート)から転送データを送信する動作を示す図である。図１５の処理手順を説明する。
（１）転送データ書き込み
接続元プロセッサ１１ｓは、主記憶１２ｓ上のポートバッファ１２５に「転送データ」を格納する。
（２）データ転送指示
接続元プロセッサ１１ｓは、データ転送指示のディスクリプタ１１３２（図６（Ｂ）参照）を、主記憶１２ｓ上の送信指示キュー１２７に書き込む。
（３）送信指示読み出し
接続元ＮＩＣ１３ｓは、送信指示キュー１２７に書き込まれた送信指示キュー１２７からデータ転送指示のディスクリプタ１１３２を読み出す。
（４）ポートテーブル読み出し
接続元ＮＩＣ１３ｓは、ディスクリプタ１１３２の接続元ポート番号１３３２ｂのフィールドに設定されている接続元ポート番号を基に、接続先ポートのポートコンテキスト１２３を格納する主記憶１２ｓ上のアドレスをポートテーブル１２１から読みだす。より詳細に説明すると、前記ポート番号に対応するポートテーブル１２１のポートエントリ１２１１の内容を読み出す。そして、そのポートエントリ１２１１の「Context Address」のフィールドに設定されているアドレスを、接続先ポートのポートコンテキスト１２３の格納アドレスとみなす。
（５）ポートコンテキスト読み出し
接続元ＮＩＣ１３ｓは、主記憶１２ｓ上の格納アドレスからポートコンテキスト１２３を読みだし、その通信状態１２３２が“接続済み状態”に設定されていることを確認する。
（６）転送データ読み出し
接続元ＮＩＣ１３ｓは、ポートエントリ１２１１の「Buffer Address」のフィールドに設定されているアドレスと「Buffer Size」に設定されているバッファサイズを基に、主記憶１２ｓ上のポートバッファ１２５から転送データを読みだす。
（７）転送データパケット送信
接続元ＮＩＣ１３ｓは、図１０に示す形式の転送データパケット６０を作成し、作成した転送データパケット６０をネットワーク２０に送信する。
（８）送信完了通知書き込み
接続元ＮＩＣ１３ｓは、送信完了ステータスのディスクリプタを送信完了通知キュー１２８に書き込む。この送信完了ステータスのディスクリプタは、図７（Ｂ）に示す形式のディスクリプタ１３５２である。
（９）送信完了通知読み出し
接続元プロセッサ１１ｓは、送信完了通知キュー１２８から送信完了ステータスを読み出す。接続元プロセッサ１１ｓは、送信完了ステータスが“正常”に設定されているか調べる。そして、送信完了ステータスが“正常”に設定されていれば、接続元ＮＩＣ１３ｄが、転送データパケット６０を正常に送信したと判断する。この場合、接続元ポートから接続先ポート宛の転送データの送信は正常に行なわれたことになる。一方、接続先プロセッサ１１ｓは、送信完了ステータスが“エラー”に設定されていれば、接続元ＮＩＣ１３ｓが転送データパケット６０の送信に失敗したと判断する。この場合、接続元ポートから接続先ポート宛の転送データパケット６０の送信は失敗したことになる。
【００７１】
＜転送データ受信＞
図１６は、接続済みの接続先ポートが、接続元ポートが送信した転送データを受信する動作を示す図である。図１６に示す処理手順を説明する。
（１）転送データパケット受信
接続先ＮＩＣ１３ｄは、ネットワーク２０から、接続元ＮＩＣ１３ｓが送信した転送データパケット６０を受信する。
（２）ポートテーブル読み出し
接続先ＮＩＣ１３ｄは、受信した転送データパケット６０から接続先ポート番号６２１を取り出し、主記憶１２ｄ上のポートテーブル１２１の接続先ポート番号６２１に対応するポートエントリ１２１１から「Context Address」（コンテキスト格納アドレス）を読みだす。
（３）ポートコンテキスト読み出し
接続先ＮＩＣ１３ｄは、主記憶１２ｄ上のコンテキスト格納アドレスからポートコンテキスト１２３を読み出す。そして、ポートコンテキスト１２３の通信状態１２３２を参照して、転送データパケットを受信したポートが“接続済み状態”であることを確認する。（４）転送データ書き込み
接続先ＮＩＣ１３ｄは、転送データパケット６０に格納されているデータ６３０（転送データ）を読み出し、読み出した転送データを、主記憶１２ｄ上のポートバッファ１２５に格納する。
（５）受信通知書き込み
接続先ＮＩＣ１３ｄは、受信ステータスを、主記憶１２ｄ上の受信通知キュー１２９に
書き込む。この受信ステータスは、図８（Ｂ）に示すデータ転送ディスクリプタ１３７３である。
（６）受信通知読み出し
接続先プロセッサ１１ｄは、受信通知キュー１２９から受信ステータスを読み出す。
（７）転送データ読み出し
接続先プロセッサ１１ｄは、受信ステータスのデータ先頭アドレス１３７３ｃとデータ長１３３２ｄを参照して、ポートバッファ１２５から転送データを読み出す。これにより、接続先ポートは、接続元ポートが送信した転送データを受信する。
【００７２】
＜切断通知送信＞
図１７は、接続済みの接続元ポートが、接続先ポートに切断通知を送信する動作を示す図である。図１７に示す処理手順を説明する。
（１）切断通知送信指示
接続元プロセッサ１１ｓは、「切断通知送信指示」のディスクリプタを、主記憶１２ｓ上の送信指示キュー１２７に書き込む。この切断通知送信指示のディスクリプタは、図６（Ｃ）に示す切断通知送信指示ディスクリプタ１３３３と同様である。
（２）切断通知送信指示読み出し
接続元ＮＩＣ１３ｓは、送信指示キュー１２７から切断通知送信指示ディスクリプタ１３３３を読み出す。
（３）ポートテーブル読み出し
接続元ＮＩＣ１３ｓは、読み出した切断通知送信指示のディスクリプタ１３３３から接続元ポート番号１３３３ｂを読み出し、ポートテーブル１２１の接続元ポート番号１３３３ｂに対応するポートエントリ１２１１から「Context Address」（コンテキスト格納アドレス）を読み出す。
（４）ポートコンテキスト読み出し
接続元ＮＩＣ１３ｓは、主記憶１２ｓのコンテキスト格納アドレスからポートコンテキスト１２３を読み出し、読み出したポートコンテキスト１２３の通信状態１２３２が“接続済み状態”であることを確認する。
（５）切断通知パケット送信
接続元ＮＩＣ１３ｓは、切断通知パケット５０ｄｃを作成し、作成した切断通知パケット５０ｄｃをネットワーク２０に送信する。切断通知パケット５０ｄｃは、図９に示す形式の制御パケット５０であり、そのパケット種別６２４は“切断通知”に設定されている。
（６）ポートコンテキスト更新
接続元ＮＩＣ１３ｓは、ポートコンテキスト１２３の通信状態１２３２を“切断通知済み状態”に更新する。
（７）送信完了通知書き込み
接続元ＮＩＣ１３ｓは、「送信完了ステータス」を主記憶１２ｓ上の送信指示キュー１２７に書き込む。この送信完了ステータスは、図７（Ｃ）に示す切断通知送信完了ディスクリプタ１３５３と同様である。
（８）送信完了通知読み出し
接続元プロセッサ１１ｓは、送信指示キュー１２７から送信完了ステータスを読み出す。接続元プロセッサ１１ｓは、送信完了ステータスが“正常”に設定されていれば、接続元ＮＩＣ１３ｓが、切断通知パケット５０ｄｃを接続先ＮＩＣ１３ｄに正常に送信したと判断する。この場合、接続元ポートから接続先ポート宛に切断通知が正常に送信される。一方、接続元プロセッサ１１ｓは、送信完了ステータスが“エラー”に設定されていれば、接続元ＮＩＣ１３ｓが切断通知パケット５０ｄｃの送信に失敗したと判断する。この場合、接続元ポートから接続先ポートには切断通知は送信されない。
【００７３】
＜切断通知受信＞
図１８は、接続済みの接続先ポートが、接続元ポートから切断通知を受信する動作を示す図である。図１８に示す処理手順を説明する。
（１）切断通知パケット受信
接続先ＮＩＣ１３ｄは、ネットワーク２０から切断通知パケット５０ｄｃを受信する。（２）ポートテーブル読み出し
接続先ＮＩＣ１３ｄは、受信した切断通知パケット５０ｄｃから接続先ポート番号６２１を読み出す。そして、主記憶１２ｄ上のポートテーブル１２１の接続先ポート番号６２１に対応するポートエントリ１２１１から「Context Address」（コンテキスト格納アドレス）を読み出す。
（３）ポートコンテキスト読み出し
接続先ＮＩＣ１３ｄは、主記憶１２ｄのコンテキスト格納アドレスからポートコンテキスト１２３（接続先ポートのコンテキスト）を読み出し、その通信状態１２３２が“接続済み状態”に設定されていることを確認する。
（４）ポートコンテキスト更新
接続先ＮＩＣ１３ｄは、ポートコンテキスト１２３の通信状態１２３２を“切断通知受信済み状態”に更新する。
（５）受信通知書き込み
接続先ＮＩＣ１３ｄは、「受信ステータス」を主記憶１２ｄ上の受信通知キュー１２９に書き込む。受信ステータスのディスクリプタは、図８（Ｃ）に示すディスクリプタ１３７４と同様である。
（６）受信通知読み出し
接続先プロセッサ１１ｄは、受信通知キュー１２９から受信ステータスを読み出す。
接続先プロセッサ１１ｄは、受信ステータスが“正常”に設定されていれば、接続先ＮＩＣ１３ｄが前記切断通知パケット５０ｄｃを正常に受信したと判断する。これにより、接続元ポートと接続先ポートとの間の通信接続は切断される。一方、接続先プロセッサ１１ｓは、受信ステータスが“エラー”に設定されていれば、接続先ＮＩＣ１３ｄが切断通知パケット５０ｄｃの受信に失敗したと判断する。この場合、接続元ポートと接続先ポートとの間の通信接続は切断されない。
【００７４】
ところで、本実施形態のＮＩＣ１３は、片方向通信の接続の確立を行なう。本実施形態のＮＩＣ１３を利用して双方向通信を行なう場合、プロセッサは、ＮＩＣ１３を利用して、２つの片方向通信の確立を行うだけでよい。このため、本実施形態のＮＩＣ１３を用いて双方向通信を実施する場合、通常のＮＩＣを利用する場合に比べ、プロセッサの処理の負担が軽減される。また、本実施形態は、ポートコンテキスト１２３により、通信の接続が切断された状態を定義することが可能である。このため、プロセッサ１１は、ポートコンテキスト１２３を参照することにより、通信資源の回収などの負荷の高い処理を遅延させ、それらの処理を、適切なタイミングでまとめて実行することができる。
【００７５】
また、本実施形態は、プロセッサ１１の主記憶１２上に設けられたポートコンテキスト１２３に基づいて、通信接続の確立処理を行うので、従来の通信処理を行なうオフロードエンジンを備えたＮＩＣよりも、多数の通信接続を維持することができる。より詳細に説明すると、記憶容量の大きい主記憶１２上にポートコンテキスト１２３を保持するので、維持可能な通信接続数をより多くできる。また、本実施形態のＮＩＣ１３は、プロセッサ１１ｄの主記憶１２を利用してポートの通信接続を管理するので、該オフロードエンジンを備える従来のＮＩＣと比べて、ハードウェアのコストが小さいという利点を有する。また、本実施形態は、Ｗｅｂアプリケーションのように、通信接続の確立と切断が多発するアプリケーションに適用した場合、上記オフロードエンジンを備えた従来のＮＩＣと同等のホストプロセッサの処理の負荷の低減効果を期待できる。
【００７６】
本発明は、上述した実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範
囲内で種々に変形して実施することができる。
例えば、上記実施形態では、ポートコンテキスト１２３及びポートテーブル１２１はプロセッサ１１の主記憶１２ｄ上に設けられているが、本発明の構成は、これに限定されるものではない。例えば、ポートコンテキスト及びポートテーブルは、プロセッサ内の専用レジスタ内または専用メモリ上に設けられてもよい。この場合、該専用レジスタ及び該専用メモリは、ネットワークインターフェース装置が直接アクセス可能な形態で設置されることが望ましい。
【００７７】
以上の実施形態に関し、更に、以下の付記を開示する。
（付記１）
コンピュータに接続され、ネットワークを介する通信を行なうインターフェース装置であって、
通信接続をポート番号により識別し、ポート毎の通信接続の状態を、記憶手段に格納されている、ポート番号に対応付けられたコンテキストで管理する第１の管理手段と、
該コンテキストの格納状態を管理する第２の管理手段と、
前記コンテキストを参照して、ポート間の通信接続の確立処理と切断処理を実行する制御手段と、
を備えるネットワークインターフェース装置。
（付記２）
付記１記載のネットワークインターフェース装置であって、
前記制御手段は、
前記コンピュータのプロセッサから接続要求パケットの送信を指示された場合、該指示において送信元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“待機状態”に設定されていれば、接続要求パケットを前記ネットワークに送信する。
（付記３）
付記２記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続要求パケットを送信した後、送信完了を前記プロセッサに通知する。
（付記４）
付記２記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続要求パケットを受信した場合、そのパケットにおいて接続先として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“待機状態”に設定されていれば、接続許可の応答パケットを前記ネットワークに送信して該コンテキストを“接続済み状態”に更新し、前記コンテキストが“待機状態”に設定されていなければ、接続拒否の応答パケットを前記ネットワークに送信する。
（付記５）
付記４記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続要求パケットの受信及び前記応答パケットの送信を行い、必要に応じて前記コンテキストの更新を行い、その後、前記プロセッサに前記接続要求パケットの受信を通知する。
（付記６）
付記４記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続許可の応答パケットを受信した場合、該応答パケットにおいて接続元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続要求済み状態”に設定されている場合には該コンテキストを“接続済み状態”に更新する。
（付記７）
付記４記載のネットワークインターフェース装置であって、
前記制御手段は、前記接続拒否の応答パケットを受信した場合、該応答パケットにおい
て接続元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続済み状態”に設定されている場合には、該コンテキストを“待機状態”に戻す。
（付記８）
付記６または付記７記載のネットワークインターフェース装置であって、
前記制御手段は、前記応答パケットの受信及び前記コンテキストの更新が終了した後、前記プロセッサに前記応答パケットの受信を通知する。
（付記９）
付記１記載のネットワークインターフェース装置であって、
前記制御手段は、コンピュータのプロセッサから切断通知パケットの送信を指示された場合、該指示において接続元として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続済み状態”に設定されている場合には切断通知パケットを前記ネットワークに送信する。
（付記１０）
付記９記載のネットワークインターフェース装置であって、
前記制御手段は、前記切断通知パケットを受信した場合、そのパケットにおいて接続先として指定されているポート番号に対応するコンテキストを調べ、該コンテキストが“接続済み状態”に設定されていれば該コンテキストを“切断通知受信済み状態”に更新する。
（付記１１）
付記１記載のネットワークインターフェース装置であって、
前記コンテキストと前記管理機構は、前記プロセッサの主記憶上に設けられる。
（付記１２）
付記１記載のネットワークインターフェース装置であって、
前記コンテキストと前記管理機構は、前記プロセッサの専用レジスタに格納され、
前記第１の管理手段は、該専用のレジスタにアクセスして、前記ポート毎の接続状態を管理する。
（付記１３）
付記１記載のネットワークインターフェース装置であって、
前記コンテキストと前記管理機構は、前記プロセッサの専用メモリ上に設けられ、
前記第１の管理手段は、該専用メモリにアクセスして、前記ポート毎の接続状態を管理する。
（付記１４）
付記１１、１２または１３記載のネットワークインターフェース装置であって、
前記管理機構はテーブルであり、
前記第２の管理手段は、前記コンテキストを該テーブルにより管理し、
該テーブルのエントリは、少なくとも、前記コンテキストの格納位置に関する情報を含む。
（付記１５）
付記１乃至１４のいずれか１項に記載のネットワークインターフェース装置であって、
前記コンテキストは、少なくとも、プロトコルの種別に関する情報と、前記ポートの通信状態に関する情報を有する。
【符号の説明】
【００７８】
１０（１０−〜１０−ｎ）  ノード
１１  プロセッサ
１２（１２ｓ、１２ｄ）  主記憶
１２１  ポートテーブル
１２１１  ポートエントリ
１２３  ポートコンテキスト
１２３１  プロトコル種別
１２３２  通信状態
１２５  ポートバッファ
１２７  送信指示キュー
１２８  送信完了通知キュー
１２９  受信通知キュー
１３  ＮＩＣ
１３１  ＰＩＯ制御部
１３２  ＤＭＡ制御部
１３３  送信指示キュー制御部
１３４  パケット送信処理部
１３５  送信完了通知キュー制御部
１３６  パケット受信処理部
１３７  受信完了通知キュー制御部
１３８  バス
１３９〜１４２  信号線
２０  ネットワーク
５０  制御パケット
５０ｃｄ  接続要求パケット
５０ｃａ  接続許可の応答パケット
５０ｄｃ  切断通知パケット
５１０  ネットワーク層ヘッダ
５１１  パケット長
５１２  接続先アドレス
５１３  接続元アドレス
５２０  トランスポート層ヘッダ
５２１  接続先ポート番号
５２２  接続元ポート番号
５２３  プロトコル種別
５２４  パケット種別
６０  転送データパケット
６１０  ネットワーク層ヘッダ
６１１  パケット長
６１２  接続先アドレス
６１３  接続元アドレス
６２０  トランスポート層ヘッダ
６２１  接続先ポート番号
６２２  接続元ポート番号
６２３  プロトコル種別
６２４  パケット種別（データ）
６３０  トランスポート層データ
１３３１  接続要求指示ディスクリプタ
１３３１ａ  指示ＩＤ（接続要求）
１３３１ｂ  接続元ポート番号
１３３１ｃ  接続先アドレス
１３３１ｄ  接続先ポート番号
１３３２  データ転送指示ディスクリプタ
１３３２ａ  指示ＩＤ（データ転送）
１３３２ｂ  接続元ポート番号
１３３２ｃ  データ先頭アドレス
１３３２ｄ  データ長
１３３３  切断通知ディスクリプタ
１３３３ａ  指示ＩＤ（切断通知）
１３３３ｂ  接続元ポート番号
１３５１  接続要求送信指示完了ディスクリプタ
１３５１ａ  エラーコード
１３５２  データ転送指示完了ディスクリプタ
１３５２ａ  エラーコード
１３７１  接続要求ディスクリプタ
１３７１ａ  受信通知ＩＤ（接続要求）
１３７１ｂ  ポート番号
１３７１ｃ  要求元アドレス
１３７１ｄ  要求元ポート番号
１３７２  接続応答ディスクリプタ
１３７２ａ  受信通知ＩＤ（接続応答）
１３７２ｂ  ポート番号
１３７２ｃ  応答元アドレス
１３７２ｄ  応答先アドレス
１３７３  データ転送ディスクリプタ
１３７３a  受信通知ＩＤ（データ転送）
１３７３ｂ  ポート番号
１３７３ｃ  データ先頭アドレス
１３７３ｄ  データ長
１３７４  切断通知ディスクリプタ
１３７４a  受信通知ＩＤ（切断通知）
１３７４ｂ  ポート番号
【図１】
2010183450.tif 000003
【図２】
2010183450.tif 000004
【図３】
2010183450.tif 000005
【図４】
2010183450.tif 000006
【図５】
2010183450.tif 000007
【図６】
2010183450.tif 000008
【図７】
2010183450.tif 000009
【図８】
2010183450.tif 000010
【図９】
2010183450.tif 000011
【図１０】
2010183450.tif 000012
【図１１】
2010183450.tif 000013
【図１２】
2010183450.tif 000014
【図１３】
2010183450.tif 000015
【図１４】
2010183450.tif 000016
【図１５】
2010183450.tif 000017
【図１６】
2010183450.tif 000018
【図１７】
2010183450.tif 000019
【図１８】
2010183450.tif 000020