受信セグメント結合の例
このセクションでは、順序に従って受信し、1 回の遅延プロシージャ コール (DPC) で処理されるセグメントの例を使用して結合アルゴリズムを説明します。
このページでは、連続するセグメントのラベルを付けるのに X と X' を使用します。 他のセグメントおよび単一結合ユニット (SCU) フィールドはすべて、「TCP/IP セグメントの結合規則」で説明しています。
例 1: データ セグメント
セグメントの説明
同じ TCP 接続に属している10 個の連続するセグメントが処理されます。 それぞれに、次のすべての条件が当てはまります。
X'.Standard Edition Q == X.NXT
X'Standard Edition Q > X.Standard Edition Q
X'.ACK == X.ACK
これらのいずれもセグメントも例外を生成しません。
結果
10 個のセグメントから 1 つの SCU を形成します。 これは、単一のNET_BUFFER_LIST内の単一のNET_BUFFERとして示されます。
例 2: データ・セグメント、例外、の後にデータ・セグメント
セグメントの説明
同じ TCP 接続に属している10 個の連続するセグメントが処理されます。 それぞれに、次のすべての条件が当てはまります。
X'.Standard Edition Q == X.NXT
X'Standard Edition Q > X.Standard Edition Q
X'.ACK == X.ACK
これらのいずれもセグメントも例外を生成しません。 6 番目のセグメントは、TCP SACK オプションを持つ重複する ACK セグメントであり、TCP/IP セグメントを結合するための規則No. 3 に 基づいて例外を生成します。
注: この場合、TCP オプションを処理するための例外規則が優先され、結合規則が優位になります。
同じ TCP 接続に属している10 個の連続するセグメントが処理されます。 それぞれに、次のすべての条件が当てはまります。
X'.Standard Edition Q == X.NXT
X'Standard Edition Q > X.Standard Edition Q
X'.ACK == X.ACK
これらのいずれもセグメントも例外を生成しません。
結果
最初の5個のセグメントから 1 つの SCU を形成します。 6 番目のセグメントは SCU を形成しません。
7番目と8番目のセグメントは共にSCUを形成します。
NET_BUFFER_LIST チェーンは、それぞれ 1 つの NET_BUFFER を持つ 3 つの NET_BUFFER_LIST 構造で示されます。 受信したセグメントの順序は保持されます。
例 3: データ セグメントの後に複数のウィンドウ更新が続く
セグメントの説明
同じ TCP 接続に属している10 個の連続するセグメントが処理されます。 それぞれに、次のすべての条件が当てはまります。
X'.Standard Edition Q == X.NXT
X'Standard Edition Q > X.Standard Edition Q
X'.ACK == X.ACK
これらのいずれもセグメントも例外を生成しません。 次のフローチャートに示すように、6 番目のセグメントは、Standard Edition G.WND = 65535 のウィンドウ更新の純粋な ACK です。
同じのフローチャートに示す通り、7 番目のセグメントは、Standard Edition G.WND = 131070 のウィンドウ更新の純粋な ACK です。
結果
7個のセグメントから 1 つの SCU を形成します。 これは、単一のNET_BUFFER_LIST内の単一のNET_BUFFERとして示されます。
この値に基づいてSCU。WND = 131070 で、 チェックsum が更新されます。
例 4: データ セグメントと混在しているピギーバックされた AKSの
セグメントの説明
同じ TCP 接続に属している3個の連続するセグメントが処理されます。 それぞれに、次のすべての条件が当てはまります。
X'.Standard Edition Q == X.NXT
X'Standard Edition Q > X.Standard Edition Q
X'.ACK == X.ACK
これらのいずれもセグメントも例外を生成しません。 同じ TCP 接続に属している10 個の連続するセグメントが処理されます。 それぞれに、次のすべての条件が当てはまります。
X'.Standard Edition Q == X.NXT
X'Standard Edition Q > X.Standard Edition Q
X'.ACK == X.ACK
これらのいずれもセグメントも例外を生成しません。
結果
5個のセグメントから 1 つの SCU を形成します。 これは、単一のNET_BUFFER_LIST内の単一のNET_BUFFERとして示されます。 SCU。ACK は最後の Standard Edition G.ACK に設定されます。