OpenFlow Switch學習筆記(四)——Matching


  這次我們着重詳述來自於網絡中的數據包在OpenFlow Switch中與Flow Entries的具體匹配過程,以及當出現Table Miss時的處理方式,下面就將從這兩方面說起。

 

1、Matching

  當一個來自於外部網絡的數據包進入到OpenFlow Switch中時,OpenFlow Switch將會按照如下圖所示的方式來處理這些數據包,如前面的學習筆記中講述的那樣,會先從Pipeline的第一個Flow Table首先進行Lookup,然后可能繼續進入到其他的Flow Table進行Lookup。匹配過程圖如下:

  數據包的匹配值域來源於數據包頭,這些匹配值域將會依據數據包的類型被用來與Flow Table進行匹配,比如源地址或者目標地址;另外,除了數據包頭信息外,數據包的 ingress port 或者 從上一個Flow Table傳遞過來的 Metadata 值域(在Flow Table之間進行參數傳遞的載體)也可以充當匹配域。數據包的匹配值域表示了數據包當前的狀態值,假若數據包在前一個Flow Table里應用了Apply Actions改變了數據包頭信息,那么這么改變將會被立即反映到數據包頭信息里。

  數據包與某個Flow Entry能成功匹配的前提是:數據包的匹配值域都必須落在Flow Entry匹配值域的范圍內。假若一個Flow Entry的匹配值域是ANY,那么它將表示匹配數據包的所有可能的值域信息。當發現有多個Flow Entries匹配成功,那么僅僅具有最高優先權的Flow Entry將會被選擇使用,同時該Flow Entry的Counters的值必須被更新。如果OpenFlow Switch配置了OFPC_FRAG_REASM,那么在進行Pipeline processing的時候,IP片段必須要被重組起來。OpenFlow Switch規范並沒有定義當遇到格式不正確的或者損壞的數據包時該如何處理。

 

2、Table Miss

  如前面的學習筆記記錄那樣,每個Flow Table都必須支持Table Miss Flow Entry,用來處理當發生Table Miss 時如何處理數據包,或者將其發送回Remote Controller,或者將其直接丟棄,或者將其轉發到后續的Flow Table里處理。

  如同其他正常的Flow Entry一樣,Table Miss Flow Entry也是由Match Fields和Prioriy作為聯合主健來唯一定位,它能夠匹配所有的數據包值域,即能夠匹配的值域范圍要超出Flow Table的正常范圍,並且擁有最低的優先級 0 ,但是其可能沒有其他正常Flow Entry的能力。然而,Table Miss Flow Entry必須至少得能夠通過CONTROLLER Reserved Port將數據包發送給Remote Controller,以及通過Clear-Actions直接丟棄數據包,但是為了與前面規范保持一致,推薦直接將數據包轉發給后續的Flow Table處理。

  Table Miss Flow Entry的工作方式與其他正常的Flow Enety無異,默認情況下,Flow Table里並不存在Table Miss Flow Entry,但是在任何時候都可以通過Remote Controller來添加或者刪除,它也如同其他正常Flow Entry可能會過期。它僅僅匹配其他正常Flow Entry無法成功匹配的數據包,並且其上得Instructions Set將會應用到數據包上。當經過Table Miss Flow Entry的Actions通過CONTROLLER Reserved Port將數據包發送給Remote Controller時,必須指明packet-in消息的原因是table miss。

  如果一個Flow Table並不存在Table Miss Flow Entry,那么其未能成功匹配的數據包就會被丟棄,但是基於不同的OpenFlow Switch實現策勒,可以覆蓋其默認行為,以其他的方式來實現。  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM