Switch 交換封包的方式分成三種:
- Cut through
- Store and forward
- Fragment free
什麼是 Cut through?
理論上,使用 Cut through 的 switch 在收到封包的時候,在讀取到該封包的 Destination MAC 時,就馬上查詢 MAC address table,找到出口介面,然後就即時將封包交換出去。
這種方法最直接的好處便是封包交換速度快,封包的延遲(latency)低,因為封包在 switch 中是沒有浪費任何時間的。試想,如果使用 Jumbo frame 時,使用 store and forward 交換將大大拉長 latency。
Cut through 的 latency 計算方法是 FIFO (First In First Out),也就是,switch 收到第一個 bit 與送出第一的 bit 的時間差就是 latency。
然而 cut through 因為會在檢測封包的 CRC 之前就將之交換出去,所以無法將錯誤的封包丟棄,造成錯誤封包的擴散。這個問題在多年前的網路會較為嚴重,因為當時網路卡的品質不佳,而且使用 Hub 會產生碰撞,碰撞會造成封包 fragment,這些錯誤封包再進入 cut through switch 後,將不會被檢查出也不會被丟棄。
什麼是 Store and forward?
Store and forward 會將整個封包收到 switch 中,檢查是否錯誤再將之處理、交換。這樣子當然會解決錯誤封包擴散的問題。但是,卻會將 latency 拉長。
Store and forward 的 latency 計算方法是 LIFO (Last In First Out),也就是 switch 收到最後一個 bit 與送出第一個 bit 的時間差就是 latency。
為什麼 Cut through 會式微?
前面提到錯誤封包的擴散這個缺點,其實到後來網路卡技術的改進,與大量淘汰 hub 改用 switch 之後,已經獲得解決。
但是,除了這個問題之外,還有許多狀況使得 cut through 無法達到應有的快速、低延遲。
1. 封包需要更多的控制:在 1990 年中期,switch 的用戶需要對封包有更深入的控制,例如 ACL、QoS,為了要控制這些封包,switch 必須讀取更多的欄位以做出判斷,因此可能必須讀取到 54 bytes ( 14 bytes Ethernet + 20 bytes IP + 20 bytes TCP)的欄位,如此也讓 latency 拉長。另外, EtherChannel 需要針對封包做 hash 以決定送出封包的介面,而 hash 所參考的欄位也可能會使用到 IP address 或 Port number。
2. 介面速度的差異:如果 switch 使用 fabric 架構,而出口介面速度(如10Gbps)比入口速度(如1Gbps)快,採用 cut through 會造成 under run 的問題,因為 cut through 在交換封包的時候,送出封包速度太快,以至於等不到後續的封包,此時 switch 必須被迫採用類似 store and forward 的方法先將封包存放到 buffer ,以利快速介面送出。
3. 出口介面擁塞:如果 switch 的出口介面擁塞,cut through 則必須先將封包放在 buffer 之中,等待送出,此時就又如同 store and forward 了!
為什麼 Cisco 又將 cut through 帶回來?
如前所述,目前的硬體進步很多不管是 ASIC 或是 FPGA 都比 1990 年代更能快速處理原本 cut through 衍生的問題。另外,像 HPC 等應用也非常需要低延遲的網路環境。
使用 Cut through 的 Cisco switch
Nexus 5000 便是使用 cut through 交換方法的 switch。
Nexus 7000 則仍然使用 store and forward,因為 Layer 3 switch 必須在交換封包之前更改 header 中的內容( destination MAC、FCS、TOS),所以還是必須使用 store and forward。
參考資料:Cut-Through and Store-and-Forward Ethernet Switching for Low-Latency Environments
雖然說N7K是L3故使用Store-and-forward,但N5K也是L3的Switch,也能夠做Routing,為甚麼使用的fowarding方式不同呢?
您好,這篇文章的年代,Nexus 5000 還是純 Layer 2 switch。