暫停幀是否會傳遞給主機?

暫停幀是否會傳遞給主機?

我最近看到一個 Debian 論壇提到暫停幀應該被 MAC 層丟棄,如果不是,驅動程式應該丟棄它們。這是真的?如果主機從交換器收到暫停幀,它實際上如何限制流量?

我試圖更好地了解乙太網路流量控制。如果上述說法為真,那麼傳遞給主機的真正意義是什麼?

答案1

您可以透過三種方式處理流量控制:

  1. 如果超載,數據就會掉在地上。
  2. 如果您無法為來自更高層的請求提供服務(通常是因為您的本機佇列已滿),則您將向該更高層的傳回錯誤。
  3. 您主動通知更高層他們需要放慢速度。

在乙太網路層,透過暫停幀支援方法3。通常較高層不支援方法 3,而是支援方法 2。 2 適用於更高層。

或者,更具體地說,當您收到暫停幀時,您將停止發送引擎並設定計時器以在適當的時間重新啟動發送引擎。當發送引擎停止時,您的本機佇列將填滿來自更高層的資料。如果它們已滿,您將“忙”錯誤傳回給更高層,並且它們會適當地處理該錯誤。

答案2

到目前為止,乙太網路流量控制一直是一個失敗的實驗,因為它經常導致隊頭阻塞問題。交換器不應向主機發送暫停幀。我相信 Cisco 交換器不能設定為發送暫停幀;在 Cisco 交換器上啟用乙太網路流量控制只會使其遵守收到的暫停訊框。主機明智地忽略收到的暫停幀。

如果交換器無法處理傳輸,則應丟棄該訊框。較高層(尤其是 TCP)使用丟棄的幀來了解何時發生擁塞以及何時退出。未能丟棄幀會導致 TCP 擁塞控制失敗,通常會導致緩衝區膨脹

相關內容