共用方式為


網路環簡介

NET_RING概觀

NET_RING 是 NetAdapterCx 與用戶端驅動程式之間共用之網路數據的循環緩衝區。 用戶端驅動程式中的每個封包佇列都有兩個通道:核心封包描述元的 封包通道,以及每個封包片段描述元的 片段通道

如需封包描述元的詳細資訊,請參閱 封包描述元和延伸模組

封包通道中的每個核心描述項都有索引到片段通道,以尋找該封包的片段描述元。 另一個數據結構,NET_RING_COLLECTION,將封包通道和片段通道群組在一起,供指定的封包佇列使用,如下圖所示。

圖表,其中顯示 NET_RING_COLLECTION 結構的多環配置,包括封包環和片段環。

每個封包佇列都有自己的 NET_RING_COLLECTION 結構,因此,每個封包佇列都有自己的封包通道、片段通道和描述元。 因此,每個封包佇列的網路數據傳輸作業完全獨立。 若要深入瞭解封包佇列,請參閱 傳輸和接收佇列

NET_RING元素擁有權

NET_RING 中的每個元素都是由用戶端驅動程式或 NetAdapterCx 所擁有。 擁有權是由三個索引所控制,這些索引會標示 NET_RING的區段。 這些索引在下表中被描述。 移動這些索引的動作是由 張貼清空 語意來描述。

NET_RING 索引名稱 描述 傳輸網路數據所需的必要措施 修改者
BeginIndex NIC 用戶端驅動程式擁有之 NET_RING 元素範圍的開頭。 BeginIndex 也是 排水 子區段的 NET_RING的開頭。 當 BeginIndex 遞增時,驅動程式 從通道中清空 元素,並將其擁有權轉移至 OS。 是的 NIC 用戶端驅動程式
下一個索引 NET_RINGpost 子區段的開頭。 NextIndex 將用戶端驅動程式擁有的環區段分割成“post”和“drain”子區段。 當 NextIndex 遞增時,驅動程式 張貼 緩衝區到硬體,並將緩衝區傳輸至環形的清空區段。 NIC 用戶端驅動程式
結束索引 NET_RING NIC 用戶端驅動程式擁有之元素範圍的結尾。 用戶端驅動程式擁有包括 在內,最多到 EndIndex - 1 的元素。 是的 NetAdapterCx

在封包佇列的 EvtPacketQueueAdvance 回呼期間操作這些索引,是用戶端驅動程式在系統與網路介面卡(NIC)硬體之間傳輸網路資料的方式。

用戶端驅動程式擁有來自 beginIndex 到 endIndex - 1 內含的每個元素。 例如,如果 BeginIndex 為 2,且 endIndex 為 5,則用戶端驅動程式會擁有三個元素:索引值為 2、3 和 4 的元素。

如果 BeginIndex 等於 EndIndex,則客戶端驅動程式不會擁有任何元素。

NetAdapterCx 會藉由遞增 endIndex 將元素遞增至環形緩衝區。 用戶端驅動程式會透過推進 BeginIndex來清空緩衝區,並將元素的擁有權返回。

NextIndex 是用戶端驅動程式的可選項目,提供的目的是為了方便分隔驅動程式環中的 post 和 drain 子區段。

NextIndexEndIndex - 1 包含在內的索引值元素是由客戶端擁有,但尚未提交到硬體。 如果 NextIndex 等於 BeginIndex,則用戶端驅動程式沒有任何完整的緩衝區要傳送至 OS。 如果 NextIndex 等於 EndIndex,則用戶端驅動程式沒有任何要張貼至硬體的緩衝區。

因為 net ring 是迴圈的,因此索引值最終會繞在緩衝區結尾,然後回到開頭。 當客戶端驅動程式呼叫適當的方法時,NetAdapterCx 會自動處理圍繞環形的索引值。

如需有關在 net ring 中管理元素的特定資訊,請參閱 Net ring 元素管理

使用網路環傳送和接收網路數據

如需在 net 通道中傳送和接收網路數據的詳細資訊和程式代碼範例,請參閱下列主題。

使用網環傳送網路數據

使用網絡環接收網路數據