(57)【要約】      （修正有）【課題】高い通信ネットワーク速度に対するハードウェアによる解決策を提供するギガビットのイーサネット（登録商標）アダプタを提供する。さらに、多数の通信プロトコルに適合するギガビット・イーサネット（登録商標）・アダプタを提供する。【解決手段】ギガビット・イーサネット（登録商標）・アダプタで実施されるシステムは、高いネットワーク通信速度を処理するためのコンパクトなハードウェアの解決策を提供する。さらに、モジュール構造および設計を介して多数の通信プロトコルに適合する。【選択図】図１
2010063110.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークプロトコルを復号および符号化しデータを処理する統合ネットワークアダプタであって、
ストリーミングデータを処理するための、配線接続されたデータパスと、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
複数の並列の、配線接続されたプロトコル状態マシーンと、
配線接続された転送オフロード・エンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
プログラム可能なポート範囲に入るＵＤＰまたはＴＣＰのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換（ＮＡＴ）、ＩＰマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
トラフィックに基づいて共有リソースをスケジュールする手段と、
を備え、
前記複数のプロトコル状態マシーンは特定のネットワークプロトコル用に最適化され、
前記プロトコル状態マシーンは並列で処理を実行し、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
ことを特徴とする統合ネットワークアダプタ。
【請求項２】
単一の集積回路で構成される統合ネットワークアダプタであって、
配線接続された転送オフロードエンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
物理層モジュール（ＰＨＹ）と、
メディアアクセス層モジュール（ＭＡＣ）と、
前記ＴＯＥと一体化したＩＰｓｅｃ処理エンジンと、
前記ＴＯＥと一体化した、オフロード処理のための上位レベルプロトコル（ＵＬＰ）と、
プログラム可能なポート範囲に入るＵＤＰまたはＴＣＰのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換（ＮＡＴ）、ＩＰマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
を備え、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
ネットワークアダプタ。
【請求項３】
前記ＵＬＰはｉＳＣＳＩプロトコルを実行する、
請求項２に記載のネットワークアダプタ。
【請求項４】
前記ＵＬＰは送受信のためにｉＳＣＳＩ  ＣＲＣの計算をオフロードする、
請求項３に記載のネットワークアダプタ。
【請求項５】
前記ＵＬＰは送信のために固定インターバルのマーカー（ＦＩＭ）を使用してｉＳＣＳＩフレーミングを実行する、
請求項３に記載のネットワークアダプタ。
【請求項６】
前記ＴＯＥはｉＳＣＳＩヘッダセグメント及びｉＳＣＳＩデータセグメントをホストｉＳＣＳＩドライバから取得し、送信のためにｉＳＣＳＩ  ＰＤＵを準備する、
請求項３に記載のネットワークアダプタ。
【請求項７】
ホストコンピュータに存在するホストｉＳＣＳＩドライバを更に備え、
前記ホストｉＳＣＳＩドライバは前記ＴＯＥと通信する、
請求項３に記載のネットワークアダプタ。
【請求項８】
前記ＴＯＥはｉＳＣＳＩプロトコルデータユニット（ＰＤＵ）を受信し、ｉＳＣＳＩ  ＣＲＣを計算し、当該ｉＳＣＳＩ  ＣＲＣを前記ホストｉＳＣＳＩドライバへ送る、
請求項７に記載のネットワークアダプタ。
【請求項９】
前記ホストｉＳＣＳＩドライバは算出されたｉＳＣＳＩ  ＣＲＣ値を、ｉＳＣＳＩ命令ブロック（ＩＢ）のｉＳＣＳＩ  ＣＲＣシードフィールドを使用してシードする、
請求項８に記載のネットワークアダプタ。
【請求項１０】
前記ホストｉＳＣＳＩドライバはホストメモリで完全なｉＳＣＳＩプロトコルデータユニット（ＰＤＵ）ヘッダを組立て、ｉＳＣＳＩ命令ブロック（ＩＢ）を生成し、当該ｉＳＣＳＩ  ＩＢを前記ＴＯＥへ送信する、
請求項７に記載のネットワークアダプタ。
【請求項１１】
ｉＳＣＳＩ  ＩＢは、ホストコンピュータメモリのバッファのリンクリストに対応し、転送ブロックとして知られている、アドレス及び長さの対のセットを含む、
請求項１０に記載のネットワークアダプタ。
【請求項１２】
前記ホストｉＳＣＳＩドライバは、ｉＳＣＳＩデータを受信するときに最終転送ブロックのバッファサイズを調節してＣＲＣバイトを記憶し、ｉＳＣＳＩヘッダとデータセグメントとを正確に分離する、
請求項１１に記載のネットワークアダプタ。
【請求項１３】
対応する基本ヘッダセグメント（ＢＨＳ）と、任意の追加ヘッダセグメント（ＡＨＳ）と、任意のデータセグメントとを含むｉＳＣＳＩプロトコルデータユニットが、ｉＳＣＳＩ命令ブロック（ＩＢ）を用いて前記ホストｉＳＣＳＩドライバと前記ＴＯＥとの間で伝送される、
請求項７に記載のネットワークアダプタ。
【請求項１４】
前記ホストｉＳＣＳＩドライバは、ｉＳＣＳＩ  ＰＤＵヘッダに対する正確なサイズの受信バッファをポストし、且つ、データセグメントが存在する場合にはｉＳＣＳＩ  ＰＤＵデータセグメントの正確なサイズの受信バッファをポストすることにより、受信の際にｉＳＣＳＩプロトコルデータユニット（ＰＤＵ）ヘッダとデータセグメントを分割する、
請求項７に記載のネットワークアダプタ。
【請求項１５】
前記ホストｉＳＣＳＩドライバは、命令ブロックを用いて受信された任意の追加ヘッダセグメント（ＡＨＳ）の正確に寸法付けされたバッファをポストする、
請求項１４に記載のネットワークアダプタ。
【請求項１６】
前記ＴＯＥと前記ホストｉＳＣＳＩドライバはｉＳＣＳＩ  ＰＤＵレベルでインターフェースする請求項７に記載のネットワークアダプタ。
【請求項１７】
前記ＴＯＥは、プロトコルデータユニット（ＰＤＵ）ヘッダを前記プロセッサまたは前記ホストコンピュータに直接メモリアクセス（ＤＭＡ）しＰＤＵデータセクションを前記ホストコンピュータに直接メモリアクセス（ＤＭＡ）することにより、前記ホストコンピュータのメモリの付加的なメモリコピーを必要とせずにｉＳＣＳＩプロトコルデータユニット（ＰＤＵ）のヘッダとデータセグメントとを分離する、
請求項７に記載のネットワークアダプタ。
【請求項１８】
前記ＴＯＥはセキュリティ・アソシエーション（ＳＡ）毎にＩＰｓｅｃのアンチリプレイサポートを行う、
請求項２に記載のネットワークアダプタ。
【請求項１９】
前記ＴＯＥはＩＰＳｅｃゼロ、ＤＥＳ、３ＤＥＳアルゴリズム、およびＡＥＳ１２８ビ
ットアルゴリズムを暗号ブロック連鎖（ＣＢＣ）モードで実行する、
請求項２に記載のネットワークアダプタ。
【請求項２０】
前記ＴＯＥはＩＰＳｅｃゼロ、ＳＨＡ−１、およびＭＤ−５認証アルゴリズムを実行する、
請求項２に記載のネットワークアダプタ。
【請求項２１】
前記ＴＯＥはＩＰＳｅｃ可変長暗号キーを実行する、
請求項２に記載のネットワークアダプタ。
【請求項２２】
前記ＴＯＥはＩＰＳｅｃ可変長認証キーを実行する、
請求項２に記載のネットワークアダプタ。
【請求項２３】
前記ＴＯＥはＩＰＳｅｃジャンポフレームサポートを実行する、
請求項２に記載のネットワークアダプタ。
【請求項２４】
前記ＴＯＥは時間と転送される全データとに基づいてセキュリティ・アソシエーション（ＳＡ）の満了のＩＰＳｅｃ自動処理を実行する、
請求項２に記載のネットワークアダプタ。
【請求項２５】
前記ＴＯＥはＩＰＳｅｃポリシー施行を実行する、
請求項２記載のネットワークアダプタ。
【請求項２６】
前記ＴＯＥは例外パケットの生成と状態通知とを含むＩＰＳｅｃ例外処理を実行する、
請求項２記載のネットワークアダプタ。
【請求項２７】
統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
プログラム可能なポート範囲に入るＵＤＰまたはＴＣＰのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換（ＮＡＴ）、ＩＰマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
を備え、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
統合ネットワークアダプタ。
【請求項２８】
前記少なくとも一つの通信チャンネルは、命令ブロック（ＩＢ）と状態メッセージ（ＳＭ）とを使用してデータおよび制御情報を転送する、
請求項２７に記載のネットワークアダプタ。
【請求項２９】
前記少なくとも一つの通信チャンネルを経由する通信を制御するための少なくとも一つの閾値タイマを更に備え、
データは選択された閾値インターバルで伝送される、
請求項２７に記載のネットワークアダプタ。
【請求項３０】
前記閾値タイマは、前記ネットワークアダプタと前記ホストコンピュータとの間の割り込みの数を減少させ、データの処理能力を増加させるための割込み集約機構を備える、
請求項２９に記載のネットワークアダプタ。
【請求項３１】
前記少なくとも一つの通信チャンネルを経由する通信を制御するための少なくとも一つのデータ閾値を設定するモジュールを更に備え、
データレベルが選択された閾値に達したときにデータが伝送される、
請求項２７に記載のネットワークアダプタ。
【請求項３２】
前記プロセッサおよび前記ＴＯＥのデータ処理能力を最適化する割込み集約機構を更に備える請求項２７に記載のネットワークアダプタ。
【請求項３３】
ＴＣＰ選択肯定応答（ＳＡＣＫ）用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
ＴＣＰはデータパケットの紛失を応答し、当該紛失したデータパケットだけを再送信する、
請求項２７に記載のネットワークアダプタ。
【請求項３４】
ＴＣＰ高速再送信用に最適化されたハードウェアサポートを提供するモジュールを更に備える、
請求項２７に記載のネットワークアダプタ。
【請求項３５】
前記ＴＣＰ高速再送信は、順序違いのセグメントが受信されたときに、標準的なアイムアウトを待つ代わりに、送信機が穴を迅速に埋めることを可能にするためにＡＣＫを直ちに生成する、
請求項３４に記載のネットワークアダプタ。
【請求項３６】
受信機が重複する三つのＡＣＫを受信したときに、前記ＴＣＰ高速再送信が呼び出され、
前記ＴＣＰ高速再送信が呼び出されたときに、送信機が穴を埋めようとし、
ＡＣＫとセグメントのウィンドウ広告値とが相互に一致した場合に、重複するＡＣＫが重複と判定される、
請求項３４に記載のネットワークアダプタ。
【請求項３７】
ＴＣＰウィンドウスケーリング用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項３８】
ウィンドウスケーリング動作が、ウィンドウスケールを可能にする少なくとも一つのビットと、スケーリングファクタを設定するための少なくとも一つのビットと、スケーリング値を決定するためのパラメータとを備える３つの変数に基づいている、
請求項２７に記載のネットワークアダプタ。
【請求項３９】
ｉＳＣＳＩヘッダとデータＣＲＣの生成およびチェックとのために最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項４０】
ｉＳＣＳＩの固定インターバルのマーカー（ＦＩＭ）を生成するために最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項４１】
診断プログラムおよびパケット監視プログラムをサポートするＴＣＰダンプモード用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項４２】
ＴＣＰダンプモードが使用可能になった場合に、受信されたパケットのすべてが例外として前記ホストに送信され、ハードウェアスタックから来る出力ＴＣＰ／ＵＤＰパケットのすべてが例外パケットとしてループバックされる、
請求項４１に記載のネットワークアダプタ。
【請求項４３】
前記例外パケットをネットワークモニタ用にコピーし、ＲＸパケットを再注入するためにＴＸパケットを生のイーサネット（登録商標）フレームとして送信するドライバを更に備える請求項４２に記載のネットワークアダプタ。
【請求項４４】
ホストＡＣＫモード用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
前記ホストコンピュータと前記ネットワークアダプタとの間をデータが通過したときに当該データが破損した可能性がある場合にデータの完全性を保証するために、前記ホストがＴＣＰセグメントからデータを受信したときだけＴＣＰ  ＡＣＫが送信される、
請求項２７に記載のネットワークアダプタ。
【請求項４５】
前記ホストＡＣＫモードは、ＡＣＫを送信する前に、データセグメントを含んでいるＭＴＸバッファの直接メモリアクセス（ＤＭＡ）が完了するのを待つ、
請求項４４に記載のネットワークアダプタ。
【請求項４６】
ＴＣＰがラウンドトリップ時間測定（ＲＴＴＭ）を良好に計算し、ラップシーケンスに対する保護（ＰＡＷＳ）をサポートすることを可能にするために、ＴＣＰタイムスタンプ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項４７】
古い重複セグメントによるＴＣＰ接続の破壊を防止するためにＴＣＰ  ＰＡＷＳ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項４８】
前記ネットワークアダプタ内のバッファからではなくホストメモリのバッファから直接にデータを再送信させるために、ＴＣＰホスト再送信モード用に最適化されたハードウェアサポート提供するモジュールを更に備える請求項２７記載のネットワークアダプタ。
【請求項４９】
ランダムな初期シーケンス番号用に最適化されたハードウェアサポートを行うモジュールを更に備える請求項２７記載のネットワークアダプタ。
【請求項５０】
デュアルスタックモード用に最適化されたハードウェアサポートを行うモジュールと、
前記ホストのソフトウェアＴＣＰ／ＩＰスタックと協動および関連して動作する前記ネットワークアダプタに組み込まれたハードウェアＴＣＰ／ＩＰスタックと、
を更に備え、
前記ネットワークアダプタは、前記ネットワークアダプタと同一のＩＰアドレスを使用して並列に動作する前記ソフトウェアＴＣＰ／ＩＰスタックの共存をサポートする、
請求項２７に記載のネットワークアダプタ。
【請求項５１】
同期（ＳＹＮ）状態メッセージモードをサポートするモジュールを更に備え、
受信された任意のＳＹＮは状態メッセージを前記ホストへ戻し、
ＳＹＮ／ＡＣＫは、前記ホストが適切な命令ブロックを前記ネットワークアダプタへ戻すまで前記ネットワークアダプタにより生成されず、
前記ＳＹＮ状態メッセージモードが前記ネットワークアダプタで使用可能にならない場合には、ＳＹＮ／ＡＣＫが前記ネットワークアダプタにより自動的に生成され、ＳＹＮ受信状態メッセージは生成されない、
請求項５０に記載のネットワークアダプタ。
【請求項５２】
ネットワークアダプタ制御ブロックデータベースに一致しないＴＣＰパケットが受信されたときに、前記ネットワークアダプタからのリセット（ＲＳＴ）メッセージの抑制をサポートするモジュールを更に備え、
前記ネットワークアダプタは、自動的にＲＳＴを生成する代わりにパケットを例外パケットとして前記ホストへ送信することで、前記ホストのＴＣＰ／ＩＰスタックが当該パケットを例外パケットとして処理できるようにする、
請求項５０に記載のネットワークアダプタ。
【請求項５３】
前記ホストおよび前記ネットワークアダプタがＩＰ  ＩＤをオーバーラップすることなくＩＰアドレスを共有できるようにするために、ＩＰ  ＩＤ分割用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項５４】
あるタイプのパケットに対する特別な動作を制限し、受け付け、または実行するために、データパケットのフィルタリング用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項５５】
前記フィルタリングは、プログラムされたユニキャストアドレスの受付、放送パケットの受付、マルチキャストパケットの受付、ネットマスクにより特定される範囲内のアドレスの受付、および全パケットを受け付ける無差別モードのうちの任意の特性を取ることができる、
請求項５４に記載のネットワークアダプタ。
【請求項５６】
仮想構内網（ＶＬＡＮ）用に最適化されたハードウェアサポートを提供するＶＬＡＮモジュールを更に備える、
請求項２７に記載のネットワークアダプタ。
【請求項５７】
前記ＶＬＡＮモジュールは、入力パケットからＶＬＡＮヘッダを除去する要素、ＶＬＡＮのタグが付された出力パケットを生成する要素、入力ＳＹＮフレームからＶＬＡＮパラメータを生成する要素、および例外パケットとＵＤＰパケットのＶＬＡＮタグ情報を通す要素のいずれかを備える、
請求項５６に記載のネットワークアダプタ。
【請求項５８】
ジャンボフレーム用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項５９】
シンプルネットワーク管理プロトコル（ＳＮＭＰ）用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項６０】
管理情報ベース（ＭＩＢ）用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項６１】
レガシーモードでのネットワークアダプタの動作用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
すべてのネットワークトラフィックはトラフィックタイプにかかわりなく前記ホストに送信され、
前記ネットワークアダプタはハードウェアＴＣＰ／ＩＰスタックが該アダプタに存在しないかのように動作する、
請求項２７に記載のネットワークアダプタ。
【請求項６２】
ハードウェアおよびソフトウェアのいずれかでＩＰ分割が処理されることを可能にする最適化されたハードウェアサポートを提供するモジュールを更に備え、
例外パケットとして伝送されソフトウェアドライバで再構築されるＩＰ分割されたパケットがＩＰ注入モードにより前記ネットワークアダプタへ再注入されて戻される、
請求項２７に記載のネットワークアダプタ。
【請求項６３】
ＩＰパケットが前記ネットワークアダプタのＴＣＰ／ＩＰスタックに注入されることを可能にするＩＰ注入用に最適化されたハードウェアサポートを提供するＩＰ注入モジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項６４】
前記ＩＰ注入モジュールは、ＩＰパケットを前記ネットワークアダプタのＴＣＰ／ＩＰスタックへ注入するための１以上の注入制御レジスタを備え、
前記１以上の注入制御レジスタは前記ホストがＩＰパケットを前記ネットワークアダプ
タのＴＣＰ／ＩＰスタックへ注入することを可能にする、
請求項６３に記載のネットワークアダプタ。
【請求項６５】
複数のＩＰアドレス用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項６６】
デバッグモード用に最適化されたハードウェアサポートを提供するモジュールを更に備え、
試験および制御ビットが前記ネットワークアダプタ中で使用可能になった場合に、すべてのＩＰパケットが例外として前記ホストへ送信される、
請求項２７に記載のネットワークアダプタ。
【請求項６７】
ＴＣＰ時間待機状態用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項６８】
可変の接続数に対して最適化されたハードウェアサポートを行うモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項６９】
前記ネットワークアダプタがネットワークアダプタの最大容量に等しい接続を容認する場合に、次の同期（ＳＹＮ）が、前記ホストが当該接続を処理できるように、例外パケットとして前記ホストへ通される、
請求項２７に記載のネットワークアダプタ。
【請求項７０】
ユーザデータグラムプロトコル（ＵＤＰ）用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７記載のネットワークアダプタ。
【請求項７１】
ＩＰパケットの寿命を選択されたホップ数に限定するためにＴＴＬ（生存時間）に対して最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項７２】
キープ・アライブ・パケットをリンクにおいて周期的に送信することによりアイドル状態のＴＣＰ接続を維持しタイムアウトさせないことを可能にするために、ＴＣＰのキープアライブ用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項７３】
ＩＰパケットを優先させるためにルータにより使用されるサービスのＴＣＰタイプ（ＴＯＳ）用に最適化されたハードウェアサポートを提供するモジュールを更に備える請求項２７に記載のネットワークアダプタ。
【請求項７４】
統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
ＴＣＰスロースタート用に最適化されたハードウェアサポートを行うためのモジュールと、
を備え、
前記スロースタートは、
肯定応答（ＡＣＫ）を予測する前に、最大セグメントサイズ（ＭＳＳ）の２倍の現在のウィンドウ（ｃｗｎｄ）に対応する二つのデータセグメントが流れることだけをまず許可し、
更に一つのセグメントを流すために、前記ｃｗｎｄが受信機の広告ウィンドウと等しくなるまで、成功ＡＣＫが受信される度に一つのＭＳＳ分だけｃｗｎｄを増加させることにより、
一度に流れるデータセグメント数を徐々に増加させる、
統合ネットワークアダプタ。
【請求項７５】
前記スロースタートは新規のデータ接続で常に開始され、
前記スロースタートはデータトラフィックの渋滞が発生したときに接続の中間で起動される、
請求項７４に記載のネットワークアダプタ。
【請求項７６】
統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
フレキシブルでプログラム可能なメモリエラー検査および補正（ＥＣＣ）用に最適化されたハードウェアサポートを提供するＥＣＣモジュールと、
を備え、
前記ＥＣＣモジュールは、少なくとも一つの追加ビットを用いて、暗号化されたＥＣＣコードをデータと共にパケットに記憶し、
前記データがメモリに書き込まれたときに前記ＥＣＣコードも記憶され、
前記データが読み出されたときに、前記記憶されたＥＣＣコードは当該データが書き込まれたときに生成されたＥＣＣコードと比較され、
前記ＥＣＣコードが一致しない場合には、前記データ中のどのビットがエラーであるかについての判定が実行され、
エラーになっているビットが反転され、メモリ制御装置が当該補正されたデータを解放し、
エラーはオンザフライで補正され、補正されたデータは前記メモリに戻されず、
同一の破損データが再度読み取られたならば、前記ＥＣＣモジュールの動作が繰り返される、
統合ネットワークアダプタ。
【請求項７７】
統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
ＴＣＰのサービス品質（ＱｏＳ）用に最適化されたハードウェアサポートを提供するモジュールと、
を備え、
ＴＣＰ送信データフローはソケット問い合わせモジュールで開始し、当該データフローは送信データ有効ビットセットを有するエントリを探す送信データ有効ビットテーブルを通過し、
前記ソケット問い合わせモジュールは、前記エントリを発見した場合に、ソケットのユーザ優先順位レベルに従って当該エントリを複数の待ち行列のうちの一つに置く、
統合ネットワークアダプタ。
【請求項７８】
統合ネットワークアダプタであって、
パケットを送受信しパケットを符号化および復号化するための、配線接続されたデータパスと、
少なくとも一つの配線接続されたプロトコル状態マシーンと、
少なくとも一つの、前記ネットワークアダプタとホストコンピュータとの間の通信チャンネルと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
フェイルオーバー用に最適化されたハードウェアサポートを提供するフェイルオーバーモジュールと、
を備え、
前記フェイルオーバーモジュールは、接続を開始しようとすることなくソケットが生成されることを可能にするＮＯ＿ＳＹＮモードを有し、
前記ネットワークアダプタ内のソケットおよび当該ソケットに関連するすべてのデータ構造が接続を生成することなく生成され、
前記ＮＯ＿ＳＹＮモードは別のカードからの、またはソフトウェアＴＣＰ／ＩＰスタックから前記ネットワークアダプタへの接続移行からのフェイルオーバーをサポートする、
統合ネットワークアダプタ。
【請求項７９】
統合ネットワークアダプタであって、
パケットを受信するための、配線接続されたデータパスと、
複数の並列の、配線接続されたプロトコル状態マシーンと、
トラフィックに基づいて共有リソースをスケジュールするスケジューラと、
配線接続された転送オフロード・エンジン（ＴＯＥ）と、
前記ＴＯＥと一体化したプロセッサと、
プログラム可能なポート範囲に入るＵＤＰまたはＴＣＰのパケットをすべて例外パスに転送するポート範囲レジスタによるネットワークアドレス変換（ＮＡＴ）、ＩＰマスカレード、及びポート転送のうちのいずれかについて最適化されたハードウェアサポートを提供するモジュールと、
を備え、
前記プロトコル状態マシーンは並列で処理を実行し、
前記ポート範囲レジスタはある範囲のポートをネットワーク制御動作および前記ポート転送において使用可能とする、
統合ネットワークアダプタ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は電気通信、特にデータの送信および受信に使用される通信プロトコルを伴ってデータを処理する方法および装置に関する。
【背景技術】
【０００２】
コンピュータネットワークはデータを送信および受信するための種々の通信プロトコルの規定を必要とする。典型的に、コンピュータネットワークは、共に通信できるように接続されているコンピュータ、プリンタ、他のコンピュータ周辺機器のような装置のシステムを具備している。データは通信プロトコル標準を使用してネットワークを通して通信されるデータパケットにより各これらの装置間で転送される。多数の異なるプロトコル標準が現在使用されている。ポピュラーなプロトコルの例はインターネットプロトコル（ＩＰ）、インターネットワークパケット交換（ＩＰＸ）、シーケンストパケット交換（ＳＰＸ）、送信制御プロトコル（ＴＣＰ）、ポイント・ツー・ポイントプロトコル（ＰＰＰ）である。各ネットワーク装置はプロトコルを翻訳しデータを処理するハードウェアとソフトウェアの組合わせを含んでいる。
【０００３】
一例は構内網（ＬＡＮ）システムに取付けられたコンピュータであり、ここではネットワーク装置はリンク層プロトコルを処理するハードウェアと、ネットワーク、転送、通信プロトコルおよび情報データ処理を管理するソフトウェアとを使用する。ネットワーク装置は通常、１つのリンク層プロトコルをハードウェアで構成し、取付けられたコンピュータをその特定のＬＡＮプロトコルにのみ限定する。高次のプロトコル、例えばネットワーク、転送および通信プロトコルは、データハンドラと共にソフトウェアプログラムとして構成され、一度これらがネットワーク装置のハードウェアを通してシステムメモリに送られるとデータを処理する。この構成の利点は、コンピュータのような汎用装置が多数の異なるネットワークセットアップで使用され、必要とされる随意選択的なネットワークアプリケーションをサポートすることを可能にすることである。しかしながら、この構成の結果、システムはコンピュータのオペレーティングシステム（Ｏ．Ｓ．）とコンピュータと、およびネットワークハードウェアへ通信する異なるソフトウェアプロトコルおよびデータハンドラを調整するために、高いプロセッサオーバーヘッドと、多量のシステムメモリと、複雑な構成セットアップをコンピュータユーザ側で必要とする。
【０００４】
処理時間で必要とされるこの高いオーバーヘッドは1996年１月16日出願のSchrierの米国特許第5,485,460号明細書に示されており、これは装置で同一のプロトコルを実行する多数のソフトウェアプロトコルスタックを動作する方法を示している。このタイプの構成はディスクオペレーティングシステム（ＤＯＳ）ベースのマシーン動作マイクロソフトウィンドウズで使用されている。通常の動作中、一度、ハードウェアが転送またはリンク層プロトコルを確認すると、結果的なデータパケットはパケットフレームフォーマットを決定し、任意の特定のフレームヘッダを分解するソフトウェア層へ転送される。パケットはその後、異なるプロトコルスタックへ送信され、そこで特定のプロトコルに対して評価される。しかしながらパケットはそれが容認されるか拒否される前に、幾つかのプロトコルスタックへ転送されることができる。ソフトウェアプロトコルスタックにより生成される時間遅延はオーディオおよびビデオ伝送が実時間で処理されることを妨げ、データは再生される前に緩衝されなければならない。プロトコルの処理に必要とされる処理オーバーヘッド量は非常に高く、極めて厄介であり、強力な中央処理装置（ＣＰＵ）と大容量のメモリを有するアプリケーション向きにされることが明白である。
【０００５】
伝統的なネットワーク装置のモデルに適合しないコンピュータプロダクトが市場に入っている。これらのプロダクトのいくつかの例は、ページャ、セルラ電話、ゲームマシーン、スマート電話機、テレビジョンが含まれている。大部分のこれらのプロダクトは小さいフットプリント、８ビット制御装置、限定されたメモリを有し、または非常に限定された形態のファクタを必要とする。これらのような消費者プロダクトは簡単であり、廉価で低電力消費を必要とする。前述のプロトコル構成はこれらの要求を満たすために非常に多くのハードウェアおよびプロセッサパワーを必要とする。このような構成の複雑性によって価格が効率的な方法で消費者プロダクトに一体化することは困難である。ネットワークアクセスが廉価で低電力の小さいフォームファクタの装置で容易に製造されるように簡単にされることができるならば、これらのプロダクトはインターネットのようなネットワークサービスにアクセスできる。
【０００６】
通信ネットワークはデータの送信および受信のためのプロトコルを使用する。通信ネットワークは、典型的に共に通信できるように接続されているコンピュータ、プリンタ、記憶装置、およびその他のコンピュータ周辺機器のようなノードとも呼ばれるネットワーク装置の集合を含んでいる。データはプロトコルを使用して通信ネットワークを通して送信されるデータパケットを使用して、これらの各ネットワーク装置間で転送される。多数の異なるプロトコルが現在使用されている。ポピュラーなプロトコルの例にはインターネットプロトコル（ＩＰ）、インターネットワークパケット交換（ＩＰＸ）プロトコル、シーケンストパケット交換（ＳＰＸ）プロトコル、送信制御プロトコル（ＴＣＰ）、ポイント・ツー・ポイントプロトコル（ＰＰＰ）および開発中のその他の類似の新しいプロトコルが含まれる。ネットワーク装置はプロトコルおよびデータパケットを処理するハードウェアとソフトウェアの組合わせを含んでいる。
【０００７】
１９７８年、国際標準化機構（ＩＳＯ）、即ち標準設定団体は開放型システム間相互接続（ＯＳＩ）モデルとして知られているネットワーク基準モデルを作成した。このＯＳＩモデルは７つの概念的な層を含んでいる。即ち、１）ネットワーク装置をネットワークへ接続する物理的なコンポーネントを規定する物理（ＰＨＹ）層と、２）データパケットを含んでいるフレームとして知られているディスクリートな形態でデータの動きを制御するデータリンク層と、３）特定のプロトコルにしたがってデータパケットを構築するネットワーク層と、４）データパケットの確実な転送を確保する転送層と、５）ネットワーク装置間で２方向の通信を可能にするセッション層と、６）データを表す方法を制御し、データが正しい形態であることを確認するプレゼンテーション層と、７）ファイルの共有、メッセージ処理、印刷等を行うアプリケーション層である。時には、セッションおよびプレゼンテーション層はこのモデルから省略される。現代の通信ネットワークおよびインターネットがどのようにＩＳＯの７つの層モデルに関連するかの説明については、例えばテキスト“Internetworking with TCP/IP”、Douglas E. Corner（第１巻、第４版、ISBN 020 1633469）の第１１章と、テキスト“TCP/IP Illustrated”、W. Richard Stevens（第１巻、ISBN 0130183806）の第１章を参照にされたい。
【０００８】
ネットワーク装置の一例は構内網（ＬＡＮ）に取付けられたコンピュータであり、ここではネットワーク装置は物理およびデータリンク層を管理するためにホストコンピュータのハードウェアを使用し、ネットワーク、転送、セッション、プレゼンテーション、アプリケーション層を管理するためにホストコンピュータで動作するソフトウェアを使用する。ネットワーク、転送、セッション、プレゼンテーション層はプロトコルスタックとも呼ばれるプロトコル処理ソフトウェアを使用して実行される。アプリケーション層は一度データがネットワーク装置のハードウェアおよびプロトコル処理ソフトウェアを通して転送されるとデータを処理するアプリケーションソフトウェアを使用して実行される。このソフトウェアベースのプロトコル処理構造の利点は、汎用コンピュータが多数の異なるタイプの通信ネットワークで使用されることを可能にし、必要とされる任意のアプリケーションをサポートすることである。しかしながら、このソフトウェアベースのプロトコル処理構造の結果として、ネットワーク、転送、セッション、プレゼンテーション層を処理するためにホストコンピュータの中央処理装置（ＣＰＵ）で動作するプロトコル処理ソフトウェアのオーバーヘッドは非常に高い。ソフトウェアがデータを処理するとき、データがコピーされ移動されなければならないので、ソフトウェアベースのプロトコル処理構造はまたホストコンピュータで大容量のメモリを必要とする。プロトコル処理ソフトウェアにより必要とされる高いオーバーヘッドは1996年１月16日出願のSchrierによる米国特許第5,485,460号明細書に記載され、これは多数のソフトウェアプロトコルスタックの動作方法を教示している。このタイプのソフトウェアベースのプロトコル処理構造は例えばコンピュータが動作するマイクロソフトウインドウズで使用される。
【０００９】
ネットワーク装置の正常動作中、ネットワークソフトウェアのハードウェアは、その後ホストコンピュータのプロトコル処理ソフトウェアへ送信されるデータパケットを抽出する。プロトコル処理ソフトウェアはホストコンピュータで動作し、このホストコンピュータはプロトコル処理ソフトウェアにより行われるタスクに対して最適化されていない。プロトコル処理ソフトウェアと汎用目的のホストコンピュータの組合わせはプロトコル処理に対して最適化されておらず、それによって性能を限定されてしまう。プロトコル処理ソフトウェアの実行により生成される時間遅延のようなプロトコル処理における性能の制限は有害であり、例えばオーディオおよびビデオ送信が実時間で処理されることを妨害し、または通信ネットワークのフルスピードおよび容量が使用されることを妨害する。プロトコルの処理に必要とされるホストコンピュータＣＰＵのオーバーヘッド量は非常に高く、極めて厄介であり、ホストコンピュータでＣＰＵと大容量のメモリの使用を必要とすることが明白である。
【００１０】
伝統的なネットワーク装置のモデルに適合しない新しい消費者および産業プロダクトが市場に参入し、同時にネットワーク速度は増加し続けている。これらの消費者プロダクトの例は、インターネットエネーブルセル電話、インターネットエネーブルＴＶ、インターネット機器である。産業プロダクトの例はネットワークインターフェースカード（ＮＩＣ）、インターネットルータ、インターネットスイッチ、インターネット記憶サーバである。ソフトウェアベースのプロトコル処理構成はこれらの新しい消費者および産業上のプロダクトの要求を満たすのに効率的ではない。ソフトウェアベースのプロトコル処理構成は複雑であるために効率的な価格で消費者プロダクトに含ませることが困難である。ソフトウェアベースのプロトコル処理構成は処理パワーを必要とするので高速度の産業上のプロダクトに一体化することが困難である。プロトコルの処理はこれが廉価で低電力で高性能の集積された小さいフォームファクタ装置で容易に製造されるように簡単にされ、最適化されることができるならば、これらの消費者および産業プロダクトはインターネットのような任意の通信ネットワークでデータを読取り、書込むことができる。
【００１１】
ソフトウェアベースとは反対に、ハードウェアベースのプロトコル処理構成のインターネットチューナがJ. Minami、R. Koyama、M. Johnson、M. Shinohara、T. Poff、D. BurkesのMultiple network protocol encoder/decoder and data processor、米国特許第6,034,963号明細書（2000年３月７日）に記載されている（以下’963号明細書という）。このインターネットチューナはプロトコルを処理するための基本的な技術を提供している。
【発明の概要】
【発明が解決しようとする課題】
【００１２】
高い通信ネットワーク速度に対するハードウェアによる解決策を提供するギガビットのイーサネット（登録商標）アダプタを提供することが有効である。さらに多数の通信プロトコルに適合するギガビット・イーサネット（登録商標）・アダプタを提供することが有効である。
【課題を解決するための手段】
【００１３】
本発明はギガビット・イーサネット（登録商標）・アダプタで実施される。本発明によるシステムは高いネットワーク通信速度を処理するコンパクトなハードウェアの解決手段を提供する。さらに、本発明はモジュール構造および設計により多数の通信プロトコルに適合する。本発明の好ましい実施形態はネットワークプロトコルを復号および符号化しデータを処理する統合ネットワークアダプタを提供する。このネットワークアダプタはストリーミングデータを処理するための、配線接続されたデータパスと、パケットの受信および送信とパケットの符号化および復号化のための、配線接続されたデータパスと、複数の並列の、配線接続されたプロトコル状態マシーンとを具備し、ここで各プロトコル状態マシーンは特別なネットワークプロトコル用に最適化され、前記プロトコル状態マシーンは並列で処理を実行し、さらに、トラフィックに基づいて共有リソースをスケジュールする手段を具備している。
【図面の簡単な説明】
【００１４】
【図１】本発明にしたがったＮＩＣカード構造の概略ブロック図。
【図２】本発明にしたがったネットワークに取付けられた装置のインターフェースの概略ブロック図。
【図３】本発明にしたがったシステムのレベルブロック図。
【図４】本発明にしたがったギガビット・イーサネット（登録商標）・アダプタの高レベルのブロック図。
【図５】本発明にしたがったＭＡＣインターフェースモジュールで使用されるＩ／Ｏの概略を示したブロック図。
【図６】本発明にしたがったイーサネット（登録商標）インターフェースの概略ブロック図。
【図７】本発明にしたがったアドレスフィルタおよびパケットタイプパーサ／モジュールの概略ブロック図。
【図８】本発明にしたがったアドレスフィルタおよびパケットタイプパーサ／モジュールの動作を示したタイミング図。
【図９】本発明にしたがったデータ整列器モジュールの概略ブロック図。
【図１０】本発明にしたがったＡＲＰモジュールの概略ブロック図。
【図１１】本発明にしたがったＡＲＰキャッシュの概略ブロック図。
【図１２】本発明にしたがった送信待ち行列エントリフォーマットを示す図。
【図１３】本発明にしたがった探索テーブルエントリフォーマットを示す図。
【図１４】本発明にしたがったＡＲＰキャッシュエントリフォーマットを示す図。
【図１５】本発明にしたがったＡＲＰ探索プロセスを示すフロー図。
【図１６】本発明にしたがったＩＰモジュールの概略ブロック図。
【図１７】本発明にしたがったＩＰ発生器のブロック図。
【図１８】本発明にしたがったインジェクタによるデータフローを示すブロック図。
【図１９】本発明にしたがったＴＣＰモジュールのトップレベルのブロック図。
【図２０】本発明にしたがったＴＣＰ受信データフローを示す図。
【図２１】本発明にしたがったＶＳＯＣＫ／Ｒｃｖ状態ハンドラの制御ブロックサーチ解決のフロー図。
【図２２】本発明にしたがった基本的なデータのフロー図。
【図２３】本発明にしたがったソケット受信データのフロー図。
【図２４】本発明にしたがったソケット送信流を示す図。
【図２５】本発明にしたがったデータのフロー図。
【図２６】本発明にしたがったモジュールのブロック図。
【図２７】本発明にしたがったアルゴリズムを示す図。
【図２８】図２７に示されているアルゴリズム全体のブロック図。
【図２９】本発明にしたがった論理手段を示す図。
【図３０】本発明にしたがったオプションのフォーマット図。
【図３１】本発明にしたがった別のオプションのフォーマット図。
【図３２】本発明にしたがった別のオプションのフォーマット図。
【図３３】本発明にしたがったさらに別のオプションのフォーマット図。
【図３４】本発明にしたがったさらに別のオプションのフォーマット図。
【図３５】本発明にしたがったＩＰルータの概略ブロック図。
【図３６】本発明にしたがったＩＰルートエントリのフォーマット図。
【図３７】本発明にしたがったルートをリクエストし受信するために使用されるシグナリングの説明図。
【図３８】本発明にしたがった例外ハンドラの概略ブロック図。
【図３９】本発明にしたがったＭ１メモリマップを示す図。
【図４０】本発明にしたがったサンプルメモリマップを示す図。
【図４１】本発明にしたがったデータのフローのブロック図。
【図４２】本発明にしたがったｍｔｘａｒｂサブユニットのブロック図。
【図４３】本発明にしたがったデータのフローのブロック図。
【図４４】本発明にしたがったｍｃｂａｒｂサブユニットのブロック図。
【図４５】本発明にしたがったネットワークスタックのデフォルトメモリマップを示す図。
【図４６】本発明にしたがったデフォルト設定を示す図。
【図４７】本発明にしたがった共にチャンネルを形成する一致したＩＢおよびＳＢ待ち行列を示す図。
【図４８】本発明にしたがった命令ブロック待ち行列の処理のフロー図。
【図４９】本発明にしたがったネットワークスタック、オンチッププロセッサ、ホスト間を通過するａｒ状態ブロックのデータのフローを示すブロック図。
【図５０】本発明にしたがったｉＳＣＳＩ送信データパスのブロック図。
【図５１】本発明にしたがったｉＳＣＳＩ送信フローチャートを示す図。
【図５２】本発明にしたがった４バイトバッファの使用の説明図。
【図５３】本発明にしたがったｉＳＣＳＩ受信データパスのブロック図。
【図５４】本発明にしたがった２つのリクエストに分割された転送を示す説明図。
【図５５】本発明にしたがった別々のリクエストに分割されたホストへのＤＭＡ転送を示す図。
【図５６】本発明にしたがったＳＡブロックフローを示す図。
【図５７】本発明によるＴＸ  ＡＨ転送ＳＡブロックのフォーマットを示す図。
【図５８】本発明によるＴＸ  ＥＳＰ−１転送ＳＡブロックのフォーマットを示す図。
【図５９】本発明によるＴＸ  ＥＳＰ−２転送ＳＡブロックのフォーマットを示す図。
【図６０】本発明によるＴＸ  ＡＨトンネルＳＡブロックのフォーマットを示す図。
【図６１】本発明によるＴＸ  ＡＨトンネルＳＡブロックのフォーマットを示す図。
【図６２】本発明によるＴＸ  ＥＳＰ−２トンネルＳＡブロックのフォーマットを示す図。
【図６３】本発明によるＲＸ  ＡＨ  ＳＡブロックのフォーマットを示す図。
【図６４】本発明によるＲＸ  ＥＳＰ−１  ＳＡブロックのフォーマットを示す図。
【図６５】本発明によるＲＸ  ＥＳＰ−２  ＳＡブロックのフォーマットを示す図。
【図６６】本発明にしたがったＩＰＳＥＣ論理に対する全体的なフローを示すブロック図。
【図６７】本発明にしたがったデータのフローの概略ブロック図。
【図６８】本発明による受信されたＩＰＳＥＣパケットに対するデータパスのフローのブロック図。
【図６９】本発明にしたがったＩＰＳＥＣアンチリレイアルゴリズムを示すフロー図。
【発明を実施するための形態】
【００１５】
本発明はギガビット・イーサネット（登録商標）・アダプタで実施される。本発明にしたがったシステムは高いネットワーク通信速度を処理するためのコンパクトなハードウエアによる解決手段を提供する。さらに、本発明はモジュール構造および設計を介して多数の通信プロトコルに適合する。
【００１６】
［前置き］
［一般的な説明］
本発明は高速度ハードウェアネットワークスタックで使用されるアーキテクチャ（以下ＩＴ１０Ｇと呼ぶ）を含んでいる。ここでの説明はデータパスおよびフロー、レジスタ、アプリケーションの理論およびタイミングを規定する。他のシステムブロックと組合わせて、ＩＴ１０Ｇは回線速度のＴＣＰ／ＩＰ処理のコアを提供する。
【００１７】
［定義］
ここで使用される以下の用語は対応する意味を有している：
１０Ｇｂｐｓ  １０ギガビット（毎秒１０，０００，０００，０００ビット）
ＡＣＫ  肯定応答
ＡＨ  認証ヘッダ
ＡＨＳ  追加ヘッダセグメント
ＡＲＰ  アドレス解決プロトコル
ＢＨＳ  基本ヘッダセグメント
ＣＢ  制御ブロック
ＣＰＵ  中央処理装置
ＣＲＣ  巡回冗長検査
ＤＡＶ  利用可能なデータ
ＤＤＲ  ダブルデータレート
ＤＩＸ  デジタルインテルゼロックス
ＤＭＡ  直接メモリアクセス
ＤＯＳ  サービスの否認
ＤＲＡＭ  ダイナミックＲＡＭ
ＥＥＰＲＯＭ  電気的に消去可能なＰＲＯＭ
ＥＳＰ  カプセル化セキュリティペイロード
ＦＣＩＰ  ＩＰにわたるファイバチャンネル
ＦＩＦＯ  先入れ先出し
ＦＩＭ  固定したインターバルのマーカー
ＦＩＮ  終了
Ｇｂ  ギガビット（毎秒１０，０００，０００，０００ビット）
ＨＤＭＡ  ホストＤＭＡ
ＨＯ  半分オープン
ＨＲ  ホスト再送信
ＨＳＵ  ヘッダ記憶装置
ＩＢ  命令ブロック
ＩＣＭＰ  インターネット制御メッセージプロトコル
ＩＤ  識別
ＩＧＭＰ  インターネットグループ管理プロトコル
ＩＰ  インターネットプロトコル
ＩＰｓｅｃ  ＩＰセキュリティ
ＩＰＸ  インターネットパケット交換
ＩＱ  命令ブロック待ち行列
ｉＳＣＳＩ  インターネット小型コンピュータシステムインターフェース
ＩＳＮ  初期シーケンス番号
ＬＡＮ  構内網
ＬＤＭＡ  ローカルＤＭＡ
ＬＩＰ  ローカルＩＰアドレス
ＬＬ  リンクされたリスト
ＬＰ  ローカルポート
ＬＳＢ  下位桁バイト
ＬＵＴ  探索テーブル
ＭＡＣ  メディアアクセス制御装置
ＭＣＢ  ＣＢメモリ
ＭＤＬ  メモリ記述子リスト
ＭＩＢ  管理情報ベース
ＭＩＩ  メディア独立インターフェース
ＭＰＬＳ  マルチプロトコルラベルスイッチング
ＭＲＸ  受信メモリ
ＭＳＢ  上位桁ビット
ＭＳＳ  最大セグメントサイズ
ＭＴＵ  最大送信ユニット
ＭＴＸ  ＴＸ（送信）メモリ
ＮＡＴ  ネットワークアドレス変換
ＮＩＣ  ネットワークインターフェースカード
ＮＳ  ネットワークスタック
ＯＲ  オア論理機能
ＰＤＵ  プロトコルデータユニット
ＰＩＰ  ピアＩＰアドレス
ＰＰ  ピアポート
ＰＲＯＭ  プログラム可能なＲＯＭ
ＰＳＨ  プッシュ
ＰＶ  有効なポインタ
ＱｏＳ  サービス品質
ＲＡＭ  ランダムアクセスメモリ
ＲＡＲＰ  リバースアドレス解決プロトコル
Ｒｃｖ  受信
ＲＤＭＡ  遠隔ＤＭＡ
ＲＯＭ  読取専用メモリ
ＲＳＴ  リセット
ＲＴ  ラウンドトリップ
ＲＴＯ  再送信タイムアウト
ＲＴＴ  ラウンドトリップ時間
ＲＸ  受信
ＳＡ  セキュリティ・アソシエーション
ＳＢ  状態ブロック
ＳＥＱ  シーケンス
ＳＭ  状態メッセージ
ＳＮＭＰ  シンプルネットワーク管理プロトコル
ＳＰＩ  セキュリティパラメータインデックス
Ｓｔａｇｅｎ  状態発生器
ＳＹＮ  同期
ＴＣＰ  転送制御プロトコル
ＴＯＥ  転送オフロードエンジン
ＴＯＳ  サービスのタイプ
ＴＴＬ  生存時間
ＴＷ  待機時間
ＴＸ  送信
ＵＤＰ  ユーザデータグラムプロトコル
ＵＲＧ  緊急
ＶＬＡＮ  仮想ＬＡＮ
ＶＳＯＣＫ  仮想ソケット
ＷＳ  ウィンドウスケーリング
ＸＭＴＣＴＬ  送信制御
ＸＯＲ  排他的オア
【００１８】
［アプリケーションの概要］
［概要］
帯域幅が増加し続けるとき、ＴＣＰ／ＩＰ通信を処理する能力はシステムプロセッサのオーバーヘッドを超えるようになる。多数のソースはイーサネット（登録商標）レートが毎秒ギガビット（Ｇｂｐｓ）に到達するとき、そのＴＣＰ／ＩＰプロトコル処理はホストコンピュータのＣＰＵ帯域幅の１００％近くを消費し、レートがさらに１０Ｇｂｐｓまで増加するとき、ＴＣＰ／ＩＰプロトコル処理全体は専用のサブシステムヘオフロードされなければならないことを告げる。ここで記載されているＩＴ１０Ｇは、一連の状態マシーンとして例えばＡＲＰ、ＲＡＲＰ、ＩＰホストルーティングを含んだ関連するプロトコルと共にＴＣＰとＩＰを構成する。ＩＴ１０Ｇコアは転送オフロードエンジン（ＴＯＥ）としても知られている加速器またはエンジンを構成する。接続されたオンチッププロセッサがネットワークスタックの特性を拡張するために使用されるように処理できるようにフックが設けられているが、ＩＴ１０Ｇコアはプロセッサまたはソフトウェアを使用しない。
【００１９】
［サンプルアプリケーション］
ＩＴ１０Ｇコアの一例の使用はインテリジェントネットワークインターフェースカード（ＮＩＣ）である。典型的な応用では、ＮＩＣはコンピュータサーバへプラグ接続され、ネイティブにＴＣＰ／ＵＤＰ／ＩＰパケットを処理する。
【００２０】
図１は本発明のＮＩＣを概略したブロック図である。図１では、ＩＴ１０Ｇコア10はプロセッサ11、システム周辺機器12、単一チップＮＩＣ制御装置へのシステムバスインターフェース13と結合されている。単一チップＮＩＣ制御装置はイーサネット（登録商標）ＰＨＹ14と集積され、構成ＥＥＰＲＯＭ15、低いチップカウントＮＩＣを形成するためネットワークスタックの随意選択的な外部メモリと結合されている。プロセッサメモリ16（ＲＯＭとＲＡＭの両者）は集積されたチップに対して内部であっても外部に位置してもよい。
【００２１】
ＩＴ１０Ｇコア10の別の使用は記憶装置、プリンタ、カメラ等のようなネットワークに取付けられた装置に対するインターフェースとして機能することである。このような場合、カスタムアプリケーションソケット（またはインターフェース）17が層６、７プロトコルを処理し、そのアプリケーションに特別なデータの移動を容易にするためにＩＴ１０Ｇへ設けられることができる。例はストリーミングメディア、バルクなデータ移動、ｉＳＣＳＩおよびＦＣＩＰのようなプロトコルのためのカスタムデータパスを含んでいる。
【００２２】
図２は本発明にしたがったネットワークに取付けられた装置に対するインターフェースの概略ブロック図である。ＩＴ１０Ｇは１０Ｇｂｐｓのライン速度処理をサポートするように設計されており、同一のアーキテクチャおよび論理装置はまた低い速度で使用されることができる。これらの場合、イーサネット（登録商標）ＭＡＣ21とＰＨＹ14にのみ違いがある。低いライン速度のこのアーキテクチャを使用する利点には例えば低いパワー消費が含まれている。
【００２３】
［チャレンジ］
高速度の帯域幅に対するチャレンジはワイヤ回線速度でのＴＣＰ／ＩＰパケットの処理にある。これは以下の表に示されている。
【表１】
2010063110.tif 000003
【００２４】
注意：１  これは５００バイトの平均パケットサイズを仮定している。
２  これはパケット当りの５００の命令オーバーヘッドとバイト当りの１命令を仮定している。
【００２５】
前述の表の数字は非常に保守的であり、例えばネットワーク化の二重特性を考慮しない。二重動作が計算に入れられるならば、処理パワーの要求は容易に二倍になる。いずれにせよ、ギガビットレベルで開始して、ＴＣＰ／ＩＰの処理オーバーヘッドはホストコンピュータ処理パワーで主要なドレインであり、別の解決手段が必要であることが明白である。
【００２６】
［帯域幅の制限］
ＩＴ１０Ｇは種々のアーキテクチャを実装することでホストコンピュータの処理パワーの制限を解決する。当該実装は以下の特性を含んでいる。
・入力および出力されるデータのオンザフライ（ストリーミング）処理、
・超広いデータパス（現在の構造では６４ビット）、
・プロトコル状態マシーンの並列動作、
・共有されたリソースのインテリジェントなスケジュール化、
・最小にされたメモリコピー。
【００２７】
［システムの概要］
［概要］
このセクションは好ましい実施形態の上部レベルを説明する。これはシステムのブロックレベルの説明および異なるデータパスと転送タイプに対する動作理論を提供する。
【００２８】
本発明の実施形態はＩＴ１０Ｇネットワークスタックを含み、異なるアプリケーションで完全なネットワーク化サブシステムを提供するためにこれをプロセッサコアおよびシステムコンポーネントを結合する。システムのブロックレベル図は図３に示されている。
【００２９】
［クロック要求］
現在の本発明の好ましい実施形態は異なるクロックドメインで動作するように設計されたチップである。以下の表は１Ｇｂｐｓと１０Ｇｂｐｓ動作の両者のすべてのクロックドメインをリストしている。
【表２】
2010063110.tif 000004
【００３０】
［プロトコルプロセッサ］
［概要］
このセクションは内部プロトコルプロセッサの概要を与える。
【００３１】
［プロセスコア］
ここで説明するチップはプログラム能力とフレキシブル性のために内部（またはオンチップ）プロセッサを使用する。このプロセッサもまた動作システムを完成するために必要なすべての周辺機器を完備している。正常の動作状態下で、オンチッププロセッサはネットワークスラックを制御する。
【００３２】
［メモリアーキテクチャ］
オンチッププロセッサは４Ｇバイトまでのメモリをアドレスする能力を有する。このアドレススペース内にはすべてのその周辺機器、そのＲＡＭ、ＲＯＭ、ネットワークスラックが位置されている。
【００３３】
［ネットワークスラックアーキテクチャ］
［概要］
このセクションはＩＴ１０Ｇアーキテクチャを概要を説明する。ここでのその後のセクションは個々のモジュールについての詳細に入る。ＩＴ１０Ｇはネットワークスラックのハードウェアプロトコル処理機能を取り、１０Ｇｂｐｓレートまでのスケールを可能にするために強化を付加する。前のバージョンに対する主な付加はデータパス、状態マシーンの並列動作、共有されたリソースのインテリジェントなスケジュール化を広げることである。さらに、前にサポートされなかかった他のプロトコルはＲＡＲＰ、ＩＣＭＰ、ＩＧＭＰのようなプロトコルに対するサポートを付加される。図４はＩＴ１０Ｇの高レベルのブロック図である。
【００３４】
［動作理論］
ＩＴ１０Ｇを使用して任意のデータを転送する前に、ソケット接続が初期化されなければならない。これはコマンドブロックの使用またはＴＣＰソケットレジスタを直接プログラムアップすることにより行われることができる。ソケット毎にプログラムされなければならない特性には、目的地ＩＰアドレス、目的地ポート番号、接続のタイプ（例えばＴＣＰまたはＵＤＰ、サーバまたはクライアント）が含まれている。随意選択的なパラメータにはＱｏｓレベル、ソースポート、ＴＴＬ、ＴＯＳ設定のような設定が含まれている。これらのパラメータが一度入力されると、ソケットを起動することができる。ＵＤＰソケットの場合、データは即座に送信または受信され始めることができる。ＴＣＰクライアントに対しては、ソケット接続が最初に設定されなければならず、ＴＣＰサーバに対しては、ＳＹＮパケットがクライアントから受信され、その後ソケット接続が設定されなければならない。すべてのこのような動作はＩＴ１０Ｇハードウェアにより完全に実行されることができる。
【００３５】
［パケットの送信］
ＴＣＰパケットが送信される必要のあるとき、ホストコンピュータで動作するアプリケーションは最初にデータをソケット（固定したソケットまたは仮想ソケット−仮想ソケットはＩＴ１０Ｇアーキテクチャによりサポートされる）に書込む。現在の送信バッファが空であるならば、データがメモリに書込まれているとき、部分的に動作するチェックサムが維持される。部分的なチェックサムはチェックサム計算用のスタートシードとして使用され、データを送出する前に再度、データを通して読取るためのＩＴ１０ＧネットワークスタックにおけるＴＣＰ層の必要性をなくす。データは３２ビットまたは６４ビットチャンクでソケットバッファに書込まれることができる。４までの有効＿バイト信号が有効なバイトを示すために使用される。ソケットバッファに書込むとき、データは可能性のある有効ではないバイトを有する最後のワードだけでパックされなければならない。この段はまたデータチェックサムを計算しない選択肢が存在するＵＤＰパケットにも適用される。
【００３６】
一度、すべてのデータが書込まれると、ＳＥＮＤコマンドがホストコンピュータで動作するアプリケーションにより発生されることができる。この時点で、ＴＣＰ／ＵＤＰエンジンはパケット長を計算し、チェックサムし、ＴＣＰ／ＩＰヘッダを作成する。このＴＣＰ／ＩＰヘッダはソケットデータセクションに予めペンディングされる。パケットのバッファポインタはソケットＱｏＳレベルと共に、その後送信待ち行列に置かれる。
【００３７】
送信スケジューラはペンディングパケットを有するすべてのソケットを観察し、最高のＱｏＳレベルを有するパケットを選択する。この送信スケジューラは送信を必要とするすべてのタイプのパケットを観察する。これらのパケットには例えばＴＣＰ、ＵＤＰ、ＩＣＭＰ、ＡＲＰ、ＲＡＲＰ、生のパケットが含まれることができる。最小の帯域幅のアルゴリズムはソケットが完全に結合されないことを確実にするために使用される。ソケットパケットが送信に選択されたとき、ソケットバッファポインタはＭＡＣ  ＴＸインターフェースへ転送される。ＭＡＣ  ＴＸインターフェースはソケットバッファからデータを読取り、そのデータをＭＡＣへ送信するように動作する。バッファはイーサネット（登録商標）の衝突またはその他の理由で再送信が必要な場合に出力されるパケットを記憶するために使用される。一度パケットデータがオリジナルソケットバッファから送信されると、そのデータバッファは解放される。有効な送信状態がＭＡＣから受信されるとき、データバッファはフラッシュされ、次のパケットがその後送信されることができる。有効ではない送信状態がＭＡＣから受信されるならば、データバッファ中に記憶されている最後のパケットが再送信される。
【００３８】
［パケットの受信］
パケットがＭＡＣから受信されるとき、イーサネット（登録商標）ヘッダはパケットがこのネットワークスタックを目的地とするか否かを決定するために分析される。ＭＡＣアドレスフィルタはユニキャストアドレス、プログラムされたマスク内に入るユニキャストアドレス、放送アドレス、またはマルチキャストアドレスを受けるようにプログラムされることができる。さらに、カプセル化プロトコルもまた決定される。イーサネット（登録商標）ヘッダの１６ビットＴＹＰＥフィールドがＡＲＰ（０×０８０６）またはＲＡＲＰ（０×０８３５）パケットを示すならば、ＡＲＰ／ＲＡＲＰモジュールはさらにパケットを処理することを可能にされる。ＴＹＰＥフィールドがＩＰｖ４（０×０８００）へ復号されるならば、ＩＰモジュールはさらにパケットを処理することを可能にされる。例のサポートされたＴＹＰＥフィールドの完全なリストが以下の表に示されている。ＴＹＰＥフィールドが任意の他の値に復号されるならば、パケットは随意選択的にバッファに経路設定され、ホストコンピュータは未知のイーサネット（登録商標）パケットが受信されていることを通知される。この最後のケースでは、アプリケーションはパケットを読取り、適切な動作コースを決定する。このデータパスの構成により、例えばＩＰＸのようなハードウェアで直接サポートされない任意のプロトコルはＩＴ１０Ｇにより間接的にサポートされることができる。
【表３】
2010063110.tif 000005
【００３９】
注意：ＩＰｖ６パケットはイーサネット（登録商標）層で例外として管理される。
【００４０】
［ＡＲＰ／ＲＡＲＰパケット］
受信されたパケットがＡＲＰまたはＲＡＲＰパケットであるならば、ＡＲＰ／ＲＡＲＰモジュールが使用可能になる。これはパケットのＯＰフィールドを検査し、これがリクエストであるか回答であるかを決定する。リクエストであるならば、外部のエンティティが情報に対してポーリングをしている。ポールされているアドレスがＩＴ１０Ｇに対するものであるならば、ｒｅｐｌｙ＿ｒｅｑがＡＲＰ／ＲＡＲＰ回答モジュールへ送信される。受信されるパケットがＡＲＰまたはＲＡＲＰ回答であるならば、結果、即ちＭＡＣおよびＩＰアドレスがＡＲＰ／ＲＡＲＰリクエストモジュールへ送信される。
【００４１】
別の実施形態では、ＡＲＰおよび／またはＲＡＲＰ機能はＡＲＰ／ＲＡＲＰパケットを例外パスを介してホストへ伝送するためにＩＴ１０Ｇの専用のおよび最適化されたハードウェアを使用してホストコンピュータ中で処理される。
【００４２】
［ＩＰパケット］
受信されたパケットがＩＰパケットであるならば、ＩＰモジュールが使用可能になる。ＩＰモジュールは最初に受信されたパケットがＩＰｖ４パケットであるか否かを決定するためにＩＰヘッダ中のバージョンフィールドを検査する。
【００４３】
ＩＰモジュールは受信されたパケットの埋設されたプロトコルを構文解析する。復号されるプロトコルに基づいて、受信されたパケットは適切なモジュールへ送信される。本発明のこの実施形態のハードウェアにより直接サポートされるプロトコルには例えばＴＣＰおよびＵＤＰが含まれている。ＲＤＭＡのような他のプロトコルは他の最適化された処理モジュールによりサポートされることができる。すべての未知のプロトコルは例外ハンドラを使用して処理される。
【００４４】
［ＴＣＰパケット］
ＴＣＰパケットがＩＴ１０Ｇにより受信されるならば、ソケット情報は構文解析され対応するソケットが使用可能になる。ソケットの状態情報が検索され、受信されたパケットのタイプに基づいて、それにしたがってソケット状態が更新される。（応用可能であるならば）パケットのデータペイロードはソケットデータバッファに記憶されている。ＡＣＫパケットが発生される必要があるならば、ＴＣＰ状態モジュールはＡＣＫパケットを発生し、ＡＣＫパケットを送信するようにスケジュールする。オープンソケットに相関しないＴＣＰパケットが受信されるならば、ＴＣＰ状態モジュールはＲＳＴパケットを発生し、そのＲＳＴパケットは送信するようにスケジュールされる。
【００４５】
［ＵＤＰパケット］
ＵＤＰパケットが受信されるならば、ソケット情報が解析され、ソケット中に記憶されているデータはデータバッファを受信する。オープンソケットが存在しないならば、ＵＤＰパケットは暗黙に破棄される。
【００４６】
別の実施形態では、ＵＤＰパケットは例外ハンドラを使用してホストコンピュータにより処理されることができる。
【００４７】
［ネットワークスタックレジスタ］
ＩＴ１０Ｇのハードウェアネットワークスタックはオンチッププロセッサに対して周辺機器として現れるように構成される。ネットワークスタックのベースアドレスはオンチッププロセッサのＮＳ＿Ｂａｓｅ＿Ａｄｄレジスタを介してプログラムされる。このアーキテクチャはオンチッププロセッサがネットワークスタックをそのメモリまたはＩ／Ｏスペースの種々の位置に置くことを可能にする。
【００４８】
［イーサネット（登録商標）ＭＡＣインターフェース］
［概要］
以下の記載はイーサネット（登録商標）ＭＡＣインターフェースモジュールを説明している。イーサネット（登録商標）ＭＡＣインターフェースモジュールの機能はＩＴ１０Ｇのコアからイーサネット（登録商標）ＭＡＣを抽象化することである。これは例えばＩＴ１０Ｇコアアーキテクチャを変更せずに、ＩＴ１０Ｇネットワークスタックコアが異なる速度のＭＡＣおよび／または種々のソースからのＭＡＣに結合されることを可能にする。このセクションはＩＴ１０Ｇコアとのための通信のインターフェース要求について説明する。
【００４９】
［モジュールＩ／Ｏ］
図５はＭＡＣインターフェースモジュールで使用されるＩ／Ｏを概略的に示したブロック図である。
【００５０】
［イーサネット（登録商標）インターフェース］
［概要］
このセクションはイーサネット（登録商標）インターフェースモジュールを説明する。イーサネット（登録商標）インターフェースモジュールは低い端部のイーサネット（登録商標）ＭＡＣインターフェースと、および高い端部のＡＲＰおよびＩＰモジュールのようなブロックへ通信する。イーサネット（登録商標）インターフェースモジュールは受信および送信パスの両者のデータを処理する。送信側では、イーサネット（登録商標）インターフェースモジュールは送信のためのパケットのスケジュールをし、送信のためのＤＭＡチャンネルを設定し、イーサネット（登録商標）ＭＡＣインターフェース送信信号によって通信するように動作する。受信側では、イーサネット（登録商標）インターフェースモジュールはイーサネット（登録商標）ヘッダの解析、パケットがアドレスフィルタ設定に基づいて受信されるべきであるか否かの決定、パケットヘッダのＴＹＰＥフィールドに基づいた次のカプセル化されたプロトコルのエネーブル、上部層プロトコルに対して６４ビット境界で開始するようにデータを整列させるように動作する。図６はイーサネット（登録商標）インターフェース40の概略ブロック図である。
【００５１】
［サブモジュールブロックの説明］
［送信スケジューラ］
送信スケジューラブロック60はＡＲＰ、ＩＰ、ＴＣＰ、および生の送信モジュールから送信リクエストを取り、次に送信されるべきパケットを決定するように動作する。送信スケジューラは各送信リクエストのＱｏＳレベルを比較することにより送信順序を決定する。ＱｏＳレベルと共に、各送信リクエストはパケット長と共にパケットの開始メモリブロックへのポインタを含んでいる。送信スケジューラはあるパケットタイプの送信優先順をその他よりも重く加重するようにプログラムされる能力を有する。例えばＴＣＰモジュールからのＱｏＳレベル５はＩＰモジュールからのレベル５のリクエストよりも価値があるように作られることができる。送信スケジューラは多数のモジュールが並列して、送信データトラフィックに基づいた共有された方法で動作することを可能にする。以下の説明はパケットスケジュール化の決定に現在使用されているアルゴリズムである。
【００５２】
パケットチャンネルが欠乏状態に到達していないかをチェックする。これはチャンネルタイプ当りのプログラム可能なレベル、即ちＴＣＰ、ＩＰ、ＡＲＰ、生のバッファであり、これはスケジューラがＱｏＳレベルを無効にし、パケットが送出される前に何回チャンネルが通過されたかを示す。２以上のパケットが同時に欠乏状態に到達したならば、高い加重を有するチャンネルに優先順位が与えられる。他のパケットはその後で次に送信されるようにスケジュールされる。パケットが同一の優先順位の加重を有するならば、それらは次の順序、即ちＴＣＰ／ＵＤＰ、その後ＡＲＰ、その後ＩＰ  、その後生のイーサネット（登録商標）にしたがって代わる代わる送出される。
【００５３】
チャンネルが欠乏状態のパケットをもたないならば、最高の結合されたＱｏＳレベルとチャンネル加重を有するチャンネルが送信される。
【００５４】
１つのチャンネルだけが送信されるパケットを有している場合には、それは直ちに送信される。
【００５５】
一度、パケットチャンネルが送信するように選択されると、チャンネルメモリポインタ、パケット長、およびタイプがＤＭＡエンジンに転送される。転送が終了したとき、ＤＭＡエンジンは次に信号を送信スケジューラへ戻す。この時点でスケジューラはパケットパラメータをＤＭＡエンジンへ送信する。
【００５６】
［ＤＭＡエンジン］
ＤＭＡエンジン61は送信スケジューラからパケットパラメータを受信する。パケットパラメータはパケットタイプ、パケット長、開始メモリポインタを含んでいる。ＤＭＡエンジンはいくつのデータバイトがメモリから転送されるかを決定するためにパケット長を使用する。パケットタイプはどのメモリバッファからデータを検索するかをＤＭＡエンジンへ示し、開始メモリポインタはデータの読取りを開始する場所を示す。ＤＭＡエンジンは、出力するパケットが多数のメモリブロックに及ぶため、チャンネルパケットで使用される各メモリブロックがどれ程の大きさかを理解する必要がある。ＤＭＡエンジンはメモリ制御装置から一度にデータ６４ビットを受信し、データ６４ビットを一度に送信機インターフェースへ供給する。
【００５７】
［送信機インターフェース］
送信機インターフェース62はＤＭＡエンジンから出力を取り、イーサネット（登録商標）ＭＡＣインターフェースのｍａｃｏｕｔ＿ｌｏｃｋ、ｍａｃｏｕｔ＿ｒｄｙ、ｍａｃｏｕｔ＿ｅｏｆ、ｍａｃｏｕｔ＿ｖａｌ＿ｂｙｔｅ信号を発生する。６４ビットのｍａｃｏｕｔ＿ｄａｔａバスはＤＭＡエンジンからイーサネット（登録商標）ＭＡＣインターフェースへ直接的に接続する。
【００５８】
［受信機インターフェース］
受信機インターフェース63はイーサネット（登録商標）ＭＡＣインターフェースとインターフェースするように動作する。受信機インターフェースはデータを取り、そのデータを状態カウント情報と共にアドレスフィルタおよびパケットタイプパーサブロックへ与える。
【００５９】
［アドレスフィルタおよびパケットタイプパーサ］
アドレスフィルタおよびパケットタイプパーサ64はイーサネット（登録商標）ヘッダを解析し、以下の２つの主要な機能を行う。
・パケットが構内網スタック用であるか否かを決定する。
・残りのパケットを送信する場所を決定するために、カプセル化されたパケットタイプを解析する。
【００６０】
［アドレスフィルタ処理］
ネットワークスタックは以下のフィルタ選択肢でプログラムされることができる。
・プログラムされたユニキャストアドレスの受付、
・放送パケットの受付、
・マルチキャストパケットの受付、
・ネットマスクにより特定される範囲内のアドレスの受付、
・無差別モード（すべてのパケットを受入れる）。
【００６１】
これらのパラメータはすべてレジスタを介してホストコンピュータによって設定可能である。
【００６２】
［サポートされるパケットタイプ］
以下のパケットタイプはＩＴ１０Ｇハードウェアにより知られており、固有にサポートされる。
・タイプ＝０×８０００を有するＩＰｖ４パケット、
・タイプ＝０×０８０６を有するＡＲＰパケット、
・タイプ＝０×８０３５を有するＲＡＲＰパケット。
【００６３】
パケットタイプパーサはまた８０２．３の長さのパラメータがＴＹＰＥフィールドに含まれるケースを処理する。このケースは値が１５００（デシマル）以下であるときに検出される。この条件が検出されるとき、タイプパーサはカプセル化されたパケットを８０２＿フレーム信号の主張と共にＡＲＰおよびＩＰ受信モジュールの両者へ送信し、そのモジュールを本当に目的としていないという認識でパケットを復号すべきであることを各その後のモジュールが承認する。
【００６４】
注意：ＩＰｖ６パケットはイーサネット（登録商標）層により例外パケットとして扱われる。
【００６５】
図７は、アドレスフィルタおよびパケットタイプパーサモジュールの概略ブロック図であり、図８はアドレスフィルタおよびパケットタイプパーサモジュールの動作を示したタイミング図である。Ｉ／Ｏタイミングでは、そのパケットに対応するｍａｃｉｎ＿ｌｏｃｋ信号の主張が解除されるまで、パケットタイプを示す信号は主張された状態である。Ａｌｌ＿ｐａｃｋｅｔ信号はまた目的地ＭＡＣアドレスが許容可能である場合のみトリガーする。
【００６６】
アドレスフィルタおよびパケットタイプパーサモジュールはそれが理解していないパケットを構文解析し、サポートされていないタイプの特性が使用可能になったならば、そのパケットは記憶およびさらに処理するために例外ハンドラへ転送される。
【００６７】
［データ整列器］
データ整列器65は後続するパケット処理の層のデータバイトを整列させるように動作する。イーサネット（登録商標）ヘッダが６４ビットの偶数倍ではないのでデータ整列器が必要とされる。ＶＬＡＮタグが存在するか否かに応じて、データ整列器は上部処理層に対してデータがＭＳＢ位置調節されるように６４ビットデータを方向付けする。このようにしてイーサネット（登録商標）フレームのペイロードセクションは常に偶数の６４ビット境界で整列される。データ整列器はまた準備完了信号を次の層に発生するように動作する。準備完了信号はｍａｃｉｎ＿ｒｄｙが主張された後に、２または３の作動可能サイクルをアクチブにする。図９は構成データ整列モジュールの概略ブロック図である。
【００６８】
［イーサネット（登録商標）パケットフォーマット］
ＩＴ１０Ｇは８０２．３（ＳＮＡＰ）とＤＩＸフォーマットパケットの両者をネットワークから受取るが、ＤＩＸフォーマットのパケットだけを送信する。さらに、８０２．３パケットが受信されるとき、それらは最初にＤＩＸフォーマットに変換され、その後イーサネット（登録商標）フィルタにより処理される。それ故、すべてのイーサネット（登録商標）例外パケットはＤＩＸフォーマットで記憶される。
【００６９】
［ＡＲＰプロトコルおよびＡＲＰキャッシュモジュール］
［概要］
以下の記載はＡＲＰプロトコルおよびＡＲＰキャッシュモジュールの詳細な説明である。ＩＴ１０Ｇアーキテクチャの１実施形態では、ＡＲＰプロトコルモジュールはＲＡＲＰプロトコルもサポートするが、ＡＲＰキャッシュ自体を含まない。パケットを送信できる各モジュールは以外に早くＡＲＰキャッシュに問い合わせするので、この共通のリソースはこのＡＲＰモジュールから分離される。ＡＲＰプロトコルおよびＡＲＰキャッシュモジュールは受信されたパケットタイプに基づいてＡＲＰキャッシュへ更新を送信する。
【００７０】
ＡＲＰ特性リスト：
・ＡＲＰ回答を発生することによりＡＲＰリクエストに応答できる。
・ＡＲＰキャッシュに応答してＡＲＰリクエストを発生できる。
・複数のＩＰアドレスに対するＡＲＰ回答を与えることができる（マルチホームホスト／ＡＲＰ代理）。
・ターゲットとする（ユニキャスト）ＡＲＰリクエストを発生できる。
・不法のアドレスをフィルタリングする。
・整列されたＡＲＰデータをプロセッサへ転送する。
・無料のＡＲＰを行うことができる。
・ＣＰＵは自動ＡＲＰ回答発生をバイパスし、ＡＲＰデータを例外ハンドラへダンプしてもよい。
・ＣＰＵは（バイパスモードのとき）カスタムＡＲＰ回答を発生してもよい。
・ネットワーク状態に応じて、ＡＲＰパケットの可変の優先順位を有する。
【００７１】
ＲＡＲＰ特性リスト：
・ＩＰアドレスをリクエストする。
・特定のＩＰアドレスをリクエストする。
・ＲＡＲＰリクエストは例外ハンドラへハンドオフされる。
・不規則なＲＡＲＰ回答を管理する。
・整列されたＲＡＲＰデータをプロセッサまで送る。
・ＣＰＵはカスタムＲＡＲＰリクエストおよび回答を発生できる。
【００７２】
ＡＲＰキャッシュ特性：
・ダイナミックＡＲＰテーブルサイズ、
・自動的に更新されたＡＲＰエントリ情報、
・送信者のハードウェアアドレスが変化したときの割込み、
・ＡＲＰデータを混雑収集する能力、
・重複したＩＰアドレス検出および割込み生成、
・ＡＲＰモジュールを介するＡＲＰリクエスト能力、
・静的なＡＲＰエントリのサポート、
・静的なＡＲＰエントリがダイナミックＡＲＰデータにより置換されることを可能にする選択肢、
・ＡＲＰ代理のサポート、
・ＡＲＰエントリの構成可能な満了時間。
（ＣＰＵはこのコンテキストではホストコンピュータＣＰＵまたはオンチッププロセッサのいずれであってもよい。）
【００７３】
［ＡＲＰモジュールブロック図］
図１０はＡＲＰモジュールの１構成の概略ブロック図である。
【００７４】
［ＡＲＰキャッシュモジュールブロック図］
図１１はＡＲＰキャッシュブロックの１構成の概略ブロック図である。
【００７５】
［動作のＡＲＰモジュール理論］
［パケットの構文解析］
ＡＲＰモジュール100はＡＲＰとＲＡＲＰパケットだけを処理する。モジュールはイーサネット（登録商標）受信モジュールから受信される準備完了信号を待機する。その信号が受信されたとき、入来するイーサネット（登録商標）フレームのフレームタイプがチェックされる。フレームタイプがＡＲＰ／ＲＡＲＰではないならば、そのパケットは無視される。そうでなければモジュールは解析を開始する。
【００７６】
データは６４ビットワードでイーサネット（登録商標）インターフェースから読取られる。ＡＲＰパケットは３．５ワードを取る。ＡＲＰタイプのパケットの最初のワードはほとんど静的な情報を含んでいる。ＡＲＰタイプのパケットの最初のワードの最初ン４８ビットはハードウェアタイプ、プロトコルタイプ、ハードウェアアドレス長、およびプロトコルアドレス長を含んでいる。これらの受信された値はイーサネット（登録商標）でＩＰｖ４に対するＡＲＰリクエストで予測される値と比較される。受信された値が一致しないならば、データはさらに処理するために例外ハンドラへ送られる。そうでなければ、ＡＲＰモジュールは解析を継続する。ＡＲＰタイプのパケットの最初のワードの最後の１６ビットは演算コードを含んでいる。ＡＲＰモジュールは演算コードを記憶し、これが有効であるか否か、即ち１、２または４であるかをチェックする。演算コードが有効ではないならば、データはさらに処理するために例外ハンドラへ送られる。そうでなければＡＲＰモジュールは解析を継続する。
【００７７】
ＡＲＰタイプのパケットの第２のワードはソースイーサネット（登録商標）アドレスと、半分のソースＩＰアドレスを含んでいる。ＡＲＰモジュールは最初の４８ビットをソースイーサネット（登録商標）アドレスレジスタへ記憶する。その後、ＡＲＰモジュールはこのフィールドが有効なソースイーサネット（登録商標）アドレスであるか否かをチェックする。アドレスはＩＴ１０Ｇネットワークスタックのアドレスと同一であってはならない。ソースアドレスが有効ではないならば、そのパケットは破棄される。パケットの最後の１６ビットはその後、ソースＩＰアドレスレジスタの上半分中に記憶される。
【００７８】
ＡＲＰタイプのパケットの第３のワードはソースＩＰアドレスの第２の半分の部分とターゲットイーサネット（登録商標）アドレスとを含んでいる。ＡＲＰモジュールは最初の１６ビットをソースＩＰアドレスレジスタの下半分に記憶し、記憶された値が有効なソースＩＰアドレスであるか否かをチェックする。アドレスはＩＴ１０Ｇハードウェアのアドレスまたは放送アドレスと同一であってはならない。またソースアドレスは同一のサブネットにあるべきである。ソースアドレスが有効ではないならば、ＡＲＰモジュールはそのパケットを破棄する。パケットがＡＲＰ／ＲＡＲＰ回答であるならば、ターゲットハードウェアアドレスをイーサネット（登録商標）アドレスと比較する。アドレスが一致しないならば、ＡＲＰモジュールはそのパケットを破棄する。そうでなければ、ＡＲＰモジュールは解析を継続する。
【００７９】
ＡＲＰタイプのパケットの最後のワードの最初の３２ビットだけがデータ（ターゲットＩＰアドレス）を含んでいる。ＡＲＰモジュールはターゲットＩＰアドレスをレジスタに記憶する。パケットが（ＡＲＰリクエストまたはＲＡＲＰパケットと反対に）ＡＲＰパケットであるならば、ターゲットＩＰアドレスをＩＰアドレスと比較する。アドレスが一致しないならばこのパケットを破棄する。そうでなければ、このパケットがＡＲＰリクエストであるならば、ＡＲＰ回答を発生する。これがＲＡＲＰ回答であるならば、割当てられたＩＰアドレスをＲＡＲＰハンドラへ転送する。
【００８０】
一度、すべてのアドレスデータが確認されると、ソースアドレスはＡＲＰキャッシュに転送される。
【００８１】
［送信パケット］
ＡＲＰモジュールはパケットを３つのソース、即ちＡＲＰキャッシュ110（ＡＲＰリクエスト）、（ＡＲＰ回答の）パーサ／ＦＩＦＯバッファから内部に、（カスタムＡＲＰ／ＲＡＲＰの）システム制御装置またはホストコンピュータからパケットを送信するためのリクエストを受信できる。この状態のために、優先順位―待ち行列のタイプがＡＲＰ／ＲＡＲＰパケットの送信をスケジュールするのに必要である。
【００８２】
送信リクエストは２以上のエントリが送信を希望するときを除いて、先着順サービスで待ち行列に置かれる。その場合、待ち行列に置かれている次のリクエストはその優先順位にしたがう。ＲＡＲＰリクエストは通常最高の優先順位を有し、ＡＲＰリクエストがそれに続く。ＡＲＰ回答は通常最低の優先順位を有する。優先順位の使用によりデータトラフィックにしたがってリソースが共有されることができる。
【００８３】
ＡＲＰ回答が最高の優先順位を有する１つの状態が存在する。これはＡＲＰ回答ＦＩＦＯバッファが満たされているときに生じる。ＦＩＦＯバッファが満杯であるとき、入来するＡＲＰリクエストは破棄され始め、それ故ＡＲＰ回答はＡＲＰリクエストを再送信させることを避けるためにその時点で最高の優先順位を有するべきである。
【００８４】
送信待ち行列が満たされているとき、１以上の送信リクエストが達成されＦる（待ち行列から外される）までさらにリクエストは行われない。ＡＲＰモジュールが一杯になった待ち行列を検出したとき、送信アービタからの優先順位の増加をリクエストする。待ち行列には２つの状態、即ち一杯または一杯ではない状態しか存在しないので、このリクエスト信号は単一ビットであることができる。
【００８５】
送信アービタがＡＲＰモジュールを送信することを可能にするとき、ＡＲＰ／ＲＡＲＰパケットは送信されるパケットのタイプにしたがってダイナミックに発生される。パケットのタイプは命令コードにより決定され、これは待ち行列の各エントリで記憶される。図１２は送信待ち行列エントリフォーマットを示している。
【００８６】
［バイパスモード］
ＡＲＰモジュールは入来するパケットデータの自動処理をバイパスする選択肢を有している。バイパスフラグが設定されるとき、入来するＡＲＰ／ＲＡＲＰデータは例外ハンドラバッファへ転送される。ＣＰＵはその後、バッファをアクセスし、データを処理する。バイパスモードであるとき、ＣＰＵはそれ自身でＡＲＰ回答を発生し、データを送信スケジューラへ転送する。出力するＡＲＰ／ＲＡＲＰパケットでカスタム化されることができるフィールドは、ソースＩＰアドレス、ソースイーサネット（登録商標）アドレス、ターゲットＩＰアドレス、命令コードである。すべての他のフィールドはイーサネット（登録商標）によってＩＰｖ４のＡＲＰ／ＲＡＲＰで使用される標準的な値に一致し、ソースイーサネット（登録商標）アドレスはイーサネット（登録商標）インターフェースのアドレスに設定される。（ＣＰＵはこの文脈ではホストコンピュータまたはオンチッププロセッサであってもよい。）
注意：これらの他のＡＲＰ／ＲＡＲＰフィールドの変更が必要であるならば、ＣＰＵは生のイーサネット（登録商標）フレーム自体を発生しなければならない。
【００８７】
［ＡＲＰキャッシュの動作理論］
［ＡＲＰキャッシュへのＡＲＰエントリの付加］
ターゲットとするＡＲＰリクエストおよび回答（ダイナミック）を受信するとき、またはＣＰＵ（静的）によりリクエストされるときにＡＲＰが生成される。（ＣＰＵはこの文脈ではホストコンピュータまたはオンチッププロセッサであってもよい。）ダイナミックなエントリはＡＲＰリクエストまたは回答がインターフェースＩＰアドレスの１つに対して受信されるときに生成されるＡＲＰエントリである。ダイナミックエントリはユーザまたはホストコンピュータで動作するアプリケーションプログラムにより特定されるときに典型的には５乃至１５分の限定された時間だけ存在する。静的エントリはユーザにより生成され、通常終了しないＡＲＰエントリである。
【００８８】
新しいＡＲＰデータは２つのソース、即ちＡＲＰレジスタを介するＣＰＵおよびＡＲＰパケットパーサから来る。入来するＡＲＰデータを可能な限り迅速に処理することが必要であるので、両者のソースが同時にＡＲＰエントリを付加するようにリクエストするとき、ダイナミックＡＲＰエントリは優先順位を有する。
【００８９】
一度、ＡＲＰデータソースが選択されると、ＩＴ１０ＧハードウェアメモリのどこにＡＲＰエントリを記憶されるかを決定することを必要とする。これを行うために所定のＩＰアドレスをメモリ位置中にマップするために探索テーブル（ＬＵＴ）を使用する。探索テーブルは２５６のエントリを含んでいる。各エントリは１６ビット幅であり、メモリポインタおよびポインタ有効（ＰＶ）ビットを含んでいる。ＰＶビットはポインタが有効なアドレス、即ちＡＲＰキャッシュにより割当てられるメモリブロックの開始アドレスを指しているか否かを決定するために使用される。図１３は探索テーブルエントリフォーマットを示している。
【００９０】
ＬＵＴの何処からポインタを検索する必要があるかを決定するために、８ビットインデックスを使用する。このインデックスは３２ビットＩＰアドレスの最後のオクテットから取られる。最後のオクテットを使用する理由は構内網（ＬＡＮ）では、これがホスト間で最も変化するＩＰアドレス部分であるからである。
【００９１】
一度、ＬＵＴの使用するスロットを決定すると、そのスロットに有効なポインタ（ＰＶ＝“１”）が含まれているか否かをチェックする。有効なポインタが存在するならば、このインデックスに割当てられたメモリのブロックが存在することを意味し、ターゲットＩＰアドレスはそのブロックで発見されることができる。この点で、指向されているメモリのブロックが検索され、ターゲットＩＰアドレスが検索される。ＬＵＴがこのスロットに有効なポインタを含まないならば、メモリは内部メモリ、ｍａｌｌｏｃ１から割当てられなければならない。一度、メモリが割当てられると、割当てられたメモリの第１のワードのアドレスはＬＵＴエントリのポインタフィールドに記憶される。
【００９２】
メモリを割当て、ポインタをＬＵＴに記憶した後、必要なＡＲＰデータを記憶する必要がある。このＡＲＰデータはこれがキャッシュ探索中に正確なエントリであるか否かを決定するのに必要なＩＰアドレスを含んでいる。制御フィールドのセットもまた使用される。再試行カウンタは所定のＩＰアドレスで行われる複数のＡＲＰリクエスト試行の追跡を続けるために使用される。タイプフィールドはキャッシュエントリのタイプ（０００＝ダイナミックエントリ；００１＝静的エントリ；０１０＝代理エントリ；０１１＝ＡＲＰチェックエントリ）を示す。解決フラグはこのＩＰアドレスがイーサネット（登録商標）アドレスに適切に解決されていることを示す。有効なフラグはこのＡＲＰエントリが有効なデータを含んでいることを示す。注意；最初のＡＲＰリクエストが行われている間はエントリは有効であり解決されない。ｓｒｃフィールドはＡＲＰエントリのソース（００＝ダイナミックな加算、０１＝システムインターフェース、１０＝ＩＰルータ、１１＝両システムインターフェースおよびＩＰルータの両者）を示している。インターフェースフィールドは多数のイーサネット（登録商標）インターフェースの使用を可能にするが、単一のインターフェース（０）にデフォルトする。後続する制御フィールドは以下のＡＲＰエントリを指すリンクアドレスである。リンクアドレスの上位桁ビット（ＭＳＢ）は実際にはフラグｌｉｎｋ＿ｖａｌｉｄである。ｌｉｎｋ＿ｖａｌｉｄビットはこれに続く別のＡＲＰエントリが存在することを示している。最後の２つのフィールドはＩＰアドレスが解決されるイーサネット（登録商標）アドレスと、タイムスタンプである。タイムスタンプはＡＲＰアドレスが生成されたときを示し、エントリが満了しているか否かを決定するために使用される。図１４はＡＲＰキャッシュエントリフォーマットの一例を示している。
【００９３】
２５６を超えるホストまたは多数のサブネットを有するＬＡＮでは、異なるＩＰアドレス間の衝突がＬＵＴで生じる。換言すると、２以上のＩＰアドレスが同じＬＵＴインデックスにマップされることができる。これはそのＩＰアドレスの最後のオクテットに所定の値を有する２以上のホストのためである。衝突に対処するため、ＡＲＰキャッシュは鎖を使用し、これについて次に説明する。
【００９４】
ＬＵＴで探索を行い、エントリがそのスロットに既に存在することが分かったとき、メモリから指向されるＡＲＰエントリを検索する。ＡＲＰエントリのＩＰアドレスを検査し、これをターゲットＩＰアドレスと比較する。ＩＰアドレスが一致するならば、単にエントリを更新できる。しかしながら、アドレスが一致しないならば、Ｌｉｎｋ＿ＶａｌｉｄフラグとＡＲＰエントリの最後の１６ビットを観察する。最後の１６ビットは同一のＬＵＴインデックスにマップする別のＡＲＰエントリを指向するリンクアドレスを含んでいる。Ｌｉｎｋ＿Ｖａｌｉｄビットが主張されるならば、リンクアドレスフィールドを指向するＡＲＰエントリを検索する。再度エントリ中のＩＰアドレスがターゲットＩＰアドレスに比較される。一致が存在するならば、エントリは更新され、存在しないならば、探索プロセスは一致が発見されるかＬｉｎｋ＿Ｖａｌｉｄビットが主張されなくなるまで（鎖中の後続するリンクで）継続する。
【００９５】
鎖の最後に到達し、一致が発見されないときには、新しいＡＲＰエントリが生成される。新しいＡＲＰエントリの生成はｍａｌｌｏｃ１メモリ制御装置によるメモリの割当てを必要とする。メモリの各ブロックは大きさが１２８バイトである。したがって、各ブロックは８ＡＲＰエントリを収容できる。ブロックの最後に到達したならば、新しいメモリブロックがｍａｌｌｏｃ１からリクエストされなければならない。
【００９６】
前述したように、ユーザ（またはホストコンピュータで動作するアプリケーション）は静的または永久的なＡＲＰエントリを生成する選択肢を有している。ユーザはダイナミックＡＲＰデータが静的エントリを置換することを可能にする選択肢を有している。換言すると、静的ＡＲＰエントリが既に生成されているＩＰアドレスのためにＡＲＰデータが受信されるとき、その静的エントリは受信されたデータと置換されることができる。このアレンジメントの利点は静的エントリが古くなり、ダイナミックなデータを静的データに重ね書きすることを可能にし、より新しいＡＲＰテーブルを生じることである。ＩＰからイーサネット（登録商標）に対するアドレスのマッピングが一定であり、例えばルータインターフェースのＩＰおよびイーサネット（登録商標）アドレスを記憶していることをユーザが確信しているならば、この更新能力はディスエーブルされる。ユーザはまたＬＡＮでのＡＲＰ放送数を最小にするために静的エントリを保持するように選択することもできる。注意：ＡＲＰ代理エントリはダイナミックＡＲＰデータにより重ね書きされることが絶対にできない。
【００９７】
［キャッシュのエントリの探索］
ＡＲＰキャッシュのエントリの探索はＡＲＰエントリの生成プロセスと類似したプロセスをたどる。探索はメモリが所定のインデックスに割当てられているか否かを決定するためにＬＵＴを使用することにより開始する。メモリが割当てられているならば、メモリはエントリが発見される（キャッシュヒットが生じる）か、ゼロに設定されている（キャッシュの損失）ｌｉｎｋ＿ｖａｌｉｄフラグを有するエントリに遭遇するまで検索される。
【００９８】
キャッシュの損失が生じたならば、ＡＲＰリクエストが発生される。これは必要ならば、キャッシュの新しいＡＲＰエントリと、新しいＬＵＴエントリを生成することを含んでいる。新しいＡＲＰエントリでは、ターゲットＩＰアドレスが記憶され、解決ビットはゼロに設定され、有効ビットは１に設定される。リクエストカウンタは同様にゼロに設定される。エントリはその後時間スタンプされ、ＡＲＰリクエストはＡＲＰモジュールに送られる。回答が１秒後に受信されないならば、リクエストカウンタはインクリメントされ、別のリクエストが送信される。３つのリクエストを送信し、回答を受信しなかった後、ターゲットＩＰを解決する試みは断念される。注意：再試行インターバルと、リクエスト再試行数はユーザによる構成が可能である。
【００９９】
キャッシュの損失が生じたとき、リクエストモジュールは損失を通知される。これによりＣＰＵまたはＩＰルータは現在のターゲットＩＰアドレスに対するＡＲＰ回答を待機することを決定するか、別のＩＰアドレスの新しい探索を開始して現在のＩＰアドレスを待ち行列の後部に位置させる機会が与えられる。これは多数の接続の設定におけるキャッシュ損失の衝撃を最小にする。図１５はＡＲＰ探索プロセスを示すフロー図である。
【０１００】
一致するエントリが発見される（キャッシュヒット）ならば、解決されたイーサネット（登録商標）アドレスはＡＲＰ探索をリクエストするモジュールに戻される。そうでなく、ターゲットＩＰアドレスがキャッシュで発見されず、すべてのＡＲＰリクエストの試行がタイムアウトであるならば、リクエストモジュールはターゲットＩＰアドレスが解決されなかったことを通知される。
【０１０１】
注意：ＩＰルータからのＡＲＰ探索リクエストが失敗したとき、ルータはそのアドレスをさらに探索することを開始する前に最低２０秒待たなければならない。
【０１０２】
［キャッシュ初期化］
ＡＲＰキャッシュが初期化されるとき、幾つかのコンポーネントはリセットされる。探索テーブル（ＬＵＴ）はすべてのＰＶビットをゼロに設定することによりクリアされる。現在使用されるすべてのメモリは割当てを解除され、ｍａｌｌｏｃ１メモリ制御装置へ解放されて戻される。ＡＲＰ満了タイマもゼロに設定される。
【０１０３】
初期化期間中、ＡＲＰリクエストは発生されない。またＣＰＵ（静止エントリ）から、或いは受信されたＡＲＰデータ（ダイナミックエントリ）からＡＲＰエントリを生成する試みは無視されるか破棄される。
【０１０４】
［ＡＲＰエントリの満了］
ダイナミックＡＲＰエントリは限定された時間量だけＡＲＰキャッシュにのみ存在できる。これは任意のＩＰからイーサネット（登録商標）へのアドレスのマッピングが失効されることを防止する。古いアドレスのマッピングはＬＡＮがＩＰアドレスを割当てるためにＤＨＣＰを使用するか、装置のイーサネット（登録商標）インターフェースが通信セッション中に変更されるならば生じる。
【０１０５】
時間の追跡を維持するために１６ビットカウンタが使用される。１Ｈｚのクロック周波数で動作するカウンタが経過した秒数を追跡するために使用される。各ＡＲＰエントリはこのカウンタから取られる１６ビットのタイムスタンプを含んでいる。このタイムスタンプはＩＰアドレスが適切に解決されるときに取られる。
【０１０６】
ＡＲＰエントリの満了はＡＲＰキャッシュがアイドルであるとき、即ち探索またはリクエストが現在処理されないときに生じる。このとき８ビットカウンタはＬＵＴを巡回し検索するために使用される。ＬＵＴの各スロットは有効なポインタを含んでいるか否かを見るためにチェックされる。ポインタが有効ならば、指向するメモリブロックが検索される。その後、そのブロック内の各エントリはそのタイムスタンプと現在の時間との差がＡＲＰエントリの最大寿命以上であるか否かを見るためにチェックされる。他のメモリブロックが第１のメモリブロックから鎖を外されるならば、これらのブロックに含まれるエントリもチェックされる。一度、所定のＬＵＴインデックスに関連するすべてのエントリがチェックされると、次のＬＵＴスロットがチェックされる。
【０１０７】
エントリが満了されていることが発見されたならば、エントリ中の有効なビットはゼロに設定される。同一のメモリブロックにその他のエントリが存在しないならば、ブロックは割当てを解除されてｍａｌｌｏｃ１に戻される。割当てを解除されたブロックは所定のＬＵＴスロットに関連する唯一のブロックであるならば、そのスロットのＰＶビットもゼロに設定される。
【０１０８】
［ＡＲＰ代理の実行］
ＡＲＰキャッシュは代理ＡＲＰエントリをサポートする。ＡＲＰ代理は、この装置がＬＡＮトラフィックのルータとして作用するときまたはＡＲＰの問い合わせに応答できない装置がＬＡＮに存在するときに使用される。
【０１０９】
ＡＲＰ代理が使用可能になると、ＡＲＰモジュールはそのホストに属さないＩＰアドレスに対するリクエストをＡＲＰキャッシュまで通過する。ＡＲＰキャッシュはその後、ターゲットＩＰアドレスを検索するため探索を行う。一致を発見したならば、それが代理エントリであるか否かを決定するためにＡＲＰエントリのタイプフィールドを検査する。代理エントリであるならば、ＡＲＰキャッシュは対応するイーサネット（登録商標）アドレスをＡＲＰモジュールへ戻す。ＡＲＰモジュールはその後代理エントリで発見されたイーサネット（登録商標）アドレスをソースイーサネット（登録商標）アドレスとして使用してＡＲＰ回答を生成する。注意：ＡＲＰ代理探索は入来するＡＲＰリクエストに対してのみ行われる。
【０１１０】
［重複ＩＰアドレスの検出（ＡＲＰチェック）］
システム（ホストコンピュータとＩＴ１０Ｇハードウェア）が最初にネットワークに接続するとき、ユーザまたはホストコンピュータで動作するアプリケーションはネットワーク上の任意の他の装置がそのインターフェースに割当てられたＩＰアドレスの１つを使用しているか否かを試験するために無料のＡＲＰリクエストを行うべきである。同一のＬＡＮ上の２つの装置が同じＩＰアドレスを使用するならば、これは２つのホストの経路設定パケットについて問題を発生する。無料のＡＲＰリクエストはホスト固有のＩＰアドレスのリクエストである。問合せに対する回答が受信されないならば、ＬＡＮにはＩＰアドレスを使用しているホストが他にないと仮定されることができる。
【０１１１】
ＡＲＰチェックはＡＲＰ探索を行う方法と類似の方法で開始される。唯一の違いはキャッシュは一度ＡＲＰリクエストが完了すると破棄されることである。回答が受信されないならば、エントリは除去される。回答が受信されるならば、ホストコンピュータにＩＰアドレスがＬＡＮ上の別の装置により使用されていることを通知するため割込みが発生され、エントリはキャッシュから除去される。
【０１１２】
［キャッシュアクセスの優先順位］
異なるタスクはＡＲＰキャッシュメモリに対するアクセスに関して異なる優先順位を有する。代理エントリの探索はＡＲＰリクエストに対する迅速な応答を必要とするために最高の優先順位を有する。第２の優先順位はダイナミックエントリをキャッシュに付加することであり、入来するＡＲＰパケットは非常に高いレートで受信され、再送信を避けるために可能な限り迅速に処理されなければならない。ＩＰルータからのＡＲＰ探索は次に高い優先順位を有し、それにホストコンピュータによる探索が続く。ＡＲＰエントリの手作業の生成は第２に低い優先順位を有する、満了キャッシュエントリは最低の優先順位を有し、キャッシュがＡＲＰ探索を処理しないときまたは新しいエントリを生成しないときにはいつでも行われる。
【０１１３】
［ＩＰモジュール］
［概要］
ＵＴ１０Ｇはすべてのタイプの受信されたパケットで自動解析するＩＰｖ４パケットを固有にサポートする。
【０１１４】
［ＩＰモジュールのブロック図］
図１６はＩＰモジュールブロックの１構成の概略ブロック図である。
【０１１５】
［ＩＰサブモジュールの説明］
［ＩＰパーサ］
ＩＰパーサモジュール161は受信されたＩＰパケットを解析し、パケットを送信する場所を決定するように動作する。各受信されたＩＰパケットはＴＣＰ／ＵＤＰモジュールまたは例外ハンドラへ送信されることができる。
【０１１６】
［ＩＰヘッダフィールドの解析］
ＩＰｖ４だけがＩＰモジュールにより受取られ解析され、それ故、このフィールドは処理される０×４に相違ない。ＩＰｖ６パケットが検出されるならば、例外ハンドラにより例外として管理され処理される。０×４よりも小さいバージョンを有する任意のパケットは奇形（不法）として考慮され、そのパケットはドロップされる。
【０１１７】
［ＩＰヘッダ長］
ＩＰヘッダ長フィールドは任意のＩＰオプションが存在するか否かを決定するために使用される。このフィールドは５以上でなければならない。それよりも小さいならば、パケットは奇形として考慮され、ドロップされる。
【０１１８】
［ＩＰ  ＴＯＳ］
このフィールドは受信されたパケットにおいて解析または維持されない。
【０１１９】
［パケットＬｅｎ］
このフィールドは受信されたパケット中の総バイト数を決定し、次のレベルのプロトコルにそのデータセクションの最後が存在する場所を示すために使用される。このカウントの満了後で、ｉｐ＿ｐａｃｋｅｔ信号が主張を解除する前に受信されたすべてのデータバイトは埋め込みバイトであると仮定され、暗黙的に破棄される。
【０１２０】
［パケットＩＤ、フラグ、断片化オフセット］
これらのフィールドはパケットの断片化解除に使用される。断片化されたＩＰパケットは専用のハードウェアにより処理されるか、または例外として扱われ、例外ハンドラにより処理されることができる。
【０１２１】
［ＴＴＬ］
このフィールドは受信されたパケットにおいて解析または維持されない。
【０１２２】
［ＰＲＯＴ］
このフィールドは次にカプセル化されるプロトコルの決定に使用される。以下のプロトコルはハードウェアで十分にサポート（または別の実施形態では部分的にサポート）される。
【表４】
2010063110.tif 000006
【０１２３】
任意のその他のプロトコルが受信され、ｕｎｓｕｐｐｏｒｔ＿ｐｒｏｔ特性が使用可能になるならば、パケットはホストコンピュータに送信されることができる。プロトコルフィルタは選択的にあるプロトコルを受信することを可能にされることができる。そうでなければパケットは暗黙的に破棄される。
【０１２４】
［チェックサム］
このフィールドは解析または維持されない。これは単にチェックサムが正しいことを確実にするために使用される。チェックサムが不適切であることが判明したならば、すべての次の層に行くｂａｄ＿ｃｈｅｃｋｓｕｍ信号が主張される。これは応答されるまで主張の状態である。
【０１２５】
［ソースＩＰアドレス］
このフィールドは解析されＴＣＰ／ＵＤＰ層へ送信される。
【０１２６】
［目的地ＩＰアドレス］
このフィールドは解析され、ローカルスタックが応答すべき有効なＩＰアドレスに対してチェックされる。これは１よりも多くのクロックサイクルを取り、この場合解析は継続されなければならない。パケットが誤って誘導されていることが判明したならば、ｂａｄ＿ｉｐ＿ａｄｄ信号が主張される。これは応答されるまで主張の状態である。
【０１２７】
［ＩＰ  ＩＤ発生アルゴリズム］
オンチッププロセッサは任意の１６ビット値をＩＰ＿ＩＤ＿Ｓｔａｒｔレジスタへ書込むことによりＩＰ  ＩＤシード値を設定できる。ＩＤ発生器はこの値を取り、異なるリクエスタにより使用されるＩＰ  ＩＤを発生するために１６ビットのマッピングを行う。オンチッププロセッサ、ＴＣＰモジュール、ＩＣＭＰエコー回答発生器はすべてＩＰＩＤをリクエストできる。ＩＤ発生器の１構造のブロック図が図１７に示されている。
【０１２８】
ＩＰ  ＩＤシードレジスタは新しいＩＰ  ＩＤがリクエストされる毎にインクリメントされる。ビットマッパブロックはＩＰ  ＩＤ＿Ｏｕｔバスが簡単なインクリメント値ではないようにＩＰ  ＩＤ＿Ｒｅｇ値を再度アレンジする。
【０１２９】
［ＩＰインジェクタモジュール］
ＩＰインジェクタモジュールはオンチッププロセッサからＩＰおよびＴＣＰモジュールへパケットを注入するために使用される。ＩＰインジェクタ制御レジスタはＩＰモジュールレジスタスペースに位置され、これらのレジスタはオンチッププロセッサによりプログラムされる。ＩＰインジェクタのデータフローを示すブロック図が図１８に示されている。
【０１３０】
図から認められるように、ＩＰインジェクタはＩＰモジュール下にデータを挿入できる。ＩＰ注入を使用するために、オンチッププロセッサはパケットが存在するメモリの開始アドレス、パケットの長さ、ソースＭＡＣアドレスでＩＰインジェクタモジュールをプログラムする。インジェクタモジュールはオンチッププロセッサのメモリからスタックへのパケットの送信を完了するときに割込みを発生する。
【０１３１】
［ＴＣＰ／ＵＤＰモジュール］
［概要］
このセクションはＴＣＰモジュールを説明し、これはＴＣＰおよびＵＤＰ転送プロトコルを管理する。ＴＣＰモジュールは４つの主要なセクション、即ちソケット送信インターフェース、ＴＣＰ送信インターフェース、ＴＣＰ受信インターフェース、ソケット受信インターフェースに分割される。
【０１３２】
［特徴リスト］
以下はＩＴ１０ＧのＴＣＰ特性のリストである。
６４Ｋソケットサポート            ＴＣＰの適切でないサポート
スロースタート                    高速再送信／高速度回復
選択可能なＮａｇｌｅアルゴリズム  ウィンドウスケーリング
選択的なＡＣＫ（ＳＡＣＫ）        ラップされたシーケンス番号に対する保護
（ＰＡＷＳ）
タイムスタンプサポート            キープアライブタイマ
［ウィンドウスケーリング］
ＩＴ１０Ｇはウィンドウスケーリングをサポートする。ウィンドウスケーリングはＴＣＰウィンドウの規定を３２ビットに拡大する拡張である。これはＲＦＣ１３２３セクション２（http://www.rfc-editor.org/rfc/rfc1323.txtを参照）に規定されている。ウィンドウスケール動作は３つの変数に基づいている。１つはＴＣＰ＿Ｃｏｎｔｒｏｌ１のＳＬ＿Ｗｉｎ＿Ｅｎビット（これはウィンドウスケールを使用可能にする）であり、２つ目はＴＣＰ＿Ｃｏｎｔｒｏｌ３のスライディングウィンドウスケール（これはスケーリングファクタを設定する）であり、最後のものはスケールされる値を決定するＷＣＬＡＭＰパラメータである。
【０１３３】
ＳＬ＿Ｗｉｎ＿Ｅｎビットなしに、ハードウェアはＴＣＰ−３方向のハンドシェイク中にＴＣＰウィンドウスケールオプションを介してウィンドウスケーリングを交渉しようとしない。
【０１３４】
［ＴＣＰダンプモード］
ＴＣＰダンプモードはＴＣＰダンプおよび他のパケット監視プログラムのような広く使用される診断プログラムに対するサポートを可能にするＩＴ１０Ｇハードウェアモードである。ＴＣＰダンプモードが使用可能になるとき、すべての受信されたパケットは例外としてホストに送信され、ハードウェアスタックから来るすべての出力されるＴＣＰ／ＵＤＰパケットは例外パケットとしてループバックされる。
【０１３５】
ドライバはネットワークモニタに対するこれらのパケットのコピーを作り、受信パケットを再度注入し、送信パケットを生のイーサネット（登録商標）フレームとして送信する。
【０１３６】
［ホストＡＣＫモード］
ホストＡＣＫモードはホストコンピュータがデータをＴＣＰセグメントから受信したときにＴＣＰ  ＡＣＫだけを送信するＩＴ１０Ｇハードウェアモードである。ホストＡＣＫモードはデータセグメントを含んだＭＴＸバッファのＤＭＡがＡＣＫを送信前に完了するのを待機する。ホストコンピュータと統合ネットワークアダプタとの間をまたはその反対方向に通過するときにデータが破損する場合、ホストＡＣＫモードは付加的なデータの完全性を保証する。
【０１３７】
［タイムスタンプ］
ＩＴ１０Ｇはタイムスタンプのサポートを行う。タイムスタンプはＲＦＣ１３２３（http://www/rfc-editor.org/rfc/rfc1323txtを参照）に規定されているＴＣＰに対する強化である。タイムスタンプはＴＣＰがＲＴＴ（ラウンドトリップ時間）測定を良好に計算することを可能にし、またＰＡＷＳ（ラップされたシーケンスに対する保護）のサポートに使用される。
【０１３８】
［ＰＡＷＳ］
ＰＡＷＳ（ラップされたシーケンスに対する保護）はＲＦＣ１３２３（http://www/rfc-editor.org/rfc/rfc1323txtを参照）に規定されている。ＰＡＷＳはＴＣＰ接続を破壊する古い重複セグメントに対する保護であり。これは高速度のリンクでは重要な特徴である。
【０１３９】
［ＴＣＰホスト再送信モード］
ＴＣＰホスト再送信モードは統合ネットワークアダプタに位置するバッファからではなく、ホストのメモリバッファからの直接にデータの再送信を可能にする。これは統合ネットワークアダプタにより必要とされるメモリ量が減少されることを許容する。
【０１４０】
［初期シーケンス番号発生］
初期シーケンス番号発生は秘密保護される必要がある。ＲＦＣ１９４８はＲＦＣ７９３のオリジナルの初期シーケンス番号仕様の弱点を指摘し、幾つかの代わりの方法を推薦している。統合ネットワークアダプタはＲＦＶ１９４８にしたがって動作する最適化された方法を使用するが、ハードウェアで構成するのに効率的である。
【０１４１】
［二重スタックモード］
二重スタックモードはネットワークアダプタに集積されるハードウェアＴＣＰ／ＩＰスタックが協動してホストコンピュータのＴＣＰ／ＩＰスタックを伴って動作することを可能にする。
【０１４２】
二重スタックモードは統合ネットワークアダプタがそれと同一のＩＰアドレスを使用して並列に動作するソフトウェアスタックの共存をサポートすることを可能にする。
【０１４３】
二重スタックモードは統合ネットワークアダプタの２つの基本的なハードウェア機能を必要とする。第１のハードウェア機能はＳＹＮ状態メッセージモードである。ＳＹＮ状態メッセージモードでは、任意の受信されたＳＹＮは状態メッセージをホストコンピュータに対して発生し、ＳＹＮ／ＡＣＫはホストコンピュータが適切な命令ブロックを統合ネットワークアダプタハードウェアへ返送するまで、統合ネットワークアダプタハードウェアにより発生されない。ＳＹＮ状態メッセージモードが統合ネットワークアダプタで使用可能とならないならば、ＳＹＮ／ＡＣＫは統合ネットワークアダプタにより自動的に発生され、状態メッセージは発生されない。
【０１４４】
二重スタックモードにより必要とされる第２のハードウェア機能は統合ネットワークアダプタ制御ブロックデータベースと一致しないＴＣＰパケットが受信されるとき、統合ネットワークアダプタハードウェアからのＲＳＴメッセージの抑制である。この場合、自動的にＲＳＴを発生する代わりに、統合ネットワークアダプタハードウェアはホストコンピュータのソフトウェアＴＣＰ／ＩＰスタックがこのパケットを例外パケットとして処理することを可能にするために、例外パケットとしてパケットをホストコンピュータへ送信しなければならない。
【０１４５】
［ＩＰ  ＩＤ分割］
ＩＰ（インターネット・プロトコル）ＩＤ（インターネット識別）分割は二重スタックサポートパッケージの部分である。ＩＰ  ＩＤ分割はホストコンピュータおよび統合ネットワークアダプタがＩＰ  ＩＤのオーバーラップなしにＩＰアドレスを共有することを可能にする。ＩＰ  ＩＤ分割がオフに切換えられたとき、統合ネットワークアダプタは全１６ビットＩＤ範囲（０−２５５）を使用する。ＩＰ  ＩＤ分割がオンに切換えられたとき、ＩＰ  ＩＤのビット［１５］は１にされ、ホストコンピュータソフトウェアのＴＣＰ／ＩＰスタックがＩＰ  ＩＤ範囲の半分を使用することを可能にする（即ち統合ネットワークアダプタは１２８−２５５を使用し、ホストコンピュータソフトウェアＴＣＰ／ＩＰスタックはＩＰ  ＩＤで０−１２７を使用する）。
【０１４６】
［カスタムフィルタリング］
あるタイプのパケットの特別な動作を限定、承認または行うために使用されることができるカスタムフィルタを有する場所がハードウェアに幾つか存在する。イーサネット（登録商標）フィルタリングは以下の属性を取ることができる。
・プログラムされたユニキャストアドレスの受取り、
・放送パケットの受取り、
・マルチキャストパケットの受取り、
・ネットマスクにより特定される範囲内のアドレスの受取り、
・無差別モードを可能にする（すべてのパケットを容認する）。
【０１４７】
［ＶＬＡＮサポート］
ＶＬＡＮサポートは幾つかの最適化されたハードウェア素子からなる。１つのハードウェア素子は入力パケットからＶＬＡＮヘッダ除去し、第２の最適化されたハードウェア素子はＶＬＡＮタグが付された出力パケットを発生し、第３の最適化されたハードウェア素子は入力ＳＹＮフレームからＶＬＡＮパラメータを生成し、第４の最適化されたハードウェア素子は例外パケットとＵＤＰパケットのＶＬＡＮタグ情報を通す。
【０１４８】
［ジャンボフレームサポート］
ジャンボフレームは通常の１５００バイトサイズのイーサネット（登録商標）フレームよりも大きい。ヘッダ情報に対して使用されるネットワーク帯域幅よりも小さいジャンボフレームはネットワークにおいて増加されたデータ処理能力を可能にする。統合ネットワークアダプタは９ｋバイトまでのジャンボフレームをサポートするために最適化されたハードウェアを使用する。
【０１４９】
［ＳＮＭＰサポート］
ＳＮＭＰはネットワークおよびハードウェアアダプタ性能の統計が遠隔的に監視されることを可能にする上位レベルのプロトコルの形態である。
【０１５０】
［ＭＩＢサポート］
統合ネットワークアダプタは多数の統計カウンタに対して最適化されたハードウェアサポートを含んでいる。これらの統計カウンタは標準的な管理情報ベース（ＭＩＢ）により規定されている。各これらのＳＮＭＰ  ＭＩＢカウンタはネットワークおよび統合ネットワークアダプタで生じる（受信され、送信され、ドロップされたパケット）事象を追跡する。
【０１５１】
［メモリチェック］
メモリエラーチェックおよび補正（ＥＣＣ）は部分的なチェックに類似している。しかしながら、パリティチェックが単一ビットエラーだけしか検出できない場合にも、ＥＣＣは単一ビットメモリエラーを検出および補正し、二重ビットエラーを検出できる。
【０１５２】
単一ビットエラーは最も普通であり、完全なバイトまたはワードを読取るときに不正確であるデータの単一ビットにより特徴付けされる。マルチビットエラーは同じバイトまたはワード内で２以上のビットがエラーである結果である。
【０１５３】
ＥＣＣメモリは暗号化されたＥＣＣコードをデータと共に記憶するために追加ビットを使用する。データがメモリに書込まれるとき、ＥＣＣコードもまた記憶される。データが読み戻されるとき、記憶されたＥＣＣコードはデータが書込まれたときに発生されたＥＣＣコードと比較される。ＥＣＣコードが一致しないならば、データ中のどのビットがエラーであるかを決定できる。エラーのビットが“反転”され、メモリ制御装置が補正されたデータを解放する。エラーは“オンザフライ（on-the-fly）”で補正され、補正されたデータはメモリに戻されない。同じ破損データが再度読取られるならば、補正プロセスは反復される。
【０１５４】
統合ネットワークアダプタはＥＣＣがアダプタ内のパケットデータおよび制御情報の両者を保護するためのフレキシブルな方法でプログラムされ選択されることを可能にする。
【０１５５】
［遺産モード］
遺産モードはトラフィックタイプにかかわりなくすべてのネットワークトラフィックがホストコンピュータへ送信されることを可能にする。これらのモードは統合ネットワークアダプタがハードウェアＴＣＰ／ＩＰスタックがアダプタに存在しないかのように動作することを可能にし、モードはしばしばダンプＮＩＣ（ネットワークインターフェースカード）と呼ばれる。
【０１５６】
［ＩＰ断片化］
ＩＰ断片化されたパケットの再組立ては統合ネットワークアダプタにより処理されない。ＩＰ断片化パケットは例外パケットとして通過され、ドライバ中で再度組立てられ、その後ＩＰ注入モードを介して統合ネットワークアダプタへ“再注入”される。
【０１５７】
［ＩＰ注入］
ＩＰ注入モードはＩＰパケット（例えば再度組立てられたＩＰ断片またはＩＰｓｅｃパケット）が統合ネットワークアダプタのハードウェアＴＣＰ／ＩＰスタックに注入されることを可能にする。
【０１５８】
注入制御レジスタはＩＰパケットを統合ネットワークアダプタ内のＴＣＰ／ＩＰスタックに注入するために使用される。注入制御レジスタの特徴はホストコンピュータが注入を制御し、ＩＰパケットを統合ネットワークアダプタ内のハードウェアＴＣＰ／ＩＰスタックに注入することを可能にする。注入制御レジスタはしたがってＳＹＮ、ＩＰＳｅｃ、または他のパケットの統合ネットワークアダプタへの注入を可能にする。注入制御レジスタもまたＴＣＰダンプモード機能の一部である。
【０１５９】
［ＮＡＴ、ＩＰマスカレード、ポート転送］
ＮＡＴ、ＩＰマスカレード、ポート転送はポートのプログラム可能な範囲に入る特定されたタイプのＵＤＰまたはＴＣＰのすべてのパケットを例外パスに転送するポート範囲レジスタを介して統合ネットワークアダプタでサポートされる。ポートレジスタはある範囲のポートがＮＡＴ、ＩＰマスカレード、ポート転送のようなネットワーク制御動作で使用されることを可能にする。
【０１６０】
［複数のＩＰアドレス］
統合ネットワークアダプタハードウェアはその固有のＩＰアドレスとして応答できるＩＰアドレスの１６までの範囲をサポートする。これらのアドレス範囲はマスクを有するＩＰアドレスベースとしてアクセス可能である。これはＩＰアドレスがＩＰアドレスの範囲まで拡張されることを可能にする。これは統合ネットワークアダプタがマルチホーミングまたは複数のＩＰアドレスに応答する能力を行うことを可能にする。
【０１６１】
［ＩＰデバッグモード］
試験および制御ビットが統合ネットワークアダプタで使用可能になるとき、すべてのＩＰパケットは例外としてホストコンピュータへ送信される。このモードは診断目的用に設計される。
【０１６２】
［時間待機状態］
時間待機は受動的なモードのＴＣＰ接続の最終状態であり、時間待機状態とその動作はＲＦＣ７９３に記載されており、http://www.rfc-editor.org/rfc/rfc793.txtを参照されたい。
【０１６３】
［仮想ソケット］
統合ネットワークアダプタハードウェアは可変のソケット数または接続数をサポートし、現在の構成では６４５５３５までのソケットをサポートする。
【０１６４】
統合ネットワークアダプタはアダプタとホストコンピュータとの間の接続を転送するため（ＴＯＥと一体化される）最適化されたハードウェアサポートを行う。
【０１６５】
統合ネットワークアダプタハードウェアがその最大容量に等しい接続を承認するとき、次のＳＹＮは例外パケットとしてホストへ通過され、ホストはこの接続を処理することができる。この接続を開くためにホストに対する場合、ハードウェアのデータベースに一致しないＴＣＰパケットがＲＳＴに回答する代りに例外パケットととしてホストへ転送されることを可能にする二重スタックモードの一部分を使用するようにハードウェアを設定する必要があることに注意すべきである。
【０１６６】
［生存時間］
ＴＴＬすなわち生存時間はネットワークでのＩＰパケットの寿命をホップ数に限定するＩＰアドレスパラメータである（ホップはルータのような層３の装置を横切るジャンプである）。統合ネットワークアダプタハードウェアは出力するフレームに対してこの値を送信されたパケットの生存時間に限定するように設定する。さらに詳しい情報はhttp://www.faqs.org/rfcs/rfc791.htmlでＲＦＣ７９１のセクション生存時間を参照されたい。
【０１６７】
［キープアライブ］
キープアライブはＲＦＣ１１２２のセクション４．２．３．６に記載されている。http://www.faqs.org/rfcs/rfc1122.htmlを参照されたい。キープアライブはリンクを横切ってキープ・アライブ・パケットを周期的に送信することによりアイドル状態のＴＣＰ接続が接続状態を維持し、タイムアウトしないことを可能にする。
【０１６８】
［ＴｏＳ］
ＴＯＳすなわちサービスのタイプはＩＰパケットを優先させるためにルータにより使用されることができるＩＰアドレスパラメータである。ＴＯＳパラメータはシステムおよびソケット層で調節可能である必要がある。送信のとき、統合ネットワークアダプタハードウェアは幾つかのレジスタを介してＴＯＳを設定する。詳しい情報はhttp://www.faqs.org/rfcs/rfc791.htmlでＲＦＣ７９１のセクションのサービスのタイプを参照されたい。
【０１６９】
［ＱｏＳ］
統合ネットワークアダプタハードウェアは送信されたデータのＱｏＳを可能にするために４つの送信待ち行列をサポートする。各ソケットはＱｏＳ値を割当てられることができる。この値もまたＶＬＡＮ優先順位レベルへマップされるために使用されることができる。
【０１７０】
送信動作を要約すると、以下のようなものである。ＴＣＰ送信データフローはソケット問い合わせモジュールで開始し、これは送信データ有効ビットテーブルを通過し、それらの送信データ有効ビットセットを有するエントリを探す。このようなエントリを発見したとき、ソケット問い合わせモジュールはソケットのユーザ優先順位レベルにしたがってそのエントリを４つの待ち行列の１つに配置する。優先順位レベル７または６を有するソケットは待ち行列リスト３へ置かれ、レベル５および４は待ち行列リスト２へ置かれ、レベル３および２は待ち行列リスト１へ置かれ、レベル１および０は待ち行列リスト０へ置かれる。
【０１７１】
優先順位待ち行列を使用するこれらのＱｏＳ特性は送信トラフィックにしたがって多数のハードウェアモジュールの並列使用を可能にする。
【０１７２】
［フェイルオーバー］
ネットワークアダプタ間のフェイルオーバー（failover）はＮＯ＿ＳＹＮモードによりサポートされる。ＮＯ＿ＳＹＮモードは接続を開始しようとせずにソケットが生成されることを可能にする。これにより統合ネットワークアダプタハードウェアのソケットおよびすべてのその関連するデータ構造が接続を行わずに生成されることができる。ＮＯ＿ＳＹＮモードはソフトウェアＴＣＰ／ＩＰスタックから、統合ネットワークアダプタへの別のカードまたは接続の移行からのフェイルオーバーのサポートを可能にする。
【０１７３】
［トップレベルのブロック図］
図１９はＴＣＰモジュールの１構成のトップレベルのブロック図を示している。ソケット制御ブロック（ＣＢ）191は各ソケット接続に特有の情報、状態、パラメータ設定を含んでおり、仮想ソケット（ＶＳＯＣＫ）アーキテクチャの最も重要またはキー部分を形成する。ロック機構は１つのモジュールがＣＢで動作しながら別のモジュールはそこで動作しないようにインストールされる。
【０１７４】
［ＴＣＰ受信サブモジュール］
図２０はＴＣＰ受信200データフローを示している。
【０１７５】
［概要］
正常なＩＰトラフィックでは、パケットは６４ビットのＴＣＰ  Ｒｘデータパスを介して受信される。パケットヘッダはＴＣＰパーサモジュールへ進み、パケットデータは受信データメモリ制御装置201へ経路設定される。ＩＰ断片化トラフィックでは、データはメモリブロックを介して受信され、ヘッダ情報は正常なパスを介して受信される。これによりＩＰ断片化からのメモリブロックは受信データメモリ制御装置により書込まれるデータブロックに類似して見える。ＣＰＵデータもまた受信されたデータを受信データメモリ制御装置を介して注入するためにメモリブロックを使用する。このアーキテクチャは正常および断片化されたトラフィックの処理において最大のフレキシブル性を与え、これは断片化されたトラフィックをサポートしながら性能が正常なトラフィックに最適化されることを可能にする。
【０１７６】
受信ＴＣＰパーサ202はヘッダ情報を解析し、パラメータをＶＳＯＣＫ203と受信状態ハンドラ204へ通過するように動作する。受信ＴＣＰパーサがデータをどうするかを知らないならば、これを例外ハンドラ205へ転送される。さらに受信ＴＣＰパーサはすべてのデータを例外ハンドラへ送るようにプログラムされることもできる。
【０１７７】
ＶＳＯＣＫモジュールはローカルおよび遠隔ＩＰと、ポートアドレスを取り、ポインタを制御ブロックへ戻す。
【０１７８】
ＮＡＴ＆ＩＰマスカレードモジュール206は受信されたパケットがＮＡＴまたはＩＰマスカレードパケットであるか否かを決定する。イエスならば、そのパケットは生（完全なパケット）フォーマットでホストシステムまで通過される。
【０１７９】
受信状態ハンドラは各接続の状態の追跡を維持し、したがってその制御ブロックを更新する。
【０１８０】
［受信ＴＣＰパーサ］
受信ＴＣＰパーサはパケットヘッダ情報をＩＴ１０ＧネットワークスタックのＴＣＰ受信部分のその他のモジュールへ登録し、送信する。受信ＴＣＰパーサモジュールもまたＣＰＵ（オンチッププロセッサまたはホストコンピュータ）から受信ストリーム中へデータを注入することを必要とされるレジスタを含んでいる。ＣＰＵはメモリブロックをセットアップしなければならず、その後、受信ＴＣＰパーサレジスタに情報をプログラムする。受信ＴＣＰパーサはＴＣＰヘッダの部分的なチェックサムを生成し、この部分的なチェックサムを受信データメモリ制御装置からの部分的なチェックサムへ付加し、結果的な完全なチェックサムをＴＣＰヘッダのチェックサムと比較する。断片化されたパケットでは、受信ＴＣＰパーサは最後の断片中のＩＰ断片化により送信されたチェックサムに対してＴＣＰヘッダのチェックサムをチェックする。
【０１８１】
注意：ＩＰモジュールはＩＰ断片化ビットを設定し、第１のメモリブロックポインタ、最後のメモリブロックポインタ、インデックス、部分的なチェックサムを適切なパケット断片のデータストリーム中へ挿入しなければならない。またＴＣＰ受信は疑似ヘッダを計算するためにＩＰプロトコル情報を必要とする。
【０１８２】
［受信データメモリ制御装置］
受信データメモリ制御装置はＩＰとＴＣＰモジュール間の６４ビットバスからのデータをＲｘＤＲＡＭのデータメモリブロックへ転送する。２つの転送モードが存在する。正常のモードはＴＣＰデータをメモリブロックに記憶するために使用される。生のモードはパケット全体をメモリブロックに記憶するために使用される。生のモードはＮＡＴ／ＩＰマスカレードに使用される。例外処理では、正常なモードはＣＢデータをＣＰＵへ転送するためにレジスタと共に使用される。
【０１８３】
［ＶＳＯＣＫ］
ＶＳＯＣＫモジュールはローカルおよび遠隔ＩＰとポートアドレスをパケットから通過し、ソケットオープンまたはＴＩＭＥ＿ＷＡＩＴ（ＴＷ）制御ブロック（ＣＢ）ポインタを受信状態ハンドラへ戻す。ＶＳＯＣＫはＩＰおよびポートアドレスでハッシュ計算を実行し、開放／ＴＷ  ＣＢ探索テーブル（ＬＵＴ）207へのインデックスの役目をするハッシュ値を生成する。その位置でのＬＵＴエントリは開放208またはＴＷ209制御ブロックへのポインタを保持する。
【０１８４】
開放／ＴＷ  ＣＢ  ＬＵＴからのポインタはゼロ以上のＣＢのリンクされたリストの最初の制御ブロックを指向しており、それぞれ異なるＩＰおよびポートアドレスを有するが、（ハッシュの衝突から生じる）同一のハッシュ番号を生じる。ＶＳＯＣＫはこの鎖を進み、一致が発見されるか鎖の最後に到達されるまで、パケットＩＰとポートアドレスを連鎖されたＣＢ中のエントリと比較する。一致が発見されたならば、ＣＢへのポインタは受信状態ハンドラへ通過される。鎖の最後に到達したならば、ＶＳＯＣＫはＴＣＰパーサにエラーを通知する。
【０１８５】
開放／ＴＷ  ＣＢ  ＬＵＴエントリに接続されるＣＢの鎖は開放ＣＢとＴＩＭＥ＿ＷＡＩＴ  ＣＢを含んでいる。開放ＣＢは鎖の最初である。受信ＴＣＰＭａｘＯｐｅｎＣＢｐｅｒＣｈａｉｎにより決定されるように最大数の開放ＣＢが存在する。ＴＷ  ＣＢは開放ＣＢの後に連鎖されている。鎖当り最大数のＴＷ  ＣＢも存在する。開放ＣＢは３方向のハンドシェイクが完了したときに生成され、ＨＯ  ＣＢは受信状態ハンドラにより開放ＣＢへ移動される。ＴＷ  ＣＢは最後のＡＣＫがＦＩＮシーケンスで送信されたときに受信状態ハンドラにより開放ＣＢから生成される。いずれのケースでももはや余地がないならば、エラーは受信状態ハンドラへ戻される。
【０１８６】
開放ＣＢのＣＢキャッシュはＬＵＴエントリからリンク数をプリセットのではなくさらに開放ＣＢで構成される。キャッシュ中にあるときＣＢのビットが設定される。キャッシュはハッシュ／ＬＵＴ動作に対して並列に検索される。図２１はＶＳＯＣＫ／受信状態ハンドラの制御ブロックサーチ解決フローを示している。
【０１８７】
［Ｒｃｖ状態ハンドラ］
ＳＹＮが受信されるならば、１２ビットのハッシュは（１７ビットハッシュを行い開放またはＴＩＭＥ＿ＷＡＩＴ制御ブロックを検索する）ＶＳＯＣＫの呼出しに加えて行われ、目的地ポートは許可されたポートリストに対してチェックされる。ポートが可能にされ、ＶＳＯＣＫが一致する開放／ＴＷ  ＣＢを発見しないならば、ハッシュ結果はＨＯ  ＣＢテーブルへのインデックスとして使用される。ＶＳＯＣＫが開放またはＴＩＭＥ＿ＷＡＩＴ  ＣＢを発見するならば、Ｄｕｐ  ＣＢエラーがホストコンピュータへ送信されることができ、ＳＹＮはドロップされる。異なるＩＰおよびポートアドレスを有するエントリが既にＨＯ  ＣＢテーブルに存在するならば、新しいパケット情報は古い情報に重ね書きされる。これはリソースがサービス（ＤＯＳ）アタックのＳＹＮフラッド否認に保持されることを可能にする。重ね書きはＨＯ  ＣＢテーブルのエージングの必要性をなくす。既にＳＹＮ／ＡＣＫされた接続は暗黙的にドロップされることができる。ＣＢへのポインタは受信状態ハンドラへ転送される。遠隔側（ローカル側はＳＹＮ／ＡＣＫではなくＳＹＮを受信する）により開かれている接続だけがＨＯ  ＣＢテーブルに入る。ローカル側により開かれている接続は開放ＣＢにより追跡される。
【０１８８】
ＡＣＫが受信されるならば、１２ビットのハッシュが行われ、ＶＳＯＣＫが呼出される。１２ビットのハッシュを介してＨＯ  ＣＢ中にヒットが存在するが、ＶＳＯＣＫは開放またはＴＷ  ＣＢを発見しない場合、およびシーケンスおよびＡＣＫ番号が有効である場合には、接続のための３方向のハンドシェイクは完全であり、ＣＢは受信状態ハンドラにより開放ＣＢテーブルへ転送される。ＶＳＯＣＫが開放またはＴＷ  ＣＢを発見するが、１２ビットハッシュとの一致がないならば、ＡＣＫは受信状態ハンドラにより有効なシーケンスとＡＣＫ番号、および重複ＡＣＫをチェックされる。
【０１８９】
一度、ＶＳＯＣＫモジュールが正しいソケットＣＢを発見すると、他の適切な情報が受信状態ハンドラにより読取られ更新される。ＴＣＰデータは大きい（２ｋバイト）または小さい（１２８バイト）メモリバッファに記憶される。単一のセグメントはメモリバッファをスパンできる。１つのサイズのバッファがなくなると、他のサイズが使用される。データが所定のソケットで受信されるとき、ソケットハッシュＬＵＴのそのＤａｔａ＿Ａｖａｉｌビットもまた設定される。
【０１９０】
受信状態ハンドラがＲＳＴパケットが必要とされることを決定するならば、受信状態ハンドラは適切なパラメータをＲＳＴ発生器210へ転送する。ＳＹＮ／ＡＣＫまたはＡＣＫが必要とされるならば、受信状態ハンドラはＣＢハンドルを受信・送信ＦＩＦＯバッファ211へ送信する。
【０１９１】
［ＲＳＴ発生器］
ＲＳＴ発生器はＭＡＣアドレス、４つのソケットパラメータ、ＲＳＴ応答を必要とするパケットで受信されたシーケンス番号を取り、ＲＳＴパケットを構成する。ＲＳＴ発生器は最初にパケットを作成するためにＭＴＸメモリからブロックをリクエストする。ＲＳＴパケットは常に４０バイトの長さであるので、これらのパケットは任意のサイズのＭＴＸブロックで適合する。ＲＳＴ発生器は常に利用可能な最小のブロック、通常は１２８バイトのブロックをリクエストする。ＲＳＴパケットは０×００００で固定されたそれらのＩＰ  ＩＤと、（断片ビットではない）ＩＰヘッダ中に設定されたそれらのＤＦビットを有している。
【０１９２】
ＲＳＴ発生器がＲＳＴパケットを構成した後、ＲＳＴ発生器はＲＳＴパケットを含んでいるＭＴＸブロックの開始アドレスをＲＳＴ送信待ち行列に記憶する。この待ち行列はＭ１メモリ中に形成されている。Ｍ１メモリのブロックはリクエストされ、それが一杯になるまで使用される。各Ｍ１ブロックの最後のエントリは使用される次のＭ１ブロックのアドレスを指向する。それ故、ＲＳＴ待ち行列はダイナミックに成長できる。ＭＴＸブロックアドレスが２６ビットだけなので、ＲＳＴ発生器は一度にＭ１メモリの３２ビットをアクセスする。この待ち行列の長さはＭ１メモリが利用可能である大きさに成長できる。待ち行列に対してさらに利用可能なメモリが存在しないならば、ＲＳＴ発生器は暗黙的にＲＣＶ状態ハンドラからのＲＳＴパケットリクエストを破棄する。これは送信におけるＲＳＴパケットのドロップに類似するネットワークの影響を有する。接続は存在しないので、これは性能に対して深刻に影響しない。
【０１９３】
ＲＳＴ送信待ち行列の出力はＴＣＰ送信パケットスケジューラに与えられる。ＲＳＴパケットが送信されたことを送信スケジューラがＲＳＴ発生器へ示したとき、ＲＳＴパケットに使用されていたＭＴＸブロックは解放される。Ｍ１メモリブロックのすべてのエントリが送信され、次のＭ１ブロックへのリンクアクセスが読取られるとき、Ｍ１メモリブロックは解放される。基本的なデータフローが図２２に示されている。
【０１９４】
［受信・送信ＦＩＦＯバッファ］
受信・送信ＦＩＦＯバッファは、受信状態ハンドラが受信されたパケットに応答して送信を必要とされることを決定したＳＹＶ／ＡＣＫとＡＣＫを待ち行列するために使用される。受信状態ハンドラは以下の情報を受信・送信ＦＩＦＯバッファヘ通過する。
・ソケット情報を含むＣＢアドレス（１６ビット）、
・ＣＢタイプ（２ビット；００＝半開、０１＝開放、１０＝Ｔｉｍｅ＿Ｗａｉｔ）、
・送信されるメッセージタイプ（１ビット、０＝ＳＹＮ／ＡＣＫ、１＝ＡＣＫ）。
【０１９５】
受信・送信ＦＩＦＯバッファエントリは４バイトの長さであり、種々のメモリバッファに記憶される。現在、このバッファは４Ｋバイトを割当てられ、それは１Ｋエントリの深さの受信・送信ＦＩＦＯバッファを提供する。受信・送信ＦＩＦＯバッファの出力はＳＹＮ／ＡＣＫ発生器に与えられる。
【０１９６】
［ＳＹＮ／ＡＣＫ発生器］
ＳＹＮ／ＡＣＫ発生器212は受信・送信ＦＩＦＯバッファから出力された情報を取り、半開、開放またはＴｉｍｅ＿Ｗａｉｔの特定されたＣＢからの他の適切な情報を探索し、ＳＹＮ／ＡＣＫまたはＡＣＫの所望のパケットを作成する。ＳＹＮ／ＡＣＫ発生器は最初にパケットを作るためにＭＴＸメモリからのブロックをリクエストする。ＳＹＮ／ＡＣＫおよびＡＣＫパケットは常に４０バイトの長さであるので、これらのパケットは常に任意のサイズのＭＴＸブロックに適合する。ＳＹＮ／ＡＣＫ発生器は常に利用可能な最小のブロック、通常は１２８バイトのブロックをリクエストする。
【０１９７】
ＳＹＮ／ＡＣＫ発生器がＳＹＮ／ＡＣＫまたはＡＣＫパケットを作成した後、ＳＹＮ／ＡＣＫ発生器は開始ＭＴＸブロックアドレスを１６の深さの待ち行列へ置き、その後、その待ち行列はＴＣＰ送信パケットスケジューラへ供給する。受信・送信ＦＩＦＯバッファがプログラム可能な高い透かし（water mark）を通過するならば、送信パケットスケジューラは状態を通知され、これらのパケットの送信優先順位を増加する。
【０１９８】
［ＮＡＴおよびＩＰマスカレード］
ＮＡＴおよびＩＰマスカレードブロック206はＶＳＯＣＫモジュールと並列して動作する。ＮＡＴおよびＩＰマスカレードブロックは入来するパケットを復号し、それが予め特定されたＮＡＴまたはＩＰマスカレードポート範囲であるか否かを見る。イエスであるならば、これがＮＡＴパケットであることをＶＳＯＣＫへ示すためにシグナリング機構が使用される。これが生じるとき、パケット全体は受信メモリバッファ中にあるように、記憶される。パケットは次に幾つかの点でホストシステムに転送される。ホストシステムのドライバはその後経路設定機能を行い、ヘッダパラメータを置換し、それを適切なネットワークインターフェースへ送信するように動作する。
【０１９９】
［例外ハンドラ］
例外ハンドラはＩＴ１０Ｇコアにより処理されないホストコンピュータへパケットを送信する。
【０２００】
［サポート回路］
［ｒｓｅｔ発生］
ｒｓｔ信号はトップレベルのｒｓｅｔ信号から同時に発生される。
【０２０１】
［ｔｃｐ＿ｉｎ＿ｒｄ発生］
ｔｃｐ＿ｉｎ＿ｒｄはＩＰからの入力データをフリーズするために使用される。これはＤＲＡＭ書込みリクエストが即座に承認されないときに主張される。またＤＲＡＭが小さいまたは大きいメモリブロックを使い果たした場合にも生じる。
【０２０２】
［ワードカウンタ］
ワードカウンタ、即ちｗｏｒｄ＿ｃｎｔ［１２：０］はリセットおよびソフトウェアリセットではゼロである。これはｔｃｐ＿ｉｎ＿ｒｄがアクチブであり、ｉｐ＿ｉｎ＿ｅｏｆがアクチブでないときにインクリメントする。ｉｐ＿ｉｎ＿ｄａｔａ［６３：０］の第１のワード中にゼロであり、第２のワード中は１である。これはｉｐ＿ｉｎ＿ｅｏｆ後の第１のワードではゼロになり、有効なｉｐ＿ｉｎ＿ｄａｔａワード間ではゼロのままである。
【０２０３】
［メモリブロック制御回路］
［保留メモリブロック］
メモリブロック制御回路は小さいおよび大きいメモリブロックを常に使用できるように維持する。これはデータがメモリブロックに書込まれなければならないときに遅延をほとんど起こさないことを確実にする。メモリブロック制御回路はまたデータの書込みと並行してブロックリクエストを行う。これらの保留メモリブロックはリセットから初期化される。
【０２０４】
［初期化およびメモリブロックのサイズ選択］
ＴＣＰまたはＵＤＰセグメントのパラメータが初期化される。使用されるメモリブロックのサイズはＩＰからのＴＣＰ長の情報とパーサからのＴＣＰヘッダ長の情報により決定される。データサイズ（ＴＣＰ長−ＴＣＰヘッダ長）が小さいメモリブロックに適合するならば、保留の小さいメモリブロックが使用され、別の小さいメモリブロックは保留を補充するようにリクエストされる。そうでなければ、保留の大きいメモリブロックが使用され、別の大きいメモリブロックが保留を補充するようにリクエストされる。小さいメモリブロックが利用可能ではないならば、大きいメモリブロックが使用される。しかしながら大きいメモリブロックが必要とされるが利用可能ではないならば、小さいメモリブロックは使用されない。
【０２０５】
［整列されたＴＣＰデータのメモリブロックへの書込み］
ＴＣＰヘッダ中に奇数のオプション半ワード（それぞれ３２ビット幅）が存在するならば、ＴＣＰパケットのデータは整列され、データは６４ビット境界で開始する。ＴＣＰパケットデータが整列されるならば、データがＩＰブロックから送信されるとき、ＴＣＰパケットデータは直接的にメモリブロックへ置かれることができる。セグメントに対する第２のブロックのアドレスはＴＣＰ状態マシーンに送信される。ＴＣＰセグメントに残されたデータと同様に、カウントはブロックに残されたスペースで維持される。メモリブロックが既に一杯であるならば、記録も維持されなければならない。ＴＣＰセグメントの最後に到達したとき、先のブロックが一杯であったならば、そのブロックは現在のブロックにリンクされなければならない。また現在のブロックヘッダ中のリンクはクリアされ、データ長およびデータの動作しているチェックサムはブロックヘッダに書込まれる。データ長はｉｐ＿ｉｎ＿ｂｙｔｅｓ＿ｖａｌのビットにより決定されるように、最後の６４ビットワードのバイト数の関数である。ＴＣＰセグメントの最後になる前にブロックに余地がなくなったならば、データ長および動作しているチェックサムはブロックヘッダに書込まれ、ブロックが終了していることを示すフラグが設定される。ＴＣＰセグメントの残りのデータは大きいまたは小さい保留メモリブロックのいずれが使用されるかを決定するために使用される。ブロックサイズが尽きたならば、先の説明と同一のルールが使用される。最後のメモリブロックのアドレスはＴＣＰ状態マシーンに送信されなければならない。
【０２０６】
［整列されていないＴＣＰデータのメモリブロックへの書込み］
ＴＣＰセグメントのデータが整列されていない（ｉｐ＿ｉｎ＿ｄａｔａ［６３：０］が２つの異なるメモリブロックへ書込まれるデータを含んでいる）ならば、ＩＰブロックから第１のｌｏ３２ビットの半ワードを記憶するため、最初に余分のサイクルが存在しなければならず、それによってデータはメモリブロックで高い３２ビットの半ワードとして書込まれることができる。ＩＰブロックから次のバスサイクル中に高い３２ビットの半ワードは、記憶された半ワードと同じサイクルの低い３２ビット半ワードとして書込まれる。カウントおよびチェックサム計算もこの状態を処理するために調節されなければならない。そうでなければ整列されていないデータは整列されたデータと同一方法で処理され、既に説明したのと同一の終了ケースを有する。
【０２０７】
［メモリブロックへのＵＤＰデータの書込み］
ＵＤＰデータは常に整列されるので、ＵＤＰデータはＴＣＰの整列されたデータと同一方法で処理される。同一の終了ケースが適用される。
【０２０８】
［チェックサム計算］
チェックサムはＲＥＣ１０７１に説明されているように計算される。チェックサム計算ブロックでは、チェックサムはデータについてのみ計算される。パーサはヘッダチェックサムを計算し、ＴＣＰ状態マシーンは２つのチェックサムを結合し、チェックサムエラーを有するパケットにどのように対処するかを決定する。
【０２０９】
［固定したヘッダフィールドの解析］
［ワードカウンタ］
ワードカウンタ、即ちｗｏｒｄ＿ｃｎｔ［１２：０］はリセットおよびソフトウェアリセットではゼロである。カウンタはｔｃｐ＿ｉｎ＿ｒｄがアクチブであり、ｉｐ＿ｉｎ＿ｅｏｆがアクチブでないときにインクリメントする。カウンタはｉｐ＿ｉｎ＿ｄａｔａ［６３：０］の第１のワード中にゼロであり、第２のワード中は１である。カウンタはｉｐ＿ｉｎ＿ｅｏｆ後の第１のワードではゼロになり、有効なｉｐ＿ｉｎ＿ｄａｔａワード間ではゼロのままである。
【０２１０】
［ｒｅｍｏｔｅ＿ｊｐ＿ａｄｄ［３１：０］とｌｏｃａｌ＿ｉｐ＿ｉｎｄｘ［３：０］のラッチ］
これらのラッチはリセットおよびソフトウェアリセットではゼロである。ｒｅｍｏｔｅ＿ｊｐ＿ａｄｄはｓｒｃ＿ｉｐ＿ａｄｄ＿ｖａｌｉｄ、ｉｐ＿ｉｎ＿ｄａｖ、ｔｃｐｏｒｕｄｐ＿ｐａｃｋｅｔが主張されるときｓｒｃ＿ｉｐ＿ａｄｄ［３１：０］からラッチされる。Ｌｏｃａｌ＿ｊｐ＿ｉｎｄｘはｄｅｓｔ＿ｉｐ＿ａｄｄ＿ｖａｌｉｄ、ｉｐ＿ｉｎ＿ｄａｖ、ｔｃｐｏｒｕｄｐ＿ｐａｃｋｅｔが主張されるときｄｅｓｔ＿ｉｐ＿ｉｎｄｅｘ［３：０］からラッチされる。両者は次のパケットで再ロードされるまで有効である。
【表５】
2010063110.tif 000007
【０２１１】
注意：フィールドはリセットおよびＩＰからの第１のワードでクリアまたは初期化される（括弧内）。
注意：ラッチはまたｔｃｐ＿ｐａｃｋｅｔ、ｕｄｐ＿ｐａｃｋｅｔ＆ｉｐ＿ｉｎ＿ｄａｖにより適格になる。
【０２１２】
［チェックサム、エラーチェック、随意選択的なヘッダフィールドの解析］
［チェックサム］
ＲＦＣ１０７１チェックサムは、ＩＰソースアドレス、ＩＰ目的地アドレス（インデックスではない）、８ビットのゼロが先行する（＝０００６の１６進）８ビットタイプのフィールド、ＴＣＰ長を含む疑似ヘッダと共に、ヘッダ長フィールドで規定されているようにヘッダで計算される。
【０２１３】
［ヘッダ長チェック］
一度、ｒｘ＿ｔｃｐ＿ｈｄｒ＿ｌｅｎフィールドが解析されると（ワードカウント＞０００１）、ｒｘ＿ｔｃｐ＿ｈｄｒ＿ｌｅｎフィールドはチェックされる。ｒｘ＿ｔｃｐ＿ｈｄｒ＿ｌｅｎフィールドは５よりも小さくすることはできず、または１０に設定されるＭＡＸ＿ＨＤＲ＿ＬＥＮよりも大きくてはならない。そうであるならば、エラーｒｘ＿ｔｃｐ＿ｈｄｒ＿ｌｅｎ信号が主張され、次のパケットの開始までその状態である。
【０２１４】
［ＴＣＰ長チェック］
ＩＰからのＩＰペイロード長がチェックされる。ＩＰペイロード長は（ｒｘ＿ｔｃｐ＿ｈｅａｄｅｒ＿ｌｅｎがまだ有効でないときに使用される）２０バイトよりも小さくはできず、ｒｘ＿ｔｃｐ＿ｈｅａｄｅｒ＿ｌｅｎよりも小さくはできない。そうであるならば、エラーｒｘ＿ｔｃｐ＿ｈｄｒ＿ｌｅｎ信号が主張され、次のパケットの開始までその状態である。
【０２１５】
［随意選択的なヘッダフィールドの解析］
フィールドはリセットおよびＩＰブロックからの第１のワードでクリアされる。タイムスタンプ（１０バイト＋パッディング）、ＭＳＳ（４バイト）、ウィンドウスケール（３バイト＋パッディング）だけがサーチされる。２０バイトだけのオプションが存在できるので、ヘッダ長は１０の３２ビット半ワードだけである（ワードカウント＝０００４）。
【０２１６】
オプションは直接的な方法で解析される。オプションは第２の半分のワードカウント＝２から開始し、３２ビットに整列される。オプションの第１のバイトはオプションタイプを識別する。
【０２１７】
タイムスタンプオプションが検出されるならば、ｒｘ＿ｔｃｐ＿ｔｉｍｅｓｔａｍｐ、ｒｘ＿ｔｃｐ＿ｔｘ＿ｅｃｈｏおよびｒｘ＿ｔｃｐ＿ｔｉｍｅｓｔａｍｐ＿ｖａｌがロードされる。
【０２１８】
ＭＳＳオプションが検出されるならば、ｒｘ＿ｔｃｐ＿ｒｅｍｏｔｅ＿ｍｓｓおよびｒｘ＿ｔｃｐ＿ｒｅｍｏｔｅ＿ｍｓｓ＿ｖａｌがロードされる。
【０２１９】
ウィンドウスケールオプションが検出されるならば、ｒｘ＿ｔｃｐ＿ｒｅｍｏｔｅ＿ｗｉｎ＿ｓｃｌとｒｘ＿ｔｃｐ＿ｒｅｍ＿ｗｉｎ＿ｓｃｌ＿ｖａｌがロードされる。
【０２２０】
これらは次のパケットの開始まで有効の状態である。
【０２２１】
［ソケット受信サブモジュール］
ソケット受信サブモジュールはＩＴ１０Ｇと、受信されたデータのシステム（ホストコンピュータ）との間のインターフェースを処理する。図２３はソケット受信データフローを示している。
【０２２２】
ソケット受信サブモジュールプロセスは受信論理装置230で開始し、ソケット受信ＤＡＶビットマップテーブル231に１ビットを設定する。ソケット受信ＤＡＶビットマップテーブルは各６４Ｋソケットに関連する１ビットを有する（それ故テーブルは８Ｋバイトである）。ＣＢの位置を知ることにより、適切なビットが設定される。
【０２２３】
Ｓｏｃｋｅｔ＿ＤＡＶ問い合わせモジュール232はソケット受信ＤＡＶビットマップテーブルを連続して走査しているブロックである。Ｓｏｃｋｅｔ＿ＤＡＶ問い合わせモジュールが１セットビットを発見するとき、対応するＣＢアドレスを発生し、ＣＢ構造が有効なｌｉｎｋ＿ｌｉｓｔブロックを含んでいるか否かを見るためにＣＢ構造をチェックする。有効なｌｉｎｋ＿ｌｉｓｔブロックは６４ビットメモリアドレスと１６ビット長からなる。ＣＢが有効なｌｉｎｋ＿ｌｉｓｔブロックを有するならば、ＣＢアドレスおよび有効なｌｉｎｋ＿ｌｉｓｔ情報は２段のパイプラインレジスタ対を介してＤＭＡ  Ｐｒｅｐモジュール233へ通過される。Ｓｏｃｋｅｔ＿ＤＡＶモジュールはまたＣＢの対応するビットをその時間にクリアする。ＣＢが有効なｌｉｎｋ＿ｌｉｓｔブロックを含まないならば、データがそのソケットで利用可能であるが有効な転送ブロック情報がそのソケットに存在しないことをホストに通知するためにソケットに対して状態メッセージが発生される。この場合、ビットマップテーブルの対応するビットはまだクリアされていない。ＣＢはこの場合にまた、ｌｉｎｋ＿ｌｉｓｔブロックに尋ねる状態メッセージをホストへ既に送出していることを知っていることまで更新されることができる。同じＣＢに対する多数の状態メッセージを送信しないので、このステップは必要である。有効なｌｉｎｋ＿ｌｉｓｔブロックが存在するならば、次のステップはＣＢおよび転送情報がＤＭＡ  ｐｒｅｐモジュールへ送信されることである。ＤＭＡ  ｐｒｅｐモジュールはソケットデータバッファからデータを読取り、そのデータをＤＭＡエンジンの２つのピンポン転送ＦＩＦＯバッファ234のうちの一方へ転送するように動作する。このデータ転送が終了するとき、ＤＭＡ  ｐｒｅｐモジュールは転送されるデータが存在するというリクエストを送信ＤＭＡエンジン235へ送信する。ｌｉｎｋ＿ｌｉｓｔ情報はまた送信ＤＭＡエンジンに転送される。
【０２２４】
送信ＤＭＡエンジンがＤＭＡ  ｐｒｅｐモジュールからリクエストを得るとき、送信ＤＭＡエンジンは主要なＤＭＡエンジン236にホストへのＤＭＡ転送を行いたいことを通知する。バスを許可されたとき、ＤＭＡエンジンはデータをピンポンバッファから読出し、それらをホストコンピュータへ送信する。ＤＭＡ転送が終了するとき、ソケットに対するＣＢは更新され、データがホストコンピュータへ送信されていることを示す状態メッセージが発生される。
【０２２５】
状態メッセージ発生器237は状態メッセージを発生し、状態メッセージをメモリ（１Ｋバイト）の状態メッセージブロックへ書込むように動作するモジュールである。状態メッセージの発生リクエストは送信ＤＭＡエンジン、ソケットＤＡＶ問合せモジュール、またはＣＰＵから来る。
【０２２６】
［ソケット送信サブモジュール］
ソケット送信サブモジュールはＩＴ１９Ｇとデータ送信用のシステムとの間のインターフェースを処理する。図２４はソケット送信フローを示している。
【０２２７】
ソケット送信フローはホストからの命令ブロックリストの受取で開始する。コマンドブロックリストはＤＭＡ転送を介して受信され、コマンドリスト241へ位置される。ここからブロックは抽出され、コマンドパーサモジュール242により解析される。パーサにより理解されるコマンドが実行され、理解されないものはオンチッププロセッサへ転送される。
【０２２８】
コマンドがデータを転送するならば、ｌｉｎｋ＿ｌｉｓｔ情報がＣＢアドレスと共にコマンドブロックから抽出され、転送待ち行列243へ位置される。
【０２２９】
受信ＤＭＡエンジン244はこの転送待ち行列のエントリを外し、ホストコンピュータメモリからのデータ転送を実行する。データは１対のピンポンＦＩＦＯバッファ245へ置かれる。丁度受信されたデータに関連するＣＢアドレスはソケットＸｍｔデータ制御モジュール246へ転送される。
【０２３０】
ソケットＸｍｔデータ制御モジュールはピンポンＦＩＦＯバッファからデータを採取し、そのデータを送信ソケットデータメモリ248へ与える。ソケットＸｍｔデータ制御モジュールはｍａｌｌｏｃｔｘメモリ割当て装置247からブロックアドレスを検索する。ソケットＸｍｔデータ制御モジュールはまたソケットの優先順位レベルをソケットＣＢに問い合わせる。すべてのデータがデータバッファに転送されたとき、ソケットＸｍｔデータ制御モジュールはＣＢアドレスを４つの内１つの優先順位待ち行列に与える。ソケットＸｍｔデータ制御モジュールはまたソケットＣＢを新しいデータ送信カウント情報で更新する。
【０２３１】
データがＤＭＡ受信ＦＩＦＯバッファからソケットデータメモリへ転送されるとき、ランニングするチェックサムがそのときに行われる。チェックサムはブロック毎のベースで計算される。これは後でデータがその後再度読取られる必要がないときに送信待ち時間を減少することを助ける。
【０２３２】
［ＣＢ  ＬＵＴ］
［概要］
ＴＣＰ受信論理装置はオープンソケット接続を発見するためにＬＵＴを使用する。ＬＵＴは１８ビットによる１２８Ｋの深さである。
【０２３３】
［ＣＢ  ＬＵＴとＤＲＡＭのインターフェース］
このセクションはｍｉｓｃｍｅｍモジュールとＮＳ  ＤＤＲアービトレーションモジュールとの間のインターフェースを説明している。これはデータフローを説明し、インターフェース信号をリストし、必要なタイミングを詳細にしている。
【０２３４】
［データフロー］
ＣＢ  ＬＵＴはデータＤＲＡＭへの単一の読み書きのアクセスだけを行う。本発明の構成では、ＤＲＡＭは外部であるが、メモリには代りにオンチップが設けられている。ＤＲＡＭアクセスはＤＷＯＲＤにある。各ＬＵＴエントリは１８ビットだけなので、ＤＷＯＲＤの下部１８ビットだけがＣＢ  ＬＵＴメモリインターフェースに送られる。
【０２３５】
［ＴＣＰ送信サブモジュール］
［概要］
ＴＣＰ送信サブモジュールはデータ送信に対する次にサービスされるべきソケットを決定し、したがってソケットＣＢブロックを更新するように動作する。データフローは図２５に示されている。
【０２３６】
ＴＣＰ送信データフローはソケット問合せモジュールで開始する。ソケット問合せモジュールはＸＭＴ＿ＤＡＶビットテーブルを走査し、それらの送信データの有効なビットセットを有するエントリを探す。ソケット問合せモジュールが設定された送信データの有効なビットセットを発見したとき、ソケット問合せモジュールはそのエントリをソケットのＵｓｅ＿Ｐｒｉｏｒｉｔｙレベルにしたがって４つのうちの１つの待ち行列へ位置させる。優先順位レベル７または６を有するソケットは待ち行列リスト３に位置され、レベル５および４は待ち行列リスト２に位置され、レベル３および２は待ち行列リスト１に位置され、レベル１および０は待ち行列リスト０に位置される。
【０２３７】
これらのリストはすべてパケットスケジューラ251に供給する。パケットスケジューラは欠亡のない方法で優先順位キューからパケットを外すように動作する。パケットスケジューラはまた送出データパケットと、半分開いたサポートモジュールから発生されたＳＹＮ＿ＡＣＫおよびＲＳＴパケットとの間で調停する。
【０２３８】
パケットスケジューラが次に送出されるパケットを決定するとき、パケットスケジューラはこの情報をソケット送信ハンドラ252へ転送する。ソケット送信ハンドラモジュールはソケットＣＢ情報を読取り、パケットヘッダを発生し、ＣＢを更新し、パケット送信情報を送信待ち行列253へ送信する。すべてのパケットヘッダがその後データバッファへ事前にペンディングされる別々のメモリバッファで発生される。これはまた送信されるデータがデータバッファの中間で開始する場合にも適用される。この場合、パケットヘッダデータバッファからの点は送信されるデータの第１のバイトを指す。ロック機構はこのモジュールが別のモジュールが同時に動作できる同一のソケットＣＢを変更しないために使用される。
【０２３９】
送信待ち行列はマスター送信アービトレータへ送信されるでパケットの待ち行列を形成するように動作する。
【０２４０】
［パケットスケジューラ］
パケットスケジューラは次に送出されるパケットを決定するように動作する。１構成のこのモジュールのブロック図が図２６に示されている。
【０２４１】
パケットスケジューリングプロセスは比較装置260によって、現在の状態にある待ち行列番号を取り、その待ち行列中に送信されるものがあるか否かを検査することにより開始する。待ち行列番号は待ち行列リストまたはＴＣＰ  ＲＣＶパケットの一方を表すことができる。待機しているそのタイプのパケットが存在するならば、そのエントリが引出され、次に送信されるパケットとしてスケジュールされる。その待ち行列にパケットが存在しないならば、状態カウンタがインクリメントされ、次の待ち行列の状態がチェックされる。これは待ち行列番号が、送信の準備がされているパケットを有する待ち行列リスト（またはＴＣＰ受信パケット）に一致するか、または状態エントリの最終ビットが設定されるまで継続する。最終ビットが設定されているならば、状態カウンタはゼロ（０）にリセットする。
【０２４２】
待ち行列調停シーケンスはプログラム可能である。アプリケーションは最初にＱｕｅｕｅ＿Ｓｔａｔｅレジスタを０×００に設定し、その後、待ち行列番号と最終ビットをＱｕｅｕｅ＿Ｅｎｔｒｙレジスタに書込むことにより待ち行列調停シーケンスを設定できる。Ｑｕｅｕｅ＿Ｓｔａｔｅレジスタでフラットまたは急峻なビットを主張することにより設定されることができる２つの組込み式調停シーケンスが存在する。
【０２４３】
［フラットシーケンス］
フラットシーケンスはスケジューラが任意のリセット後に使用するデフォルトシーケンス状態である。フラットシーケンスはまたＴシーケンスレジスタにｓｅｑ＿ｐｒｏｇフィールドを書込むことにより０１に設定される。シーケンスを以下に示されている。
３−２−３−２−３Ｘ−１−３−２−３−Ｘ−２−３−１−３−Ｘ−２−３−２−３−Ｄ−Ｘ＜反復＞
ここで、３、２、１および０はそれぞれ待ち行列リストであり、ＸはＴＣＰ受信論理装置からのパケットである。この方式では、各リストは以下の帯域幅割当てを有する。
【表６】
2010063110.tif 000008
【０２４４】
［急峻なシーケンス］
プログラムされたフラットシーケンスの代りのものは急峻なシーケンスである。急峻なシーケンスは高い優先順位の待ち行列にさらに加重し、多数の高い優先順位のアプリケーションが同時に行われる場合に便利である。急峻なシーケンスはＴシーケンスレジスタにｓｅｑ＿ｐｒｏｇフィールドを書込むことにより１０に設定される。急峻なシーケンスを以下のとおりである。
３−３−２−３−３−２−Ｘ−３−３−１−３−３−２−３−Ｘ−３−２−３−３−１−３−３−Ｘ−２−３−３−２−３−３−０−Ｘ
このシーケンスのパーセンテージ帯域幅を以下に示す。
【表７】
2010063110.tif 000009
【０２４５】
パケットスケジューラの使用は受信データトラフィックにしたがって、ハードウェアモジュールとリソースの共有を可能にする。
【０２４６】
［ハッシュアルゴリズム］
使用されるハッシュアルゴリズムは単一の１７ビットハッシュ値を形成するためにソケットのローカルおよびピアポートと、ローカルおよびピアＩＰアドレスとを結合する。ハッシュアルゴリズムは簡単であるように設計され、それによって単一のクロックサイクルの結果を生じ、同様にハッシュＬＵＴ衝突を最小にするのに十分な拡散スペクトルである。ハッシュの等式を以下示す。
ＬＰ＝ローカルポート、
ＰＰ＝ピアポート、
ＬＩ＝ローカルＩＰアドレス、
ＰＩＰ＝ピアＩＰアドレス
Ｈａｓｈ［１６：０］＝｛（｛ＬＰ［７：０］，ＬＰ［１５：８］＾ＰＰ｝，１’ｂ０）＾｛１’ｂ０，（（ＬＩＰ［１５：８］＾ＬＩＰ［７：０］）＾（ＰＩＰ［１５：８］＾ＰＩＰ［７：０］））｝；
以下はハッシュに対して実行されるステップである。
・ローカルポートのバイトはスワップされる。
・新しいバイトのスワップされたローカルポートは１６ビットのポート積を形成するためにピアポートによりＸＯＲ処理される。
・ローカルＩＰアドレスのＭＳＢはローカルＩＰアドレスとＬＳＢでＸＯＲ演算処理される。
・ピアＩＰアドレスのＭＳＢはピアＩＰアドレスのＬＳＢでＸＯＲ演算処理される。
・２つのＩＰアドレス積はＩＰワード積を形成するためにＸＯＲ演算処理される。
・ポート積は１ビットだけ左にシフトされ、１７ビット値を形成するために０で埋められる。
・ＩＰワード積には１７ビット積を形成するために先行する０が添付される。
・新しい１７ビットポート積とＩＰワード積は最終的なハッシュ値を形成するためにＸＯＲ演算処理される。
【０２４７】
このハッシュアルゴリズムは図２７に示されている。
【０２４８】
以下はハッシュアルゴリズムの一例である。
【０２４９】
ＬＰ＝１０２４、
ＰＰ＝００８０、
ＬＩ＝４５．Ｃ３．Ｅ０．１９、
ＰＩＰ＝２３．Ｄ２．３Ｆ．Ａ１
ポート積＝０×２４１０＾０×００８０＝０×２４９０
ＩＰ積＝（０×４５Ｃ３＾０×Ｅ０１９）＾（０×２３Ｄ２＾０×３ＦＡ１）＝０×Ａ５ＤＡ＾０×１Ｃ７３＝０×Ｂ９Ａ９
最終的なハッシュ＝｛０×２４９０，０｝＾｛０，０×７９Ａ９｝＝０×０４９２０＾０×０Ｂ９Ａ９＝０×０Ｆ０８９
半分オープンの制御ブロックＬＵＴでは、１２ビットのハッシュが使用される。この１２ビットのハッシュ値は以下のように前述の式から得られる。
ハッシュ１２［１１：０］＝ハッシュ１７［１６：５］＾ハッシュ１７［１１：０］
ここで、ハッシュ１７は先に規定された式である。
【０２５０】
［ＩＳＮアルゴリズム］
［動作理論］
ＩＴ１０Ｇで使用されるＩＳＮアルゴリズムはＲＦＣ１９４８に記載されているアルゴリズムに類似しており、４マイクロ秒ベースのタイマ、ホストシステムにより設定可能なランダムブート値、４つのソケットパラメータ（ポートおよびＩＰアドレス）を有している。関数は以下の形態を有する。
ＩＳＮ＝タイマ＋Ｆ（ｂｏｏｔ＿ｖａｌｕｅ，ｓｒｃ＿ｊｐ，ｄｅｓｔ＿ｉｐ，ｓｒｃ＿ｐｏｒｔ，ｄｅｓｔ＿ｐｏｒｔ）
ここでタイマは４マイクロ秒ベースの３２ビットアップカウンタである。Ｆ（）関数は関数ＦＣ（）に基づいており、以下のように規定される。
ＦＣ（ｈｖ３２，ｄａｔａ３２）＝  ［（ｐｒｅｖ３２＜＜Ｂ）＾（ｐｒｅｖ３２＞＞７）］＾ｄａｔａ３２
最初に、ｈｖ３２の値はシステム（ホストコンピュータ）からのランダムｂｏｏｔ＿ｖａｌｕｅに設定される。その後、リクエストされる各ＩＳＮに対して、ｈｖ３２は以下のように計算される。
ｈｖ３２＝ＦＣ（ｐｒｅｖ３２、ｓｒｃ＿ｉｐ）
ｈｖ３２＝ＦＣ（ｐｒｅｖ３２、ｄｅｓｔ＿ｉｐ）ｖ
ｈｖ３２＝ＦＣ（ｐｒｅｖ３２、｛ｓｒｃ＿ｐｏｒｔ，ｄｅｓｔ＿ｐｏｒｔ｝）
アルゴリズム全体のブロック図が図２８に示されている。
【０２５１】
現在のアーキテクチャはＩＳＮを計算するために４クロックサイクルを取る。第１のサイクルでは、ソースＩＰアドレス（ｓｒｃ＿ｉｐ）はｈｖ３２を発生するためにフィードスルーされる。第２のクロックサイクルでは、目的地ＩＰアドレスがフィードスルーされ、第３のクロックサイクルでは、ポート情報がフィードスルーされる。第４のクロックサイクルは最終的な関数値にインクリメントするタイマ値を付加するために使用される。レジスタＡとレジスタＢは第４のクロックサイクルでクロックされないことにも注意する。
【０２５２】
［テストモード］
ＩＳＮ試験モードはＩＳＮを診断目的で所定の番号に設定する１方法として与えられている。このテストモードは以下のように使用される。
０×００を０×１Ａ０６に書込む（ＴＣＰ  ＴＸ読取インデックスレジスタ）、
ＩＳＮのビット［７：０］を０×１Ａ０７に書込む、
０×０１を０×１Ａ０６に書込む、
ＩＳＮのビット［１５：８］を０×１Ａ０７に書込む、
０×０２を０×１Ａ０６に書込む、
ＩＳＮのビット［２３：１６］を０×１Ａ０７に書込む、
０×０３を０×１Ａ０６に書込む、
ＩＳＮのビット［３１：２４］を０×１Ａ０７に書込む、
０×０４を０×１Ａ０６に書込む、
任意の値を０×１Ａ０７に書込む（テストモードを使用可能にする）。
【０２５３】
前述のステップ＃１０での書込みはＩＳＮテストモードを使用可能にする。今特定されたＩＳＮは次回にＩＳＮがリクエストされるときに使用される。テストモードをクリアするために、０×０５を０×１Ａ０６に書込み、任意の値を０×１Ａ０７に書込む。
【０２５４】
［ソケット制御ブロック構造］
［概要］
ソケット制御ブロックまたはＣＢは各ソケットに対する動作情報を含んでおり、ＣＢメモリスペース中に存在する。ＣＢはすべての状態情報、メモリポインタ、構成設定、ソケットに対するタイマ設定を含んでいる。これらのパラメータは種々のＴＣＰサブモジュールにより更新されることができる。ロック機構は一度にただ１つだけのサブモジュールがソケットＣＢを変更できることを確実にする。ＩＴ１０Ｇは半分オープン状態、設定された状態、閉じた状態であるソケットに対する異なるＣＢ構造を使用する。
【０２５５】
［設定されたソケットの主要なＴＣＰ／ＵＤＰ  ＣＢ構造］
以下のテーブルは設定されたソケットのメモリの主要なＴＣＰ／ＵＤＰ  ＣＢ構造におけるすべてのフィールドをリストしている。また、以下に規定される付随ＴＣＰ  ＣＢ構造も存在する。
【表８】
2010063110.tif 000010
【０２５６】
［設定されたソケットの主要なＣＢフィールド規定］
［遠隔ＩＰアドレス（アドレス０×００、３２ビット）］
この３２ビットフィールドは接続のための遠隔ＩＰアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより設定される。サーバソケットでは、このフィールドはＳＹＮパケットで受信されるＩＰアドレスまたは受信されたＵＤＰパケットのＩＰアドレスにより埋められる。
【０２５７】
［遠隔ポート（アドレス０×０１  ［３１：１６］、１６ビット）］
このフィールドは接続のための遠隔ポート番号を表している。クライアントソケットでは、このフィールドは常にアプリケーションによって特定される。サーバソケットでは、このフィールドは常にＳＹＮまたはＵＤＰパケットで受信されるポート番号で埋められる。
【０２５８】
［ローカルポート（アドレス０×０１  ［１５：０］、１６ビット）］
このフィールドは接続のためのローカルポート番号を表している。クライアントソケットでは、このフィールドはアプリケーションにより特定されるか、ネットワークスタックにより自動的に生成される。サーバソケットでは、このフィールドは常にアプリケーションにより特定される。
【０２５９】
［ＩＰインデックス（アドレス０×０２［３１：２８］、４ビット）］
このフィールドはソケットに対するホストインターフェースのＩＰアドレスのネットワークスタックＩＰアドレステーブルのインデックスを表しており、ネットワークスタックハードウェアにより埋められる。
【０２６０】
［ＣｏｎｎＳｔａｔｅ（アドレス０×０２［２７：２４］、４ビット）］
このフィールドは接続の現在状態を示し、以下のように復号する。
【表９】
2010063110.tif 000011
【０２６１】
［ＡＸ（アドレス０×０２［２３］、１ビット）］
このビットは受信されたＡＣＫ状態メッセージモードが使用可能になることを示している。このモードでは、すべての目立ったデータを承認するＡＣＫが受信されたとき、状態メッセージが発生される。このモードはＮａｇｌｅアルゴリズムと共に使用される。
【０２６２】
［ＳＡ（アドレス０×０２［２２］、１ビット）］
このビットは選択的なＡＣＫオプション（ＳＡＣＫ）がこのソケットと共に使用されるべきであることを示している（０＝ＳＡＣＫを使用してはならない、１＝ＳＡＣＫを使用しなさい）。
【０２６３】
［ＴＳ（アドレス０×０２［２１］、１ビット）］
このビットはタイムスタンプオプションがこのソケットにより使用されるべきであることを示している（０＝タイムスタンプオプションを使用してはならない、１＝タイムスタンプオプションを使用しなさい）。
【０２６４】
［ＷＳ（アドレス０×０２［２０］、１ビット）］
このフラグはスライディングウィンドウオプションがＴＣＰソケットに対して適切に交渉されていることを示している（０＝ＷＳオプションを使用してはならない、１＝ＷＳオプションが使用可能になる）。このビットはＵＤＰソケットでは使用されない。
【０２６５】
［ＺＷ（アドレス０×０２［１９］、１ビット）］
このビットはソケットのピアウィンドウが０×００００であり、ソケットがゼロのウィンドウプローブ状態にあることを示している。
【０２６６】
［ＡＲ（アドレス０×０２［１８］、１ビット）］
このビットはＡＣＫパケットが特定のソケットで送信されるときに設定される。これはＡＣＫパケットが送信されるときにクリアされる。
【０２６７】
［ＣＦ（アドレス０×０２［１７］、１ビット）］
このビットは現在のＣＢが受信・送信ＦＩＦＯバッファ待ち行列中にあり、したがって減少されることができないことを示している。一度、ソケットに対するＡＣＫが送信されると、ＴＣＰ送信ブロックはＯｐｅｎ  ＣＢからＴｉｍｅ＿Ｗａｉｔ  ＣＢへ移動する。
【０２６８】
［ＣＶ（アドレス０×０２［１６］、１ビット）］
このビットはＣＢが有効な情報を含んでいることを示している。任意のＣＢの減少前に、このビットは常にクリアされる。
【０２６９】
［ＲＤ（アドレス０×０２［１５］、１ビット）］
このビットはＣＢ再送信時間が満了したが、優先順位待ち行列が一杯であるために再送信のために待ち行列されることができないことを示している。ＣＢポーラがＣＢで主張されているこのビットを発見するとき、これは再送信時間フィールドを無視し、再送信のためにＣＢを処理する。このビットはＣＢが優先順位送信待ち行列に入ったときにクリアされる。
【０２７０】
［ＣＢＶｅｒ（アドレス０×０２［１４：１２］、３ビット）］
これらのビットはＣＢのバージョンを示し、主にオンチッププロセッサにより使用され、それによって将来のハードウェアバージョンのＣＢのタイプを区別できる。このフィールドは０×１として現在規定されている。
【０２７１】
［ＣＢインターフェース（アドレス０×０２［１１：８］、４ビット）］
これらのビットはソケットの特定の物理的インターフェースを特定するために使用され、マルチポートアーキテクチャで使用される。単一ポートアーキテクチャでは、このフィールドは０×０で残されるべきである。
【０２７２】
［ＳＹ（アドレス０×０２［７］、１ビット）］
これらのビットはＴＷ状態にありながら、ソケットがＳＹＮパケットを受信したことを示している。このビットが設定され、その後ソケットでＲＳＴを受信し、ｋｉｌｌ＿ｔｗ＿ｍｏｄｅが０×００に設定されるならば、ＣＢは直ぐに無視される。
【０２７３】
［ＳＴ（アドレス０×０２［６］、１ビット）］
このビットはＴＸの左および右のＳＡＣＫフィールドが有効であることを示している。ＴＣＰ受信論理装置が受信されたデータの穴に気づいたとき、ＴＣＰ受信論理装置は穴の開始および終了アドレスをＴＸの左および右ＳＡＣＫフィールドへ位置させ、次に送信されるパケットがＳＡＣＫオプションを含むべきであることを示すためにこのビットを設定する。これらのパラメータを含んだパケットが送信されるとき、このビットはクリアされる。
【０２７４】
［ＳＲ（アドレス０×０２［５］、１ビット）］
このビットはＲＸの左および右のＳＡＣＫフィールドが有効であることを示している。ＴＣＰ受信論理装置がＳＡＣＫオプションを受信したとき、ＴＣＰ受信論理装置はＳＡＣＫ値の第１の対をＲＸの左および右ＳＡＣＫフィールドへ位置させ、このセクションが再送信される必要があることをＴＣＰ送信機に示すためにこのビットを設定する。セクションが再送信されるとき、このビットはクリアされる。
【０２７５】
［ＫＡ（アドレス０×０２［４］、１ビット）］
ＴＣＰソケットでは、このビットはキープアライブタイマがこのソケットを使用されるべきであることを示している（０＝キープアライブタイマを使用してはならない、１＝キープアライブタイマを使用しなさい）。ＵＤＰソケットでは、このビットはチェックサムがチェックされるべきであるか否かを示している（１＝チェックサムを使用可能にする、０＝チェックサムを無視する）。
【０２７６】
［ＤＦ（アドレス０×０２［３］、１ビット）］
このビットはソケットに対するＩＰヘッダのＤＦビットの状態を表している。このビットが設定されるとき、パケットは任意のホップにより断片化されない。このビットはパスＭＴＵ発見のために使用される。
【０２７７】
［ＶＬ（アドレス０×０２［２］、１ビット）］
このビットはＶＬＡＮタグが出力するイーサネット（登録商標）フレームに含まれるか否かを示している。このビットが主張されるならば、ＶＬＡＮタグ情報の４バイトはｃｂ＿ｔｘ＿ｖｉａｎ＿ｐｒｉｏｒｉｔｙと、ｃｂ＿ｔｘ＿ｖｉｄにより作られ、ＶＬＡＮタグ識別（固定された値）は後続するイーサネット（登録商標）アドレスフィールドに含まれる。
【０２７８】
［ＲＥ（アドレス０×０２［１］、１ビット、ＴＣＰ  ＣＢ）］
このフラグはタイムアウト状態と、再送信が必要とされることを示すために使用される。データが再送信されるときにクリアされる。このビットはＴＣＰ  ＣＢ用にのみ規定される。
【０２７９】
［ＵＰ（アドレス０×０２［１］、１ビット、ＵＤＰ  ＣＢ）］
このフラグはＵＤＰポートがダイナミックに割当てられるか予め特定されているかを示すために使用される。ダイナミックに割当てられるならば、ＣＢがデプリケートされるときに割当てを解除される。そうでなく予め特定されるならば、ＣＢがデプリケートされるときポートアクションは行われない。このビットはＵＤＰ  ＣＢに対してのみ規定される。
【０２８０】
［ＡＤ（アドレス０×０２［０］、１ビット）］
このビットはソケットでの遅延されたＡＣＫ送信でＡＣＫが待ち行列されることを示している。このビットはＴＣＰ  ＲＸ論理装置で設定され、ＡＣＫが送信のためにＣＢポーラにより待ち行列されるときにクリアされる。
【０２８１】
［ＴＸ  ＡＣＫ番号（アドレス０×０３，３２ビット）］
これはＴＣＰ接続の動作ＡＣＫ番号である。これは受信されたＴＣＰ  ＰＳＨパケットの予測されるＳＥＱ番号を表している。ＴＣＰデータパケットが受信されるとき、ＳＹＮ番号はこの番号に対してチェックされる。一致するか、受信されたＳＥＱ番号＋パケットの長さがこの番号をカバーするならば、データは受入れられる。この番号はネットワークスタックにより自動的に更新され、ＵＤＰ接続に使用されない。
【０２８２】
［ＳＥＱ番号（アドレス０×４，３２ビット）］
これはＴＣＰ接続の動作ＳＥＱ番号である。これはＴＣＰパケットで使用されるＳＥＱ番号を表しており、ネットワークスタックにより自動的に更新される。このフィールドはＵＤＰ接続に使用されない。
【０２８３】
［キープアライブ時間０×０５［３１：２４］、８ビット］
このフィールドはキープアライブトリガーが主張されるときの将来の時間を表している。この時間はパケットがソケットで送信される毎に、または純粋なＡＣＫパケットが受信される毎にリセットされる。その時間はここでは分の単位で表される。
【０２８４】
［ＬＷｉｎスケール（アドレス０×０５［２３：２０］、４ビット）］
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。有効値は０×００から０×０Ｅである。
【０２８５】
［ＲＷｉｎスケール（アドレス０×０５［１９：１６］、４ビット）］
このフィールドはＴＣＰ  ＳＹＮパケット中の遠隔端によりリクエストされるときのスライディングウィンドウスケールファクタを表している。有効値は０×００から０×０Ｅである。
【０２８６】
［遠隔ＭＳＳ（アドレス０×０５［１５：０］、１６ビット）］
このフィールドはＴＣＰ接続のためのＳＹＮパケットで受信されたＭＳＳを表している。これは遠隔端部が受けることができる最大のパケットサイズを示している。ＭＳＳオプションが受信されないならば、このフィールドは５３６（０×０２１８）にデフォルトされる。このフィールドはＵＤＰ接続に使用されない。
【０２８７】
［ＰＡ（アドレス０×０６［３１］、１ビット）］
このビットはＣＢのポートが自動割当てされたことを示すために使用される。このビットが設定されるならば、ＣＢをデプリケートするときが来ると、このビットはポートが割当てを解除される必要があるか否かを検査される。
【０２８８】
［優先順位（アドレス０×０６［３０：２８］、３ビット）］
このフィールドはＶＬＡＮタグに使用されるユーザの優先順位レベルを表している。このフィールドはまた送信スケジュール中のソケットのサービスレベルを表している。番号の数が高い程、優先順位は高くなる（７が最高で、０が最低）。このフィールドのデフォルト値は０×０であり、ソフトウェアにより設定されることができる。
【０２８９】
［ＶＩＤ（アドレス０×０６［２７：１６］、１２ビット）］
このフィールドはＶＬＡＧタグフレームで使用されるＶＬＡＧ識別を表している。このフィールドのデフォルト値は０×０００であり、ソフトウェアにより設定されることができる。ピアから開始される接続では、このフィールドはオープニングＳＹＮパケットで受けられるＶＩＤにより設定される。
【０２９０】
［遠隔ＭＡＣアドレス（アドレス０×０６［１５：０］−０×０７，全部で４８ビット）］
このフィールドはこのソケットで送信されているパケットの目的地ＭＡＣアドレスを表している。ソケットが最初に設定されるとき、ＡＲＰキャッシュはこのアドレスで問合せられる。これが解決された後、アドレスはここに記憶され、さらにＡＲＰキャッシュの問合せは避けられる。ＣＢがサーバソケットとして生成されるならば、このアドレスはＳＹＮソケットに含まれる目的地ＭＡＣアドレスから取られる。アドレスのビット［４７：３２］はＣＢアドレス０×６に記憶される。
【０２９１】
［ローカルＩＰアドレス（アドレス０×０８，３２ビット）］
このフィールドはソケット接続に対するローカルＩＰアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより特定される。サーバソケットでは、このフィールドはＣＢが半開きから開いた状態まで転移されるときに満杯にされる。
【０２９２】
［ＲＸ  ＡＣＫ番号（アドレス０×０９、３２ビット）］
このフィールドはこのソケットに対してピアから受信された最近のＡＣＫ番号を表している。これは任意の再試行がソケットで必要とされるか否かを決定するために使用される。これは送信されたパケットで使用されるシーケンス番号とは異なる番号であることに注意すべきである。
【０２９３】
［混雑ウィンドウ（ｃｗｎｄ）（アドレス０×０Ａ［３１：０］、３２ビット）］
このフィールドはｃｗｎｄパラメータを追跡する。ｃｗｎｄパラメータは混雑の回避およびスロースタートアルゴリズムで使用され、１ＭＳＳに初期化される。
【０２９４】
［ＨＡ（ホストＡＣＫ）（アドレス０×０Ｂ［３１］、１ビット）］
このビットはホスト＿ＡＣＫモードがこのソケットでアクチブであることを示している。このモードでは、データＡＣＫはホストによりトリガーされ、データが受信されるときに自動的に送信されない。
【０２９５】
［ＳＳ（送信されるＲＸ  ＤＡＶ状態）（アドレス０×０Ｂ［３０］、１ビット）］
このビットはＣＢに対するＲＸ  ＤＡＶ状態メッセージがオンチッププロセッサに送信されたことを示している。ビットはデータがホストにＤＭＡされたときをクリアする。
【０２９６】
［ソケットタイプ（アドレス０×０Ｂ［２９：２７］、３ビット）］
このフィールドは以下の表にしたがって制御ブロックにより表されるソケットのタイプを示している。
【表１０】
2010063110.tif 000012
【０２９７】
示されていないすべての他の復号は将来使用するために保留されている。ＵＤＰの生のモードでは、アプリケーションにはＵＤＰデータと共に遠隔ＩＰアドレスおよびＵＤＰヘッダ情報が与えられている。ＵＤＰの正常モードでは、データ部分だけがアプリケーションに与えられる。
【０２９８】
［ＭＩ（アドレス０×０Ｂ［２６］、１ビット）］
このビットはデータが現在、ソケット受信メモリブロック中に存在しないことを示すために使用される。
【０２９９】
［ＲＸ終了メモリブロックポインタ（アドレス０×０Ｂ［２５：０］、２６ビット）］
このフィールドは受信データが書込まれた最後のＭＲＸバッファのアドレスを表している。これはソケットに使用される次のメモリブロックをリンクするために使用される。
【０３００】
［ＲＸ開始メモリブロックポインタ（アドレス０×０Ｃ［２５：０］、２６ビット）］
このフィールドはホストに送信される次のＭＲＸバッファのアドレスを表している。
【０３０１】
［ＨＤ（アドレス０×０Ｃ［２６］、１ビット）］
このビットはホストへＤＭＡされるデータが残留し、ＲＸ  ＤＭＡ状態メッセージがまだ送信されていないことを示している。ＴＣＰ  ＲＸ論理装置はＲＸ  ＤＭＡ動作をスケジュールするときにこのビットを設定し、ＲＸ  ＤＭＡの行われた状態メッセージをリクエストするときにＴＣＰ  ＲＸ論理装置によりクリアされる。このビットはＦＩＮ対状態メッセージタイミング発行を容易にすることに使用されている。
【０３０２】
［ＩＳＰＥＣモード（アドレス０×０Ｃ［３０：２７］、４ビット）］
これらのビットはこのソケット接続で送信されたパケットで可能にされるＩＰＳＥＣモードを示している。復号を以下の表で示されている。
【表１１】
2010063110.tif 000013
【０３０３】
設定されるビットがないならば、ソケットで使用されるＩＰＳＥＣはない。
【０３０４】
［ＡＢ（ＡＣＫ  Ｒｅｑ  ペンディング）（アドレス０×０Ｃ［３１］、１ビット）］
このビットはＴＣＰ受信論理装置からＴＣＰ送信論理装置へのＡＣＫリクエストが保留中であることを示している。それはＴＣＰデータパケットが受信されるときに設定され、データのＡＣＫが送信されるときにクリアされる。このビットが依然として設定されながら別のデータパケットが受信されるならば、別のＡＣＫがリクエストされないで、受信されたＡＣＫ数が更新される。
【０３０５】
［ＨＲ（ホスト再送信ソケット）（アドレス０×０Ｄ［３０］、１ビット）］
このビットはこのソケットがｉＳＣＳＩアプリケーションであることを示している。
【０３０６】
［ＡＳ（アドレス０×０Ｄ［３０］、１ビット）］
このビットはこのソケットがオンチッププロセッサソケットアプリケーションであることを示している。
【０３０７】
［ＤＡ（アドレス０×０Ｄ［２９］、１ビット）］
このビットは重複ＡＣＫのために再送信を行ったことを示している。これは再送信されたパケットが送信されるときに設定される。受信されたＡＣＫポインタを進めるＡＣＫを獲得するときクリアされる。重複ＡＣＫ再送信後、新しいデータに対するＡＣＫを得るとき、ｃｗｎｄ＝ｓｓｔｈｒｅｓｈ（高速度回復アルゴリズムの一部）を設定する。このビットはワード０×１４でＤＳビットと共に使用される。失われたセグメントの再送信は一度だけ行われるので２つのビットを必要とする。
【０３０８】
［Ｒ０（アドレス０×０Ｄ［２８］、１ビット）］
このビットは再送信時間フィールドが有効（０＝無効、１＝有効）であることを示している。  
【０３０９】
［ＲＶ（アドレス０×０Ｄ［２７］、１ビット）］
このビットは再送信時間フィールドが有効（０＝無効、１＝有効）であることを示している。
【０３１０】
［ＴＰ（アドレス０×０Ｄ［２６］、１ビット）］
このビットは時間を定められたパケットが現在経過中であることを示している。ＲＴＯオプションが使用可能にならない場合のみ使用される。
【０３１１】
［次のＴＸメモリブロックポインタ（アドレス０×０Ｄ［２５：０］、２６ビット）］
このフィールドは送信される次のＭＴＸバッファのアドレスを表している。
【０３１２】
［ＭＳＳ＿Ｓ（２ビット，ワード０×０Ｅ［３１：３０］）］
これらのビットはＳＹＮパケットで使用されるＭＳＳサイズを特定するために使用される。有効な設定を以下示す。
【表１２】
2010063110.tif 000014
【０３１３】
［シリーウィンドウサイズ（アドレス０×０Ｅ［２９：０］、３０ビット）］
このフィールドはＴＣＰ  ＲＸハードウェアにより追跡されるときの動作ウィンドウサイズを表している。このウィンドウは実際のウィンドウサイズを維持し、ＭＳＳよりも大きいときのみ実際のウィンドウに転送される。
【０３１４】
［ＲＸ  ＤＭＡカウント（アドレス０×０Ｆ［３１：１６］、アドレス０×１２［３１：２４］２４ビット）］
このフィールドは最後のＲＸ  ＤＭＡ状態メッセージ移行にＲＸ  ＤＭＡを介してホストへ送信されるバイト数を表している。カウントのＭＳＢはアドレス０×１２に記憶される。
【０３１５】
［ホストバッファオフセットポインタ（アドレス０×０Ｆ［１５：０］、１６ビット）］
このフィールドはＲＸ  ＤＭＡが使用されている現在のホストメモリバッファへのオフセットを表している。
【０３１６】
［ウィンドウクランプ（アドレス０×１０［３１：０］、３２ビット）］
このフィールドはソケット接続で可能にされた最大の広告されたウィンドウを表している。
【０３１７】
［ＲＸリンクリストアドレス（アドレス０×１１［３１：０］、３２ビット）］
これはＲＸ  ＤＭＡ動作に使用されるＲＸリンクリストのオンチッププロセッサメモリアドレスである。
【０３１８】
［ＲＸ送信限度（アドレス０×１２［１５：０］、１６ビット）］
これはＲＸ  ＤＭＡ転送の転送限度である。ＲＸ  ＤＭＡ状態メッセージはこの限度に到達されると発生される。各ＤＭＡ転送後に状態メッセージを必要とするＣＢに対しては、この限度は０×０００１に設定されるべきである。
【０３１９】
［ＲＸリンクリストエントリ（アドレス０×１２［２３：１６］、８ビット）］
これはＲＸ  ＤＭＡリンクリストのエントリ数である。
【０３２０】
［Ｋ（キープアライブトリガーされた）（アドレス０×１３［３１］、１ビット）］
このビットは現在のＣＢがキープアライブ状態にあることを示すために使用される。このビットはキープアライブタイマがＣＢで満了するときに設定され、キーブアライブが他の側がなくなった（消滅した）ことを発見したためにＣＢが割当てを解除されるとき、またはキープアライブプローブ（ＡＣＫパケット）に対する応答を受信するときにＴＣＰ−ＲＸによりクリアされる。
【０３２１】
［ＤｕｐＡｃｋ（アドレス０×１３［３０：２８］、３ビット）］
このフィールドは重複されたＡＣＫがいくつ受信されたかを追跡する。このパラメータは高速再送信アルゴリズムに使用される。
【０３２２】
［再試行／プローブ（アドレス０×１３［２７：２４］、４ビット）］
このフィールドは特定のパケットに対して送出される再試行数を追跡する。これはまた送信されたウィンドウプローブの数の追跡を維持するために使用される。後者の数は適切なウィンドウのプローブ送信インターバルが使用されることができるために必要とされる。
【０３２３】
［利用可能なＴＸデータ（アドレス０×１３［２３：０］、２４ビット）］
このフィールドはソケットで送信されるのに利用可能なデータの総量を表している。
【０３２４】
［ソケットチャンネル番号（アドレス０×１４［３１：２４］、８ビット）］
これはソケットチャンネルの番号である。状態メッセージがホストに返送されるとき、このチャンネルは使用される待ち行列を特定する。
【０３２５】
［ＳＸ（アドレス０×１４［２３］、１ビット）］
このビットはＳＡＣＫ再送信が必要であることを示している。これはＳＡＣＫ再送信が送出されるときに再送信モジュールにより設定されクリアされる。
【０３２６】
［ＦＸ（アドレス０×１４［２３］、１ビット）］
このビットはＦＩＮパケットがこのソケットで送出されていることを示している。これはＴＣＰ  ＴＸ論理装置により設定される。
【０３２７】
［ＤＡ（アドレス０×１４［１９］、１ビット）］
このビットはソケットが重複ＡＣＫ状態にあることを示している。このビットは重複ＡＣＫ閾値に到達するときに設定される。ピアＡＣＫが新しいデータのときにクリアされる。
【０３２８】
［ＵＭ（アドレス０×１４［１８］、１ビット）］
このビットはピアの広告されたウィンドウがＭＳＳの２倍を超えたことを示している。このビットが設定されるならば、データはＭＳＳサイズの最大でＭＴＸに記憶される。ビットが設定されないならば、データはＭＳＳの４分の１の最大で記憶される。
【０３２９】
［ＵＣ（アドレス０×１４［１７］、１ビット）］
このビットは次のＣＢリンクフィールドの制御ブロックのタイプがＵＤＰ  ＣＢであることを示している。
【０３３０】
［ＴＷ（アドレス０×１４［１６］、１ビット）］
このビットは次のＣＢリンクフィールドの制御ブロックのタイプがＴＷ  ＣＢであることを示している。
【０３３１】
［次のＣＢリンク（アドレス０×１４［１５：０］、１６ビット）］
このフィールドは次にリンクされたＣＢのＣＢメモリアドレスを表している。このＣＢはこのソケットと同一のハッシュ値を有する。ＶＳＯＣＫサブモジュールはこれがＣＢを同じハッシュ値に連結するときにこのフィールドを満たす。
【０３３２】
［ＲＸウィンドウサイズ（アドレス０×１５［３１：１６］、１６ビット）］
このフィールドはスライディングウィンドウスケールファクタにより調節されない遠隔端部の広告されたウィンドウを表している。
【０３３３】
［ＩＰ  ＴＴＬ（アドレス０×１５［１５：８］、８ビット）］
このフィールドはソケットのＩＰヘッダで使用されるＴＴＬを表している。
【０３３４】
［ＩＰ  ＴＯＳ（アドレス０×１５［７：０］、８ビット）］
このフィールドはソケット接続のためにＩＰヘッダで使用されるＴＯＳフィールド設定を表している。これはアプリケーションにより設定されることができる随意選択的なパラメータである。ＴＯＳパラメータが特定されないならば、このフィールドは０×００にデフォルトする。
【０３３５】
［ＲＸタイムスタンプ／時間を定められたシーケンス番号（アドレス０×１６、３２ビット）］
一度に１つのセグメントをタイミングを定めるとき、このフィールドは時間を定められたパケットのシーケンス番号を記憶するために使用される。このシーケンス番号をカバーするＡＣＫが受信されるとき、ＲＴＴはそのパケットに対して得られることができる。このパケットが送信されたときのタイムスタンプは最後の送信フィールドのローカルタイムスタンプ中に記憶される。タイムスタンプオプションが使用可能になるとき、このフィールドはＴＣＰパケットで受信されるタイムスタンプを記憶するために使用される。
【０３３６】
［平滑な平均導出（アドレス０×１７、３２ビット）］
このフィールドはＲＦＣ７９３に特定されたファンヤコブソンアルゴリズムを使用して計算されるような往復時間測定の平滑化された平均導出を表している。
【０３３７】
［スロースタート閾値（ｓｓｔｈｒｅｓｈ）（アドレス０×１８、３２ビット）］
このフィールドはｓｓｔｈｒｅｓｈパラメータを追跡する。ｓｓｔｈｒｅｓｈパラメータは混雑回避アルゴリズムに対して使用され、０×００００ＦＦＦＦに初期化される。
【０３３８】
［平滑なＲＴＴ（アドレス０×１９、３２ビット）］
このフィールドはＲＦＣ７９３中で特定されたファンヤコブソンアルゴリズムを使用して計算されるような平滑化された往復時間値を表している。
【０３３９】
［再送信タイムスタンプ（アドレス０×１Ｂ、１６ビット）］
このフィールドは再送信がソケットで必要とされるときの将来の時間を表すために使用されている。
【０３４０】
［ＴＸ左ＳＡＣＫ（アドレス０×１Ｃ、３２ビット）］
このフィールドはシーケンス内データ後に受信されたシーケンス外データの第１のアイランドの第１のバイトのシーケンス番号（最低のシーケンス番号）を表している。
【０３４１】
［ＴＸ右ＳＡＣＫ（アドレス０×１Ｄ、３２ビット）］
このフィールドはシーケンス内データ後に受信されたシーケンス外データの第１のアイランドの最後のバイトのシーケンス番号（最高のシーケンス番号）に１を足した数を表している。
【０３４２】
［ＲＸ左ＳＡＣＫ（アドレス０×１Ｅ、３２ビット）］
このフィールドは受信されたパケットのＳＡＣＫオプションにより報告されたシーケンス外データの第１のアイランドの第１のバイトのシーケンス番号を表している。
【０３４３】
［ＲＸ右ＳＡＣＫ（アドレス０×１Ｆ、３２ビット）］
このフィールドは受信されたパケットのＳＡＣＫオプションにより報告されたシーケンス外データの第１のアイランドの最後のバイトのシーケンス番号に１を足した数を表している。
【０３４４】
［設定されたソケット添付ＣＢ構造］］
以下の表は設定されたソケットのメモリの添付ＣＢ構造のすべてのフィールドをリストしている。
【表１３】
2010063110.tif 000015
【０３４５】
［設定されたソケット添付ＣＢフィールド定義］
［ＲＸ左ＳＡＣＫメモリアドレス（アドレス０×０［２３：０］、２４ビット）］
このフィールドはＳＡＣＫアイランドのブロックのリンクされたリストの第１のＭＲＸメモリブロックの第１のアドレスを表している。
【０３４６】
［ＲＸ右ＳＡＣＫメモリアドレス（アドレス０×１［２３：０］、２４ビット）］
このフィールドはＳＡＣＫアイランドのブロックのリンクされたリストの最後のＭＲＸメモリブロックの第１のアドレスを表している。
【０３４７】
［ＳＡＣＫブロックカウント（アドレス０×０−０×１［３１：２４］、１６ビット）］
このフィールドはソケットにより使用されるメモリブロック数を表している。
【０３４８】
［書込まれたＲＸバイト（アドレス０×２−０×３、６４ビット）］
このフィールドはソケットのＭＲＳメモリに書込まれるバイトの総数を表している。最下位桁ワードはアドレス０×２に記憶され、最上位桁ワードはアドレス０×３に記憶される。
【０３４９】
［送信されたＴＸバイト（アドレス０×４−０×５、６４ビット）］
このフィールドはソケットで送信されるバイトの総数を表している。最下位桁ワードはアドレス０×４に記憶され、最上位桁ワードはアドレス０×５に記憶される。
【０３５０】
［ｉＳ（アドレス０×６［３１］、１ビット）］
このビットはＣＢがｉＣＳＩソケットとして使用されていることを示している。
【０３５１】
［ＭＤ（アドレス０×６［３０］、１ビット）］
このビットはＣＢが受信されたバッファリストに対するＭＤＬを使用していることを示している。
【０３５２】
［ＤＳ（アドレス０×６［２９］、１ビット）］
このビットはソケットで重複したＡＣＫを受信したことを示している。これは重複のＡＣＫを処理する論理装置により設定される。重複のＡＣＫが受信され、このビットが既に設定されるならば、失われたセグメントは再送信されない。これは主要なオープンＣＢ構造のワード０×０ＤのＤＡビットと共に使用される。これらの２つのビットの状態テーブルを以下に示す。
【表１４】
2010063110.tif 000016
【０３５３】
［更新されないｉＳＣＳＩシード（ＩＮ）（アドレス０×６［２８］、１ビット）］
このビットはｉＳＣＳＩメモリブロックが処理されるときにｄａｖｓｃａｎモジュールにより設定され、そのブロックのシードが保存されるときにクリアされる。ビットはハードウェアによってＣＲＣシードのローカルコピーが更新されていないことをホストに示すように主張される。ホストがＣＲＣシードをリセットしたいとき、このビットを最初にプローブする必要がある。ビットが主張されるならば、ソケットにＳｅｅｄ＿Ｃｌｒｄ＿ｂｙ＿Ｈｏｓｔビットを設定する必要がある。ＣＲＣシードのローカルコピーをホストにより書かれた新しい値で更新するときに、ハードウェアはこのビットをクリアする。
【０３５４】
［ホストによりクリアされた（ＣＨ）ｉＳＣＳＩシード（アドレス０×６［２７］、１ビット）］
このビットは新しい値をＣＢ  ＡＮＤのＣＢのｉＳＣＳＩシードに書込むときにホストにより設定され、ＩＮビットが設定される。ｄａｖｓｃａｎモジュールはこのビットが設定されることを観察するとき、ｉＳＣＳＩシードとＣＢのこのビットをクリアする。
【０３５５】
［ＭＤＬ転送長（アドレス０×６［１５：０］、１６ビット）］
このフィールドはＭＤＬ  ＤＭＡ転送がどの程度の長さであるべきかを示すために使用される。通常、ＲＸ＿ＭＤＬ  ＩＢを発生したＲＸ＿ＤＡＶ状態メッセージで報告されたのと同じ長さである。
【０３５６】
［ＩＰＳＥＣハッシュ（アドレス０×７［３１：０］、３１ビット）］
このフィールドはソケットの接続で使用されるすべてのＳＡエントリのハッシュ値を表している。
【０３５７】
［最後の未承認シーケンス番号（アドレス０×８、３２ビット）］
このフィールドはピアからの、最後の未承認されたシーケンス番号を表している。この相対は計算を記憶するためタイムスタンプで使用される。
【０３５８】
［ｉＳＣＳＩ  ＦＩＭインターバル（アドレス０×９［３１：１６］、１６ビット）］
このフィールドはｉＳＣＳＩ接続のためのＦＩＭインターバルを表している。これはバイト数として記憶される。
【０３５９】
［ｉＳＣＳＩ  ＦＩＭオフセット（アドレス０×９［１５：０］、１６ビット）］
このフィールドは次のＦＩＭ挿入までのバイト数を表している。
【０３６０】
［ｉＳＣＳＩ  ＣＲＣシード（アドレス０×Ａ、３２ビット）］
このフィールドは受信されたｉＳＣＳＩデータのＣＲＣシードを表している。
【０３６１】
［ＩＰＳＥＣオーバーヘッド（アドレス０×Ｂ［７：０］、８ビット）］
このフィールドはＩＰＳＥＣヘッダ（および過剰なＩＰヘッダ）が１つのパケットで占める二重ワード数（４バイト）に関するオーバーヘッドを表している。この情報はパケットに置かれることができるデータ量を決定するときに使用される。
【０３６２】
［ｉＳＣＳＩ  ＦＩＭエネーブル  ［ＦＥ］（アドレス０×Ｂ［８］、１ビット）］
このビットはＦＩＭサポートがＣＢで必要とされるか否かを示す（０＝ＦＭディスエーブル、１＝ＦＩＭエネーブル）。
【０３６３】
［ＭＲＸバッファ（アドレス０×Ｂ［３１：１６］、１６ビット）］
このフィールドはソケットにより現在使用されているＭＲＸバッファの数を表している。この数がＭＲＸバッファ限度（全般的な設定）に到達するとき、これ以上データパケットはソケットで受けられない。
【０３６４】
［ＤＡＶバッファ長（アドレス０×Ｃ［１５：０］、１６ビット）］
このフィールドはＤＡＶ状態メッセージに対して使用されるバッファ長を示している。
【０３６５】
［ＲＸ送信ＦＩＮ状態メッセージ［ＳＭ］（アドレス０×Ｃ［１６］、１ビット）］
このビットはＲＸ  ＦＩＮ受信状態メッセージがＣＢで送信されるべきであることを示している。
【０３６６】
［ＲＸ送信ＤＡＶ状態メッセージ［ＳＶ］（アドレス０×Ｃ［１７］、１ビット）］
このビットはＲＸ  ＤＡＶ状態メッセージがＣＢに対して送信されるべきことを示している。
【０３６７】
［ＲＸ  ＤＭＡ状態メッセージのペンディング［ＤＰ］（アドレス０×Ｃ［１８］、１ビット）］
このビットはＲＸ  ＤＭＡが行った状態メッセージがＣＢでペンディング中であることを示している。
【０３６８】
［最後のＤＭＡ［ＬＤ］（アドレス０×Ｃ［１９］、１ビット）］
このビットはホストバッファセグメントの最後のＤＭＡが送信されていることを示している。このＤＭＡの完了時、ＲＸ  ＤＭＡ状態メッセージが発生される。
【０３６９】
［ＦＩＮ状態メッセージのペンディング［ＦＰ］（アドレス０×Ｃ［２０］、１ビット）］
このビットはＦＩＮ状態メッセージがペンディングであることを示している。これはＭＲＸメモリにデータが残留するが現在進行中のＤＭＡがないときに設定される。これはＤＭＡがスタートし、ＳＶビットが設定するときにクリアされる。
【０３７０】
［リセットペンディング［ＲＰ］（アドレス０×Ｃ［２１］、１ビット）］
このビットはリセット状態メッセージがペンディングであり、ＲＸ  ＤＭＡ状態メッセージ後に送信されるべきであることを示している。これはＭＲＸメモリにデータが残留するが現在進行中のＤＭＡがないときに設定される。これはＤＭＡが開始し、ＳＶビットが設定するときにクリアされる。
【０３７１】
［送信リセットメッセージ［ＲＭ］（アドレス０×Ｃ［２２］、１ビット）］
このビットはＲＳＴパケットが受信され、ｔｃｐｒｘｓｔａとｄａｖｓｃａｎモジュール間でのみ使用される。
【０３７２】
［ＴＷへのオープン［ＯＴ］（アドレス０×Ｃ［２３］、１ビット）］
このビットはソケットが待機時間状態に転移され、待機時間転送プロセスへのオープンが完了されたことを示す。このビットはｄａｖｓｃａｎにより設定され、ｒｘｃｂｕｐｄ．ｖにより読取られる。
【０３７３】
［ゼロウィンドウタイムスタンプ（アドレス０×Ｃ［３１：２４］、１６ビット）］
このフィールドは次のゼロウィンドウプローブを送信する将来のタイムスタンプを示している。
【０３７４】
［ＴＸトンネルＡＨハンドル（アドレス０×Ｄ［１５：０］、１６ビット）］
このフィールドはソケットに関連するＴＸトンネルＡＨ  ＳＡ（セキュリティ関連）ハンドルを表している。
【０３７５】
［ＴＸトンネルＥＳＰハンドル（アドレス０×Ｄ［３１：１６］、１６ビット）］
このフィールドはソケットに関連するＴＸトンネルＡＨ  ＥＳＰ  ＳＡ（セキュリティ関連）を表している。
【０３７６】
［ＴＸ転送ＡＨハンドル（アドレス０×Ｅ［１５：０］、１６ビット）］
このフィールドはソケットに関連するＴＸ転送ＡＨ  ＳＡ（セキュリティ関連）ハンドルを表している。
【０３７７】
［ＴＸ転送ＥＳＰハンドル（アドレス０×Ｅ［３１：１６］、１６ビット）］
このフィールドはソケットに関連するＴＸ転送ＥＳＰ  ＳＡ（セキュリティ関連）を表している。
【０３７８】
［ｉＳＣＳＩバイト０−１−２（アドレス０×Ｆ［２３：０］、各８ビット）］
これらのバイトはｉＳＣＳＩ  ＣＲＣ計算の非整列バイトを表している。
【０３７９】
［ＳＢＶａｌ（アドレス０×Ｆ［２５：２４］、２ビット）］
このフィールドは有効であるｉＳＣＳＩバイト［２：０］を示すために使用される。
【０３８０】
［Ｍａｘ  ＲＸウィンドウ（アドレス０×１０［１５：０］、１６ビット）］
このフィールドはピアにより広告された最大のウィンドウを表している。これはＭＴＸデータパッキング限度で使用されるパラメータを決定するために使用される。
【０３８１】
［ローカルＭＳＳ（アドレス０×１０［３１：１６］、１６ビット）］
このフィールドはＳＹＮまたはＳＹＮ／ＡＣＫパケットで使用されるローカルＭＳＳ値を表している。これはウィンドウサイズの調節に使用される。
【０３８２】
［最後のＣＷＮＤ更新（アドレス０×１１［３１：１６］、１６ビット）］
このフィールドはｃｗｎｄが更新された最後のタイムスタンプを表し、この情報はそれがｓｓｔｈｒｅｓｈよりも大きいときにｃｗｎｄを増加するために使用される。
【０３８３】
［ＤＭＡ  ＩＤ（アドレス０×１２［３：０］、４ビット）］
このフィールドはＣＢに対するＤＭＡ  ＩＤを表している。このフィールドはＴＣＰ  ＴＸ  ＤＭＡがリクエストされる毎にインクリメントされる。ｘｍｔｃｂｗｒモジュールがＤＭＡ転送のパッキングを終了したとき、ＭＤＡ  ＩＤがＣＢにあるものと一致するならば、ＤＭＡ＿Ｐｅｎｄｉｎｇビットは（ｘｍｔｃｂｗｒにより）クリアされる。
【０３８４】
［ＤＭＡペンディング（アドレス０×１２［４］、１ビット）］
このフィールドはＴＸ  ＤＭＡがこのソケットでペンディングであることを示している。このビットはＴＸ  ＤＭＡをリクエストするときにｓｏｃｋｒｅｇｓにより設定され、ＴＸ  ＤＭＡ  ＩＤが丁度、ＣＢのＴＸ＿ＤＭＡに一致するときにｘｍｔｃｂｗｒ．ｖによりクリアされる。
【０３８５】
［結合されたＣＢ構造］
ＣＢメモリでは、ソケットＣＢは１つの連続したメモリブロックとして記憶される。フォーマットを以下の表で示す。
【表１５】
2010063110.tif 000017
【０３８６】
［半分開かれたソケットの主要なＣＢ構造］
以下の表は、半分開かれたソケットのメモリの主要なＣＢ構造を規定している。
【表１６】
2010063110.tif 000018
【０３８７】
［半分開かれたソケットの主要なＣＢフィールドの定義］
［遠隔ＩＰアドレス（３２ビット、ワード０×０［３１：０］）］
これは接続の遠隔端部のＩＰアドレスである。ＩＰアドレスのビット［３１：１６］はワード０×０に記憶され、ビット［１５：０］はワード０×１に記憶される。
【０３８８】
［遠隔ポート（１６ビット、ワード０×０［４７：３２］）］
これは接続の遠隔端部のポートアドレスである。
【０３８９】
［ローカルポート（１６ビット、ワード０×０［６３：４８］）］
これは接続のローカル端部のポートアドレスである。
【０３９０】
［ローカルＩＰインデックス（４ビット、ワード０×１［１５：１２］）］
これはこの接続に使用されるローカルＩＰアドレスのインデックスである。この値はＩＰモジュールによって完全なＩＰアドレスおよび対応するＭＡＣアドレスへ解かれる。
【０３９１】
［接続状態（４ビット、ワード０×１［１１：８］）］
これは接続の現在の状態であり、以下のように復号される。
【表１７】
2010063110.tif 000019
【０３９２】
［ＲｘＡＣＫ（１ビット、ワード０×１［７］）］
このビットはＲＸ  ＡＣＫ状態メッセージモードが使用可能になることを示している。このモードでは、すべての目立ったデータを承認するＡＣＫが受信されるとき、状態メッセージが発生される。
【０３９３】
［ＳＡＣＫ（１ビット、ワード０×１［６］）］
このビットは遠隔端部がそのＳＹＮパケットでＳＡＣＫオプションを送信したことを示している。
【０３９４】
［ＲｘＴＳ（１ビット、ワード０×１［５］）］
このビットは遠隔端部がタイムスタンプオプションを送信し、受信されたタイムスタンプフィールドが半分開かれた添付制御ブロックで有効であることを示している。
【０３９５】
［ＷｉｎＳｃ（１ビット、ワード０×１［４］）］
このビットは遠隔端部がウィンドウスケールオプションを送信したことを示している。
【０３９６】
［ＲｘＭＳＳ（１ビット、ワード０×１［３］）］
このビットは遠隔端部がＭＳＳオプションを送信し、遠隔ＭＳＳフィールドが有効であることを示している。
【０３９７】
［ＡＣＫＲｑ（１ビット、ワード０×１［２］）］
このビットはＡＣＫがこのソケットに対してリクエストされることを示している。これは設定制御ブロックで類似のビットが重複しているが、ここでは使用されないことを意味している。
【０３９８】
［ＣＢｉｎＦＦ（１ビット、ワード０×１［１］）］
このビットはこのＣＢがＲｘからＴＸへのＦＦ待ち行列にあるが故に、まだ消滅されることができないことを示している。
【０３９９】
［ＣＢＶａｌ（１ビット、ワード０×１［０］）］
このビットは半分開かれたＣＢが有効であることを示している。
【０４００】
［ＣＢバージョン（４ビット、ワード０×１［３１：２８］）］
これらのビットはＣＢのバージョンを示している。このフィールドは現在０×１に規定されている。
【０４０１】
［ＴＸインターフェース（４ビット、ワード０×１［２７：２４］）］
これらのビットは発信するＳＹＮが来るインターフェースを示している。
【０４０２】
［ＩＰＳＥＣ（１ビット、ワード０×１［２３］）］
このビットはＨＯ  ＣＢがＩＰＳＥＣ保護されたパケットで使用されていることを示している。この場合、このＨＯ  ＣＢに一致しない受信されたＳＹＮが破棄される。
【０４０３】
［ＭＳＳサイズ（２ビット、ワード０×１［２２：２１］）］
これらのビットはＳＹＮ／ＡＣＫパケットで使用されるＭＳＳサイズを特定するために使用される。有効な設定を以下示す。
【表１８】
2010063110.tif 000020
【０４０４】
［ＫＡ（１ビット、ワード０×１［２０］）］
このビットはキープアライブタイマがこのソケットで使用されるべきであることを示している。
【０４０５】
［ＤＦ（１ビット、ワード０×１［１９］）］
このビットはＩＰヘッダの断片化されてはならないビットを特定するために使用される。
【０４０６】
［ＶＬＡＮＶ（１ビット、ワード０×１［１８］）］
このビットはＶＬＡＮフィールドが有効であることを示している。
【０４０７】
［再送信（１ビット、ワード０×１［１７］）］
このビットは再送信がこのソケットで必要とされていることを示している。
【０４０８】
［ＲｘＵＲＧ（１ビット、ワード０×１［１６］）］
このビットはＵＲＧビットが受信されたパケットで設定されたことを示している。
【０４０９】
［ＡＣＫ（３２ビット、ワード０×１［６３：３２］）］
これは送信されたパケットで使用されるＡＣＫ数である。
【０４１０】
［ＳＥＱ（３２ビット、ワード０×２［３１：０］）］
これは送信されたパケットで使用される動作シーケンス番号である。
【０４１１】
［ＳＡオーバーヘッド（８ビット、ワード０×２［４７：４０］）］
このフィールドは（二重ワード数で）ＣＢのＩＰＳＥＣオーバーヘッドを記憶するために使用される。
【０４１２】
［ローカルＷｉｎＳｃａｌｅ（４ビット、ワード０×２［３９：３６］）］
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。有効な値は０×００から０×０Ｅである。
【０４１３】
［遠隔ＷｉｎＳｃａｌｅ（４ビット、ワード０×２［３５：３２］）］
このフィールドはＴＣＰ  ＳＹＮパケットの遠隔端部によりリクエストされるようなスライディングウィンドウスケールファクタを表している。有効な値は０×００から０×０Ｅである。
【０４１４】
［遠隔ＭＳＳ（１６ビット、ワード０×２［６３：４８］）］
このフィールドはＴＣＰ接続に対するＳＹＮパケットで受信されるＭＳＳを表している。これは遠隔端部が受けることのできる最大のパケットサイズを示している。ＭＳＳオプションが受信されないならば、このフィールドは５３６（０×０２１８）にデフォルトされる。このフィールドはＵＤＰ接続に使用されない。
【０４１５】
［ＶＬＡＮ優先順位（３ビット、ワード０×３［１４：１２］）］
このフィールドはＶＬＡＮタグに使用されるユーザ優先順位レベルを表している。それはまた送信スケジュール中のソケットに対するサービスレベルも表す。数が高いほど、優先順位は高い（７が最大であり０が最低である）。このフィールドに対するデフォルト値は０×０であり、ソフトウェアにより設定されることができる。
【０４１６】
［ＶＬＡＮ  ＶＩＤ（１２ビット、ワード０×３［１１：０］）］
このフィールドはＶＬＡＮタグフレームで使用されるＶＬＡＮ識別を表している。このフィールドのデフォルト値は０×０００であり、ソフトウェアにより設定可能である。ピアから開始される接続では、このフィールドはオープニングＳＹＮパケットで受信されるＶＩＤにより設定される。
【０４１７】
［遠隔ＭＡＣアドレス（４８ビット、ワード０×３［６３：１６］）］
これらのフィールドはこのソケットで送信されているパケットに対する目的地ＭＡＣアドレスを表している。ソケットが最初に設定されるとき、ＡＲＰキャッシュはこのアドレスに対して問合せられる。解決された後、アドレスはここに記憶され、それによりこれ以上のＡＲＰキャッシュ問合せを防止する。ＣＢがサーバソケットとして生成されるならば、このアドレスはＳＹＮパケットに含まれる目的ＭＡＣアドレスから取られる。
【０４１８】
［受信されたタイムスタンプ（３２ビット、ワード０×４［３１：０］）］
これは受信されたパケットに含まれるタイムスタンプである。
【０４１９】
［ローカルタイムスタンプ（３２ビット、ワード０×４［６３：３２］）］
これはこのソケットに対して送信された最後のパケットのタイムスタンプである。
【０４２０】
［ＴＴＬ（８ビット、ワード０×５［１５：８］）］
これは接続に使用されるＴＴＬである。ＳＹＮ／ＡＣＫが発生されるとき、このパラメータはＩＰルータにより与えられ、この位置に記憶される。ソケットが設定された状態に転移するとき、この情報はオープン制御ブロックに通過される。
【０４２１】
［ＴＯＳ（８ビット、ワード０×５［７：０］）］
これは接続に使用されるＴＴＬである。ＳＹＮ／ＡＣＫが発生されているとき、このパラメータはＩＰルータにより与えられ、この位置に記憶される。ソケットが設定された状態に転移するとき、この情報はオープン制御ブロックに通過される。
【０４２２】
［ＳＹＮ／ＡＣＫ再試行数（４ビット、ワード０×５［１９：１６］）］
このフィールドは特定のソケットに対して送信されるＳＹＮ／ＡＣＫ再試行数を追跡する。再試行数がプログラムされた最大値に到達するならば、ソケットはデプリケートされる。
【０４２３】
［ＩＰＳＥＣモード（４ビット、ワード０×５［３１：２８］）］
このフィールドはソケットに対してアクチブなＩＰＳＥＣモードを示すために使用される。このフィールドの復号を以下示す。
【表１９】
2010063110.tif 000021
【０４２４】
［ローカルＩＰアドレス（３２ビット、ワード０×５［６３：３２］）］
このフィールドはＳＹＮパケットで受信された目的地ＩＰアドレスを記憶するために使用される。これはソケット接続のためのローカルＩＰアドレスを表している。
【０４２５】
［ＴＸトンネルＡＨ  ＳＡハンドル（１６ビット、ワード０×６［１５：０］）］
このフィールドはＣＢに対して（適用可能であるならば）ＴＸトンネルＡＨ  ＳＡハンドルを記憶するために使用される。
【０４２６】
［ＴＸトンネルＥＳＰ  ＳＡハンドル（１６ビット、ワード０×６［３１：１６］）］
このフィールドはＣＢに対して（適用可能であるならば）ＴＸトンネルＥＳＰ  ＳＡハンドルを記憶するために使用される。
【０４２７】
［ＳＡハッシュ（３１ビット、ワード０×６［６３：３２］）］
このフィールドはＣＢに対するＳＡハッシュを記憶するために使用される。
【０４２８】
［ＴＸ転送ＡＨ  ＳＡハンドル（１６ビット、ワード０×７［１５：０］）］
このフィールドはＣＢに対して（適用可能であるならば）ＴＸ転送ＡＨ  ＳＡハンドルを記憶するために使用される。
【０４２９】
［ＴＸ転送ＥＳＰ  ＳＡハンドル（１６ビット、ワード０×７［３１：１６］）］
このフィールドはＣＢに対して（適用可能であるならば）ＴＸ転送ＥＳＰ  ＳＡハンドルを記憶するために使用される。
【０４３０】
［ローカルＭＳＳ（１６ビット、ワード０×７［４７：３２］）］
このフィールドは接続で使用されるローカルＭＳＳ値を記憶するために使用される。これはシリ−ウィンドウシンドロームを避けるためにウィンドウサイズを調節するのに必要とされる。
【０４３１】
［待機時間ＣＢ構造］
以下の表はＴｉｍｅ＿Ｗａｉｔ状態のソケットのメモリのＣＢ構造を規定している。
【表２０】
2010063110.tif 000022
【０４３２】
［待機時間ＣＢフィールド定義］
［遠隔ＩＰアドレス（アドレス０×００、３２ビット）］
この３２ビットフィールドは接続のための遠隔ＩＰアドレスを表している。クライアントソケットでは、このフィールドはアプリケーションにより設定される。サーバソケットでは、このフィールドはＳＹＮパケットで受信されたＩＰアドレスまたは受信されたＵＤＰパケットのＩＰアドレスにより満たされる。
【０４３３】
［遠隔ポート（アドレス０×０１［３１：１６］、１６ビット）］
このフィールドは接続のための遠隔ポート番号を表している。クライアントソケットではこのフィールドは常にアプリケーションにより特定される。サーバソケットでは、このフィールドはＳＹＮまたはＵＤＰパケットで受信されたポート番号で満たされる。
【０４３４】
［ローカルポート（アドレス０×０１［１５：０］、１６ビット）］
このフィールドは接続のためのローカルポート番号を表している。クライアントソケットでは、このフィールドはアプリケーションにより特定されるか、ネットワークスタックにより自動的に生成される。サーバソケットでは、このフィールドは常にアプリケーションにより特定される。
【０４３５】
［ＩＰインデックス（アドレス０×０２［３１：２８］、４ビット）］
このフィールドはソケットのホストインターフェースにおけるＩＰアドレスのネットワークスタックＩＰアドレステーブルのインデックスを表しており、ネットワークスタックハードウェアにより満たされる。
【０４３６】
［ＣｏｎｎＳｔａｔｅ（アドレス０×０２［２７：２４］、４ビット）］
このフィールドは現在の接続状態を示しており、以下のように復号する。
【表２１】
2010063110.tif 000023
【０４３７】
［ＲＸ（アドレス０×０２［２３］、１ビット）］
このビットはＲＸ  ＡＣＫ状態メッセージモードが使用可能になることを示している。このモードはＴＷ  ＣＢに対しては意味がない。
【０４３８】
［ＳＡ（アドレス０×０２［２２］、１ビット）］
このビットは選択的なＡＣＫオプション（ＳＡＣＫ）がこのソケットで使用されるべきであることを示している（０＝ＳＡＣＫを使用してはならない、１＝ＳＡＣＫを使用する）。
【０４３９】
［ＴＳ（アドレス０×０２［２１］、１ビット）］
このビットはタイムスタンプオプションがこのソケットで使用されるべきであることを示している（０＝タイムスタンプオプションを使用してはならない、１＝タイムスタンプオプションを使用する）。
【０４４０】
［ＷＳ（アドレス０×０２［２０］、１ビット）］
このフラグはスライディングウィンドウオプションがＴＣＰソケットに対して適切に交渉していることを示している（０＝ＷＳオプションを使用してはならない、１＝ＷＳオプションが使用可能になる）。このビットはＵＤＰソケットで使用されない。
【０４４１】
［ＭＳ（アドレス０×０２［１９］、１ビット）］
このビットはＣＢの遠隔ＭＳＳフィールドが有効であることを示している。ＭＳＳはワード５［１５：０］に位置されている。
【０４４２】
［ＡＲ（アドレス０×０２［１８］、１ビット）］
このビットはＡＣＫパケットが特定のソケットで送信されるときを設定される。これはＡＣＫパケットが送信されているときクリアされる。
【０４４３】
［ＣＦ（アドレス０×０２［１７］、１ビット）］
このビットはまだデプリケートされることができないように、現在のＣＢが受信・送信ＦＩＦＯバッファ待ち行列にあることを示している。一度、ソケットのＡＣＫが送信されると、ＴＣＰ送信ブロックはオープンＣＢからＴｉｍｅ＿Ｗａｉｔ  ＣＢへ移動する。
【０４４４】
［ＣＶＩ（アドレス０×０２［１６］、１ビット）］
このビットはＣＢが有効な情報を含んでいることを示している。任意のＣＢをデプリケートする前に、このビットは常にクリアされる。
【０４４５】
［ＣＢＶｅｒ（アドレス０×０２［１５：１２］、４ビット）］
これらのビットはＣＢのバージョンを示しており、ハードウェアの将来のバージョンのＣＢを弁別するためにオンチッププロセッサにより使用される。このフィールドは現在０×１として規定される。
【０４４６】
［ＣＢインターフェース（アドレス０×０２［１１：８］、４ビット）］
このビットはソケットに対する特定の物理的なインターフェースを特定するために使用され、マルチポートアーキテクチャで使用される。単一ポートアーキテクチャでは、このフィーは０×０で残されるべきである。
【０４４７】
［ＫＡ（アドレス０×０２［４］、１ビット）］
このビットはキープアライブタイマがこのソケットと共に使用されるべきであることを示している（０＝キープアライブタイマを使用してはならない、１＝キープアライブタイマを使用する）。
【０４４８】
［ＤＦ（アドレス０×０２［３］、１ビット）］
このビットはソケットに対するＩＰヘッダのＤＦビットの状態を表している。設定されるとき、パケットは任意のホップにより断片化されない。このビットはパスＭＴＵ発見に使用される。
【０４４９】
［ＶＬ（アドレス０×０２［２］、１ビット）］
このビットはＶＬＡＮタグが出力するイーサネット（登録商標）フレームに含まれるか否かを示している。それが主張されるならば、ｃｂ＿ｔｘ＿ｖｌａｎ＿ｐｒｉｏｒｉｔｙおよびｃｂ＿ｔｘ＿ｖｉｄにより作られるＶＬＡＮタグ情報の４バイトとＶＬＡＮタグ識別（固定した値）が含まれ、それにイーサネット（登録商標）アドレスフィールドが後続する。
【０４５０】
［ＲＥ（アドレス０×０２［１］、１ビット）］
このフラグはタイムアウト状態および再送信が必要であることを示すために使用される。それはデータが再送信されるときにクリアされる。
【０４５１】
［ＵＲ（アドレス０×０２［０］、１ビット）］
このビットは緊急のデータが受信されたことを示している。これはアプリケーションがこの受信された緊急データポインタを読取るまで（または読取ったことを示すまで）主張される。
【０４５２】
［ＡＣＫ番号（アドレス０×０３、３２ビット）］
これはＴＣＰ接続のための動作ＡＣＫ番号である。これは受信されたＴＣＰ  ＰＳＨパケットの予測されたＳＥＱ数を表している。ＴＣＰデータパケットが受信されるとき、ＳＹＮ数はこの数に対してチェックされる。これが一致するか、受信されたＳＥＱ数＋パケット長がこの数をカバーするならば、データは受取られる。この数はネットワークスタックにより自動的に更新され、ＵＤＰ接続には使用されない。
【０４５３】
［ＳＥＱ数（アドレス０×４，３２ビット）］
これはＴＣＰ接続のための動作ＳＥＱ数である。これはＴＣＰパケットで使用されるＳＥＱ数を表しており、ネットワークスタックにより自動的に更新される。このフィールドはＵＤＰソケットには使用されない。
【０４５４】
［ＩＰＳＥＣモード（アドレス０×５［３０：２７］、４ビット）］
このフィールドはソケットでアクチブなＩＰＳＥＣモードを示すために使用される。このフィールドの復号について以下示す。
【表２２】
2010063110.tif 000024
【０４５５】
［ソケットタイプ（アドレス０×０５［２６：２４］、３ビット）］
このフィールドは以下の表にしたがって制御ブロックにより表されるソケットのタイプを示している。
【表２３】
2010063110.tif 000025
【０４５６】
［ＬＷｉｎＳｃａｌｅ（アドレス０×０５［２３：２０］、４ビット）］
このフィールドは接続に使用されるローカルスライディングウィンドウスケールファクタを表している。
【０４５７】
［ＲＷｉｎＳｃａｌｅ（アドレス０×０５［１９：１６］、４ビット）］
このフィールドはＴＣＰ  ＳＹＮパケットの遠隔端部によりリクエストされるときのスライディングウィンドウスケールファクタを表している。
【０４５８】
［ローカルウィンドウ（アドレス０×０５［１５：０］、１６ビット）］
このフィールドはＴＣＰローカルスライディングウィンドウフィールドで広告されたウィンドウの１６ビットを表している。
【０４５９】
［優先順位（アドレス０×０６［３０：２８］、３ビット）］
このフィールドはＶＬＡＮタグに対して使用されるユーザ優先順位レベルを表している。また送信スケジュール化中のソケットに対するサービスレベルを表している。数が高い程、優先順位は高くなる（７が最高であり、０が最低である）。このフィールドのデフォルト値は０×０であり、ソフトウェアにより設定されることができる。
【０４６０】
［ＶＩＤ（アドレス０×０６［２７：１６］、１２ビット）］
このフィールドはＶＬＡＮタグフレームで使用されるＶＬＡＮ識別を表している。このフィールドのデフォルト値は０×０００であり、ソフトウェアにより設定可能である。ピアから開始される接続では、このフィールドはオープニングＳＹＮパケットで受信されるＶＬＡＮ識別により設定される。
【０４６１】
［遠隔ＭＡＣアドレス（アドレス０×０６［１５：０］−０×０７、全部で４８ビット）］
このフィールドはこのソケットで送信されているパケットの目的地ＭＡＣアドレスを表している。ソケットが最初に設定されるとき、ＡＲＰキャッシュはこのアドレスを問合せられる。解決後、さらにＡＲＰキャッシュの問合せを避けるようにアドレスはここに記憶される。ＣＢがサーバソケットとして生成されるならば、このアドレスはＳＹＮパケットに含まれる目的地ＭＡＣアドレスから取られる。アドレスのビット［４７：３２］はＣＢアドレス０×６に記憶される。
【０４６２】
［ローカルＩＰアドレス（アドレス０×８、３２ビット）］
このフィールドはソケット接続のローカルＩＰアドレスを表している。
【０４６３】
［遠隔タイムスタンプ（アドレス０×０９、３２ビット）］
これは受信されたパケットに含まれるタイムスタンプである。
【０４６４】
［ＴＷ生成タイムスタンプ（アドレス０×Ａ、３２ビット）］
これはＣＢが時間待機状態を入ったときのタイムスタンプである。
【０４６５】
［トンネルＡＨハンドル（アドレス０×Ｂ［３１：２４］、アドレス０×Ｃ［３１：２４］、１６ビット）］
これはＣＢに対するトンネルＡＨ  ＳＡハンドルである。これはＣＢのトンネルＡＨ（ＴＡ）ビットが設定されるときにも有効である。
【０４６６】
［順方向リンク（アドレス０×Ｂ［２３：０］、２４ビット）］
検索チェーンの次のＣＢのリンクである。
【０４６７】
［トンネルＥＳＰハンドル（アドレス０×Ｄ［３１：２４］、アドレス０×Ｅ［３１：２４］、１６ビット）］
これはＣＢに対するトンネルＥＳＰ  ＳＡハンドルである。これはＣＢのトンネルＥＳＰ（ＴＥ）ビットが設定されるときにも有効である。
【０４６８】
［順方向エージリンク（アドレス０×Ｄ［２３：０］、２４ビット）］
検索チェーンのエージによる次のＣＢに対するリンクである。
【０４６９】
［逆方向エージリンク（アドレス０×Ｅ［２３：０］、２４ビット）］
検索チェーンのエージによる先のＣＢに対するリンクである。
【０４７０】
［転送ＡＨハンドル（アドレス０×Ｆ［１５：０］、１６ビット）］
これはＣＢに対する転送ＡＨ  ＳＡハンドルである。これはＣＢの転送ＡＨ（ＮＡ）ビットが設定されるときにも有効である。
【０４７１】
［転送ＥＳＰハンドル（アドレス０×Ｆ［３１：１６］、１６ビット）］
これはＣＢに対する転送ＥＳＰ  ＳＡハンドルである。これはＣＢの転送ＥＳＰ（ＮＥ）ビットが設定されるときにも有効である。
【０４７２】
［ＴＣＰ混雑制御サポート］
［概要］
ＩＴ  １０Ｇはスロースタート、混雑防止、高速再送信、高速度回復アルゴリズム、ウィンドウスケーリング、ハードウェアの順序が乱れているパケットの再順序付けを実行する。さらにＩＴ  １０Ｇは１よりも多数のセグメントが一度に時間を定められることを可能にするラウンドトリップ時間ＴＣＰオプションをサポートする。これらの特徴は高速度ネットワークで必要とされる。
【０４７３】
［ラウンドトリップ時間の測定］
ＩＴ  １０Ｇは２つの方法でラウンドトリップ時間（ＲＴＴ）を測定することができる。伝統的な方法では、時間測定はＴＣＰ  ＰＳＨパケットからパケットのＡＣＫが受信されるときまで行われる。時間を定められたパケットのシーケンス番号はＣＢ中の時間を定められたパケットフィールドのシーケンス番号に記憶され、パケットのタイムスタンプはＣＢの最後の送信フィールドのタイムスタンプ中に記憶される。時間を定められたパケットのＡＣＫが受信されるとき、現在のタイムスタンプと記憶されたタイムスタンプとの間のデルタは往復時間ＲＴＴである。ＡＣＫが受信されるとき、ソケットＣＢ中のＲＴＯ  ［１］ビットは次のパケットが時間を定められることを示すためにクリアされる。
【０４７４】
ＲＴオプションがオープニングＴＣＰハンドシェ−クで交渉されるとき、ＲＴ測定は受信された各ＡＣＫから取られることができる。
【０４７５】
ラウンドトリップ時間測定を行うために使用される方法にかかわりなく。その値をとり再送信タイムアウト（ＲＴＯ）値を決定する論理フローは同じである。この論理は図２９に示されている。
【０４７６】
スケールされ平滑されたＲＴＴ、平均偏差、ＲＴＯはすべてソケットＣＢ中に記憶される。
【０４７７】
［スロースタートアルゴリズム］
スロースタートはＲＦＣ１１２２に最初に記載されたＴＣＰ混雑制御機構であり、さらにＲＦＣ２００１のhttp;//www.rfc-editor.org/rfc/rfc1122.txtと、http;//www.rfc-editor.org/rfc/rfc2001.txtに記載されている。
【０４７８】
スロースタートは送信中の多数のデータセグメントを一度にゆっくりと上昇させる。最初にスロースタートは肯定応答（ＡＣＫ）を予測する前に（最大のセグメントサイズの２倍または２*ＭＳＳの現在のウィンドウｃｗｎｄに対応する）２つのデータセグメントのみを送信させなければならない。それぞれの成功ＡＣＫを受信したとき、送信機はｃｗｎｄが受信機の広告ウィンドウに等しくなるまで１ＭＳＳだけｃｗｎｄを増加できる（したがって１よりも多数のセグメントの送信を可能にする）。
【０４７９】
スロースタートは新しいデータ接続で常に開始され、時には、データトラフィックの渋滞が生じたときに接続の途中で起動される。スロースタートは事を再度行わせるために使用される。
【０４８０】
ネットワークスタックはＴＣＰ接続毎にスロースタートアルゴリズムをサポートする。このアルゴリズムは混雑ウィンドウパラメータ（ｃｗｎｄ）を使用し、それはソケットが最初に設定されるとき１ＭＳＳに初期化される。
【０４８１】
スロースタートアルゴリズムはソケットが最初に設定されるときを示し、１つのパケットだけが送出されることができ、パケットのＡＣＫが受信されるまでさらにデータが送信されることができないことを示す。ＡＣＫが受信されるとき、ｃｗｎｄは１ＭＳＳだけ増加され、これは２つまでのパケットが送信されることを可能にする。ＡＣＫが受信される毎に、ｃｗｎｄは１ＭＳＳだけ増加される。
【０４８２】
これはｃｗｎｄがピアからの広告されたウィンドウサイズを超えるまで継続する。ネットワークスタックは常に最小のｃｗｎｄと広告されたウィンドウを送信する。
【０４８３】
ネットワークスタックがＩＣＭＰソース消滅メッセージを受信するならば、ｃｗｎｄを１ＭＳＳへリセットする。しかしながら、スロースタート閾値変数（ｓｓｔｈｒｅｓｈ）はどの同一値に維持される。
【０４８４】
［混雑防止アルゴリズム］
ネットワークスタックはピアからの最小のｃｗｎｄと広告されたウィンドウの送出を維持する。混雑防止アルゴリズムはまたスロースタート閾値変数（ｓｓｔｈｒｅｓｈ）を使用し、これは０×ＦＦＦＦに初期化される。
【０４８５】
混雑がタイムアウトにより検出されたとき、ｓｓｔｈｒｅｓｈは現在の送信ウィンドウ（最小のｃｗｎｄとピアの広告ウィンドウ）の半分に設定される。この値がＭＳＳの２倍よりも小さいならば、この値が代わりに使用される。またｃｗｎｄは１ＭＳＳに設定される。
【０４８６】
新しいデータが肯定応答されるとき、ｃｗｎｄはそれがｓｓｔｈｒｅｓｈ（それ故の名称）よりも大きくなるまで１ＭＳＳだけ増加される。その後、ｃｗｎｄは１／ｃｗｎｄだけ増加される。これは混雑防止フェーズである。
【０４８７】
［高速再送信および高速度回復アルゴリズム］
高速再送信は最初に実験プロトコルとしてＲＦＣ１１２に記載され、ＲＦＣ２００１で形式化され、http;//www.rfc-editor.org/rfc/rfc1122.txtと、http;//www.rfc-editor.org/rfc/rfc2001.txtを参照することができる。
【０４８８】
高速再送信は送信者が標準的なタイムアウトを待機する代わりにホールを迅速に埋めることを可能にするために順序が乱れたセグメントが受信されるとき、直ちにＡＣＫを発生する。
【０４８９】
高速再送信は受信機が３つの重複したＡＣＫを受けるときに呼び出される。高速再送信が呼び出されるとき、送信者はホールを埋めようとする。重複するＡＣＫはセグメントのＡＣＫおよびウィンドウ広告値が相互に一致するときに重複すると考えられている。
【０４９０】
ネットワークスタックが重複するＡＣＫを受信するとき、パケットがドロップすることが強く示される。ｎ個の重複パケットが受信されるとき、ドロップされたセグメントは再送信タイマがまだ満了されていなくても直ちに再送信される。これは高速再送信アルゴリズムである。再送信前に受信されなければならない重複するＡＣＫの数ｎはＴＣＰ＿Ｄｕｐ＿ＡＣＫレジスタ（０×３６）を介して設定され、３にデフォルトされる。
【０４９１】
特定され多数の重複するＡＣＫが受信されるとき、ｓｓｔｈｒｅｓｈは再度混雑防止アルゴリズムのケースのように現在のウィンドウサイズの半分に設定されるが、このとき、ｃｗｎｄはｓｓｔｈｒｅｓｈ＋（３*ＭＳＳ）に設定される。このことは重複したＡＣＫの受信後、スロースタートではなく混雑防止アルゴリズムに戻ることを確実にする。別の重複するＡＣＫが受信される毎に、ｃｗｎｄは１ＭＳＳだけ増加される。これは高速度回復アルゴリズムである。
【０４９２】
新しいデータに対するＡＣＫが受信されるとき、ｃｗｎｄはｓｓｔｈｒｅｓｈに設定される。
【０４９３】
［動作の再送信理論］
論理の再送信サポートは３つの位置、即ちデータが送信される位置、受信されたＡＣＫを処理する位置、ＣＢポーラ中の位置に存在する。
【０４９４】
［データ送信］
データを送信するとき、送信論理装置は関連するＣＢの再送信有効ビットを観察する。ビットが設定されていないならば、有効な再送信時間が記憶されていないことを暗示しており、（ＣＢに）現在記憶されているＲＴＯは現在のタイムスタンプに付加される。結果的な時間はパケットに対する再送信時間である。この時間はＣＢに記憶され、ＣＢの再送信有効ビットが設定される。
【０４９５】
再送信有効ビットが既にＣＢで設定されているならば、それはソケットに現在目立ったデータが存在し、再送信時間がここで更新される必要はないことを意味する。
【０４９６】
送信されているデータバッファがタイムアウトによるものであり、したがって再送信であるならば、ＣＢの再送信時間は常に更新され、ＣＢに記憶されているＲＴＯもまた調節される（２重にされる）。
【０４９７】
［ＡＣＫ処理］
ＴＣＰ  ＲＸモジュールがＡＣＫを受信するとき、（含まれるならば）ＡＣＫのタイムスタンプと共にＴＸモジュールへ通知を送信する。ＴＸモジュールはＲＴＯの更新にこの情報を使用する。ＡＣＫが再送信されたパケットに応答するならば、この更新は行われない。パケットが再送信されたか否かの指示はＭＴＸメモリ中のデータバッファヘッダ中に維持される。
【０４９８】
それが計算された後、新しいＲＴＯが必要とされるならば、ＣＢに記憶される。ソケットにおいて任意の目立ったデータが検出されるならば、新しい再送信時間はまた新しいＲＴＯを現在のタイムスタンプに付加することにより計算され、これもまたＣＢに記憶される。
【０４９９】
［ＣＢポーラ］
ＣＢポーラはアクチブブロックを探しているすべてのＣＢを循環する。ＣＢポーラがアクチブブロックを発見するとき、ＣＢポーラは再送信有効ビットを検査する。再送信有効ビットが設定されるならば、ＣＢポーラは再送信時間を比較する。ＣＢポーラが再送人時間が満了していることを発見するならば、ＣＢポーラはＣＢの再送信ビット（即ちデータ送信機がどのようにしてパケットが再送信されたパケットであることを知るか）を主張し、ＣＢを優先順位待ち行列の１つに位置させる。
【０５００】
［ＭＳＳ選択］
［概要］
このセクションはＭＳＳオプションがどのようにして得られるかの概要を示す。
【０５０１】
［初期セットアップ］
ＴＣＰトランザクションを使用可能にする前に、ホストは以下のパラメータおよび設定をセットアップすべきである。
【０５０２】
・レジスタ０×１Ａ４Ａ−０×１Ａ４Ｂで使用されるデフォルトのローカルではないＭＳＳ、
・レジスタ０×１Ａ４Ｃ−０×１Ａ４Ｄで使用されるデフォルトのローカルＭＳＳ。
【０５０３】
［選択アルゴリズム］
２つのうち任意の接続に使用されるＭＳＳ値を選択するとき、ＴＣＰエンジンはＩＰルータに問い合わせる。目的地ルートがゲートウェイを通過するならば、ローカルではないＭＳＳが使用される。
【０５０４】
［ＴＣＰオプション］
［概要］
以下の説明はサポートされるＴＣＰオプションおよびそれらのフォーマットの概要である。サポートされる４つのオプションは、
・ＭＳＳ、
・ウィンドウスケーリング、
・タイムスタンプ、
・ＳＡＣＫである。
【０５０５】
［ＭＳＳオプション］
このオプションは常に送信される。使用される実際のＭＳＳ値は既に説明されたアルゴリズムにしたがって決定される。ＭＳＳオプションのフォーマットは図３０に示されている。
【０５０６】
［ウィンドウスケーリングオプション］
このオプションはＳｌ＿Ｗｉｎ＿ＥｎビットがＴＣＰ＿Ｃｏｎｔｒｏｌレジスタ中で設定される限り、ＳＹＮパケットで常に送信される。このオプションはこれがＳＹＮ／ＡＣＫ応答を発生するＳＹＮパケットに含まれる場合のみＳＹＮ／ＡＣＫパケットで送信される。このオプションのフォーマットは図３１に示されている。このオプションはこれが４バイト境界で整列するように常にＮＯＰバイトにより先行されることに注意する。
【０５０７】
［タイムスタンプオプション］
このオプションはタイムスタンプオプションが使用可能になるならばＳＹＮパケットで常に送信され、タイムスタンプオプションが使用可能になるか否かにかかわりなく、オプションがＳＹＮ／ＡＣＫ応答を発生するＳＹＮパケットに含まれる場合にのみＳＹＮ／ＡＣＫパケットで送信される。オプションのフォーマットは図３２に示されている。このオプションはこれが４バイト境界で整列するように常に２つのＮＯＰバイトにより先行されることに注意する。
【０５０８】
［選択的なＡＣＫ（ＳＡＣＫ）オプション］
選択的な肯定応答（ＳＡＣＫ）はＴＣＰがホール（失われたデータパケット）を含むデータを承認することを可能にし、ドロップ後のすべてのデータではなく失われたデータの再送信を可能にする。この特徴はＲＦＣ２０１８に記載されている。
【０５０９】
このオプションはＳＡＣＫ＿ＥｎビットがＴＣＰ＿Ｃｏｎｔｒｏｌレジスタに設定される限り、ＳＹＮおよびＳＹＮ／ＡＣＫパケットで常に送信される。ＳＡＣＫは２つの異なるＴＣＰオプションの種類を使用する。一方のオプションの種類はＳＹＮパケットで使用され、その他のオプションの種類はデータパケットで使用される。オプションのフォーマットは図３３と３４に示されている。
【０５１０】
［ＭＴＸバッファヘッダフォーマット］
［概要］
このセクションはＭＴＸデータバッファ毎の開始で使用されるヘッダフォーマットを記載している。ヘッダはチェックサム、シーケンス番号、次のリンク等のようなバッファに含まれるデータについての情報を含んでいる。ヘッダフォーマットはＴＣＰとＵＤＰで異なっている。
【０５１１】
［ＴＣＰのキープアライブタイマ］
［概要］
このセクションではＴＣＰ接続に使用されるキープアライブタイマを説明する。このセクションはこの特徴がＩＴ  １０Ｇネットワークスタックで実行される態様についての動作理論を含んでいる。
【０５１２】
［キープアライブパラメータ］
以下のパラメータはネットワークスタックのキープアライブ特性で使用される。
【表２４】
2010063110.tif 000026
【０５１３】
［動作理論］
デフォルトにより、キープアライブタイマはソケットでディスエーブルされル。ソケットが生成されるとき、ホストはＳｏｃｋｅｔ＿Ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタ中のＫｅｅｐ＿Ａｌｉｖｅビットを設定するオプションを有する。このビットが設定され、ソケットパラメータが与えられるならば、キープアライブ特性はそのソケットで使用可能になる。
【０５１４】
一度、ソケットが設定されると、ｋｅｅｐ＿ａｌｉｖｅタイムスタンプはＣＢ（ワード０×０５）中に維持される。このタイムスタンプはソケットがアイドルであると考えられている将来の時間を表す。パケットがソケットで送信される毎に、またはパケットがソケットに到着するとき、このタイムスタンプは更新される。更新されたタイムスタンプは現在動作している分のカウンタと（Ｋｅｅｐ＿Ａｌｉｖｅ＿Ｔｉｍｅｒレジスタ（０×１Ａ３Ａ）を介してホストにより入力されるような）ｋｅｅｐ＿ａｌｉｖｅ時間の合計である。
【０５１５】
ＣＢポーラモジュールはキープアライブ特性を有する各ＣＢの分が一度使用可能になるとキープアライブタイムスタンプをチェックする。ＣＢポーラモジュールが現在の自由動作している分カウンタに一致するタイムスタンプを有するソケットを発見するならば、ＣＢポーラモジュールはそのソケットで送信されるキープアライブプローブをスケジュールする。ＣＢポーラモジュールはデータ送信待ち行列にＣＢを行列させ、Ｋビット（ＣＢのワード０×０Ｂのキープアライブ再試行ビット）を設定することによりこれを行う。ＣＢポーラモジュールはまたＣＢのキープアライブ再試行フィールド（ワード０×１３）を０×１に設定する。送信待ち行列が一杯であるならば、ＣＢポーラモジュールは次の分チェック中にＣＢポーラを再度トリガーするためにＣＢのｋｅｅｐ＿ａｌｉｖｅタイムスタンプをインクリメントする。
【０５１６】
データパケット発生器が設定されているＫビットを有するＣＢに遭遇するとき、データパケット発生器はシーケンス番号が通常設定されるよりも１だけ低い値に設定されるシーケンス番号を有する１バイトＰＳＨパケットを送出する。データ発生器はまたＣＢのキープアライブタイムスタンプを現在の自由動作している分カウントプラスキープアライブ再試行インターバルで更新する。これが依然として動作中（アクチブ）であるならば、正確な予測されたシーケンス番号を有するＡＣＫをピアに返送させる。
【０５１７】
ピアがアクチブであり、応答を送信するならば、ＴＣＰ−ＲＸモジュールはＣＢ中のＫビットをクリアし、再試行カウントを０×０にリセットし、キープアライブタイムスタンプを更新する。
【０５１８】
ピアがキープアライブ再試行インターバル内に応答を送信しないならば、ＣＢポーラは再度、以前の分のキープアライブタイムスタンプチェックを行っていたときのソケットに遭遇する。Ｋビットが既に設定されていることを観察するとき、キープアライブ再試行カウンタを１だけインクリメントし、データパケット送信のためにＣＢを再スケジュールする。
【０５１９】
ＣＢポーラが再試行数が最大数に到達したことを発見したならば、ＣＢポーラはホストコンピュータへ通知を送信し、ソケットをデプリケートする。
【０５２０】
キープアライブプローブの送出コース中、ネットワークスタックはＲＳＴパケットを受信し、これは適切にソケットを閉じることなくピアが再ブート（リセットまたは再スタート）されたことを意味する可能性が大きい。この場合、ソケットはデプリケートされる。
【０５２１】
別の可能性は、ネットワークスタックがキープアライブプローブ、例えば到達可能ではないネットワークのキープアライブプローブに応答してＩＣＭＰエラーメッセージを受信することである。この状態は中間ルータがダウンすることにより生じる。この場合には、ＩＣＭＰメッセージはオンチッププロセッサに送られる。複数のこれらのＩＣＭＰメッセージの受信後、オンチッププロセッサはソケットＣＢを読取り、これがキープアライブ再試行状態であることを観察できる。オンチッププロセッサはその後、ＣＢデプリケーションプロセスを起こすことができる。
【０５２２】
［ＴＣＰ  ＡＣＫモード］
［概要］
以下の説明はＩＴ１０Ｇネットワークスタックで有効なＴＣＰ  ＡＣＫモードの詳細である。４つのモードのうちスタックが動作しているモードを決定する２つのビットが存在する。これらはＴＣＰ＿Ｃｏｎｔｒｏｌ１レジスタ中のＤｌｙ＿ＡＣＫビットと、Ｓｏｃｋｅｔ＿ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタのＨｏｓｔ＿ＡＣＫビットである。演算マトリックスは以下の表に示されている。
【表２５】
2010063110.tif 000027
【０５２３】
［正常なＡＣＫモード］
このモードでは、データはそれらがＮＲＸ  ＤＲＡＭへ受信されるとすぐにＡＣＫされる。ＴＣＰ受信論理装置はこれをＲＸからＴＸへのパケットＦＩＦＯバッファへ位置付けることによりＡＣＫをスケジュールする。ソケットＣＢのＡＲビットはこのモードでは使用されない。これはＴＣＰモジュールのデフォルトモードであり、ＴＣＰ＿Ｃｏｎｔｒｏｌ１レジスタでＤｌｙ＿ＡＣＫビットの主張を解除することにより使用可能になる。これはすべてのソケットに適用するように全般的なＴＣＰ設定である。
【０５２４】
［遅延されたＡＣＫモード］
このモードでは、データは直ちにＡＣＫされない。代りに、データがソケットに到着するとき、ＴＣＰ受信論理装置はソケットＣＢにＡＲビットを設定する。ＣＢポーラモジュールはその後、ＡＲビットセットを有するＣＢを観察するためすべてのアクチブＣＢを周期的に試験する。ＣＢポーラがセットビットを発見するとき、ＣＢポーラはそのソケットに対するＡＣＫをスケジュールする。ＡＲビットを探すポーリングインターバルはＤｅｌ＿ＡＣＫ＿Ｗａｉｔレジスタを介して設定されることができ、２ｍｓのタイマ刻みに関して特定される。デフォルトインターバルは２５０ｍｓである。このモードはＴＣＰ＿Ｃｏｎｔｒｏｌ１レジスタ中のＤｌｙ＿ＡＣＫビットの主張により使用可能になる。それはまたすべてのソケットに適用するように全般的なＴＣＰ設定である。
【０５２５】
［ホスト−正常ＡＣＫモード］
このモードでは、データはＭＲＸ  ＤＲＡＭへ受信されるときＡＣＫされない。代りにＡＣＫはデータがホストコンピュータへ送信された後にのみ送信され、ホストコンピュータはデータのＡＣＫコマンドを発生することによりデータの受信を承認する。ＩＴ  １０ＧハードウェアがＡＣＫコマンドを受信するとき、ＣＢ、即ちソケットハンドルをＨｏｓｔ＿ＡＣＫ＿ＣＢレジスタに書込む。この動作はＲＸ−ＴＸパケットＦＩＦＯバッファを介してＡＣＫパケットをスケジュールさせる。ソケットＣＢのＡＲビットはこのモードで使用されない。このモードはＳｏｃｋｅｔ＿Ｃｏｎｆｉｇｕｒａｔｉｏｎレジスタ中でＨｏｓｔ＿ＡＣＫビットを主張することによりソケットベースにしたがって使用可能にすることができる。
【０５２６】
［ホスト遅延されたＡＣＫモード］
このモードでは、データは直ちにＡＣＫされない。代りに、データは受信後、ホストコンピュータに送信され、ホストコンピュータはデータのＡＣＫコマンドを発生することによりデータの受信を承認する。ＩＴ  １０ＧハードウェアがＡＣＫコマンドを受信するとき、ＣＢ、即ちソケットハンドルをＨｏｓｔ＿ＡＣＫ＿ＣＢレジスタに書込む。この動作はソケットのＣＢ中のＡＲビットを設定させる。ＣＢポーラモジュールが次のＡＣＫポーリングサイクルにおいてすべてのＡＲビットをチェックするとき、ＣＢポーラはＡＣＫをそのソケットに対して送出されるようにスケジュールする。Ｄｅｌ＿ＡＣＫ＿Ｗａｉｔレジスタを介して特定されるＣＢポーリングサイクルはＡＲビットのポーリングインターバルだけを特定し、データをホストコンピュータへ最初に送信してホストコンピュータがそのデータに応答するのを待機することによって生じる遅延を考慮しないことに注意すべきである。それ故、このモードが使用されるならば、ＡＣＫポーリングインターバルはデフォルト２５０ｍｓよりも低いある値に設定されることが示唆される。最適なインターバルはＡＣＫコマンドを発生するホストコンピュータのターンアラウンド時間に依存している。
【０５２７】
［ホスト再送信モード］
［概要］
ＩＴ  １０ＧネットワークスタックはそのローカルデータバッファからまたはホストメモリからＴＣＰデータを再送信するように設計されている。この説明はネットワークスタックが後者のモードで動作しているときの動作の詳細である。ホストメモリから再送信する利点はローカル送信バッファメモリの量が最小に維持されることができることである。これはデータがワイヤで送信されるとすぐに、ＭＸデータバッファブロックがリリースされるからである。欠点はホストメモリ再送信をサポートするために、より多くのホストメモリと、ホストＣＰＵサイクルと、待ち時間がかかることである。
【０５２８】
［ホスト再送信モードエネーブル］
ホスト再送信モードはＳｏｃｋｅｔ＿Ｃｏｎｆｉｇｕｒａｔｉｏｎ２レジスタでＨｏｓｔ＿Ｒｅｔｒａｎｓビットを主張することによりソケットベースにしたがって使用可能にすることができる。このモードは任意のＡＣＫ動作モードと共に使用されることができる。
【０５２９】
［ホスト再送信モード動作理論］
ホスト再送信モードで動作するとき、ホストＣＰＵはシーケンス番号の追跡を続けるように動作する。ホストメモリからＤＭＡされた各データセクションでは、最初の１２８ビットがデータブロックに対するヘッダを形成する。
【０５３０】
ホストは各データ転送の最初の１２８ビットとしてこのヘッダに書込まなければならない。ヘッダのビット［１２７：６４］は最初の６４ビットワードをＤＭＡされるべきであり、それに続いてヘッダのビット［６３：０］、その後、最初のデータバイトが後続する。
【０５３１】
ＩＴ１０Ｇハードウェアがデータパケットを発生するとき、これはソケットＣＢからの代わりのデータバッファヘッダのシーケンス番号を取る。ＩＴ１０Ｇハードウェアはその後、通常のようにパケットを形成し、そのデータパケットをワイヤで送信する。パケットの転送後、ＭＴＸデータバッファは直ちにフリーにされる。
【０５３２】
データのＡＣＫがピアから受信されるとき、ホストコンピュータはデータを受信したＣＢと、受信されたＳＣＫ番号について、状態メッセージを介して通知される。この情報により、ホストコンピュータはホストコンピュータメモリからのデータをフリーにするためにクリアされるときを決定できる。
【０５３３】
再送信タイマは正常状態下で、依然としてソケットＣＢ中で使用される。再送信タイマが満了するとき、状態メッセージが対応するソケットハンドルと共にホストコンピュータへ送信される。ホストコンピュータはその後、まだＡＣＫされていないメモリ中に存在する最も古いデータのＤＭＡ転送をスケジュールする。
【０５３４】
［ピアゼロのウィンドウケース］
［概要］
時には、ＴＣＰ接続のピア側は受信バッファスペースを使い果たす。この場合には、ピアは０×００００のウィンドウサイズを広告する。ピアウィンドウは常にＴＣＰ受信セクションによりソケットＣＢへ書込まれる。受信論理装置が０×００００のウィンドウサイズを検出するとき、これはＣＢフラグワード（ワード０×０２のビット［１９］）にＺＷビットを設定する。次にデータがこのソケットで送信される時、ＴＣＰ送信論理装置は設定されているＺＷビットを発見し、データの送出の代りに、正しくないシーケンス番号を有する１バイトデータパケットを送出する。シーケンス番号は正しいシーケンス番号よりも１だけ小さい。このデータパケットはキープアライブプローブパケットのように見える。この正しくないデータパケットに応答して、ピアは更新されたウィンドウサイズを有するＡＣＫパケットを送信しなければならない。１バイトデータパケットの送信後、ＣＢｚｅｒｏ＿ｗｉｎｄｏｗプローブカウントは１だけインクリメントされ（ワード０×１３のビット［２７：２４］）、次のｚｅｒｏ＿ｗｉｎｄｏｗプローブが送信されるべきときにＣＢ  ｚｅｒｏ＿ｗｉｎ＿ｔｉｍｅｓｔａｍｐ（ワード０×０Ｃのビット［３１：２６］）が書込まれる。
【０５３５】
［Ｚｅｒｏ＿Ｗｉｎｄｏｗ  Ｔｉｍｅｓｔａｍｐ］
このフィールドは次のｚｅｒｏ＿ｗｉｎｄｏｗプローブが送信されるべきときを決定するために使用される。ｚｅｒｏ＿ｗｉｎｄｏｗプローブが送信される度に、プローブカウントはインクリメントされ、タイムスタンプは更新される。送信論理装置は送信されたプローブ数だけｚｅｒｏ＿ｗｉｎｄｏｗ＿ｉｎｔｅｒｖａｌカウントをシフトし、この時間を現在の自由に動作している秒タイマへ付加することにより次のｚｅｒｏ＿ｗｉｎｄｏｗ  ｔｉｍｅｓｔａｍｐを決定する。結果的なタイムスタンプは次のプローブが送信される将来の時間を表す。それ故、３秒のデフォルト値により、プローブは０、３、６、１２、２４、４８、６０秒のインターバルで送出される。一度インターバルが６０秒に達すると、キャップされる。
【０５３６】
ＣＢポーラモジュールでは、論理装置はＸ秒毎にすべてのアクチブなＣＢ  ＺＷビットをポールし、ここでＸはｚｅｒｏ＿ｗｉｎｄｏｗ＿ｉｎｔｅｒｖａｌカウントである。ＣＢポーラがＺＷビットの設定されているＣＢを発見するとき、ＣＢポーラはｚｅｒｏ＿ｗｉｎｄｏｗ  ｔｉｍｅｓｔａｍｐを読取り、そのタイムスタンプを自由動作する第２のタイマと比較する。これらが一致するならば、ゼロウィンドウプローブは送信されるように待ち行列される。キープアライブプローブと異なって、送信されるゼロウィンドウプローブの数に制限はない。
【０５３７】
［ウィンドウのオープン］
ピアのウィンドウが最終的に開くとき、ピアは任意のＡＣＫ（ウィンドウ告示）を送信するか、またはピアはＡＣＫの開いたウィンドウがゼロウィンドウプローブに応答することを示す。ＴＣＰ受信論理装置はその後、ＣＢのピアのウィンドウを更新する。次にＣＢがｚｅｒｏ＿ｗｉｎｄｏｗプローブで現れるとき、ＣＢポーラはウィンドウが開かれていることを観察する。ＣＢポーラはその後ＺＷビットをクリアし、規則的なデータ転送をスケジュールする。ｚｅｒｏ＿ｗｉｎｄｏｗ再試行の数もまた０×０にリセットされる。
【０５３８】
［ナグル動作］
［概要］
このセクションはナグル（Nagle）アルゴリズムのＩＴ１０Ｇハードウェアサポートを説明する。このアルゴリズムはＴＣＰ接続が転移中にＡＣＫされていないデータを有するときにデータが承認されるまで小さいセグメントが送信されることができないことを述べている。
【０５３９】
［ナグル送信ＩＢ］
別々の送信命令ブロックがナグルアルゴリズムの使用で与えられる。これらの命令ブロック（ＩＢ）はこれらが主張されたＩＢコードのｍｓｂを持たない点を除いて通常の非ナグルＩＢに類似している。３２ビットアドレスのナグル送信ＩＢは０×８１であり、６４ビットアドレスのコードは０×８２である。ナグル送信ＩＢはこれらがＨＷによりパースされるときソケットＣＢのＲ×ＡＣＫビットが主張される点を除いて通常の送信ＩＢと同一方法で動作する。通常の送信ＩＢの処理はこれが設定されるならば、このビットをクリアする。
【０５４０】
［ＲｘＡＣＫビット］
これはソケットＣＢに存在するビットであり、Ｓｏｃｋｅｔ＿Ｃｏｎｆｇ１レジスタ中でビット［３］を主張することによりアプリケーションを介して設定されることができる。設定のとき、このビットはＡＣＫが受信されるときにすべての目立ったデータを承認したというＲＸ＿ＡＣＫ状態メッセージを発生させる。この状態は受信されたＡＣＫ番号がソケットにより使用されるＳＥＱ番号に一致するときに満たされる。状態メッセージコードは受信されたＡＣＫに対して０×１６である。
【０５４１】
規則的な送信ＩＢがＩＴ１０Ｇハードウェアにより処理されるとき、またはＲｘＡＣＫ状態メッセージが送信されるとき、或いはソケットＣＢのビットを手作業でクリアするアプリケーションによって、ＲｘＡＣＫ状態ビットはクリアされる。最後のケースは診断目的だけのために行われる。
【０５４２】
［ＭＴＸデータ記憶］
［概要］
このセクションはデータがＭＴＸバッファに記憶されることのできるサイズをＴＯＥが決定するために使用するアルゴリズムを説明する。これは１つのＭＴＸバッファが１つのＴＣＰパケットに対応するときに送信されるＴＣＰパケットのサイズに影響する。
【０５４３】
［ＭＳＳ対４分の１ＭＳＳ（または最大の半分のピアウィンドウ）］
ピアの広告されたウィンドウがＭＳＳの２倍を超えるならば、（ＣＢ位置０×０５に記憶されるような）ソケットＭＳＳサイズはいくつのバイトがＭＴＸバッファに記憶されることができるかについてのソケット決定ファクタとして使用される。ピアの広告されたウィンドウが２倍のＭＳＳレベルに到達しないならば、ＭＴＸバッファに記憶されたバイトの最大数は（構成にしたがって）ＭＳＳの４分の１またはピアの最大の広告されたウィンドウの半分である。この比較を維持するビットはＣＢワード０×１４のビット［１８］である。
【０５４４】
［パケットオーバーヘッド］
（構成に応じて）ＭＳＳ、またはＭＳＳの４分の１或いはピアの最大のウィンドウ値の半分から、固定したバイトオーバーヘッドが控除される。このオーバーヘッドはパケットヘッダバイト、ＩＰＳＥＣオーバーヘッドを含んでいる。
【０５４５】
［ＣＢサイズ限度対バッファサイズ］
（構成に応じて）ＭＳＳ、またはＭＳＳの４分の１或いはピアの最大のウィンドウ値の半分のいずれを使用するかを決定し、パケットオーバーヘッドを控除した後、論理装置は利用可能なバッファの種類を観察する。１２８バイトのバッファだけが利用可能であるならば、これは記憶サイズを限定する。また上記計算後、データサイズが依然として大きいＭＴＸバッファサイズよりも大きいならば、パケットサイズは再度ＭＴＸバッファサイズにより限定されることができる。
【０５４６】
［ＩＰルータ］
［ＩＰルータ特徴］
・デフォルトルート能力を提供する。
・多数のホストＩＰアドレスに対するルートを提供する。
・ホスト特定およびネットワーク特定ルートを提供する。
・ＩＣＭＰ再誘導後、ルートをダイナミックに更新する。
・ＩＰ放送アドレスを処理する（限定され、サブネット再誘導され、ネットワーク誘導された放送）。
・ＩＰループバックアドレスを処理する。
・ＩＰマルチキャストアドレスを処理する。
【０５４７】
［モジュールブロック図］
図３５はＩＰルータの概略ブロック図である。
【０５４８】
［ＩＰルータの動作理論］
［ルートのリクエスト］
ローカルホストがＩＰパケットを送信しようとするとき、そのパケットを送信する場所、即ち構内ネットワークの別のホストか、外部ネットワークか、ローカルホスト自体であるかを決定しなければならない。これは出力するＩＰパケットを適切なホストへ誘導するＩＰルータのタスクである。
【０５４９】
モジュールがルートをリクエストするとき、送信モジュールはパケットの目的地ＩＰアドレスをＩＰルータへ送る。ＩＰルータはターゲットのＩＰアドレスをＩＰルートリストに記憶されている目的地のリストと比較する。一致が見つかったならば、ＩＰルータは適切なイーサネット（登録商標）アドレスを解決しようとする。ＩＰルータはこの解決を、ＡＲＰキャッシュ中の目的地ＩＰアドレスに対するＡＲＰ検索をリクエストすることにより行う。目的地イーサネット（登録商標）アドレスが解決されるならば、イーサネット（登録商標）アドレスは送信モジュールへ戻され、このイーサネット（登録商標）アドレスを出力するイーサネット（登録商標）フレームの目的地として使用する。
【０５５０】
ルート情報は３つの別々のコンポーネント、即ちデフォルトルートレジスタ351、カスタムルートリスト352、ルート可能ではないアドレスキャッシュ353により与えられる。これらのコンポーネントはルートリクエストが与えられるときに同時にすべて待ち行列される。
【０５５１】
［デフォルトルート］
パケットの目的地はローカルまたは外部として説明されることができる。ローカルな目的地は送信ホストとして同一の構内ネットワークに取り付けられる。外部目的地は送信ホストの構内ネットワークとは別のネットワークに属す。
【０５５２】
出力するパケット目的地ＩＰアドレスが構内ネットワークに取り付けられたホストに属すことが分かったとき、ＩＰルータは解決された目的地Ｉｐアドレスをその対応するイーサネット（登録商標）アドレスに設定しようと試みるためにＡＲＰを使用する。目的地ＩＰアドレスが外部ネットワークに属すことが決定されたならば、ＩＰルータは出力するパケットを外部ネットワークへ中継するために使用するゲートウェイホストを決定しなければならない。一度、ゲートウェイホストが選択されると、出力するＩＰパケットはそれらの目的地イーサネット（登録商標）アドレスとしてゲートウェイホストのイーサネット（登録商標）アドレスを使用する。
【０５５３】
ルートがパケット目的地ＩＰアドレスに対して発見されることができない場合、そのパケットはデフォルトルートにより特定されるゲートウェイホストを使用しなければならない。デフォルトルートは他に所定の目的地ＩＰアドレスに対して発見されることができるルートがないときにのみ使用される。
【０５５４】
ＡＲＰキャッシュへのアクセス数を最小にするため、ＩＰルータはデフォルトルートが設定されるときにデフォルトゲートウェイイーサネット（登録商標）アドレスをキャッシュする。デフォルトゲートウェイイーサネット（登録商標）アドレスはＡＲＰキャッシュのダイナミックエントリがキャッシュされることを可能にされる時間量に等しい最大時間量だけキャッシュされる。
【０５５５】
［放送およびマルチキャスト目的地］
目的地ＩＰアドレスが放送またはマルチキャストＩＰアドレスであるとき、ＡＲＰ探索が必要とされる。代りに目的地イーサネット（登録商標）アドレスはＩＰアドレスのタイプに応じて発生される。ＩＰ放送アドレス（255.255.255.255）に対して設定された目的地ＩＰアドレスを有するパケットはイーサネット（登録商標）放送アドレス（FF:FF:FF:FF:FF:FF）に送信される。マルチキャストＩＰアドレス（244.x.x.x）に設定された目的地ＩＰアドレスを有するパケットはマルチキャストＩＰアドレスから計算されるそれらの目的地イーサネット（登録商標）アドレスを有する。
【０５５６】
［静的ルート］
デフォルトルートに加えて、ＩＰルータは目的地ＩＰアドレスを特別なイーサネット（登録商標）インターフェースまたはゲートウェイホストへマップするために静的ルートの生成を可能にする。ＩＰルートエントリは目的地ＩＰアドレス、ネットマスク、ゲートウェイＩＰアドレスを含んでいる。ネットマスクは目的地ＩＰアドレスの範囲をＩＰルートエントリ内に記憶されている目的地ＩＰアドレスと一致させるために使用される。ネットマスクはまた特別なホストのルートとネットワークのルートとの間の弁別を可能にする。ゲートウェイＩＰアドレスはＡＲＰを介して目的地イーサネット（登録商標）アドレスを解くときに使用される。
【０５５７】
ＩＰルートリスト中に多数のルートを有することが可能であるので、ＩＰルートエントリはダイナミックに割当てられたメモリ（この構造ではｍ１メモリと呼ばれる）に記憶される。各ＩＰルートエントリは１２８ビットを使用する。各エントリの最後の３２ビットは何等のデータも記憶しないで、６４ビット境界に沿ってＩＰルートエンジンを整列するためにパッディングとして使用される。各ＩＰルートエントリのフォーマットは図３６に示されている。
【０５５８】
ＩＰルートリストは分類されたリンクリストとして構成される。ＩＰルートがＩＰルートリストに付加されるので、これらはそれらのネットマスクにしたがって順序付けされ、最上位の特定のＩＰルートはリストの正面で現れ、最下位の特定のネットマスクを有するＩＰルートはリストの最後に置かれる。ＩＰルートエントリのルートポインタフィールドはｍ１メモリアドレスを含み、そこでは次のＩＰルートエントリはｍ１メモリで発見されることができる。ルートポインタフィールドの第１（最上位）ビットはｍ１メモリアドレスが有効であり現在のものに続くルートが存在するか否かを決定するためのフラグとして使用される。ルートポインタフィールドのポインタ有効ビットが主張されないならば、ＩＰルートリストにはさらにＩＰルートは存在せず、ＩＰルートリストの最後に到達する。
【０５５９】
目的地ＩＰアドレスが放送またはマルチキャストＩＰアドレスであることが決定されないならば、ＩＰルートリストは一致するＩＰルートエントリに対して検索される。一致がＩＰルートリストで見つからないならば、デフォルトルートがゲートウェイ情報を提供するために使用される。
【０５６０】
ＩＰルータはまた多数の物理的およびループバックインターフェースの使用を可能にする。ＩＰルートエントリのインターフェースＩＤフィールドを使用して、ＩＰルータは出力するパケットをＩＴ１０Ｇの特定のイーサネット（登録商標）インターフェースへ誘導できる。インターフェースＩＤフィールドはまたＡＲＰリクエストを適切なイーサネット（登録商標）インターフェースへ導くために使用される。
【０５６１】
［ループバックアドレス］
目的地ＩＰアドレスがＩＴ１０Ｇに属すか、ループバックＩＰアドレス（127.x.x.x）であるならば、出力するパケットはＩＴ１０Ｇにフィードバックされることが想定される。ループバック目的地に対するＩＰルータはＩＰルートリスト中に記憶されている。ＩＴ１０Ｇに割当てられていないＩＰアドレスもまたループバックアドレスとして構成されることができる。このローカル再誘導を可能にするために、ＩＰルートエントリのインターフェースＩＤフィールドは０×８に設定されなければならない。そうでなければ、ＩＰルートエントリのインターフェースＩＤフィールドはイーサネット（登録商標）インターフェース（０×０、０×１、０×２など）の１つに設定されなければならない。
【０５６２】
［ルートの生成］
新しいＩＰルートはシステムインターフェース（例えばホストコンピュータ）から来る。システムインターフェースにより生成されるＩＰルートは静的ルートであり、これらがシステムインターフェースにより除去されるまでテーブルに残ることを意味している。システムインターフェースはＩＰルータモジュールレジスタインターフェースを介してルートを付加および除去する。
【０５６３】
ＩＣＭＰ再誘導メッセージはＩＰパケットが正しくないゲートウェイホストへ送信されているときに送信される。ＩＣＭＰ再誘導メッセージは通常不正確に導かれたＩＰパケットに対して使用されるための正しいゲートウェイホストの情報を含んでいる。ＩＣＭＰ再誘導メッセージが受信されるとき、そのメッセージはシステムインターフェースにより処理される。システムインターフェースはＩＰルータのレジスタインターフェースを介してルートリストを更新し、既存のＩＰルートを更新し、または新しいＩＰルートを生成することに従事する。
【０５６４】
［ローカルネットワークのホストへのルーティング］
ローカルイーサネット（登録商標）ネットワークの他のホストへ直接パケットを導くために、ＩＴ１０Ｇサブネットマスクを有するＩＰルートが生成されなければならない。このルートのゲートウェイとして別のホストを特定する代りに、ゲートウェイＩＰアドレスはこのルートがローカルネットワークを横切って直接的な接続を行うことを示すため０．０．０．０に設定されなければならない。
【０５６５】
［ルートリクエストシグナリング］
各送信モジュールはルートをリクエストするためにＩＰルータへのその固有のインターフェースを有する。ルートのリクエストおよび受信に使用されるシグナリングは図３７に示されている。
【０５６６】
モジュールがＩＰルートをリクエストするとき、リクエストするモジュールはルートリクエスト信号（例えばＴＣＰ＿Ｒｏｕｔｅ＿Ｒｅｑ）を主張し、目的地ＩＰアドレス（図２１のＴＣＰ＿Ｔｒｇｔ＿ＩＰ）をＩＰルータへ提供する。一度ＩＰルータが供給されたＩＰアドレスのためのルートを発見すると、ＩＰルータはルートダン信号を主張し、目的地イーサネット（登録商標）アドレスを出力する。ｒｏｕｔｅ＿ｖａｌｉｄ信号はＩＰルートが適切に発見された場合に送信モジュールに示すために使用される。ルートダン信号が主張されるときにｒｏｕｔｅ＿ｖａｌｉｄ信号が主張されるならば、有効なルートが発見された。ｒｏｕｔｅ＿ｖａｌｉｄ信号が主張されないならば、これはルーティングが成功しなかったことを意味する。このルーティングの失敗はデフォルトルートセットをもたないか。一致するＩＰルートエントリにより供給されるゲートウェイがダウンしており、ＡＲＰリクエストに応答しない等の幾つかの原因によるものである。ルート故障の場合には、送信モジュールは待機し、後に再度ルートを解決しようとするか、現在の接続試行を中止することに従事する。
【０５６７】
ＩＰルートがホストまたはゲートウェイのＩＰアドレスに対するイーサネット（登録商標）アドレスを解くためにＡＲＰ探索を必要とするとき、そのＩＰアドレスがＡＲＰキャッシュで発見されないならば遅延が生じる可能性がある。キャッシュの損失があるとき、即ちターゲットＩＰアドレスがＡＲＰキャッシュにエントリをもたないとき、ＡＲＰキャッシュはＩＰルータに損失を通知する。ＩＰルータはその後、ＩＰルートをリクエストした送信モジュールにＡＲＰキャッシュ損失が生じたという信号を送る。この時点で、送信モジュールは現在の接続の設定の遅延を選択するか、接続待ち行列の次の接続の設定を試みて、別のルートをリクエストしようとする。送信モジュールがＩＰルータへのルートリクエストを有しても、ＡＲＰ探索は継続する。ＡＲＰ探索のターゲットがアクチブであり、ＩＴ１０ＧからのＡＲＰリクエストに応答するならば、ターゲットＩＰアドレスの解決されたイーサネット（登録商標）アドレスは後に使用される可能性があるためにＡＲＰキャッシュに付加される。注意：ＩＰルータは多数の目立ったＡＲＰリクエストを有することができる。
【０５６８】
［個々のルートの表示］
静的ルートの生成後、ユーザは２つの方法でルートテーブルに記憶されたエントリを読み返すことができる。ユーザが所定のルートのターゲットＩＰアドレスを知っているならば、Ｓｈｏｗ＿Ｒｏｕｔｅコマンドコードがそのルートのネットマスクおよびゲートウェイの表示のために使用されることができる。
【０５６９】
ルートテーブル内のすべてのエントリを表示するため、Ｓｈｏｗ＿Ｉｎｄｅｘコマンドが使用されることができる。Ｒｏｕｔｅ＿Ｉｎｄｅｘレジスタを使用して、システムインターフェースは特殊性の順序でルートをアクセスしてもよい。さらに特別な（ホスト）ルートが最初に表示され、その後に特別性の少ない（ネットワーク）ルートが続く。例えばｒｏｕｔｅ＿ｉｎｄｅｘ０×００１を有するＩＰルートエントリはＩＰルートリストで最も特別なルートである。注意：デフォルトはインデックスゼロ（０×００００）に記憶される。Ｒｏｕｔｅ＿Ｆｏｕｎｄレジスタはルートが適切に発見された場合に主張され、ルートデータはＲｏｕｔｅ＿Ｔｒｇｔ、Ｒｏｕｔｅ＿Ｍａｓｋ。Ｒｏｕｔｅ＿Ｇｗレジスタに記憶される。
【０５７０】
［解決不能な目的地のキャッシング］
ＩＰルータが目的地ホスト／ゲートウェイに対するイーサネット（登録商標）アドレスを解くことができないとき、ルータは２０秒間、その目的地ＩＰアドレスをキャッシュする。その時間中に、ルータがこれらのうちの１つのキャッシュされた解決不能な目的地に対するリクエストを受信するならば、ＩＰルータは直ちにルート故障を有するルートをリクエストしているモジュールに応答する。この解決不能な目的地のキャッシングはアクセス数を共有されたｍ１メモリに減少することを目的としており、ここでＡＲＰキャッシュエントリが記憶される。解決不能な目的地のキャッシングは冗長ＡＲＰリクエストを避けるようにも動作する。注意：解決されないアドレスがキャッシュされる時間量はＵｎｒｅｓ＿Ｃａｓｈ＿Ｔｉｍｅレジスタを介してユーザ構成可能である。
【０５７１】
［システム例外ハンドラ］
［概要］
以下の説明はシステム例外ハンドラの詳細である。このモジュールはＩＴ１０Ｇハードウェアが直接に処理できないデータが存在するときにはいつでも呼び出される。これは未知のイーサネット（登録商標）タイプのパケット、ＩＧＭＰパケット、ＴＣＰまたはＩＰオプションなどであってもよい。それぞれのこれらの例外の場合、主要なパーサは例外ケースを検出するときシステム例外ハンドラを動作可能にする。システム例外ハンドラモジュールはデータを記憶し、処理される例外データが存在することをシステムインターフェース（典型的にはホストコンピュータで動作するアプリケーション）に通知し、データをシステムインターフェースへ送るように動作する。
【０５７２】
［例外ハンドラブロック図］
図３８は例外ハンドラの１構成の概略ブロック図である。
【０５７３】
［例外ハンドラの動作理論］
例外メモリはオンチッププロセッサメモリの一部である。例外パケットを発生できる各ソースモジュールはそれら固有の例外バッファ開始アドレスと例外バッファ長レジスタとを有する。このモジュールはＦＩＦＯバッファに例外パケットを与え、それをオンチッププロセッサメモリに記憶するように待ち行列する。ｅｘｃｅｐｔｉｏｎ＿ｆｉｆｏ＿ｆｕｌｌ信号は例外ＦＩＦＯバッファが一杯であることを示すために各呼モジュールへフィードバックされる。このモジュールは一度にただ１つの例外パケットをサービスすることができる。後続する例外パケットが受信される場合、これは先のパケットがメモリに記憶されるまで保持される。
【０５７４】
例外パケットはオンチッププロセッサメモリに記憶されるので、ホストコンピュータアクセスはこのモジュールを通して与えられない。
【０５７５】
［メモリアロケータ１］
［概要］
このセクションではＩＰモジュール、ＡＲＰキャッシュ、ルートテーブル、オンチッププロセッサにサービスするために使用されるメモリアロケータ（ｍａｌｌｏｃ１）について説明する。このアロケータは最初にＭ１メモリをディスクリートなブロックに分割し、それらをリクエストのときに割当て、フリーにされたブロックをスタックに戻すように動作する。
【０５７６】
［動作理論］
ｍａｌｌｏｃ１はその動作を開始する前に入力された２つのパラメータを有する必要がある。これらはＭ１のメモリブロックの全体のサイズと、各メモリブロックのサイズである。１つのみのメモリサイズがこのアロケータでサポートされる。
【０５７７】
これらのパラメータの入力後、システムはＭ１＿ＣｏｎｔｒｏｌレジスタでＭ１＿Ｅｎａｂｌｅビットを主張する。これが生じたとき、アロケータはＭ１メモリブロックの上部から開始してブロックアドレスの埋め込みを開始する。即ちＭ１メモリブロックが全体で４Ｋバイトの深さであり、ブロックサイズが５１２バイトであるならば、Ｍ１メモリマップは図３９に示されているように見える。
【０５７８】
４つのアドレスがＭ１ブロックアドレスに対してＭ１アドレス位置毎に維持されている。開始ブロックアドレスをメモリに維持することに加えて、Ｍａｌｌｏｃ１はまた１６エントリキャッシュを含んでいる。初期化時に、第１の１６アドレスはそのキャッシュに維持される。ブロックがリクエストされるとき、これらはキャッシュから取り出される。キャッシュ数がゼロに到達するとき、４つのアドレス（１つのメモリ読取）はメモリから読取られる。同様に、キャッシュがアドレスで満杯であるときにはいつでも。４つのアドレスはメモリに書き戻される。これはアロケータが最初にＭ１メモリからアドレスを読取った後にのみ実施する。
【０５７９】
［ＴＸ／ＲＸ／ＣＢ／ＳＡメモリアロケータ］
［概要］
このセクションではソケット送信（ｍａｌｌｏｃｔｘ）、ソケット受信（ｍａｌｌｏｃｒｘ）、制御ブロック（ｍａｌｌｏｃｃｂ）、ＳＡ（ｍａｌｌｃｓａ）メモリで使用されるメモリアロケータを説明する。これらのアロケータはリクエスト時にメモリブロックを割当て、フリーにされたブロックをスタックに戻し、メモリを使用するため調停するように動作する。
【０５８０】
［動作理論］
ｍａｌｌｏｃはその動作の開始前に入力された幾つかのパラメータを有する必要がある。これらはＭＰメモリスペース内の開始および終了アドレスポインタ位置、および各メモリスペース内の各利用可能なブロックを表すビットマップである。２つのサイズのブロック、即ち１２８バイトと２ｋバイトがソケットデータメモリで利用可能である。ＣＢメモリは固定した１２８バイトブロックを有する。すべてのアロケータもまた各メモリサイズのブロックアドレスに対して８エントリキャッシュを利用する。
【０５８１】
これらのパラメータの入力後、システムは制御レジスタ中のエネーブルビットを主張する。アロケータはその後メモリブロックを割当て、および割当て解除を開始することができる。
【０５８２】
［デフォルトメモリマップ］
図４０は一体化されたネットワークスタックデータメモリの２５６Ｍバイトのメモリを想定したサンプルメモリマップを示しており、即ちＭＲＸとＭＴＸは共通の物理的メモリバンクを共有している。現在の構成はＭＲＸとＭＴＸの両者で外部ＤＤＲ  ＤＲＡＭを使用するが、別の構成では、これらのメモリをオンチップで配置するか異なるタイプのメモリ（例えばＳＲＡＭ）を使用することも可能である。
【０５８３】
［ネットワークスタックデータＤＤＲブロック図］
ネットワークスタックデータＤＤＲ  ＤＲＡＭは送信および受信データバッファとオンチッププロセッサとの間で共用されている。データのブロック図のフローは図４１に示されている。
【０５８４】
データＤＤＲ  ＤＲＡＭアービトレータ411は異なるリソース間で共用されるＤＤＲ  ＤＲＡＭへのアクセスを調停するように動作する。全体的なＤＤＲ  ＤＲＡＭ412もオンチッププロセッサのメモリスペースへマップされるメモリである。
【０５８５】
［ＭＴＸ  ＤＲＡＭインターフェースおよびデータフロー］
［概要］
以下の説明はｍａｌｌｏｃｔｘモジュールとデータＤＤＲ調停モジュールとの間のインターフェースの概要である。データフローを説明し、インターフェース信号をリストし、必要なタイミングの詳細を説明する。
【０５８６】
［データフロー］
３つの異なるアクセスタイプはＭＴＸ  ＤＲＡＭでサポートされる。これらはバースト書込み、バースト読取、単一アクセスである。ｍａｌｌｏｃｔｘ413はこれらのサイクルタイプのそれぞれに対する異なるソースからのリクエストを調停するが、すべての３つのサイクルはデータＤＤＲアービトレータから同時にリクエストされる。ｍｔｘａｒｂサブユニットのブロック図が図４２に示されている。
【０５８７】
ＭＴＸメモリに書込まれるデータは最初にＦＩＦＯバッファに書込まれ、それからＤＤＲ  ＤＲＡＭにバースト書込みされる。
【０５８８】
［ＲＸ  ＤＲＡＭインターフェースおよびデータフロー］
［概要］
このセクションはｍａｌｌｏｃｒｘ414と受信ソケットデータＤＲＡＭ制御装置との間のインターフェースを説明している。これはデータフローを説明し、インターフェース信号をリストし、必要なタイミングの詳細を示している。
【０５８９】
［データフロー］
受信ＤＲＡＭでは、最高の優先順位がメモリに書込まれているデータに与えられる。これはネットワークスタックがネットワークインターフェースから受信されているデータに追いつかなければならないためである。ＤＲＡＭへの書き込みは最初にＦＩＦＯバッファへ行われる。すべてのデータがＦＩＦＯバッファへ書込まれると、制御装置はそれをＤＲＡＭへバースト書込みする。ジャンボフレームでは、ＴＣＰ受信論理装置はバースト書込みリクエストを２Ｋサイズのチャンクへ分割する。
【０５９０】
ＤＲＡＭからバースト読取されるデータでは、ＤＲＡＭ制御装置はメモリを読取り、ＰＣＩ制御装置へ供給する１対のピンポンＦＩＦＯバッファへリクエストされたデータを書込む。これらのＦＩＦＯバッファはＤＲＡＭクロックからＰＣＩクロックドメインへデータレートを移行するため必要とされる。
【０５９１】
［ネットワークスタックＤＤＲブロック図］
ネットワークスタックＤＤＲはＣＢ、雑メモリ、ＳＡメモリ間で共有される。データのブロック図のフローは図４３に示されている。
【０５９２】
ＮＳ  ＤＤＲアービトレータは異なるリソース間で共用されたＤＤＲへのアクセスを調停するように動作する。
【０５９３】
［ＭＣＢ  ＤＲＡＭインターフェースおよびデータフロー］
［概要］
このセクションはｍａｌｌｏｃｃｂモジュールとＮＳ  ＤＤＲ調停モジュールとの間のインターフェースについて説明する。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングの詳細を説明する。
【０５９４】
［データフロー］
２つの異なるアクセスタイプがＭＣＢ  ＤＲＡＭに対してサポートされる。これらはバースト読取り、単一アクセスである。ｍａｌｌｏｃｃｂはこれらのサイクルタイプのそれぞれに対して異なるソースからのリクエストを調停するが、両者のサイクルはＮＳ  ＤＤＲアービトレータから同時にリクエストされる可能性がある。ｍｃｂａｒｂサブユニットのブロック図は図４４に示されている。
【０５９５】
［ネットワークスタックメモリマップ］
図４５はネットワークスタックのデフォルトメモリマップを示している。示されているアドレスはバイトアドレスである。
【０５９６】
［雑メモリ］
［概要］
以下の説明は５１２Ｋバイトの雑メモリバンクの詳細である。このメモリは以下列挙する目的で使用される。
・半分開いた制御ブロック（メイン）、
・ＴＣＰポート認証テーブル、
・ＵＤＰソースポート使用テーブル、
・ＴＣＰソースポート使用テーブル、
・待機時間制御ブロック割当てテーブル、
・設定された制御ブロック割当てテーブル、
・ＴＸメモリブロック割当てテーブル（１２８および２Ｋビットブロックの両者）、
・ＲＸメモリブロック割当てテーブル（１２８および２Ｋビットブロックの両者）、
・ＴＣＰ  ＲＸからＴＸへのパケットのＦＩＦＯバッファ、
・ソケットデータの有効なビットマップ、
・サーバポート情報、
・ＳＡエントリ割当てテーブル。
【０５９７】
［メモリ組織および性能］
雑メモリはＣＢメモリと共用される。大部分のリソースはアクセスで最小にするために２５６ビットワードのデータをアクセスする。
【０５９８】
［記憶されたデータの定義］
［半分開いた制御ブロック］
これらは半分開いたＴＣＰ接続に対する制御ブロックである。各制御ブロックは大きさが６４バイトであり、全体で４Ｋの制御ブロックが存在する。それ故、半分開いた制御ブロックに必要なバイト数は４Ｋ×６４＝２５６Ｋバイトである。
【０５９９】
［ＴＣＰポート認証テーブル］
このテーブルは接続を受け入れるために認証されるＴＣＰポートの追跡を維持する。６４Ｋの可能なポートのそれぞれの１ビットを維持する。それ故、このテーブルは６４Ｋ／８＝８Ｋバイトを使用する。代わりの構成では、ＴＣＰポート認証テーブルおよびＵＤＰおよびＴＣＰソースポート使用テーブルがホストコンピュータに維持されることができる。
【０６００】
［ＵＤＰソースポート使用テーブル］
このテーブルはローカルに初期化される接続に使用されるソースポートに利用可能なＵＤＰＰポートを追跡する。６４Ｋの可能なポートのそれぞれの１ビットを維持する。それ故、このテーブルは６４Ｋ／８＝８Ｋバイトを使用する。このテーブルはローカルＵＤＰサービスポートおよび使用されることができるポートを含むべきではない。
【０６０１】
［ＴＣＰソースポート使用テーブル］
このテーブルはローカルに初期化される接続に使用されるソースポートに利用可能なポート数を追跡する。６４Ｋの可能なポートのそれぞれの１ビットを維持する。それ故、このテーブルは６４Ｋ／８＝８Ｋバイトを使用する。
【０６０２】
［待機時間制御ブロック割当てテーブル］
これは待機時間制御ブロックの割当てテーブルである。３２Ｋの待機時間制御ブロックのそれぞれの１ビットを維持する。それ故、この割当てテーブルは３２Ｋ／８＝４Ｋバイトを使用する。このモジュールは全部で１６ビットデータバスを使用する。
【０６０３】
［設定された制御ブロック割当てテーブル］
これは設定された制御ブロックの割当てテーブルである。６４Ｋの制御ブロックのそれぞれの１ビットを維持する。それ故、この割当てテーブルは６４Ｋ／８＝８Ｋバイトを使用する。
【０６０４】
［ＴＸソケットデータバッファブロック割当てテーブル］
このテーブルは２Ｋバイトのブロック割当てテーブルと１２８Ｋバイトのブロック割当てテーブルから作られ、それらはダイナミックに割当てられた送信データバッファメモリで使用される。各タイプのブロック数は構成可能であるが、結合された割当てテーブルの両者のサイズは７２Ｋバイトに固定される。これは最大で４７５Ｋの１２８バイトブロックを可能にする。このレベルで、２Ｋバイトブロックの数は９８Ｋである。
【０６０５】
［ＲＸソケットデータバッファブロック割当てテーブル］
このテーブルは２Ｋバイトのブロック割当てテーブルと１２８Ｋバイトのブロック割当てテーブルから作られ、それらはダイナミックに割当てられた受信データバッファメモリで使用される。各タイプのブロック数は構成可能であるが、結合された割当てテーブルの両者のサイズは７２Ｋバイトに固定される。これは最大で４７５Ｋの１２８バイトブロックを可能にする。このレベルで、２Ｋバイトブロックの数は９８Ｋである。
【０６０６】
［ＴＣＰ  ＲＸ  ＦＩＦＯバッファ］
このＦＩＦＯバッファはＴＣＰ受信論理装置からＴＣＰ送信論理装置へのパケット送信リクエストの追跡を維持するために使用される。各ＴＣＰ  ＲＸ  ＦＩＦＯバッファエントリは、全部で４バイト（４つのフラグ、２６ビットアドレス、２つの未使用ビット）で幾つかの制御フラグおよび制御ブロックアドレスから作られる。このＴＣＰ  ＲＸ  ＦＩＦＯバッファは１０２４ワードの深さであり、それ故１０２４×４＝４Ｋバイトを必要とする。
【０６０７】
［ソケットデータの利用可能なビットマップ］
このビットマップはホストシステムに送信される準備がされているデータを有する６４Ｋソケットを表している。各ソケットで１ビットを維持する。それ故、このビットマップは６４Ｋ／８＝４Ｋバイトを使用する。
【０６０８】
［ＳＡエントリ割当てテーブル］
これはＳＡエントリの割当てテーブルである。各６４Ｋ  ＳＡエントリで１ビットを維持する。それ故、この割当てテーブルは６４Ｋ／８＝４Ｋバイトを使用する。
【０６０９】
［サーバポート情報］
このデータベースはＬＩＳＴＥＮ状態で開かれているＴＣＰポートに対するパラメータ情報の記憶に使用される。これらのサーバポートはこれらが開かれるまでそれらに関連するＣＢをもたないので、ポート特定パラメータはこの領域に維持される。各ポートエントリは２バイトからなり、６４Ｋの可能なポートが存在する。それ故、このデータベースは６４Ｋ×２＝１２８Ｋバイトを必要とする。
【０６１０】
［雑メモリマップ］
雑メモリに使用されるメモリマップは構成可能である。デフォルト設定は図４６に示されている。ブロックはスケールされない。
【０６１１】
［雑メモリの動作理論］
［モジュールの初期化］
ＣＰＵが雑メモリアービトレータを起動する前に初期化する必要があることはほとんどない。デフォルトメモリマップが使用されるならば、ＣＰＵはＭｉｓｃ＿Ｍｅｍ＿ＣｏｎｔｒｏｌレジスタでＭＭ＿Ｅｎａｂｌｅビットを主張することによりアービトレータを使用可能にできる。
【０６１２】
非デフォルトメモリマップが使用されるならば、すべてのベースアドレスレジスタはアービトレータが使用可能になる前に初期化されなければならない。プログラムされたベースアドレスが任意のオーバーラップするメモリ領域を発生しないことを確実にすることがホストコンピュータソフトウェアの役目である。これをチェックするハードウェアは与えられない。
【０６１３】
［ＣＰＵアクセス］
ＣＰＵは雑メモリの任意の位置をアクセスできる。これは最初にＭＭ＿ＣＰＵ＿Ａｄｄレジスタ（０×１８７０−０×１８７２）へのアドレスにおいてプログラミングし、バイトを読取るかＭＭ＿ＣＰＵ＿Ｄａｔａレジスタ（０×１８７４）へ書込むことによってこれを行う。アドレスレジスタはデータレジスタがアクセスされる毎に自動的にインクリメントする。
【０６１４】
［ＭＩＢサポート］
［概要］
このセクションではＩＴ１０Ｇネットワークスタックに組込まれたＭＩＢサポートを説明する。これはレジスタの定義、動作理論、ＭＩＢが何に使用されるかの概要を含んでいる。
【０６１５】
［ＳＮＭＰおよびＭＩＢの前置き］
ＳＮＭＰはＳＮＭＰ管理局がネットワーク接続された装置の統計およびその他の情報を得ることを可能にし、装置が構成されることを可能にする管理プロトコルである。装置で動作するソフトウェアはエージェントと呼ばれる。エージェントはＵＤＰソケットの上部で動作し、ＳＮＭＰ管理局からのリクエストを処理する。エージェントはまたある事象が装置で生じたときにＳＮＭＰ管理局へトラップを送信することもできる。ＳＮＭＰ  ＲＦＣは、共にグループ化されるとき管理情報ベース（ＭＩＢ）と呼ばれる標準的な情報オブジェクトのセットを文書化している。ベンダはまたＲＦＣで規定されている応用可能な標準的ＭＩＢに加えて、これらがサポートする固有のＭＩＢも規定することができる。
【０６１６】
標準的なＭＩＢは特定されるタイプの大部分の装置が提供しなければならない情報を規定する。幾つかの情報はＳＮＭＰエージェントソフトウェアにより完全に処理されることができ、残りはオペレーティングシステム、ドライバおよび装置からの幾らかのレベルのサポートを必要とする。ＳＮＭＰサポートは主要な転送可能物、ハードウェア、埋設されたソフトウェア、ドライバの３つのすべてで行われる。
【０６１７】
大部分のケースでは、ハードウェアサポートはハードウェアで構成するネットワーク化層に関連するあるカウンタの統計的な情報収集に限定される。割込みもまたある事象でトリガーされることができる。埋設されたソフトウェアの開発はまたＩＣＭＰ、例外処理等のソフトウェアで実行される層に対するカウンタをサポートする。さらに、埋設されたソフトウェアはＡＲＰテーブルエントリ、ＴＣＰ／ＵＤＰソケット状態、およびその他の非カウンタ統計データのような事柄について報告できるようにハードウェアにより生成されたデータベースに問い合わせることができる。ドライバのサポートは、関連するオブジェクトをＳＮＭＰエージェントに戻すことができるＡＰＩへ埋設されたプラットフォームをインターフェースし、ＳＮＭＰエージェントの幾らかのレベルの構成を可能にすることに焦点が置かれる。
【０６１８】
［ＭＭＵおよびタイマモジュール］
［概要］
以下の説明は汎用目的のタイマとシステムで使用されるＭＭＵの概要を提供する。
【０６１９】
［ＣＰＵタイマ］
先のタイマからカスケードされるか独立している４つの汎用目的の３２ビットタイマが設けられる。すべてのタイマはシングルショットまたはループモードで動作されることができる。さらに、各タイマにより使用される前に主要なコアクロックを分割することのできるクロックプリスケーラが設けられる。これは最小のコード変化を異なるコアクロック周波数に対して可能にする。
【０６２０】
［タイマテストモード］
各個々のタイマは対応するタイマ制御レジスタにＴｉｍｅｒ＿Ｔｅｓｔビットを主張することによりテストモードにされることができる。このモードが起動されると、３２ビットカウンタは８ビットクロックデバイダ設定の３つのｌｓｂにしたがって異なるレートで増加する。
【０６２１】
［オンチッププロセッサＭＭＵ］
オンチッププロセッサはプロセッサの４Ｇバイトメモリスペースを異なる領域に分割するためにＭＭＵを使用する。各領域はベースアドレスとアドレスマスクで個々に特定されることができる。領域はまたオーバーラップしてもよいが、この場合共用されたメモリ領域から読み返されるデータは予測不可能である。
【０６２２】
［オンチッププロセッサＤＲＡＭインターフェースおよびデータフロー］
［概要］
このセクションではオンチッププロセッサとネットワークスタック（ＮＳ）データＤＤＲ調停モジュールとの間のインターフェースを説明する。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
【０６２３】
［データフロー］
３つの異なるアクセスタイプがオンチッププロセッサＤＲＡＭでサポートされる。これらはバースト書込み、バースト読取、単一アクセスである。さらに、連続する単一アクセスがＤＲＡＭを放棄せずにオンチッププロセッサにより行われるようにロックが適用されることができる。オンチッププロセッサメモリのアービトレータはこれらのサイクルタイプのそれぞれで異なるソースからのリクエストを調停するが、すべての３つのサイクルはＮＳ  ＤＤＲアービトレータから同時にリクエストされる。レジスタビットを介して使用可能にする必要があるとき、オンチッププロセッサ自体だけがロック特性を使用すると仮定される。
【０６２４】
［命令／状態ブロックの動作理論］
［概要］
以下の説明は、ホスト、オンチッププロセッサ、ネットワークスタック間を通過する命令ブロック（ＩＢ）と状態ブロック（ＳＢ）の動作理論の概要である。それはまたＭＤＬの概念をカバーする。
【０６２５】
個々のＩＢおよびＳＢは待ち行列に連結される。ＩＢ待ち行列とＳＢ待ち行列が存在する。各待ち行列はホストコンピュータコンポーネントとオンチッププロセッサコンポーネントとを有する。また、各ＩＢ待ち行列は関連するＳＢ待ち行列を有する。一致するＩＢとＳＢ待ち行列は共にチャンネルを形成する。これは図４７に示されている。
【０６２６】
注意：すべての状態および命令待ち行列の長さは１６バイトの倍数でなければならず、ＤＷＯＲＤ整列される。
【０６２７】
好ましい実施形態は４つのチャンネルをサポートする。各待ち行列（ＩＢとＳＢの両者）では、待ち行列記述子が存在する。これらの記述子は待ち行列の長さと共に、待ち行列の存在する場所と、読取および書込みポインタを詳細に示している。各待ち行列は円形のＦＩＦＯバッファとして扱われる。各待ち行列を規定するパラメータはホストメモリ利用を構成するパラメータに対してホストレジスタインターフェース中のレジスタと、オンチッププロセッサメモリ利用を規定する全般的なネットワークスタックレジスタスペースのレジスタに分割される。待ち行列記述子のフォーマットは以下のテーブルで示されている。ここでリストされているアドレスオフセットは待ち行列記述子レジスタの開始に関連する。
【０６２８】
命令ブロック待ち行列の処理フローは図４８に示されている。これはまたＩＢパーサモジュールとの関連も示している。
【０６２９】
［ＳＢパシング］
ネットワークスタックと、オンチッププロセッサと、ホストコンピュータとの間を通過する状態ブロックのデータフローを示すブロック図が図４９に示されている。
【０６３０】
ＳＢタイマ閾値は統合ネットワークアダプタハードウェア中の主要な割込み集約機構である。割込み集約は統合ネットワークアダプタとホストコンピュータとの間の割り込みの数を減らし、割り込みの減少またはその集合はデータ処理能力を増加する。
【０６３１】
ＨＷは一般的なＳＢをオンチッププロセッサへ送信し、ソケット特定ＳＢを直接的にホストコンピュータへ送信できる。ホストコンピュータの状態メッセージはソケット設定、ＲＸ  ＤＭＡ、ＣＢ＿Ｃｒｅａｔｅ、Ｓｏｃｋｅｔ＿ＲＳＴ状態メッセージを含んでいる。
【０６３２】
［ＨＷからホストへのＳＢ］
ソケット特定事象が生じるとき、ＣＢの所有者はソケットＣＢ構造中のＨＳビットを検査することにより決定される。ソケットがホストコンピュータに属すならば、ＣＢチャンネル番号もＣＢから読取られる。そのチャンネル番号は事象通知と共にＨＷ状態メッセージ発生装置（ｓｔａｔｇｅｎモジュール）491へ送信される。
【０６３３】
ｓｔａｔｇｅｎモジュールは適切なＳＢを形成し、そのＳＢを４つのうちの１つのＤＭＡ  ＦＩＦＯバッファ492へ位置させる。これらのＦＩＦＯバッファは物理的にオンチッププロセッサメモリ中に位置し、オンチッププロセッサＳＢ  ＦＩＦＯバッファアドレスとオンチッププロセッサＳＢ  ＦＩＦＯバッファ長とにより特定される。
【０６３４】
［ＨＷからオンチッププロセッサへのＳＢ］
非ソケット特定事象、即ち例外イーサネット（登録商標）パケットが生じるとき、ｓｔａｔｇｅｎモジュールは適切なＳＢを発生し、それをオンチッププロセッサメモリに規定される１つの状態メッセージ待ち行列に送信する。割込みはｓｔａｔｇｅｎ＿ｉｎｔが使用可能になるならば、このときにオンチッププロセッサに対して発生されることができる。ハードウェアからオンチッププロセッサへ規定されるただ１つの状態メッセージ待ち行列だけが存在し、すべてのＳＢはこの１つの待ち行列へ行く。
【０６３５】
ＳＢ待ち行列は実際にオンチッププロセッサメモリに存在する。エントリがこのメモリ領域に書込まれるとき、それらはＳＴＡＴ＿ＲＥＡＤ＿ＤＡＴＡレジスタ（ネットワークスタック全般レジスタ０×００５Ｃ−０×００５Ｆ）を介して読取られるように自動的にオンチッププロセッサのレジスタＦＩＦＯバッファへ引き込まれる。オンチッププロセッサはまたどのぐらいの量のデータが０×００５ＡでＳＴＡＴ＿ＦＩＦＯ＿ＦＩＬＬＥＤレジスタを読取ることにより利用可能であるかを見るためにポールすることもできる。このレジスタは待ち行列で利用可能な二重ワード数を戻す。
【０６３６】
［オンチッププロセッサからホストコンピュータへのＳＢ］
オンチッププロセッサがＳＢをホストのＳＢ待ち行列の１つへ送信することを必要とするとき、これをｓｔａｔｇｅｎ（状態発生）ハードウェアモジュールを介して送信する。この場合、オンチッププロセッサはそのメモリにＳＢを発生し、このＳＢの開始アドレス、ＳＢのチャンネル番号、ｓｔａｔｇｅｎモジュールに送信されるＣＢの長さをプログラムする。ＨＷはその後、ＳＢ（または複数のＳＢ）をホストへの適切なＳＢ待ち行列へ転送する。このようにしてオンチッププロセッサとＨＷからのＳＢはＳＢ  ＤＭＡエンジン493を供給する同一のＳＢ待ち行列中で混合される。
【０６３７】
オンチッププロセッサはＳＢが割込みを介してまたは状態ビットのポーリングにより適切なＳＢ待ち行列へ転送されたことを通知されることができる。この機能の任意のパラメータを書込む前に、オンチッププロセッサはｓｔａｔｇｅｎモジュールが任意の先のＳＢリクエストの転送を完了していることを確実にすべきであり、即ちオンチッププロセッサはＳＢビットがｓｔａｔｇｅｎコマンドレジスタで主張されていないことを確証すべきである。
【０６３８】
［ＭＤＬ処理］
ＭＤＬ（メモリ記述子リスト）は最初にホストコンピュータメモリからＤＤＲ  ＤＲＡＭのオンチッププロセッサメモリへＤＭＡされる。オンチッププロセッサはＭＤＬ  ＤＤＲアドレスに基づいて、ＭＤＬハンドルをホストへ戻す。
【０６３９】
ＭＤＬハンドル、ＭＤＬへのオフセット、転送長を含んでいるＳｅｎｄＭＤＬ３２／６４ＩＢはＩＢパーサにより解析され、以下の動作を行う。
【０６４０】
ＭＤＬの第１のエントリを読取り、特定されたオフセットがこのエントリ内であるかを理解する。この決定をオフセットと第１のＭＤＬエントリの長さと比較することにより行う。
【０６４１】
第１のＭＤＬのエントリ内に入らないならば、次のＭＤＬエントリを読取る。最終的に正しいＭＤＬエントリを発見するとき、これはＭＤＬ中のアドレスを使用してＴＸ  ＤＭＡ転送を待ち行列する。転送はオフセットが開始する点から多数のＭＤＬエントリに及ぶ。
【０６４２】
オンチッププロセッサがＩＢを獲得するとき、オンチッププロセッサはオフセットをソケットＣＢにプログラムする。ＣＢがこの情報を獲得するとき、これはデータをＤＭＡできる。代りに、ホストコンピュータが意外に早くオフセットを知るならば、オフセットを意外に早くＣＢへプログラムできる。
【０６４３】
ＲＸ  ＤＭＡ状態メッセージが発生される前に、ＤＭＡされなければならないバイト数を特定する転送閾値は依然としてＭＤＬモードで応用可能である。
【０６４４】
［命令ブロックおよび状態メッセージ］
［概要］
以下の説明は命令ブロックおよび状態メッセージフォーマットの詳細である。ホストはＩＴ１０Ｇハードウェアへコマンドを転送するためにＩＢを使用し、ＩＴ１０Ｇハードウェアは情報をオンチッププロセッサとホストコンピュータへ転送するために状態ブロックを使用する。
【０６４５】
［命令ブロック構造］
ハードウェアが直接解析する唯一のＩＢは種々の形態のＳｅｎｄ＿Ｃｏｍｍａｎｄである。
【０６４６】
［ＨＷ解析された命令］
これらの命令はデータを送信し、所定のソケットの受信パラメータを閉じるかポストするようにＩＴ１０Ｇハードウェアにリクエストするために使用される。ＴＣＰ、ＵＤＰ、３２ビットおよび６４ビットホストコンピュータメモリアドレシングを処理するためにＳＥＮＤ命令には４つの形態がある。
【０６４７】
［ｉＳＣＳＩサポート］
ＩＴ１０Ｇの１実施形態はｉＳＣＳＩ  ＰＤＵヘッダをアセンブルするためにホストコンピュータを使用するが、別の実施形態ではｉＳＣＳＩ  ＰＤＵをアセンブルし処理するためにＩＴ１０Ｇハードウェアとオンチッププロセッサを使用する。両実施形態を以下説明する。
【０６４８】
［ｉＳＣＳＩサポート］
［概要］
このセクションはｉＳＣＳＩ  ＰＤＵヘッダをアセンブルするためにホストコンピュータを使用するＩＴ１０ＧのｉＳＣＳＩのハードウェアサポートを説明している。ＩＴ１０Ｇハードウェアは送信および受信のためにｉＳＣＳＩ  ＣＲＣの計算をオフロードし、ハードウェアは送信のために固定したインターバルのマーカ（ＦＩＭ）を使用してｉＳＣＳＩフレーミングを行う。フレーミングは現在受信用にはサポートされない。
【０６４９】
［動作理論］
ｉＳＣＳＩプロトコルはハードウェア機能の定義の規範的な文書であるＩＥＴＦ  ｉＳＣＳＩインターネット草案に規定されている。ｉＳＣＳＩプロトコルはＴＣＰ／ＩＰバイトストリームで伝送されるプロトコルデータユニット（ＰＤＵ）中のＳＣＳＩコマンドをカプセル化する（ＳＣＳＩコマンドはコマンド記述子ブロックまたはＣＤＢである）。ＳＣＳＩコマンドは幾つかの標準で文書化されている。ハードウェアはｉＳＣＳＩヘッダセグメントとｉＳＣＳＩデータセグメントをホストｉＳＣＳＩドライバから受取り、ｉＳＣＳＩ  ＰＤＵを送信するように準備する。ハードウェアはｉＳＣＳＩ  ＰＤＵを受信し、ｉＳＣＳＩ  ＣＲＣを計算し、その結果をホストｉＳＣＳＩドライバへ送付する。
【０６５０】
ハードウェアは主としてｉＳＣＳＩ  ＰＤＵの外部フォーマットに関連され、これはｉＳＣＳＩヘッダセグメントとｉＳＣＳＩデータセグメントとを含んでいる。ｉＳＣＳＩ  ＰＤＵは必要な基本ヘッダセグメント（ＢＨＳ）と、それに続くゼロ以上の追加ヘッダセグメント（ＡＨＳ）と、それに続くゼロ以上のデータセグメントからなる。ｉＳＣＳＩ  ＣＲＣはオプショナルであり、ヘッダダイジェストおよびデータダイジェストとしてｉＳＣＳＩ  ＰＤＵに含まれる。説明された構成はｉＳＣＳＩヘッダおよびデータが別々にされ、ホストコンピュータに付加的なメモリコピーを必要とせずに、ホストコンピュータメモリにコピーされることを可能にする。
【０６５１】
［ｉＳＣＳＩ送信］
［概要］
ｉＳＣＳＩ送信データパスのブロック図が図５０に示されている。
【０６５２】
［ｉＳＣＳＩ制御モジュール］
ｉＳＣＳＩ制御モジュール501はＴＸ  ＤＭＡエンジンモジュール502、ＣＢアクセスモジュール503、Ｓｔａｔｇｅｎモジュール504から制御信号を受信する。
【０６５３】
ｉＳＣＳＩ制御モジュールは制御信号をＣＢアクセスモジュール503、ｉＳＣＳＩ  ＣＲＣ計算モジュール505、ＦＩＭ挿入モジュール506へ提供する。ｉＳＣＳＩ制御モジュールは任意のｉＳＣＳＩ  ＣＲＣワードと任意のマーカを含んでいるｉＳＣＳＩ  ＰＤＵ長を計算し、ｉＳＣＳＩ  ＣＲＣワードと任意のマーカを含んでいるｉＳＣＳＩ  ＰＤＵ長をＸＭＴＣＴＬ  ＭＵＸモジュールへ提供する。
【０６５４】
ホストｉＳＣＳＩドライバはホストメモリ中で完全なｉＳＣＳＩ  ＰＤＵヘッダをアセンブルする。ホストｉＳＣＳＩドライバはその後、３２ビットアドレスまたは６４ビットアドレスのいずれが必要とされるかに応じて、ＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＹＣＰ送信６４ｉＳＣＳＩＩＢを生成する。ホストｉＳＣＳＩはその後、ＴＣＰ送信ｉＳＣＳＩ  ＩＢを送信し、これはオンチッププロセッサにより受信される。ホストｉＳＣＳＩドライバがＴＣＰ送信ｉＳＣＳＩ  ＩＢをオンチッププロセッサに送信する効果は、ｉＳＣＳＩ  ＰＤＵをホストコンピュータメモリのバッファの連結されたリストへＤＭＡ転送することを開始するようにｉＳＣＳＩ制御モジュールに命令することである。
【０６５５】
ＢＨＳ、任意のＡＨＳ、任意のデータセグメントを含んでいるｉＳＣＳＩ  ＰＤＵはＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＴＣＰ送信６４ｉＳＣＳＩ  ＩＢを使用して転送される。
【０６５６】
ｉＳＣＳＩ  ＰＤＵが完全に単一のＤＭＡ転送中に含まれないならば、ｉＳＣＳＩ  ＰＤＵヘッダセグメントの最後またはｉＳＣＳＩ  ＰＤＵデータセグメントの最後にｉＳＣＳＩを挿入しなければならないｉＳＣＳＩ  ＣＲＣ計算モジュールを設計することは困難である。
【０６５７】
ｉＳＣＳＩ  ＰＤＵが４８バイト（ＢＨＳ）程度に小さいとき、各ｉＳＣＳＩ  ＰＤＵに対して単一のＩＢを使用するオーバーヘッドは単一のＤＭＡ転送に対するｉＳＣＳＩ  ＰＤＵを合体し、その後再度処理するためにｉＳＣＳＩ  ＰＤＵを分離するオーバーヘッドよりも大きくない。
【０６５８】
第１の転送ブロックは１つの完全なｉＳＣＳＩ  ＰＤＵヘッダまたは複数のヘッダ、即ち０、１、またはそれより多くのＡＨＳにより後続されるＢＨＳでなければならず、すべてのヘッダは第１の転送ブロックに含まれる。
【０６５９】
ＣＲＣ計算モジュールがｉＳＣＳＩ  ＰＤＵヘッダの最後にｉＳＣＳＩ  ヘッダＣＲＣを挿入することができるように、第１の転送ブロックが１つの完全なｉＳＣＳＩ  ＰＤＵヘッダまたは複数のヘッダであることが必要である。
【０６６０】
ｉＳＣＳＩ制御モジュールはＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＴＣＰ送信６４ｉＳＣＳＩ  ＩＢが少なくとも一つの転送ブロックを含んでいることをチェックすべきである。これは正しい動作では必要な条件である。この条件が満たされないならば、エラーであり、モジュールは適格に欠ける。
【０６６１】
ｉＳＣＳＩ制御モジュールはＤＭＡ転送を行うことを許可するようにＤＭＡエンジンモジュールにリクエストすることによりｉＳＣＳＩ  ＰＤＵのＤＭＡ転送を開始する。ＤＭＡ転送を行うためのｉＳＣＳＩ制御モジュールのリクエストが受入れられるとき、ｉＳＣＳＩ制御モジュールはＤＭＡエンジンへのアクセスをロックされる。ＤＭＡエンジンはｉＳＣＳＩ  ＩＢ中のすべての転送ブロックがサービスされるまでロックされる。ｉＳＣＳＩ  ＩＢのすべての転送ブロックはすべてのｉＳＣＳＩヘッダおよびｉＳＣＳＩデータ情報がＤＭＡによりホストメモリからハードウェアへ転送されるときにサービスされる。ＤＭＡエンジンはすべてのｉＳＣＳＩヘッダおよびｉＳＣＳＩデータ情報がＤＭＡによりホストメモリからハードウェアへ転送されるときにｉＳＣＳＩ制御モジュールに信号を送る。
【０６６２】
ｉＳＣＳＩ制御モジュールはＦＩＭおよびＣＲＣ動作の実行を容易にし、ｉＳＣＳＩログイン相を考慮するためにＤＭＡエンジンへのアクセスをロックされる。
【０６６３】
ｉＳＣＳＩ  ＩＢ、ｉＳＣＳＩ  ＣＲＣ選択ビット１およびｉＳＣＳＩ  ＣＲＣ選択ビット０の２ビットは、ｉＳＣＳＩ  ＣＲＣ計算モジュールがｉＳＣＳＩヘッダまたはｉＳＣＳＩデータまたはその両者またはその両者以外のｉＳＣＳＩ  ＣＲＣを計算すべきであるならば、ｉＳＣＳＩ制御モジュールに信号を送るためにホストｉＳＣＳＩドライバにより設定される。これらの２つのｉＳＣＳＩ  ＣＲＣ選択ビットは１および０の任意の組合せを取ってもよい。
【０６６４】
ｉＳＣＳＩ  ＩＢは、ホストメモリ中のバッファのリンクリスト（ＬＬ）に対応し、転送ブロックとして知られている、アドレス及び長さの対のセットを含んでいる。ホストメモリのバッファのリンクされたリストはｉＳＣＳＩヘッダおよびｉＳＣＳＩデータ情報を記憶する。ＴＣＰ送信ｉＳＣＳＩ  ＩＢに含まれている転送ブロックはバッファのリンクされたリストを介してｉＳＣＳＩヘッダとｉＳＣＳＩデータを見つける場所についてのｉＳＣＳＩ制御モジュール情報を提供する。各ｉＳＣＳＩ  ＩＢの第１の転送ブロックがホストメモリのｉＳＣＳＩヘッダを指し、ｉＳＣＳＩ  ＩＢ中の残りの転送ブロックがホストメモリのｉＳＣＳＩデータを指している。
【０６６５】
ｉＳＣＳＩ制御モジュールはＣＲＣワードを含むがマーカを除外するｉＳＣＳＩ  ＰＤＵ長を取り、任意のＣＲＣワードと任意のマーカを含んでいるｉＳＣＳＩ  ＰＤＵの長さを計算する。ＸＭＴＣＴＬ  ＭＵＸモジュールはＸＭＴＣＴＬモジュールにＸＭＴＣＴＬモジュールへ入力されるデータの長さを提供するためのＣＲＣワードとマーカを含んだｉＳＣＳＩ  ＰＤＵの長さを必要する。
【０６６６】
ＸＭＴＣＴＬ  ＭＵＸモジュールはｉＳＣＳＩ  ＰＤＵをＭＴＸバッファに記憶する前に、任意のＣＲＣワードと任意のマーカを含んでいるＰＤＵ長を必要とする。
【０６６７】
ｉＳＣＳＩ制御モジュールはＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＴＣＰ送信６４ｉＳＣＳＩ  ＩＢに含まれ、任意のＣＲＣワードを含むが任意のマーカを除外するｉＳＣＳＩ  ＰＤＵ長を使用することによりｉＳＣＳＩ  ＰＤＵの長さを計算する。
【０６６８】
任意のＣＲＣワードと任意のマーカを含んでいるＰＤＵ長の計算には以下の情報を使用する。
・ＦＩＭインターバル、バイト中のマーカインターバル、
・現在のＦＩＭカウント、最後のマーカが挿入され、ソケットＣＢに記憶された以降のバイト数、
・ＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＴＣＰ送信６４ｉＳＣＳＩ  ＩＢに含まれ、ＣＲＣワードを含むがマーカを除外するＰＤＵ長。
【０６６９】
２つのカウンタ、即ちＰＤＵ長カウンタとマーカカウンタを使用して、任意のＣＲＣワードおよび任意のマーカを含んでいるＰＤＵ長の計算は以下に等しい。
１．マーカカウンタをゼロに初期化する。
２．ＰＤＵ長カウンタを現在のＦＩＭカウントに初期化する。
３．ＰＤＵ長カウンタを任意のＣＲＣワードを含むが任意のマーカを除外するＰＤＵ長に対してチェックする。
４．ＰＤＵ長カウンタが任意のＣＲＣワードを含むが任意のマーカを除外するＰＤＵ長よりも大きいならば、ループを出る。
５．ＦＩＭインターバルをＰＤＵ長カウンタへ付加し、マーカカウンタを１だけ増加する。
６．ステップ３へ進む。
７．マーカカウントから計算されるマーカの長さを付加することにより任意のＣＲＣワードと任意のマーカを含んでいるＰＤＵ長を計算する。
【０６７０】
［別のＦＩＭアルゴリズム］
１．ｔｏｔａｌ＿ｍａｒｋｅｒ＿ｌｅｎｇｔｈをゼロに初期化する。
２．ｌｅｎｇｔｈ＿ｃｏｕｎｔｅｒを次のマーカ（ＦＩＭ＿ｉｎｔｅｒｖａｌ−ｃｕｒｒｅｎｔ＿ＦＩＭ＿ｃｏｕｎｔ）に初期化する。
３．ｌｅｎｇｔｈ＿ｃｏｕｎｔｅｒ＞ＰＤＵ＿ｌｅｎｇｔｈであるならば、ステップ７へ進む。
４．ｍａｒｋｅｒ＿ｓｉｚｅだけ、ｔｏｔａｌ＿ｍａｒｋｅｒ＿ｌｅｎをインクリメントする。
５．ｌｅｎｇｔｈ＿ｃｏｕｎｔｅｒ＝ｌｅｎｇｔｈ＿ｃｏｕｎｔｅｒ＋ＦＩＭ＿ｉｎｔｅｒｖａｌ。
６．ステップ３へ進む。
７．ｘｍｉｔｃｔｌはｔｏｔａｌ＿ｍａｒｋｅｒ＿ｌｅｎ＋ＰＤＵサイズを得る。
【０６７１】
マーカが正確にＰＤＵの後に入り、現在のＦＩＭカウント＝０であるケースを正確に処理することを確実にしなければならないならば、最終マーカを位置させなければならないことに注意する。
【０６７２】
前述の計算では、
ＦＩＭインターバルはＣＢから来る。
Ｃｕｒｒｅｎｔ＿ＦＩＭ＿ｃｏｕｎｔはＣＢから来る。
ｔｏｔａｌ＿ｍａｒｋｅｒ＿ｌｅｎｇｔｈはＦＩＭ挿入モジュールに対する時間変数である。
ｌｅｎｇｔｈ＿ｃｏｕｎｔｅｒはＦＩＭ挿入モジュールの時間変数である。
ｍａｒｋｅｒ＿ｓｉｚｅはバイトによるＦＩＭマーカの全体のサイズである。
【０６７３】
図５１はｉＳＣＳＩ送信フローチャートを示している。
【０６７４】
［ｉＳＣＳＩ  ＣＲＣ計算モジュール］
ＤＭＡ  ＴＸモジュールはｉＳＣＳＩヘッダセグメントとｉＳＣＳＩデータセグメントからなるｉＳＣＳＩ  ＣＲＣ計算モジュールへｉＳＣＳＩ  ＰＤＵを提供する。
【０６７５】
任意の挿入されたＣＲＣワードを含んでいるＰＤＵであるｉＳＣＳＩ  ＣＲＣ計算モジュールからの出力はＦＩＭ挿入モジュールへ与えられる。
【０６７６】
ｉＳＣＳＩ  ＣＲＣ計算モジュールはｉＳＣＳＩ  ＰＤＵヘッダとｉＳＣＳＩ  ＰＤＵデータとの両者に対してｉＳＣＳＩ  ＣＲＣ値を計算する。
【０６７７】
ＣＲＣ計算モジュールはｉＳＣＳＩ  ＰＤＵヘッダの最後またはｉＳＣＳＩ  ＰＤＵデータの最後またはその両者またはその両者以外にｉＳＣＳＩ  ＣＲＣを挿入する。ｉＳＣＳＩ  ＣＲＣの計算はＴＣＰ送信ｉＳＣＳＩ  ＩＢのｉＳＣＳＩ  ＣＲＣ選択ビット１とｉＳＣＳＩ選択ビット０により制御され指示される。
【０６７８】
ＣＲＣ計算モジュールへの入力は第１の転送ブロックでは０、１、またはより多くのＡＨＳが後続するＢＨＳであり、第２の転送ブロックでは０または１のデータセグメントが後続するＢＨＳである。
【０６７９】
ＤＭＡエンジンは転送ブロックの境界のｉＳＣＳＩ計算モジュールに信号を送らなければならない。ｉＳＣＳＩ計算モジュールは第１の転送ブロックが開始し終了する場所と、最後の転送ブロックが終了する場所を知らなくてはならない。ｉＳＣＳＩヘッダＣＲＣはヘッダＣＲＣが使用可能になるならば、常に第１の転送ブロックの最後にｉＳＣＳＩ  ＰＤＵを挿入される。ｉＳＣＳＩデータＣＲＣはデータＣＲＣが使用可能になるならば、常に最後の転送ブロックの最後にｉＳＣＳＩ  ＰＤＵを挿入される。
【０６８０】
ＩＢの第１の転送ブロックが完全なｉＳＣＳＩヘッダ（ＢＨＳプラス０、１またはより多くのＡＨＳ）であることは臨界的である。
【０６８１】
［ＦＩＭ挿入モジュール］
ＦＩＭ挿入モジュールは固定したインターバルのマーカ（ＦＩＭ）をｉＳＣＳＩ  ＰＤＵ中に挿入し、これは固定したインターバルのマーカをｉＳＣＳＩ送信ストリーム中へ挿入することに等しい。
【０６８２】
ＦＩＭ挿入モジュールがアクチブであるときＦＩＭ挿入モジュールはマーカだけを挿入する。ＦＩＭ挿入モジュールは現在のｉＳＣＳＩソケット（ｉＳＣＳＩソケットＣＢ）に対応するＣＢでＦＩＭが設定されるときのみアクチブである。
【０６８３】
ＦＩＭ挿入モジュールは各ｉＳＣＳＩソケットに対してｉＳＣＳＩ  ＣＲＣ計算モジュールにより挿入されることのできる任意のＣＲＣバイトを含んでいる各ｉＳＣＳＩストリームの４バイトワード数のカウントの追跡を維持できなければならない。ＦＩＭ挿入モジュールはｉＳＣＳＩソケットＣＢ中に２つのＦＩＭ値、即ちＦＩＭインターバルと現在のＦＩＭカウントを記憶することにより４バイトのワード数の追跡を維持する。これらの各フィールド、ＦＩＭインターバルと現在のＦＩＭカウントは４バイトワードで測定される。
【０６８４】
ＦＩＭインターバルと現在のＦＩＭカウントは１６ビットフィールドで記憶されることができる。
【０６８５】
ＦＩＭインターバルまたは現在のＦＩＭカウントがオーバーフローするならば、適格な故障機構が存在すべきである。
【０６８６】
ｉＳＣＳＩログイン相を含むｉＳＣＳＩ接続セットアップを使用可能にするために、マーカが使用されるならば、マーカの挿入はｉＳＣＳＩログイン相の末尾の後の第１のマーカインターバルでのみ開始される。しかしながら、マーカの含有および除外機構がｉＳＣＳＩログイン相の長さを知らずに動作することを可能にするために、第１のマーカはマーカのないインターバルがマーカを含んでいるかのようにｉＳＣＳＩ  ＰＤＵストリームに置かれる。したがってすべてのマーカは次式により与えられるバイト位置でｉＳＣＳＩ  ＰＤＵストリーム中に現れる。
［（ＭＩ＋８）*ｎ−８］
ここでＭＩ＝ＦＩＭ（マーカ）インターバルであり、ｎ＝整数である。
【０６８７】
一例として、マーカインターバルが５１２バイトであり、ｉＳＣＳＩログイン相がバイト１００３で終了するならば（第１のｉＳＣＳＩの位置されたバイトは０である）、第１のマーカはそのストリームのバイト１０３１の後に挿入される。
【０６８８】
ｉＳＣＳＩ  ＰＤＵストリームはｉＳＣＳＩインターネット草案に規定されているが、インターネット草案で使用される用語はＴＣＰストリームである。ＦＩＭはマーカ自体を除くＴＣＰストリームのｉＳＣＳＩにより位置されるあらゆるバイトを含んでいるペイロードバイトストリームカウンティングを使用する。これはＴＣＰがカウントするがｉＳＣＳＩにより開始されない任意のバイトを除外する。
【０６８９】
ホストｉＳＣＳＩドライバはｉＳＣＳＩ  ＦＩＭインターバルコマンドブロックを発生することにより、ｉＳＣＳＩソケットＣＢのＦＩＭインターバルと初期ＦＩＭカウントを初期化する。オンチッププロセッサはｉＳＣＳＩ  ＦＩＭインターバルコマンドブロックを受信する。オンチッププロセッサはＦＩＭインターバルをソケット特定ＴＸ＿ＦＩＭ＿Ｉｎｔｅｒｖａｌレジスタと、ｉＳＣＳＩソケットＣＢのＦＩＭインターバルフィールドへ書込む。オンチッププロセッサは初期ＦＩＭカウントをソケット特定ＴＸ＿ＦＩＭ＿ＣＯＵＮＴレジスタと、ｉＳＣＳＩソケットＣＢの現在のＦＩＭカウントへ書込む。
【０６９０】
ホストｉＳＣＳＩドライバはｉＳＣＳＩセットＦＩＭ状態コマンドブロックを発生することによりｉＳＣＳＩソケットＣＢのＦＩＭ状態を制御する。オンチッププロセッサはｉＳＣＳＩセットＦＩＭ状態コマンドブロックを受信する。オンチッププロセッサはその後、ＦＩＭ状態をｉＳＣＳＩソケットＣＢ中のＦＩＭＯＮビットに書込む。
【０６９１】
ＦＩＭインターバル、初期ＦＩＭカウント、ＦＩＭ状態の初期化後、ＦＩＭ挿入モジュールはｉＳＣＳＩ  ＩＢを待機する初期化状態にある。
【０６９２】
ＦＩＭがアクチブでありながら、現在のｉＳＣＳＩソケットに対するＦＩＭ状態、ＦＩＭカウント、またはＦＩＭインターバルを変化しようとする試みはエラーである。
【０６９３】
ＦＩＭ挿入モジュールがｉＳＣＳＩ  ＩＢを待機している状態にあり、ｉＳＣＳＩ  ＩＢが受信されるとき、ＦＩＭ挿入モジュールはソケットＣＢ中のＦＩＭＯＮビットと現在のＦＩＭカウントを読取る。ｉＳＣＳＩソケットＣＢ中のＦＩＭＯＮビットが設定されるならば、ＦＩＭ挿入モジュールはアクチブである。ＦＩＭ挿入モジュールがアクチブであるならば、ＦＩＭ挿入モジュールはＦＩＭインターバルカウンタをｉＳＣＳＩソケットＣＢからの現在のＦＩＭカウントに設定する。ＦＩＭ挿入モジュールがアクチブではないならば、ＦＩＭ挿入モジュールはｉＳＣＳＩ  ＩＢを待機する状態に戻る。
【０６９４】
ＦＩＭ挿入モジュールは今や、ＣＲＣ計算モジュールから受信されたデータの各４バイトワードをカウントする状態にある。ｉＳＣＳＩ  ＰＤＵ中の各４バイトワードがｉＳＣＳＩ  ＣＲＣ計算モジュールにより挿入される任意のＣＲＣバイトを含んでいるＦＩＭ挿入モジュールにより受信された後、ＦＩＭ挿入モジュールは１だけＦＩＭインターバルカウンタをデクリメントする。ＦＩＭ挿入モジュールはその後、各４バイトワードをカウントする状態に戻る。
【０６９５】
各４バイトワードをカウントする状態にありながらＦＩＭ挿入モジュールがｉＳＣＳＩソケットからのデータの走査を完了するとき、ＦＩＭ挿入モジュールは現在のＦＩＭインターバルカウンタ値を現在のｉＳＣＳＩソケットＣＢの現在のＦＩＭカウントへ保存する。ＦＩＭ挿入モジュールはｉＳＣＳＩ  ＩＢ中のすべての転送ブロックがサービスされたときｉＳＣＳＩソケットからのデータの走査を完了する。この点で、ＦＩＭ挿入モジュールはｉＳＣＳＩ  ＩＢを待機する状態にある。
【０６９６】
各４バイトワードをカウントする状態にありながら、ＦＩＭインターバル挿入モジュールはＦＩＭインターバルカウンタがゼロに到達するときｉＳＣＳＩ  ＰＤＵ中にマーカを挿入する。ｉＳＣＳＩ  ＰＤＵ中にマーカを挿入した後、ＦＩＭ挿入モジュールはＦＩＭインターバルカウンタをＦＩＭインターバルへリセットし、ソケットＣＢから読取り、その後、４バイトワードをカウントする状態に戻る。
【０６９７】
マーカは、次のｉＳＣＳＩ  ＰＤＵヘッダまでｉＳＣＳＩストリームでスキップするバイト数に等しい次のｉＳＣＳＩ  ＰＤＵ開始ポインタを含んでいる。ＦＩＭ挿入モジュールは各マーカに対する次のｉＳＣＳＩ  ＰＤＵ開始ポインタを計算しなければならない。次のｉＳＣＳＩ  ＰＤＵ開始ポインタを計算するため、ＦＩＭ挿入モジュールは現在のＰＤＵのバイト数をカウントし、現在のｉＳＣＳＩ  ＰＤＵの開始から現在のｉＳＣＳＩ  ＰＤＵバイトカウントであるマーカ挿入点までを測定しなければならない。現在のｉＳＣＳＩ  ＰＤＵのバイト数をカウントするため、ＦＩＭ挿入モジュールはｉＳＣＳＩ  ＰＤＵバイトカウンタを使用する。現在のｉＳＣＳＩ  ＰＤＵバイトカウントに加えて、ＦＩＭ挿入モジュールは現在のＰＤＵヘッダの開始に関して次のｉＳＣＳＩ  ＰＤＵヘッダの開始位置を知らなければならない。次のｉＳＣＳＩ  ＰＤＵヘッダの開始と、現在のｉＳＣＳＩ  ＰＤＵヘッダの開始との差は現在のｉＳＣＳＩ  ＰＤＵ長に等しい。ＦＩＭ挿入モジュールは以下のようにして次のｉＳＣＳＩ  ＰＤＵ開始ポインタを計算する。
次のｉＳＣＳＩ  ＰＤＵ開始ポインタ＝現在のｉＳＣＳＩ  ＰＤＵ長−現在のｉＳＣＳＩ  ＰＤＵバイトカウント
次のｉＳＣＳＩ  ＰＤＵ開始ポインタは３２ビットの長さである。
【０６９８】
ｉＳＣＳＩインターネット草案はＰＤＵデータセグメントサイズに対して交渉された最大値ＭａｘＲｅｃｖＰＤＵＤａｔａＳｉｚｅを５１２バイトから（（２２４**）−１）バイト（１６７７７２１６−１バイトまたは約１６Ｍバイト）までに規定する。
【０６９９】
（バイトで測定された）現在のｉＳＣＳＩ  ＰＤＵ長は少なくとも２５ビットであるべきである。
【０７００】
ＦＩＭ挿入モジュールに任意のＣＲＣワードを含むが任意のマーカを除外するｉＳＣＳＩ  ＰＤＵ長を与える方法が幾つか存在する。ＦＩＭモジュールにＰＤＵ長を提供する１つの方法はｉＳＣＳＩホストドライバがＰＤＵ長を計算する方法である。
【０７０１】
ｉＳＣＳＩホストドライバは４８バイト（ＢＨＳ長）＋総ＡＨＳ長＋データセグメント長の和として、ｉＳＣＳＩ  ＰＤＵヘッダＣＲＣまたはｉＳＣＳＩ  ＰＤＵデータＣＲＣを除外する現在のｉＳＣＳＩ  ＰＤＵ長を計算する。
【０７０２】
総ＡＨＳ長とデータセグメント長は既にこれらがＢＨＳに含まれるときソフトウェアで計算されなければならない。
【０７０３】
ホストｉＳＣＳＩドライバはその後、任意のＣＲＣワードを含むがマーカを除外する現在のｉＳＣＳＩ  ＰＤＵ長を計算する。任意のＣＲＣワードを含むがマーカを除外する現在のｉＳＣＳＩ  ＰＤＵ長は、ｉＳＣＳＩ  ＰＤＵヘッダＣＲＣまたはｉＳＣＳＩ  ＰＤＵデータＣＲＣを除外するｉＳＣＳＩ  ＰＤＵ長に等しく、ｉＳＣＳＩ  ＰＤＵヘッダＣＲＣが使用可能になるならば＋４バイト、ｉＳＣＳＩデータＣＲＣが使用可能になるならば＋４バイトに等しい。
【０７０４】
ホストｉＳＣＳＩドライバはＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＴＣＰ送信６４ｉＳＣＳＩ  ＩＢに任意のＣＲＣワードを含むがマーカを除外する現在のｉＳＣＳＩ  ＰＤＵ長を挿入する。ＴＣＰ送信３２ｉＳＣＳＩ  ＩＢとＴＣＰ送信６４ｉＳＣＳＩ  ＩＢの説明を参照されたい。
【０７０５】
［ＸＭＴＣＴＬ  Ｍｕｘモジュール］
ＸＭＴＣＴＬ  ｍｕｘモジュールはＤＭＡ  Ｔｘ  ＦＩＦＯバッファからＴＣＰデータを受信し、ＦＩＭ挿入モジュールからｉＳＣＳＩデータを受信する。
【０７０６】
ＸＭＴＣＴＬ  ｍｕｘモジュールはデータをＤＭＡ  ＴＸ  ＦＩＦＯバッファまたはＦＩＭ挿入モジュールからＸＭＴＣＴＬモジュールへ提供する。
【０７０７】
機能：ＸＭＴＣＴＬ  ｍｕｘモジュールはＸＭＴＣＴＬモジュールへのデータ入力を多重化するように動作する。
【０７０８】
ＸＭＴＣＴＬ  ｍｕｘモジュールはデータ長をＸＭＴＣＴＬモジュールへ提供する。
【０７０９】
ｉＳＣＳＩデータの長さはＣＲＣ計算モジュールにより挿入される任意のＣＲＣバイトを含まなければならない。
【０７１０】
ｉＳＣＳＩデータの長さはＦＩＭ挿入モジュールにより挿入される任意のマーカも含まなければならない。
【０７１１】
ＸＭＴＣＴＬモジュールはＭＳＳ等に基づいて、データをＴＣＰパケットの適切な寸法に分離するために入力データのサイズを使用する。ＸＭＴＣＴＬモジュールはＭＴＸメモリバッファに記憶された適切なサイズのパケットを生成する。各ＭＴＸバッファは別々のＴＣＰパケットに対応する。
【０７１２】
ＸＭＴＣＴＬ  ｍｕｘモジュールはデータを１２８ビット幅のフォーマットのＸＭＴＣＴＬモジュールへ提供する。データはｄａｖ／ｇｒａｎｔハンドシェイクを使用してＸＭＴＣＴＬモジュールへ送られる。
【０７１３】
［ｉＳＣＳＩ受信］
［概要］
受信ＤＭＡエンジンはｉＳＣＳＩ受信データパスを含んでいる。受信ＤＭＡデータパスはｉＳＣＳＩ  ＣＲＣを計算し、最後のｉＳＣＳＩ  ＣＲＣをｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態を介してホストｉＳＣＳＩドライバへ通過する。
【０７１４】
［ｉＳＣＳＩ受信の動作理論］
ハードウェアはｉＳＣＳＩ  ＣＲＣの計算をオフロードする。ホストｉＳＣＳＩドライバはｉＳＣＳＩ  ＣＲＣ機構の正しい動作を確実にするために受信データパスを制御する。
【０７１５】
ｉＳＣＳＩ  ＣＲＣ情報は２つの場所でハードウェアとホストｉＳＣＳＩドライバとの間で転送される。最後のｉＳＣＳＩ  ＣＲＣはハードウェアからホストｉＳＣＳＩドライバへ送信されたｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態の一部分である。ｉＳＣＳＩ  ＣＲＣシードはホストｉＳＣＳＩドライバからハードウェアへ送信されるＴＣＰ受信ｉＳＣＳＩ３２ＩＢとＴＣＰ受信ｉＳＣＳＩ６４ＩＢの両者の一部分である。
【０７１６】
ホストｉＳＣＳＩドライバはｉＳＣＳＩ  ＣＲＣ計算機構が正しく動作するように維持するためにＴＣＰ受信ｉＳＣＳＩ３２ＩＢとＴＣＰ受信ｉＳＣＳＩ６４ＩＢ中に正確なサイズのバッファをポストしなければならない。
【０７１７】
ｉＳＣＳＩ記録相中、ホストｉＳＣＳＩドライバは正常のＴＣＰソケットと同じ方法でｉＳＣＳＩソケットを扱う。ｉＳＣＳＩ記録相が完了するとき、ｉＳＣＳＩ接続はフル特徴相に入る。
【０７１８】
ｉＳＣＳＩ接続がフル特徴相に入るとき、接続はｉＳＣＳＩヘッダまたはｉＳＣＳＩデータ或いはその両者中にｉＳＣＳＩ  ＣＲＣ情報を含んでいる可能性のあるｉＳＣＳＩ  ＰＤＵを転送する準備が整っている。
【０７１９】
ＲＸ  ＤＭＡエンジンはＴＣＰ受信ｉＳＣＳＩ３２ＩＢとＴＣＰ受信ｉＳＣＳＩ６４ＩＢにより特定される散乱集合リストからｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態を介して計算される最後のｉＳＣＳＩ  ＣＲＣを送信する。
【０７２０】
一度、ｉＳＣＳＩ記録相が完了すると、ホストｉＳＣＳＩ  ＣＲＣドライバはｉＳＣＳＩ  ＰＤＵヘッダの正しいサイズの受信バッファをポストする。ホストｉＳＣＳＩドライバはその後、ｉＳＣＳＩ  ＰＤＵヘッダを解析する。ホストｉＳＣＳＩドライバはその後、データセグメントが存在するならばｉＳＣＳＩ  ＰＤＵデータセグメントの正しいサイズの受信バッファをポストする。ホストｉＳＣＳＩドライバはそれぞれ次のｉＳＣＳＩ  ＰＤＵデータセグメントの正しいサイズのバッファをポストし続ける。ＤＭＡエンジンは各ｉＳＣＳＩ  ＰＤＵヘッダセグメントとｉＳＣＳＩ  ＰＤＵデータセグメントのｉＳＣＳＩ  ＣＲＣを計算する。
【０７２１】
ｉＳＣＳＩ  ＰＤＵヘッダの場合、ホストｉＳＣＳＩドライバはｉＳＣＳＩ基本ヘッダセグメント（ＢＨＳ）サイズ（４８バイト）と、ヘッダＣＲＣがｉＳＣＳＩログイン相中に交渉するならばｉＳＣＳＩ  ＰＤＵ  ＣＲＣ（４バイト）の和のサイズをポストする。ＢＨＳはその後、存在するならば後続のｉＳＣＳＩ  ＰＤＵヘッダを含むＤＭＡにより転送される。
【０７２２】
ＢＨＳのＤＭＡ転送が完了するとき、ｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態はハードウェアにより計算される最終的なｉＳＣＳＩ  ＣＲＣの残りを含む。ホストｉＳＣＳＩドライバはハードウェアにより計算される最終的なｉＳＣＳＩ  ＣＲＣの残りを含むｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態を受信する。ホストｉＳＣＳＩドライバはその後、その値がこのｉＳＣＳＩ多項式の予測される余りに一致することを確実にするためにＲＸ  ＤＭＡ状態の最後のｉＳＣＳＩ  ＣＲＣをチェックする。ヘッダＣＲＣがｉＳＣＳＩ記録相中に交渉されないならば、ホストｉＳＣＳＩドライバはｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態で戻された最後のｉＳＣＳＩ  ＣＲＣの残りを無視する。
【０７２３】
ＢＨＳには追加ヘッダセグメント（ＡＨＳ）が後続する。ＢＨＳのバイト４はＴｏｔａｌＡＨＳＬｅｎｇｔｈ、即ちＡＨＳの全長を含んでいる。ＡＨＳを含み、それ故長さが４８バイトを超えるｉＳＣＳＩ  ＰＤＵヘッダの場合、ホストｉＳＣＳＩドライバはＡＨＳに対する付加的なＴＣＰ受信ｉＳＣＳＩ３２ＩＢまたはＴＣＰ受信ｉＳＣＳＩ６４ＩＢを発生する。
【０７２４】
ｉＳＣＳＩ  ＣＲＣが使用可能になるならば、ホストｉＳＣＳＩドライバは算出されたｉＳＣＳＩ  ＣＲＣ値を、ＴＣＰ  受信ｉＳＣＳＩ３２ＩＢまたはＴＣＰ受信ｉＳＣＳＩ６４ＩＢ中のｉＳＣＳＩ  ＣＲＣシードフィールドを使用してシードする。ｉＳＣＳＩ  ＣＲＣシードフィールドの使用はｉＳＣＳＩ  ＰＤＵヘッダＣＲＣの残りが正確にチェックされることを可能にする。
【０７２５】
ｉＳＣＳＩ  ＣＲＣ計算の継続が必要とされない場合、ＴＣＰ  受信ｉＳＣＳＩ３２ＩＢまたはＴＣＰ受信ｉＳＣＳＩ６４ＩＢ中のｉＳＣＳＩ  ＣＲＣシードはゼロに設定されなければならない。
【０７２６】
ｉＳＣＳＩ  ＰＤＵのデータセクションに対してｉＳＣＳＩ  ＣＲＣをリクエストするとき、ホストｉＳＣＳＩドライバはｉＳＣＳＩ  ＣＲＣを記憶するための余分な４バイトデータバッファを特定しなければならない。この４バイトデータバッファは最終転送ブロックとして挿入され、ＴＣＰ受信ｉＳＣＳＩ３２ＩＢまたはＴＣＰ受信ｉＳＣＳＩ６４ＩＢでリンクリストの最後に余分な４バイトを効率的に付加する。４バイトのデータバッファはｉＳＣＳＩ  ＰＤＵデータセグメントのｉＳＣＳＩ  ＣＲＣがｉＳＣＳＩ  ＰＤＵデータストリーム外で転送されることを可能にする。４バイトバッファの使用は図５２に示されている。
【０７２７】
［ＲＸ  ＤＭＡの動作理論］
ホストドライバはハードウェアからＲＸ  ＤＡＶ状態メッセージを受信するときに利用可能なＲＸデータが存在することを知っている。このＲＸ  ＤＡＶ状態メッセージの通知は通常のＴＣＰ接続と同じである。ＲＸ  ＤＡＶ状態メッセージ中のＣＢハンドルはｉＳＣＳＩに関連するＣＢを指している。ホストドライバはその後、ＲＸデータを記憶するようにバッファを割当て、総リンクリストバッファサイズはホストドライバが受信することを予測するデータ量プラス予測されるならばＣＲＣに等しくなければならない（図５２参照）。またｉＳＣＳＩ  ＰＤＵはそのフォーマットにあることが予測されるので、総バッファサイズは常にｄｗｏｒｄ境界で整列されなければならない。ホストドライバはまたＣＲＣシードを３２’ｈｆｆｆｆｆｆｆｆに初期化しなければならない。
【０７２８】
ＲＸ  ＤＭＡ動作が行われるとき、ハードウェアは最初にソケットＣＢの付属からｉＳＣＳＩ  ＣＲＣシードを抽出する。ハードウェアはまたメインＣＢ構造からホスト再送信（ＨＲ）ビットを抽出する。ＨＲビットはこれがｉＳＣＳＩソケットであるか否かを他のハードウェアへ示す。ハードウェアはその後、データを転送しながら新しいＣＲＣを計算する。
【０７２９】
データストリームはＰＤＵヘッダまたはデータセグメントに対する予測されるｉＳＣＳＩ  ＣＲＣ値を含んでも含まなくてもよい。データストリームがｉＳＣＳＩ  ＣＲＣダイジェストを含まないならば、ハードウェアにより計算されるｉＳＣＳＩ  ＣＲＣは動作しているｉＳＣＳＩ  ＣＲＣとしてＣＢの付属へ記憶して戻される。ＲＸ−ＤＭＡ状態メッセージは発生されてもされなくてもよい。ＲＸ  ＤＭＡ状態メッセージが発生されるならば、状態メッセージはこの動作しているｉＳＣＳＩ  ＣＲＣを含む。データストリームがｉＳＣＳＩ  ＣＲＣダイジェストをその終端部に含んでいるならば、ｉＳＣＳＩ  ＣＲＣハードウェアはｉＳＣＳＩ  ＣＲＣダイジェスト（これは予測されるｉＳＣＳＩ  ＣＲＣ値である）を含んでいるＰＤＵセグメントにわたってｉＳＣＳＩ  ＣＲＣを計算する。ＰＤＵセグメントは破損せず、ｉＳＣＳＩ  ＣＲＣダイジェストが正確ならば、ハードウェアにより計算される最終的なｉＳＣＳＩ  ＣＲＣ値は常に固定したｉＳＣＳＩ  ＣＲＣの余りに等しい。
【０７３０】
一度すべてのポストされたバッファリストが埋められると、Ｓｔａｔｇｅｎモジュールは最後のｉＳＣＳＩ  ＣＲＣの余りを含むｉＳＣＳＩ  ＣＲＣメッセージを有するＲＸ  ＤＭＡ状態を発生する。
【０７３１】
オンチッププロセッサはＴＣＰ受信ｉＳＣＳＩ３２ＩＢまたはＴＣＰ受信ｉＳＣＳＩ６４ＩＢを処理するように動作する。ＩＢの処理中、オンチッププロセッサは新しいＣＲＣ計算の開始を示すために３２’ｈｆｆｆｆｆｆｆｆである可能性があるｉＳＣＳＩ  ＣＲＣシード、または先のＲＸ  ＤＭＡ状態メッセージからのｉＳＣＳＩ  ＣＲＣシードをソケットＣＢの付属へ書込む。このようにしてｉＳＣＳＩ  ＣＲＣシードの書込みはｉＳＣＳＩ  ＣＲＣの正しい値を設定する。
【０７３２】
標準的な受信３２および受信６４ｌｂｓを使用し、ＲＸ  ＤＭＡエンジンにしたがう他の非ｉＳＣＳＩ機構では、ＣＲＣ機構は無視され、ＣＲＣシードは無意味であり、スキップされることができる。
【０７３３】
ＲＸ  ＤＭＡ動作が行われる前、ピアは最終的にＤＭＡによりホストメモリへ転送されるデータペイロードを含む１以上のＴＣＰパケットを送信する。ピアのネットワークスタックの動作方法に応じて、ｉＳＣＳＩがすべてのＰＤＵがｄｗｏｒｄ境界でそれ自体整列することを必要としても、このペイロードは非ｄｗｏｒｄ整列される境界に分割されることができる。ＤＭＡ動作は直接的に各ＴＣＰパケットのペイロードのサイズに一致しない。ペイロードが非ｄｗｏｒｄ整列されるならば、ＤＭＡ動作は非ｄｗｏｒｄ整列され、この非ｄｗｏｒｄ整列されたデータストリームを通じてＣＲＣを計算することが必要とされる。問題はｉＳＣＳＩ  ＣＲＣハードウェアがすべてのデータがｄｗｏｒｄ整列されることを予測することである。
【０７３４】
ｉＳＣＳＩ  ＣＲＣハードウェアがこの窮地に遭遇するとき、非整列のデータストリームを通してｉＳＣＳＩ  ＣＲＣを計算し続ける。最後に到達するとき、これは非二重ワード整列された１−３バイトをＣＢの付属へ記憶する。それはまた有効なバイト数も記憶する。例えばデータストリームが１５バイトの長さであるならば、ハードウェアは最後の３バイトを記憶し、有効なバイト数は３である。データストリームが３２バイトの長さであるならば、このデータストリームはｄｗｏｒｄ整列されているので有効なバイト数は０である。ＣＢの付属に記憶されている情報は検索され、次のＤＭＡ転送の前に挿入される。
【０７３５】
［ｉＳＣＳＩ命令ブロック］
ＴＣＰ送信ｉＳＣＳＩ命令ブロック（ＩＢ）はｉＳＣＳＩソケットを使用してｉＳＣＳＩ  ＰＤＵを送信するために使用される。ＴＣＰ送信ｉＳＣＳＩ３２ＩＢの長さはこのＩＢがＤＭＡ転送で使用される１以上の転送ブロックを含むことができるので可変である。転送ブロックはアドレス（ヘッダまたはデータ）と転送長の対からなる。
【０７３６】
ｉＳＣＳＩ  ＣＲＣ選択ビット１とｉＳＣＳＩ  ＣＲＣ選択ビット０はｉＳＣＳＩ制御モジュールによりｉＳＣＳＩ  ＣＲＣの計算を決定する。ｉＳＣＳＩ  ＣＲＣ選択ビット０＝１ならば、ｉＳＣＳＩ制御モジュールはｉＳＣＳＩヘッダにわたってｉＳＣＳＩ  ＣＲＣを計算する。ｉＳＣＳＩ  ＣＲＣ選択ビット＝１ならば、ｉＳＣＳＩ制御モジュールはｉＳＣＳＩデータにわたってｉＳＣＳＩ  ＣＲＣを計算する。ｉＳＣＳＩ  ＣＲＣ計算はｉＳＣＳＩヘッダとｉＳＣＳＩデータの両者、ｉＳＣＳＩデータのみ、ｉＳＣＳＩヘッダのみ、またはそれ以外にわたってｉＳＣＳＩ  ＣＲＣ計算エンジンにより行われることができる。
【０７３７】
ｉＳＣＳＩの総ＤＭＡ長はｉＳＣＳＩ送信ブロックによりＤＭＡされる必要のあるデータ全体の長さである。これは計算される必要のあるＣＲＣ長を含まない。
【０７３８】
ＴＣＰ送信ｉＳＣＳＩ３２ＩＢの第１の転送ブロックのアドレスおよび転送長の対はホストメモリ中のｉＳＣＳＩヘッダを指している。ＴＣＰ送信ｉＳＣＳＩ３２ＩＢの第２および任意のさらに別の転送ブロックはホストメモリ中のｉＳＣＳＩデータを指している。
【０７３９】
ＢＨＳと任意のＡＨＳと任意のデータセグメントを含んでいるｉＳＣＳＩ  ＰＤＵはＴＣＰ送信３２ｉＳＣＳＩ  ＩＢまたはＴＣＰ送信６４ｉＳＣＳＩ  ＩＢを使用して転送される。
【０７４０】
ＴＣＰ送信ｉＳＣＳＩ３２ＩＢの第１の転送ブロックは完全な単数または複数のｉＳＣＳＩ  ＰＤＵヘッダ、０、１、またはより多くのＡＨＳが後続するＢＨＳでなければならず、すべての単数または複数のヘッダはＴＣＰ送信ｉＳＣＳＩ３２ＩＢの第１の転送ブロックに含まれなければならない。
【０７４１】
強調するために異なる方法で同じことを言うと、ホストｉＳＣＳＩドライバはＴＣＰ送信ｉＳＣＳＩ３２ＩＢでｉＳＣＳＩヘッダセグメントを有する任意のｉＳＣＳＩデータセグメントを含まなければならない。ｉＳＣＳＩデータセグメントはＴＣＰ送信ｉＳＣＳＩ３２ＩＢ中で、ｉＳＣＳＩヘッダセグメントとは別の転送ブロックに存在しなければならない。
【０７４２】
ＴＣＰ送信ｉＳＣＳＩ３２ＩＢの各転送ブロックのホストメモリアドレスは３２ビットである。６４ビットアドレスが必要とされるならば、ＴＣＰ送信ｉＳＣＳＩ６４ＩＢが使用されるべきである。
【０７４３】
明確に図示された３つの転送ブロックを有するＴＣＰ送信ｉＳＣＳＩ３２ＩＢのフォーマットを以下説明する。
【０７４４】
ＣＲＣ選択ビット０とＣＲＣ選択ビット１は各転送ブロックの処理を同様にするために第１の転送ブロックの未使用部分ではなくＩＢ中の別々のワードに記憶される。
【０７４５】
ＴＣＰ受信ｉＳＣＳＩ３２ＩＢはｉＳＣＳＩソケットで受信するのに使用されるようにバッファをポストするために使用される。
【０７４６】
ＴＣＰ受信ｉＳＣＳＩ３２ＩＢの長さはこのＩＢがＤＭＡ転送に使用される随意選択的な数の転送ブロックからなるので可変である。ＴＣＰ受信ｉＳＣＳＩ３２ＩＢの転送ブロックはアドレスと転送長の対からなる。
【０７４７】
ｉＳＣＳＩ  ＣＲＣシードはＤＭＡおよびｉＳＣＳＩ  ＣＲＣ計算が開始する前にｉＳＣＳＩ  ＣＲＣエンジンをシードするために使用される。ｉＳＣＳＩ  ＣＲＣシードはｉＳＣＳＩ  ＣＲＣがリクエストされるならば、３２’ｈｆｆｆｆｆｆｆｆに設定されなければならない。ｉＳＣＳＩ  ＣＲＣがリクエストされないならば、シード値のセットは不適切である。
【０７４８】
説明：ｉＳＣＳＩ  ＣＲＣ計算が必要とされないならば、ｉＳＣＳＩ  ＣＲＣシードをゼロに設定する必要はない。
【０７４９】
ＴＣＰ受信ｉＳＣＳＩ３２ＩＢ中の各転送ブロックのアドレス長は３２ビットである。６４ビットのアドレシングでは、ＴＣＰ受信ｉＳＣＳＩ６４ＩＢが使用されなければならない。
【０７５０】
［別のｉＳＣＳＩ構成］
先の説明はｉＳＣＳＩ  ＰＤＵヘッダを組立てるためにホストコンピュータを使用するＩＴ１０Ｇの動作を詳細にしている。別の実施形態はＩＴ１０ＧハードウェアとオンチッププロセッサがｉＳＣＳＩ  ＰＤＵを組立て処理することを可能にする。この別の実施形態を次に説明する。
【０７５１】
このセクションはオンチッププロセッサの使用によるｉＳＣＳＩのハードウェアサポートを説明する。高レベルから、ハードウェアは送信されたパケットのＣＲＣおよび固定したインターバルのマーカ（ＦＩＭ）をオフロードする。受信されるデータパスでは、ＰＤＵヘッダをオンチッププロセッサまたはホストコンピュータへＤＭＡし、ＰＤＵのデータセクションをホストへＤＭＡする能力はＣＲＣチェックと共にサポートされる。これはホストコンピュータで付加的なメモリコピーを必要とせずに、ｉＳＣＳＩヘッダとデータが別々にされ、ホストコンピュータメモリにコピーされることを可能にする。
【０７５２】
［ヘッダ記憶装置（ＨＳＵ）］
送信されるｉＳＣＳＩ  ＰＤＵに対しては、オンチッププロセッサはそのメモリでパケットのヘッダを構築するように動作する。オンチッププロセッサは発生するｉＳＣＳＩ  ＰＤＵの種類を示すためにホストコンピュータからｉＳＣＳＩ命令ブロック（ＩＢ）を受信する。ＰＤＵに関連するＳＣＳＩデータが存在する場合、バッファのリンクリストもＩＢを介して与えられる。
【０７５３】
一度、オンチッププロセッサがＰＤＵヘッダを発生すると、それはオンチッププロセッサメモリからＭＴＸメモリ（送信データバッファ）へヘッダを転送するためにＨＳＵモジュールを使用する。ＨＳＵはまた必要ならばヘッダのＣＲＣも計算する。
【０７５４】
ＰＤＵに関連するＳＣＳＩデータが存在しないならば、ＨＳＵモジュールが使用可能になるとすぐに、オンチッププロセッサメモリからＭＴＸメモリへデータの転送を開始する。必要ならば、ＣＲＣもまた計算されＦＩＭは挿入される。
【０７５５】
ＰＤＵで転送されるＳＣＳＩが存在するならば、ＤＭＡの２つのモード、即ちワンショットおよびリンクリストが与えられる。リンクリストモードが使用されるならば、ＨＳＵは第１のリンクリスト（ＬＬ）エントリを検索し、ホストＤＭＡ転送をリクエストする。ＤＭＡエンジンがＨＳＵに第１の転送が終了したことを示すとき、ＨＳＵはＡＲＭメモリからＭＴＸメモリへのヘッダの転送を開始する。丁度ＤＭＡされたデータはヘッダの最後に添付される。またこの時間中に、次のＬＬエントリが検索され、ＤＭＡはリクエストされる。一度ＨＳＵがホストＤＭＡ転送を承認されると、ＬＬのすべてのエントリがサービスされるまで（少なくともＴＸ側の）ＤＭＡエンジンへのアクセスをロックする。これはＦＩＭおよびＣＲＣ論理装置がデータパスで実行することを容易にする。
【０７５６】
［ＣＲＣ計算モジュール］
このモジュールはＰＤＵヘッダとデータセクションの両者のＣＲＣ値を計算するように動作する。ＣＲＣはその後、対応するフィールドに添付される。このモジュールを供給するデータは（ヘッダデータに対しては）ＨＳＵを介してオンチッププロセッサメモリ、または（ＳＣＳＩデータに対しては）ＤＭＡ  ＴＸ  ＦＩＦＯから来ることができる。ＣＲＣ計算装置からの出力はＦＩＭモジュールに与えられる。
【０７５７】
［ＦＩＭ挿入モジュール］
このモジュールはＦＩＭをＰＤＵへ挿入するように動作する。これは初期オフセット、インターバルカウント、ＰＤＵ長をＨＳＵユニットから受信する。ＦＩＭを挿入するとき、データの何等かのリパックが必要とされよう。このモジュールの別の機能は送信されるＰＤＵの全長を決定することである。この長さはＰＤＵ＋任意のＣＲＣバイト＋任意のＦＩＭのプログラムされた長さである。この長さはその後、ＸＭＴＣＴＬモジュールへ送られ、それはＰＤＵを適切なサイズのＴＣＰパケットに分割するように動作する。
【０７５８】
［ＸＭＴＣＴＬ  Ｍｕｘ  モジュール］
このモジュールはＸＭＴＣＴＬモジュールへ入力されるデータを多重化するように動作する。データはＤＭＡ  ＴＸ  ＦＩＦＯバッファまたはＦＩＭ挿入モジュールから直接的である。いずれかのパスにより、多重化論理装置はパケットの全長を示し、また１２８ビット幅のフォーマットのデータを提供する。データはｄａｖ／ｇｒａｎｔハンドシェークを使用してＸＭＴＣＴＬモジュールヘ送られる。
【０７５９】
［ｉＳＣＳＩ受信サポート］
［概要］
ｉＳＣＳＩ受信データパスのブロック図が図５３に示されている。
【０７６０】
［ＴＣＰＲＸモジュール］
このモジュール531は受信されたＴＣＰパケットを解析するように動作する。ｉＳＣＳＩパケットが到着するとき、これは１２８バイトまたは２ＫバイトバッファでＭＲＸメモリに記憶されるので、任意の他のＴＣＰデータと同様に最初に扱われる。ソケットのＣＢのビット（ＷＯＲＤ  ０×Ｄ、ビット［３０］）はこのソケットがホストまたはオンチッププロセッサにより所有されているか否かを示す。ソケットがオンチッププロセッサにより所有されているならば、データは自動的にホストにＤＭＡされない。代りに状態メッセージが発生され、正常のネットワークスタック状態メッセージ待ち行列を介してオンチッププロセッサに送信される。
【０７６１】
［ＭＲＸメモリへのオンチッププロセッサのアクセス］
オンチッププロセッサがソケットにｉＳＣＳＩデータが受信されていることを通知されたとき、ＣＰＵアドレスとｍａｌｌｏｃｒｘレジスタセットのデータレジスタを介してＭＲＸ中のデータを読取ることができる。オンチッププロセッサはその中のヘッダから受信されたＰＤＵタイプを決定するためにＭＲＸメモリ532を主に読取っていることが予測される。オンチッププロセッサがヘッダをそのメモリへ移動することを決定したならば、これはＬＤＭＡモジュールを使用する。データをホストへＤＭＡおよびＰＤＵすることを決定したならば、ＨＤＭＡモジュール533を使用する。
【０７６２】
［ＲＸＩＳＣＳＩモジュール］
オンチッププロセッサがＭＲＸメモリからそれ自身のローカルメモリへデータを移動しようと望んでいるとき、ＲＸＩＳＣＳＩモジュールを使用する。データのＣＲＣは選択的にこの転送中にチェックされる。動作が完了するとき、割込みまたは状態メッセージが発生される。
【０７６３】
データが多数のＭＲＸバッファをスパンするならば、転送は２つのリクエストに分割されなければならない。この一例が図５４に示されている。
【０７６４】
この場合、第１の転送はＭＲＸソースアドレスとしてＡｄｄ１、転送長としてＬｅｎｇｔｈ１によりプログラムされる。ＬＡＳＴ＿ＢＬＫビットもまた第１の転送用に設定されない。動作が完了するとき、部分的なＣＲＣ結果もまた状態メッセージ中に戻される。オンチッププロセッサはその後、ローカルＤＭＡ（ＬＤＡＭ）をＡｄｄ２およびＬｅｎｇｔｈ２によりプログラムし、ヘッダ転送を終了するようにＬＡＳＴ＿＿ＢＬＫビットを設定する。動作が連続しているならば、ＣＲＣシードはプログラムされる必要はない。そうでなければ、状態メッセージ中に戻されたＣＲＣの部分的結果は第２の転送のためにＣＲＣシードとしてプログラムされるべきではない。ＣＲＣバイトだけが第２のバッファに残留する場合、長さ０の転送は使用可能になったＣＲＣチェックで使用されるべきである。
【０７６５】
［オンチッププロセッサで開始されたＨＤＭＡ］
オンチッププロセッサが受信されたＳＣＳＩデータをホストへ送信しようと望むとき、それはホストＤＭＡ（ＨＤＭＡ）エンジンを転送長と共にＭＲＸおよびホストメモリの両方に開始アドレスでプログラムする。代りに、オンチッププロセッサはバッファのリンクリストが位置されるそのメモリ中の位置を特定できる。
【０７６６】
リンクリストは２５５までのエントリを含むことができる。ＤＭＡ転送中、ＨＤＭＡモジュールはＣＲＣ値をチェックするように随意選択的にプログラムされることができる。このオプションが使用可能になるならば、ＤＭＡ転送長はＣＲＣバイトを含んではならない。また、ＣＲＣチェックがリクエストされるとき、随意選択的なＣＲＣ開始シードはプログラムされることができる。
【０７６７】
ＳＣＳＩデータが多数のＭＲＸバッファを横切って分割されるならば、ホストへのＤＭＡ転送は別々のリクエストに分割されなければならない。この状態は図５５に示されている。
【０７６８】
この場合、ＨＤＭＡは最初に開始ＭＲＸメモリアドレスとしてのＡｄｄ１と、転送長としてのＬｅｎｇｔｈ１とでプログラムされなければならない。Ｌａｓｔ＿Ｈｏｓｔ＿Ｂｌｋビットはまた第１の転送用に設定されてはならない。ＤＭＡ動作が完了するとき、状態メッセージが発生される。ＣＲＣチェックもまたリクエストされるならば、状態メッセージはまた部分的なチェックサム値を戻す。オンチッププロセッサはその後、ＨＤＭＡエンジンをＡｄｄ２およびＬｅｎｇｔｈ２によってプログラムし、データ転送を終了するようにＬＡＳＴ＿Ｈｏｓｔ＿Ｂｌｋビットを設定する。これらの２つの転送が連続しているならば、ＣＲＣシード値はプログラムされる必要はない。そうでなければ、状態メッセージ中で戻される部分的なＣＲＣの結果は第２のＤＭＡ転送リクエストの一部としてプログラムされる。ＣＲＣバイトだけが第２のバッファに残る場合、長さ＝０とＣＲＣ＿Ｅｎ＝１の転送が使用されなければならない。
【０７６９】
［オンチッププロセッサのＭＲＸバッファの解放］
オンチッププロセッサが所有するソケットでは、オンチッププロセッサはもはや使用されないＭＲＸバッファをＭＲＸバッファの割当て解除装置へ解放するように動作する。これはＭＲＸ＿１２８＿Ｂｌｏｃｋ＿ＡｄｄまたはＭＲＸ＿２Ｋ＿Ｂｌｏｃｋ＿Ａｄｄレジスタへ解放されるブロックに対するベースアドレスを書込み、その後、解放コマンドを対応するＭＲＸ＿Ｂｌｏｃｋ＿Ｃｏｍｍａｎｄレジスタへ発生することによってこれを行う。
【０７７０】
［ＩＰＳｅｃサポートアーキテクチャ］
［概要］
以下の説明は、ＩＰＳＥＣに対してハードウェアで実行されるサポートの詳細である。この構成はプロトコルの暗号化、暗号解読、認証機能のコンピュータ特性を処理するために別々のモジュールを仮定し、これらの特性のすべてはよく知られ理解されている。構成はまたＩＫＥのようなよく知られよく理解され使用されている任意のキー交換プロトコルがホストコンピュータでアプリケーションとして処理されることも仮定している。勿論、キー交換機能を一体化することも可能である。
【０７７１】
この説明はＩＰＳＥＣサポートを送信および受信セクションに分割する。これは共通のセキュリティ関連（ＳＡ）ブロックを共用する以外に、２つのモジュールが相互に独立して動作するので、行われる。
【０７７２】
ＩＰＳｅｃ特性：
・ＳＡ毎のアンチリプレイサポート、
・ゼロ、ＤＥＳ、３ＤＥＳアルゴリズムと、暗号ブロック連鎖（ＣＢＣ）モードにおけるＡＥＳの１２８ビットアルゴリズム、
・ゼロ、ＳＨＡ−１、ＭＤ−５認証アルゴリズム、
・１９２ビットまでの可変長暗号化キー、
・１６０ビットまでの可変長認証キー、
・Ｊｕｍｂｏフレームサポート、
・時間および転送される総データに基づいたＳＡ満了の自動処理、
・ＩＰｓｅｃポリシー施行、
・例外パケットの生成と状態通知とを含むＩＰｓｅｃ例外処理。
【０７７３】
ＩＰｓｅｃプロトコルおよびモード：
・転送ＡＨ、
・転送ＥＳＰ、
・転送ＥＳＰ＋ＡＨ、
・トンネルＡＨ、
・トンネルＥＳＰ、
・トンネルＥＳＰ＋ＡＨ、
・転送ＡＨ＋トンネルＡＨ、
・転送ＡＨ＋トンネルＥＳＰ、
・転送ＡＨ＋トンネルＥＳＰ＋ＡＨ、
・転送ＥＳＰ＋トンネルＡＨ、
・転送ＥＳＰ＋トンネルＥＳＰ、
・転送ＥＳＰ＋トンネルＥＳＰ＋ＡＨ、
・転送ＥＳＰ＋ＡＨ＋トンネルＡＨ、
・転送ＥＳＰ＋ＡＨ＋トンネルＥＳＰ、
・転送ＥＳＰ＋ＡＨ＋トンネルＥＳＰ＋ＡＨ。
【０７７４】
［セキュリティ関連ブロックフォーマット（ＳＡ）］
専用のメモリ構造は各ＩＰＳＥＣ接続における情報を記憶するために使用される。ＡＨとＥＳＰプロトコル、およびＲＸとＴＸ  ＳＡの両者（ＲＸ  ＳＡのカバーデータは受信されＴＸ  ＳＡのカバーデータは送信される）に対しては別々のブロックが存在する。それ故、データの送信および受信の両者のためにＡＨおよびＥＳＰの両者を使用するソケット接続は多数のＳＡブロックを必要とする。ＡＨは１ＳＡブロックを必要とし、ＥＳＰは２つのブロック（ＥＳＰ−１とＥＳＰ−２）を必要とする。秘密保護されるソケット接続の総数はＳＡブロックに対して与えられたメモリの総量にしたがう。
【０７７５】
Ｔｘデータパスは単一の転送でトンネルおよび転送モードをサポートできる。最悪の場合のシナリオでは、ＡＨとＥＳＰの両者がトンネルおよび転送モードの両者で使用されるならば、６つのＳＡブロックが共に連結されることができる。送信されるデータに対しては、ソケットＣＢはトンネル／転送ＴＸ  ＡＨまたはトンネル／転送ＴＸ  ＥＳＰ−１  ＳＡへのポインタを含んでいる。両プロトコルが送信されるデータで使用される場合には、ＣＢはＴＸ  ＡＨ  ＳＡへのリンクを含み、これはＴＸ  ＥＳＰ−１  ＳＡへのリンクを含んでいる。
【０７７６】
Ｒｘデータパスは単一の転送でＡＨとＥＳＰ解読をサポートしない。Ｒｘデータパスは単一の転送でトンネルおよび転送モードをサポートしない。暗号化されたパケットは反復して解読される。受信されたデータでは、ＲＸ＿ＳＡ＿ＬＵＴはＲＸ  ＡＨまたはＴＸ  ＥＳＰ−１  ＳＡへのポインタを含んでいる。
【０７７７】
図５６はＳＡブロックフローを示している。
【０７７８】
［クライアントソケットの生成］
アプリケーションがＩＰＳＥＣ保護されたクライアントソケットを生成する必要があるとき、以下のシーケンスを実行しなければならない。
・すべての応用可能なＳＡパラメータをＩＰＳＥＣ  ＳＡ特定レジスタへ書込む。これは多数の書込みコマンドの発生を必要とする。ＳＡハンドルはＲＸ  ＳＡ  ＬＵＴへ挿入される。
・ＩＰＳＥＣは新しいＳＡハンドルを戻す。
・このＳＡハンドルをソケット特定レジスタへ書込む。
・ソケット構造２レジスタのＩＰＳＥＣビットの設定を含んだすべての応用可能なソケットパラメータをＣＰソケット特定レジスタへ書込む。
・ｃｏｍｍｉｔ＿ｓｏｃｋｅｔコマンドを発生する。
【０７７９】
ＴＸ  ＳＡへのリンクはオープンＣＢに記憶されている。ソケットは現在使用する準備が整っている。
【０７８０】
［サーバソケットのＳＡ生成］
アプリケーションがＩＰＳＥＣ保護されたサーバソケットを生成する必要があるときには、以下のシーケンスを実行しなければならない。
・すべての応用可能なＳＡパラメータをＩＰＳＥＣ  ＳＡ特定レジスタへ書込む。これは多数の書込みコマンドの発生を必要とする。ＳＡハンドルはＲＸ  ＳＡ  ＬＵＴ中へ挿入される。
・ＩＰＳＥＣは新しいＳＡハンドルを戻す。
・このＳＡハンドルをソケット特定レジスタへ書込む。
・ソケット構造２レジスタのＩＰＳＥＣビットの設定を含んだすべての応用可能なソケットパラメータをＣＰソケット特定レジスタへ書込む。
・ｃｏｍｍｉｔ＿ｓｏｃｋｅｔコマンドを発生する。
【０７８１】
コミットソケットコマンドは、サーバポート情報テーブルエントリの生成に加えて、ＨＯ  ＣＢも生成する。ＨＯ  ＣＢはその中にＩＰＳＥＣビットセットを有する。このビットはＨＯ  ＣＢが同一のＨＡＳＨへ偶然に復号する別の入来するＳＹＮにより再使用されないようにする。ＴＸ  ＳＡハンドルはＨＯ  ＣＢ中に記憶される。ソケットは現在使用の準備が整っている。
【０７８２】
注意：この場合、前述したように、ＨＯ  ＣＢは同一のＨＡＳＨを有するＳＹＮが受信されるときに重ね書きされない。ＨＯ  ＣＢはソケットが設定された状態に転移されオープンＣＢが生成されるときにデプリケートされる。しかしながら、ソケットが設定された状態に到達できなかった場合、ホストはＨＯ  ＣＢをマニュアルでデプリケートするように動作する。これはＨＯ  ＣＢハンドルをＨＯ＿ＣＢハンドルレジスタに入力し、その後Ｄｅｐｒｅｃａｔｅ＿ＨＯＣＢコマンドを発生することによりこれを行う。この状態のホストは関連するＳＡブロックをデプリケートしなければならない。
【０７８３】
［ＳＡ連結］
ＳＡブロックはリンク有効ビットとリンクフィールドとを有し、これは別のＳＡを指している。ＣＰＵは必要ならば、多数のＳＡをリンクするためにこのフィールドを使用できる。ＣＰＵはＳＡブロックを連結するために以下のシーケンスを実行しなければならない。
・連結されるＳＡブロックによりＳＡ＿Ｌｉｎｋレジスタを構成する。
・ＣＦＧ１レジスタにＬｉｎｋ＿Ｖａｌビットを設定する。
・連結されるＳＡブロックによりＳＡ＿Ｈａｎｄｌｅレジスタを構成する。
・“更新ＳＡ”コマンドを発生する。
【０７８４】
［ＳＡデプリケーション／割当て解除］
ＴｘまたはＲｘ  ＳＡブロックはＣＢがデプリケートされるときに自動的にデプリケートされるのではない。ＣＰＵは使用されていないＳＡブロックの追跡を維持してこれらのＳＡブロックをデプリケート／割当て解除するための“ＳＡ無効化”コマンドを発生する。
【０７８５】
ＳＡが満了するとき、ＨＷはマスクされていないならば、割込みを発生する。満了されたＳＡブロックはメモリから割当てを解除されない。この事象はまた満了されたＳＡのＳＡハンドルを含んでいる状態メッセージを発生する。ＣＰＵこのＳＡを更新するためにこのハンドルを使用でき、またはＣＰＵはそのＳＡブロックをデプリケート／割当て解除するための“ＳＡ無効化”コマンドを発生できる。
【０７８６】
［ＴＸ  ＡＨ転送ＳＡブロックフォーマット］
図５７はＴＸ  ＡＨ転送ＳＡブロックフォーマットを示している。
【０７８７】
［ＴＸ  ＥＳＰ−１転送ＳＡブロックフォーマット］
図５８はＴＸ  ＥＳＰ−１転送ＳＡブロックフォーマットを示している。
【０７８８】
［ＴＸ  ＥＳＰ−２転送ＳＡブロックフォーマット］
図５９はＴＸ  ＥＳＰ−２転送ＳＡブロックフォーマットを示している。
【０７８９】
［ＴＸ  ＡＨトンネルＳＡブロックフォーマット］
図６０はＴＸ  ＡＨトンネルＳＡブロックフォーマットを示している。
【０７９０】
［ＴＸ  ＥＳＰ−１トンネルＳＡブロックフォーマット］
図６１はＴＸ  ＥＳＰ−１トンネルＳＡブロックフォーマットを示している。
【０７９１】
［ＴＸ  ＥＳＰ−２トンネルＳＡブロックフォーマット］
図６２はＴＸ  ＥＳＰ−２トンネルＳＡブロックフォーマットを示している。
【０７９２】
［ＲＸ  ＡＨ  ＳＡブロックフォーマット］
図６３はＲＸ  ＡＨ  ＳＡブロックフォーマットを示している。
【０７９３】
［ＲＸ  ＥＳＰ−１  ＳＡブロックフォーマット］
図６４はＲＸ  ＥＳＰ−１  ＳＡブロックフォーマットを示している。
【０７９４】
［ＲＸ  ＥＳＰ−２  ＳＡブロックフォーマット］
図６５はＲＸ  ＥＳＰ−２  ＳＡブロックフォーマットを示している。
【０７９５】
［セキュリティ関連ブロックフィールドの定義］
［ＳＡタイプ］
これらのビットはブロックが表すＳＡブロックのタイプを特定するために使用され、診断サポートのために与えられる。復号は以下の表で示されている。
【表２６】
2010063110.tif 000028
【０７９６】
上記の表に示されていないすべての他の復号は将来使用するために保留されている。
【０７９７】
［ＳＡバージョン］
これらのビットはＳＡのバージョン数を特定し、診断目的用に与えられる。すべてのＳＡブロックタイプの現在のバージョンは０×１である。
【０７９８】
［ＸＶ、ＲＶ（有効な送信／受信ＳＡ）］
これらのビットはＳＡブロックが有効であり使用されることができることを示している。
【０７９９】
［ＸＡ、ＲＡ（エネーブルな送信／受信認証）］
これらのビットは認証がこのプロトコルに対して使用可能になり、このソケットのパケットで使用されるべきであることを示している。対応する認証アルゴリズムおよびキーフィールドもまた有効である。ＴＸ／ＲＸ  ＡＨ  ＳＡでは、このビットは常に設定されるべきである。ＴＸ／ＲＸ  ＥＳＰ  ＳＡでは、これは随意選択的である。
【０８００】
［ＸＡ＿ＡＬＧ、ＲＡ＿ＡＬＧ（送信／受信認証アルゴリズム）］
これらのビットは認証に使用されるアルゴリズムを示している。可能な選択肢が以下の表にリストされている。
【表２７】
2010063110.tif 000029
【０８０１】
示されていないすべての復号は将来使用するために保留されている。
【０８０２】
［ＸＥ、ＲＥ（送信／受信暗号化エネーブル）］
これらのビットは暗号化がこのソケットのパケットに対して使用されるべきであり、暗号化キーおよび暗号化アルゴリズムフィールドが有効であることを示している。このビットはＴＸ／ＲＸ  ＥＳＰ  ＳＡに対してのみ規定されている。
【０８０３】
［ＸＥ＿ＡＬＧ、ＲＥ＿ＡＬＧ（送信／受信アルゴリズム）］
これらのビットは暗号化に使用されるアルゴリズムを示している。可能な選択肢が以下の表にリストされている。
【表２８】
2010063110.tif 000030
【０８０４】
示されていないすべての他の復号は将来使用するために保留されている。
【０８０５】
［ＲＡＲ（受信アンチリプレイエネーブル）］
このビットはアンチリプレイアルゴリズムが受信されたパケットで使用されるべきであることを示している。
【０８０６】
［ＸＴＶ、ＲＴＶ（送信／受信タイムスタンプ有効）］
これらのビットはタイムスタンプフィールドがＳＡで有効であり、タイムスタンプが満了するとき、ＳＡブロックは古いと考えられるべきであることを示している。
【０８０７】
［ＸＢＶ、ＲＢＶ（送信／受信バイトカウント有効）］
これらのビットはバイトカウント限定フィールドがＳＡで有効であり、バイトカウントがこの値に到達するとき、そのＳＡブロックが古いと考えられるべきであることを示している。
【０８０８】
［ＸＳＶ、ＲＳＶ（送信／受信シーケンス限定有効）］
これらのビットはシーケンス番号フィールドが０×ＦＦＦＦＦＦＦＦをラップするとき、ＳＡブロックは古いと考えられるべきであることを示している。
【０８０９】
注意：ｘＴＶ、ｘＢＶまたはｘＳＶビットがすべて設定されないならば、ＳＡブロックは永続的であると判断され、決して満了しない。
【０８１０】
［ＲＤＣ（受信目的地ＩＰチェックエネーブル）］
このビットは任意のパケットの目的地ＩＰアドレスがこのＳＡの目的地ＩＰアドレスフィールドに一致しなければならないことを示している。
【０８１１】
［ＲＳＣ（受信ＳＰＩチェックエネーブル）］
このビットはＩＰＳＥＣヘッダのＳＰＩフィールドがこのＳＡの目的地ＩＰアドレスフィールドに一致しなければならないことを示している。
【０８１２】
［ＲＴＲ（到達した／ディスエーブルされた受信タイムスタンプの透かし限定）］
このビットが設定されないならば、タイムスタンプの透かしチェックが行われることができる。これが状態メッセージを発生するとき、さらに透かし状態メッセージが送信されないようにこのビットが設定される。
【０８１３】
［ＬＶ（リンク有効）］
このビットはＳＡブロックがこのＳＡにリンクされていることを示している。このビットが有効であるとき、リンクフィールドは次のＳＡブロックのＳＡハンドルを含んでいる。
【０８１４】
［ＳＰＩ番号］
これはプロトコルに関連するＳＰＩである。ＴＸ  ＳＡでは、このＳＰＩはプロトコルヘッダに含まれている。ＲＸ  ＳＡでは、このＳＰＩは受信されたデータパケットの対応するフィールドに対して比較される。
【０８１５】
［シーケンス番号］
これはプロトコルに関連するシーケンス番号である。ＡＨとＥＳＰ  ＳＡは異なる次官に満了するので、シーケンス番号は２つのプロトコル間で異なっている。ＴＸ  ＳＡでは、このシーケンス番号は、ＳＡが生成され、ＳＡブロックを使用して送信される各パケットに対して１だけインクリメントされるときに０×００００００００にリセットされる。受信されたパケットでは、このフィールドはソケットで受信される最後のシーケンス番号を表し、パケットリプレイでチェックするために使用される。
【０８１６】
［認証キー］
このパラメータはプロトコルの認証に使用されるキーである。キーが１６０ビットよりも小さいならば、ｌｓｂ正しいとされるべきである。
【０８１７】
［暗号化キー］
このパラメータはＩＰＳＥＣパケットの暗号化に使用されるキーであり、ＴＸ／ＲＸ  ＥＳＰ  ＳＡに対してのみ規定される。１９２ビットよりも小さいビットを使用するアルゴリズムでは、キーはｌｓｂ正しいとされるべきである。
【０８１８】
［タイムスタンプ］
これはＳＡブロックが古いと考えられるときの将来のタイムスタンプである。ＳＡが生成されるときに初期化される。パケットが送出または受信されるとき、現在の自由動作するミリ秒のタイムスタンプはこの時間と比較される。時間がこのタイムスタンプに一致するかそれ以上であるならば、ＳＡブロックは古いと考えられる。
【０８１９】
［バイトカウント］
このパラメータはＳＡが初期化されるときに設定される。ＳＡブロックを使用して送出されることのできる最大のバイト数を決定する。ＨＷはこれをカウンタをデクリメントカウンタに対する初期番号として使用する。パケットがこのＳＡで送信または受信されるときに、ＨＷがこのバイトカウントをデクリメントする。バイトカウントがゼロに達するとき、ＳＡは古いと考えられる。この限度が使用されるならば、ｘＢＶビットは設定されるべきである。
【０８２０】
［リンク］
このフィールドはソケットに関連される次のＳＡブロックを指している。
【０８２１】
［ＩＰｓｅｃモジュール］
ＩＰｓｅｃは以下の４つの主なモジュールに分割される。
・ＩＰＳＥＣＸ、
・ＩＰＳＥＣＲ、
・ＩＰＳＥＣＲＥＧＳ、
・ＩＰＳＥＣメモリ。
【０８２２】
ＩＰＳＥＣＸはＩＰＳＥＣの送信データパス論理を含んでいる。データおよび制御パケットは最初に内部ＩＰＳＥＣＸメモリに転送される。暗号化エンジンはこれらのパケットを読取り、これらを暗号化し、これらのパケットをＩＰＳＥＣＸメモリへ書戻す。これらのパケットはその後、送信するためにイーサネット（登録商標）送信機へ転送される。
【０８２３】
ＩＰＳＥＣＲはＩＰＳＥＣの受信データパス論理を含んでいる。任意の入来するパケットはＩＰＳＥＣタイプのパケットに対して解析される。パケットがＩＰＳＥＣパケットであるならば、内部ＩＰＳＥＣＲメモリに転送される。解読エンジンはこれらのパケットを解読し、このパケットをＩＰＳＥＣＲメモリへ書戻す。このパケットは読取られ、ネットワークスタックに注入して戻される。このとき、このパケットは解読されるので、パーサはＩＰＳＥＣパケットとして識別せず、これは正常なＴＣＰ／ＩＰパケットとして識別される。
【０８２４】
ＩＰＳＥＣＲＥＧＳはＣＰＵに対するプログラム可能なレジスタを含んでいる。これらのレジスタのプログラミングにより、ＣＰＵはＳＡを生成し、更新または消去する。このモジュールは診断の目的で、間接的なメモリアクセスを内部メモリに対して行う。
【０８２５】
ＩＰＳＥＣは以下の図に示されているように２つのＳＲＡＭを使用する。両者のメモリは９ＫＢサイズのパケットを保持できる。ＩＰＳＥＣメモリサイズを以下示す。
・ＩＰＳＥＣＸメモリ：５９２×３２ビット×４デュアルポート（９４７２バイト）、
・ＩＰＳＥＣＲメモリ：１１６８×３２ビット×２デュアルポート（９３４４バイト）。
【０８２６】
図６６はＩＰＳＥＣ論理装置の全体的なフローを示すブロック図である。
【０８２７】
［ＩＰＳＥＣ送信データパス（ＩＰＳＥＣＸ）］
［概要］
以下の説明は送信ＩＰＳＥＣデータパスの詳細である。ＩＰＳＥＣ暗号化／認証エンジンはそれが呼び出される前に行われるパケットで動作する。データフローを概説するブロック図は図６７に示されている。
【０８２８】
［ＩＰＳＥＣ送信されたパケットのデータフロー］
［ＴＸＤＡＴＣＢ／ＴＣＰＡＣＫ］
ＩＰＳＥＣ保護されたソケットに対する送信データは最初に通常のソケットと同一方法でＭＴＸ  ＤＲＡＭ671に記憶される。ＴＸＤＡＴＣＢ／ＴＣＰＡＣＫモジュール672はパケットに対するイーサネット（登録商標）、ＩＰ、ＴＣＰ、任意のＩＰＳＥＣヘッダを形成するように動作する。このモジュールはいずれのヘッダか、および必要とされるヘッダのフォーマットを決定するために適切なＳＡブロックから情報を読取る。各ソケットはそれに関連するＣＢ構造を有する。ＣＢは各ソケットの古い情報を含んでいる。ＣＢ構造内に、使用されるＳＡブロックのポインタが存在する。多数のＳＡブロックを必要とするソケットでは、そのＣＢはすべてのＡＨおよびＥＳＰ１  ＳＡブロックへのポインタを含んでいる。
【０８２９】
ＴＸＤＡＴＣＢ／ＴＣＰＡＣＫモジュールはパケットのヘッダをＭＴＸ  ＤＲＡＭ中のバッファに書込む。パケットがＩＰＳＥＣ処理を必要とすることが分かると、ＴＸＤＡＴＣＢ／ＴＣＰＡＣＫモジュールは処理する準備が整ったパケットが存在することをＩＰＳＥＣＸＩＦモジュール673に通知する。ヘッダ発生プロセスの開始時に、ＴＸＤＡＴＣＢ／ＴＣＰＡＣＫモジュールがＩＰＳＥＣＸＩＦブロックが満杯であることに気づいたならば、後に処理するために送信待ち行列にパケットを戻す。
【０８３０】
［ＴＣＰＡＣＫ］
データパケットに加えて、ＴＣＰユーティリティパケット（ＡＣＫ、ＳＹＮ、ＦＩＮ）もまた暗号化されることができる。これらのパケットはＴＣＰＡＣＫモジュールから来る。図６７の前述のデータパスには示されていないが、このモジュールもまたＣＢとＳＡメモリをアクセスした。
【０８３１】
注意：ローカルソケットが利用可能ではないために発生されたＲＳＴパケットはＩＰＳＥＣ保護されない。保護される唯一のＲＳＴは打切り終結に使用されるかまたはＳＹＮに応答して受信された違法のＳＹＮ／ＡＣＫに応答するパケットである。これらの両者のＲＳＴパケットは通常のＲＳＴパケット待ち行列ではなくＴＣＰＡＣＫモジュールにより形成される。
【０８３２】
［ＩＰＳＥＣＸＩＦ］
このモジュールはパケットを（ＴＣＰＤＡＴＣＢを介して）ＭＴＸ  ＤＲＡＭまたはＴＣＰＡＣＫからＩＰＳＥＣＸ内部メモリへ転送するように動作する。この内部メモリは５７６×１２８ビットとして組織される。ＴＸＤＡＴＣＢまたはＴＣＰＡＣＫからパケットを得たとき、このモジュールはデータをＩＰＳＥＣメモリへ転送し始める。これはＳＡに適用可能な情報を暗号化エンジンに送るためにそれをＳＡレジスタからも獲得する。読取ポインタはこのモジュールがＩＰＳＥＣＸメモリ内の現在のパケットを重ね書きしないようにするためにＩＰＳＥＣＴＸからフィードバックされる。
【０８３３】
［暗号化／認証エンジン］
このモジュール674は暗号化および認証をパケットに付加するように動作する。これはＩＰＳＥＣＸＩＦモジュールにより提供されたパラメータを取り、ＩＰＳＥＣＸメモリ675に記憶されているパケットを処理する。認証と暗号化の両者がパケットで必要とされるならば、このモジュールはパケットをＩＰＳＥＣＴＸモジュールへ転送する前の両特性前であると仮定される。暗号化されたデータはソースパケットと同一メモリ位置に書込まれるべきである。処理が終了するとき、完了したパケットが送信の準備が整っていることをＩＰＳＥＣＴＸモジュールに通報する。暗号化エンジンはｄｒａｍ＿ｃｌｋドメインで全体的に動作する。
【０８３４】
このモジュールは２つの並列した同一の暗号化エンジンからなる。この場合、これらは交互の順序でサービスされる。またｅｎｃｒｙｐｔ＿ｒｄｙインジケータがＩＰＳＥＣＴＸに送信されるとき、与えられるパケットはこれらが暗号化エンジンに与えられたのと同じ順序でなければならない。
【０８３５】
［ＩＰＳＥＣＴＸ］
このモジュール676は処理されたパケットを暗号化エンジンから取出し、送信するためにこれをスケジュールするように動作する。準備完了指示を暗号化エンジンから受けたとき、開始アドレスおよびパケット長情報を登録する。その後、送信リクエストをイーサネット（登録商標）送信アービトレータへ送信する。イーサネット（登録商標）送信アービトレータはＩＰＳＥＣＸメモリから直接的にパケット情報を読取り、これをＭＡＣの送信バッファへ送信する。パケット全体が読出されるとき、これはｉｐｓｅｃｔｘ＿ｄｏｎｅをストローブする。この指示を受信するとき、ＩＰＳＥＣＴＸモジュールはそのｉｐｓｅｃｔｘ＿ｒｄ＿ａｄｄを更新する。このバスはさらに多くのメモリがフリーにされていることを示すためにＩＰＳＥＣＸＩＦに戻される。
【０８３６】
［ＩＰＳＥＣＸメモリアービトレータ（ＩＰＳＥＣＸ  ＭＥＭＡＲＢ）］
このモジュール677はＩＰＳＥＣＸメモリバンクへのアクセスを調停するように動作する。このモジュールはｄｒａｍ＿ｃｌｋドメインで動作する。
【０８３７】
［ＩＰＳＥＣＸメモリインターフェース（ＩＰＳＥＣＸ  ＭＥＭＩＦ）］
このモジュール678はインターフェースをデュアルポートＲＡＭへ提供する。このモジュールはＳＲＡＭと、ＲＡＭをアクセスするその他の論理装置との間を結合する。このモジュールはＲＡＭモデルが変更されるときに変更する必要がある。このモジュールはｄｒａｍ＿ｃｌｋドメインで全体的に動作する。
【０８３８】
［ＩＰＳＥＣ受信データパス（ＩＰＳＥＣＲ）］
［概要］
図６８のブロック図は受信されたＩＰＳＥＣパケットのデータパスフローを示している。これは以下の説明の基礎を形勢する。
【０８３９】
［ＩＰＳＥＣ受信されたパケットのデータフロー］
［ＩＰＩＮ］
ＩＰＳＥＣ保護されたソケットの受信されたデータは最初にＩＰＩＮモジュール687で解析される。最も外部のＩＰヘッダ内には次のヘッダのプロトコルタイプを示すプロトコルフィールドが存在する。プロトコルが０×５０（ＥＳＰ）または０×５１（ＡＨ）であることを検出するならば、ＩＰＳＥＣＲＩＦモジュールに対して最も外部のＩＰヘッダを含んだパケットを完了する。
【０８４０】
受信されたパケットが断片化されているならば、これは任意の他の断片化されたＩＰパケットのように扱われ、例外プロセッサに送信される。パケットが完全であるとき、ＩＰＩＮＡＲＢモジュール682を介してＩＰスタックの下部に再度注入される。
【０８４１】
［ＩＰＳＥＣＲＩＦ］
ＩＰＩＮがＩＰＳＥＣパケットが受信されたことをこのモジュール683に示すとき、そのパケットをＩＰＳＥＣＲメモリ684に記憶し始める。パケットはヘッダから記憶され始めて、そのすぐ後に最も外部のＩＰヘッダが記憶される。ＩＰＳＥＣＲＩＦモジュールも正確なＲＸ  ＳＡブロックを発見するようにＬＵＴ発見を行うためにＳＰＩ、ソースＩＰアドレス、ＡＨ／ＥＳＰ設定を解析する。ＬＵＴ値を獲得するとき、ＳＡブロックを読取り、そのパラメータが受信されたパケットのパラメータに一致するかを検査する。それらが一致するならば、適切なＳＡを有することになる。一致しないならば、パケットはドロップされ、事象は記録される。
【０８４２】
正確なＳＡブロックが発見されるとき、受信ＳＡパラメータが読取られ記憶される。アンチリプレイ特性がこのＳＡに対して使用可能になるならば、シーケンス番号はそれが有効であるか否かを見るためにチェックされる。これが良好ならば、ＳＡパラメータはパケットのＩＰＳＥＣＲメモリ中の開始メモリアドレスと共に、解読モジュール685へ転送される。シーケンス番号が有効ではないならば、パケットはドロップされ事象は記録される。しかしながらシーケンス番号とシーケンスビットマップはこのときには更新されない。この点でアンチリプレイチェックを行う目的は不良なパケットが不必要に解読され認証されることを防止するためである。アンチリプレイ更新はパケットが認証された後にＩＰＳＥＣＲＸモジュール686中で処理される。
【０８４３】
［暗号化／認証］
このモジュール685はＩＰＳＥＣパケットを解読し認証するように動作する。パケットが利用可能であるとき、ＩＰＳＥＣＲＩＦモジュールはｉｐｓｅｃｒｉｆ＿ｒｄｙ信号を主張することによりこれを解読エンジンへ示す。ＩＰＳＥＣＲＩＦモジュールはまたパケットの開始アドレスを提供する。パケットが認証に失敗したならば、これは破棄され、事象が記録される。認証にパスするならば、パケットは必要ならば解読される。解読されたパケットはもとのパケットと同一のＩＰＳＥＣＲメモリ位置へ書き戻される。解読エンジンはその後、ｄｅｃｒｙｐｔ＿ｒｄｙを主張することによりパケットが受信される準備が整っていることをＩＰＳＥＣＲＸモジュールへ示す。パケットが認証と解読の両者を必要とするならば、両機能がＩＰＳＥＣＲＸモジュールへパケットをオフする処理を行う前に完了されることが仮定される。
【０８４４】
このモジュールは２つの並列した同一の解読エンジンからなる。この場合、それらは交互の順序でサービスされる。またｄｅｃｒｙｐｔ＿ｒｄｙインジケータがＩＰＳＥＣＲＸに送信されるとき、与えられたパケットはこれらが解読エンジンに与えられたのと同一の順序でなければならない。
【０８４５】
注意：解読／認証エンジンはＤＲＡＭクロックから外れて動作する。
【０８４６】
［ＩＰＳＥＣＲＸ］
このモジュール686は解読／認証されたパケットを取り、それをスタックに再度注入するように動作する。トンネルモードパケットでは、処理されたパケットはＩＰＩＮＡＲＢを介して直接的に注入して戻されることができる。転送モードパケットでは、ＩＰヘッダが生成され、パケットの開始にプリペンドされる。これを行うことにより、すべてのパケットに対するＩＰＩＮの内部のＴＣＰチェックサムとインターフェース論理装置を再使用することが可能である。
【０８４７】
このモジュールはまたパケットの受信ＳＡブロックを更新するように動作する。ＳＡに対する新しいシーケンス番号とビットマップはＳＡハンドルと共に解読エンジンからこのモジュールに転送される。このモジュールは受信されたタイムスタンプおよびバイトカウントを更新する。これは任意のパラメータがそれらの限度に到達していることを発見するならば、ＳＡは無効にされ、状態メッセージは例外プロセッサに送られる。
【０８４８】
［ＩＰＳＥＣＲメモリアービトレータ（ＩＰＳＥＣＲＭＲＭＡＲＢ）］
このモジュール687はＩＰＳＥＣＲメモリバンクへのアクセスを調停するように動作する。このモジュールはｄｒａｍ＿ｃｌｋドメインで動作する。
【０８４９】
［ＩＰＳＥＣＲメモリインターフェース（ＩＰＳＥＣＲ  ＭＥＭＩＦ）］
このモジュールはインターフェースをデュアルポートＲＡＭへ提供する。このモジュールはＳＲＡＭと、ＲＡＭをアクセスするその他の論理装置との間を結合する。このモジュールはＲＡＭモデルが変更されるときに変更する必要がある。このモジュールはｄｒａｍ＿ｃｌｋドメインで全体的に動作する。
【０８５０】
［ＩＰＳＥＣ  ＬＵＴ］
このＬＵＴは１７ビットにより１２８Ｋとして組織される。各ワードは１６ビットのＳＡハンドルと１ビットの有効なインジケータから構成される。物理的にＬＵＴはＭＴＸ  ＤＲＡＭバンク内に含まれる。
【０８５１】
［ＩＰＡＲＢ］
このモジュールはイーサネット（登録商標）入力パーサおよびＩＰＳＥＣＲＸから来るトラフィックを調停する。
【０８５２】
［ＩＰＳＥＣアンチリプレイアルゴリズム］
これはアンチリプレイチェックの検査に使用されるアルゴリズムである。このアルゴリズムは最後の３２のシーケンス番号をチェックするために３２ビットウィンドウを使用する。ビットマップのｍｓｂは最も古いシーケンス番号を表し、ｌｓｂは現在のシーケンス番号を表している。このアルゴリズムはＡＨとＥＳＰプロトコルの両者に対して使用される。
【０８５３】
ＬＡＳＴ＿ＳＥＱ：最後に受信されたシーケンス番号。これはＳＡブロックに記憶される。
ＳＥＱ：受信されたパケットのシーケンス番号。
ＢＩＴＭＡＰ：最後の３２の逐次的なシーケンス番号を表す３２ビットのビットマップ。
【０８５４】
図６９はＩＰＳＥＣアンチリプレイアルゴリズムを示すフロー図である。
【０８５５】
［ＩＰＳＥＣレジスタ（ＩＰＳＥＣＲＥＧＳ）］
［概要］
このモジュールはＣＰＵに対するインターフェースを提供し、プログラム可能なレジスタを含んでいる。このモジュールもまたＣＰＵが適切なコマンドを発生するときにＳＡを生成し、更新し、または無効にする。これは診断の目的で以下のメモリへの間接的なアクセスを行う。
・ＩＰＳＥＣＸ、
・ＩＰＳＥＣＲ、
・ＲＸ  ＳＡ  ＬＵＴ、
・ＳＡブロック。
【０８５６】
［ＩＰＳＥＣ  ＳＡ状態メッセージ］］
受信および送信ＳＡブロックの両者では、ブロックが無効になるときにはいつでも状態メッセージがオンチッププロセッサに対して発生される。シーケンス番号が０×ＦＦＦＦに到達することにより、またはタイムスタンプ或いはバイトカウントがそれらの限度に到達することにより、ブロックは無効になる可能性がある。
【０８５７】
［ＤＲＡＭインターフェースに対するＳＡブロックおよびデータフロー］
［概要］
以下の説明はＮＳ  ＤＤＲ調停モジュールを介してＳＡブロックアクセスするためのインターフェースの概要である。これはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
【０８５８】
［データフロー］
３つの異なるアクセスタイプがＳＡブロックでサポートされる。これらはバースト書込、バースト読取、単一の読取である。ｉｐｓｅｃｓａｒｂモジュールはＳＡメモリへアクセスするために異なるソースからのリクエストを調停する。
【０８５９】
［ＳＡ  ＬＵＴ］
［概要］
ＩＰＳＥＣ受信論理装置は適切なＳＡブロックを発見するためにＬＵＴを使用する。ＬＵＴは１６ビット×３２Ｋの深さである。各ＬＵＴブロックはＳＡブロックハンドルを含んでいる。ＳＡハンドルが値０を有するならば、これは無効であると考えられる。
【０８６０】
［ＤＲＡＭインターフェースへのＳＡ  ＬＵＴ］
以下の説明はＳＡ  ＬＵＴとデータＤＤＲ調停モジュールとの間のインターフェースの概要である。それはデータフローを示し、インターフェース信号をリストし、必要なタイミングを詳細に説明する。
【０８６１】
［データフロー］
ＳＡ  ＬＵＴはＤＲＡＭへ単一の読取および書込みアクセスを行うだけである。そのアクセスは常にＷＯＲＤにある。各ＬＵＴブロックは１６ビットのみであるので、ＷＯＲＤの下部１６ビットだけがＳＡ  ＬＵＴメモリインターフェースへ転送される。読取および書込みは同じＬＵＴアクセスサイクルで行われない。
【０８６２】
本発明を好ましい実施形態を参照してここで説明したが、当業者は本発明の技術的範囲を逸脱せずにここで説明した応用を他の応用に置換することができることを容易に認識するであろう。したがって、本発明は特許請求の範囲によってのみ限定されるべきである。
【図１】
2010063110.tif 000031
【図２】
2010063110.tif 000032
【図３】
2010063110.tif 000033
【図４】
2010063110.tif 000034
【図５】
2010063110.tif 000035
【図６】
2010063110.tif 000036
【図７】
2010063110.tif 000037
【図８】
2010063110.tif 000038
【図９】
2010063110.tif 000039
【図１０】
2010063110.tif 000040
【図１１】
2010063110.tif 000041
【図１２】
2010063110.tif 000042
【図１３】
2010063110.tif 000043
【図１４】
2010063110.tif 000044
【図１５】
2010063110.tif 000045
【図１６】
2010063110.tif 000046
【図１７】
2010063110.tif 000047
【図１８】
2010063110.tif 000048
【図１９】
2010063110.tif 000049
【図２０】
2010063110.tif 000050
【図２１】
2010063110.tif 000051
【図２２】
2010063110.tif 000052
【図２３】
2010063110.tif 000053
【図２４】
2010063110.tif 000054
【図２５】
2010063110.tif 000055
【図２６】
2010063110.tif 000056
【図２７】
2010063110.tif 000057
【図２８】
2010063110.tif 000058
【図２９】
2010063110.tif 000059
【図３０】
2010063110.tif 000060
【図３１】
2010063110.tif 000061
【図３２】
2010063110.tif 000062
【図３３】
2010063110.tif 000063
【図３４】
2010063110.tif 000064
【図３５】
2010063110.tif 000065
【図３６】
2010063110.tif 000066
【図３７】
2010063110.tif 000067
【図３８】
2010063110.tif 000068
【図３９】
2010063110.tif 000069
【図４０】
2010063110.tif 000070
【図４１】
2010063110.tif 000071
【図４２】
2010063110.tif 000072
【図４３】
2010063110.tif 000073
【図４４】
2010063110.tif 000074
【図４５】
2010063110.tif 000075
【図４６】
2010063110.tif 000076
【図４７】
2010063110.tif 000077
【図４８】
2010063110.tif 000078
【図４９】
2010063110.tif 000079
【図５０】
2010063110.tif 000080
【図５１】
2010063110.tif 000081
【図５２】
2010063110.tif 000082
【図５３】
2010063110.tif 000083
【図５４】
2010063110.tif 000084
【図５５】
2010063110.tif 000085
【図５６】
2010063110.tif 000086
【図５７】
2010063110.tif 000087
【図５８】
2010063110.tif 000088
【図５９】
2010063110.tif 000089
【図６０】
2010063110.tif 000090
【図６１】
2010063110.tif 000091
【図６２】
2010063110.tif 000092
【図６３】
2010063110.tif 000093
【図６４】
2010063110.tif 000094
【図６５】
2010063110.tif 000095
【図６６】
2010063110.tif 000096
【図６７】
2010063110.tif 000097
【図６８】
2010063110.tif 000098
【図６９】
2010063110.tif 000099
【外国語明細書】
2010063110000001.pdf