1. 程式人生 > >Floodlight下發流表過程分析

Floodlight下發流表過程分析

完成 https 所有 找到 int discover 就會 隊列 details

https://blog.csdn.net/vonzhoufz/article/details/32166445

當一個packet到達openflow交換機,會進行流表的匹配,如果沒有找到相應的流表項,就會發送一個packet_in消息 到達SDN controller端,控制器根據一定的路由算法決策後,會向該路徑上的所有交換機下發流表(也就是發送FLOW_MOD消息,裏面有對應的action)。這裏要知道的是在SDN的環境下,控制器具有全局拓撲信息,每當有鏈路狀態改變時就會跟新拓撲,而路由的計算是需要下發轉發規則的時候進行。下面對這個流程進行詳細分析。 鏈路發現模塊會關註兩種消息 PACKET_IN 和 PORT_STATUS ,從而分析鏈路的變更。這裏看對於PACKET_IN ,LinkDiscoveryManager的處理過程: 技術分享圖片
LinkDiscoveryManager完成的工作是增加或更新鏈路狀態,加入到一個LDUpdates隊列中,接下來看拓撲管理模塊TopologyManager,它在啟動的時候會新起一個線程 NewInstanceWorker :首先根據消息類型來增刪該鏈路的狀態,然後創建一個計算拓撲的實例TopologyInstance來計算出拓撲並存儲,具體過程如下: 技術分享圖片 當完成拓撲計算後,當來了一個packet_in,就會根據源目SW得到路徑。 接下來防火墻,負載均衡模塊會發揮作用(這裏先略過)。 最後路由模塊會完成最終的下發流表操作,這裏看Forwarding模塊中的processPacketInMessage()。 會從packet中得到相應的源目設備實例IDevice,而後判斷是否在同一個openflow island上,如果不在的話就 doFlood(sw, pi, cntx),這裏主要看二者在同一個island的情況。然後得到每個設備的AttachmentPoints, 然後找到二者能夠連通的粘合點,接下來得到路勁,最後構造flow_mod消息,寫入通道,下發給SW。 技術分享圖片

Floodlight下發流表過程分析