共用方式為


Net 通道簡介

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。 Yes NIC 用戶端驅動程式
NextIndex NET_RING之 post 子區段的開頭NextIndex 會將用戶端驅動程式擁有的通道區段分割成 post 和 drain 子區段。 當 NextIndex 遞增時,驅動程式會將緩衝區張貼至硬體,並將緩衝區傳輸至環形的清空區段。 No NIC 用戶端驅動程式
EndIndex NIC 用戶端驅動程式擁有之NET_RING元素範圍的結尾。 用戶端驅動程式最多擁有 EndIndex - 1 個包含的專案 Yes NetAdapterCx

在封包佇列的 EvtPacketQueueAdvance 回呼期間操作這些索引,就是用戶端驅動程式如何在系統與網路適配器 (NIC) 硬體之間傳輸網路數據。

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

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

NetAdapterCx 會藉由遞 增 EndIndex 將元素張貼至環形緩衝區。 用戶端驅動程式會藉由推進 BeginIndex 來清空緩衝區並傳回元素的擁有權。

NextIndex 是可供用戶端驅動程式使用的選用專案,而且為了方便分隔通道中客戶端驅動程式區段的 post 和 drain 子區段。

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

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

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

使用網路通道傳送和接收網路數據

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

使用網路通道傳送網路數據

使用網路通道接收網路數據