結合を終了する例外条件
このセクションでは、受信セグメント合体 (RSC) 対応ミニポート ドライバーの結合前に、セグメントに実行する必要があるチェックを定義します。
セグメントは、結合前に、次の種類のチェックの両方を渡してください。
セグメント内に特定の条件が存在するかチェックします。 たとえば、TCP ヘッダーに SYN フラグがあると例外がトリガーされ、セグメントは結合されません。 定義するチェックの種類は次のとおりです。
以前に結合していたセグメントと現在調べられていたセグメントからの情報の検査と関連性に依存するチェック。 たとえば、受信したセグメントが重複する受信確認であるかのチェックはこのカテゴリのチェックに分類されます。 これらの種類のチェックは、TCP/IP セグメントの結合規則で定義されています。
チェックが失敗した場合、例外がトリガーされ、ミニポート ドライバーはその TCP 接続の結合を終了し、セグメントを次のように処理しなければなりません。
例外が検出される前に結合した TCP セグメントは、1 つのユニットとして示す必要があります。
例外が検出された後に結合した TCP セグメントは、別のユニットとして示す必要があります。
注 : 以下の例外 7 、8 の場合、ミニポート ドライバーは、例外をトリガーしたセグメントから開始して結合を再開しなければなりません。
次のいずれかの条件を満たすセグメントを受信すると、例外をトリガーしなければなりません。
NIC のハードウェア リソース制約により、結合が妨げられます。
セグメントに無効な TCP または IP チェックsum があります。
セグメントには、RFC 793 のセクション 3.1 で定義されているとおり、TCP ヘッダーに SYN、URG、RST、FIN のいずれかが含まれています。 より大まかに言うと、セグメントに PSH または ACK 以外のフラグが含まれていれば、例外をトリガーする必要があります。 ECN フラグについては、以下の例外 8 をご覧ください。
セグメントには、TCP タイムスタンプ オプションを除くTCP オプションが1 つ以上含まれています。 TCP タイムスタンプ オプションの詳細については、RFC 1323 をご覧ください。
セグメントは、IPv4 オプションまたは IPv6 拡張ヘッダーを含んでいます。
セグメントは IPv4 フラグメントです。
現在受信しているセグメントを結合すると、1 つの結合ユニットが有効な IP データグラムの最大の長さを超えます。 この例外には特別な処理が必要です。 詳細については、以下を参照してください:
TCP/IP パケットの結合規則の最初のフローチャート
RSC ドライバーのプログラミングに関する懸念事項である「RSC 統計のクエリへの応答」。
このセグメントには、RFC 3168 で定義されているように、次の条件のいずれかまたは両方を満たす ECN フラグが含まれています。
セグメントには、前のセグメントとは異なる値が IP ヘッダーの ECN フィールド (ECT、CE) に含まれています。
セグメントには、前のセグメントと異なるTCP ヘッダー内の ECN フラグ (ECE および CWR) の値が入力されています。