結合されたセグメントの表示
1 つの結合ユニット (SCU) は、 TCP/IP セグメントを結合するための規則で定義されている規則に従って、1 つの TCP セグメントに結合される TCP セグメントのシーケンスです。 このセクションでは、結果として得られる合体セグメントを示す方法について説明します。
SCU は次の必要があります。
NdisMIndicateReceiveNetBufferListsを呼び出 すことによって示されます。
ネットワーク経由で受信される通常の TCP セグメントのように見えます。
RFC 791 のセクション 3.1 で定義されているように、有効な IP データグラムの最大長を超えないことをお勧めします。
注: IPv6 拡張ヘッダーを含むセグメントは結合できないため (結合を終了する例外条件を参照)、IPv6 データグラムの SCU のサイズも有効なデータグラムの最大長によって制限されます。
NIC またはミニポート ドライバーは、結合されたセグメントを示す前に、TCP と IPv4 チェックsum を再計算する必要があります (該当する場合)。 NIC またはミニポート ドライバーは、TCP と IPv4 チェックsumsum を検証するが、結合されたセグメントのためにそれらを再計算しない場合は、 NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 構造体で TcpChecksumValueInvalid フラグと IpChecksumValueInvalid フラグを設定する必要があります。 さらに、この場合、NIC またはミニポート ドライバーは、必要に応じて、セグメント内の TCP および IPv4 ヘッダーの チェックsum 値をゼロにできます。
NIC およびミニポート ドライバーは、結合されたセグメントを示す前に、常に IpChecksumSucceeded フラグと TcpChecksumSucceeded フラグを NDIS_TCP_IP_CHECKSUM_NET_BUFFER_LIST_INFO 構造体に設定する必要があります。
結合規則の詳細については、「TCP/IP セグメントの結合規則」を参照してください。
例外の詳細については、「結合を終了する例外条件」を参照してください。
合体は、ベスト エフォートベースで実行される予定です。 リソースが不足しているためなど、ハードウェアが結合できない場合があります。 ここで述べられている要件は、主に、結合しないタイミングと合体する方法を指定することです。
大まかに言うと、NIC とミニポート ドライバーは、次のようにネットワーク経由で TCP セグメントの受信を処理する必要があります。
次のように、受信セグメントで例外を確認します。
例外が発生しなかった場合は、規則ごとに同じ TCP 接続に対して受信した最後のセグメントとセグメントを結合できるかどうかをチェックします。
セグメントが例外をトリガーした場合、または以前に受信したセグメントと結合できない場合は、セグメントを個別に示します。
NIC とミニポート ドライバーは、プロトコル ドライバーが RSC を有効にするまで結合されたセグメントを示す必要があります、 クエリと RSC 状態の変更の説明に従います。
特定の TCP 接続の場合、ミニポート アダプターからホスト TCP/IP スタックへのデータ表示は、結合できなかった 1 つ以上の個々のセグメントで区切られた 1 つ以上の合体セグメントで構成される場合があります。
NIC とミニポート ドライバーは、結合されているかどうかに関係なく、TCP セグメントの表示を遅らせてはなりません。 具体的には、NIC とミニポート ドライバーは、セグメントの結合を試みるために、1 つの遅延プロシージャ 呼び出し (DPC) から次のセグメントの表示を遅延させる必要があります。
NIC とミニポート ドライバーは、結合の終了を決定するタイマーを使用できます。 ただし、待機時間の影響を受けやすいワークロードの処理は、DPC 境界要件と同じくらい効果的である必要があります。