接收區段聯合的範例
本節說明聯合演算法,方法是使用依順序接收的區段範例,並在 DPC) 的單一延遲過程 (調用中處理。
此頁面會針對連續區段使用 X 和 X' 標記。 所有其他區段和單一聯合單位 (SCU) 欄位,如 聯合 TCP/IP 區段的規則中所述。
範例 1:資料區段
區段描述
系統會處理屬於相同 TCP 連線的連續 10 個區段。 下列每個條件都成立:
X'.SEQ == X.NXT
X'SEQ > X.SEQ
X'.ACK == X.ACK
這些區段都不會產生例外狀況。
結果
單一 SCU 是由 10 個區段組成。 這表示為單一 NET_BUFFER_LIST 中的單一 NET_BUFFER。
範例 2:資料區段,後面接著例外狀況,後面接著資料區段
區段描述
系統會處理屬於相同 TCP 連線的連續 5 個區段。 下列每個條件都成立:
X'.SEQ == X.NXT
X'SEQ > X.SEQ
X'.ACK == X.ACK
這些區段都不會產生例外狀況。 第 6 個區段是具有 TCP SACK 選項的重複 ACK 區段,並根據 聯合 TCP/IP 區段的規則編號 3 產生例外狀況。
注意 在此情況下,處理 TCP 選項的例外狀況規則優先,因此會覆寫聯合規則。
系統會處理屬於相同 TCP 連線的連續 2 個區段。 下列每個條件都成立:
X'.SEQ == X.NXT
X'SEQ > X.SEQ
X'.ACK == X.ACK
這些區段都不會產生例外狀況。
結果
單一 SCU 是由前 5 個區段組成。 第 6 個區段不會形成 SCU。
第 7 和第 8 個區段會形成 SCU。
NET_BUFFER_LIST鏈結會以三個NET_BUFFER_LIST結構表示,每個結構都有單一NET_BUFFER。 會維護接收區段的順序。
範例 3:資料區段,後面接著多個視窗更新
區段描述
系統會處理屬於相同 TCP 連線的連續 5 個區段。 下列每個條件都成立:
X'.SEQ == X.NXT
X'SEQ > X.SEQ
X'.ACK == X.ACK
這些區段都不會產生例外狀況。 第 6 個區段是使用 SEG 進行視窗更新的純 ACK。WND = 65535,如下列流程圖所示。
第 7 個區段是純 ACK,它是使用 SEG 進行視窗更新。WND = 131070,如相同的流程圖所示。
結果
單一 SCU 是由 7 個區段組成。 這表示為單一 NET_BUFFER_LIST 中的單一 NET_BUFFER。
SCU。WND = 131070,並會根據此值更新總和檢查碼。
範例 4:與資料區段混合的 Piggybacked ACK
區段描述
系統會處理屬於相同 TCP 連線的連續 3 個區段。 下列每個條件都成立:
X'.SEQ == X.NXT
X'SEQ > X.SEQ
X'.ACK == X.ACK
這些區段都不會產生例外狀況。 系統會處理屬於相同 TCP 連線的連續 2 個區段。 下列每個條件都成立:
X'.SEQ == X.NXT
X'SEQ > X.SEQ
X'.ACK == X.ACK
這些區段都不會產生例外狀況。
結果
單一 SCU 是由 5 個區段組成。 這表示為單一 NET_BUFFER_LIST 中的單一 NET_BUFFER。 SCU。ACK 設定為最後一個 SEG.ACK。