網路設備上的ACL(存取控制清單)可以透過硬體和軟體來實現,或者更通俗地說,基於硬體和軟體的ACL。 如果基於軟體的ACL 的一切都應該很清楚- 這些是在RAM 中儲存和處理的規則(即在控制平面上)以及所有隨之而來的限制,那麼我們將了解基於硬體的ACL 是如何實現的並在我們的工作中發揮作用。文章。 作為範例,我們將使用 Extreme Networks 的 ExtremeSwitching 系列交換器。
由於我們對基於硬體的 ACL 感興趣,因此資料平面的內部實作或實際使用的晶片組 (ASIC) 對我們來說至關重要。 所有 Extreme Networks 交換器系列均基於 Broadcom ASIC 構建,因此以下的大部分資訊也適用於市場上在相同 ASIC 上實現的其他交換器。
從上圖可以看出,「ContentAware Engine」直接負責晶片組中ACL的操作,分別負責「ingress」和「egress」。 從架構上來說,它們是相同的,只是「出口」的可擴展性和功能性較差。 從物理上講,兩個「ContentAware 引擎」都是 TCAM 記憶體加上隨附的邏輯,每個使用者或系統 ACL 規則都是寫入該記憶體的簡單位元遮罩。 這就是晶片組逐包處理流量且不會降低效能的原因。
物理上,同一個 Ingress/Egress TCAM 又在邏輯上被劃分為若干段(取決於記憶體本身的數量和平台),即所謂的「ACL 切片」。 例如,當您在筆記型電腦上建立多個邏輯磁碟機 - C:>、D:> 時,筆記型電腦上實體上相同的 HDD 也會發生相同的情況。 每個 ACL 片又由「字串」形式的儲存單元組成,其中寫入了「規則」(規則/位元遮罩)。
TCAM 劃分為 ACL 切片是有一定邏輯的。 在每個單獨的 ACL 片中,只能寫入彼此相容的「規則」。 如果任何「規則」與前一個「規則」不相容,那麼它將被寫入下一個 ACL 切片,無論前一個「規則」中還剩下多少行「規則」。
那麼ACL規則的兼容或不相容從何而來呢? 事實上,寫入「規則」的一條 TCAM「行」的長度為 232 位,並分為幾個字段 - 固定、字段 1、字段 2、字段 3。 232 位元或 29 位元組 TCAM 記憶體足以記錄特定 MAC 或 IP 位址的位元遮罩,但比完整的乙太網路封包頭要少得多。 在每個單獨的 ACL 切片中,ASIC 根據 F1-F3 中設定的位元遮罩執行獨立查找。 一般來說,可以使用乙太網路標頭的前 128 個位元組來執行此查找。 實際上,正是因為可以在 128 個位元組上執行搜索,但只能寫入 29 個位元組,所以為了正確查找,必須設定相對於封包開頭的偏移量。 每個 ACL 切片的偏移量在寫入第一個規則時設置,如果在寫入後續規則時發現需要另一個偏移量,則認為該規則與第一個規則不相容並寫入到下一個ACL 切片。
下表顯示了 ACL 中指定的條件的相容性順序。 每條單獨的行都包含產生的位元遮罩,這些位元遮罩彼此相容但與其他行不相容。
ASIC 處理的每個單獨資料包在每個 ACL 切片中執行並行查找。 檢查會一直執行到 ACL 切片中的第一個匹配項,但相同資料包允許在不同 ACL 切片中出現多個匹配項。 每個單獨的「規則」都有一個相應的操作,如果條件(位元遮罩)匹配,則必須執行該操作。 如果多個 ACL 切片同時發生匹配,則在「操作衝突解決」區塊中,根據 ACL 切片的優先級,決定執行哪個操作。 如果ACL同時包含“action”(允許/拒絕)和“action-modifier”(計數/QoS/log/...),那麼在多個符合的情況下,僅執行較高優先順序的“action”,而「action」則被執行。-modifier 」就全部完成了。 下面的範例顯示兩個計數器都會遞增,並且優先順序較高的「拒絕」將被執行。
來源: www.habr.com