SDN-openflow1.0抓包分析

目錄

Wireshark

Wireshark啓動

wireshark配置

選擇端口

 選擇篩選器

對稱消息

Hello消息

OFPT_HELLO

ERROR消息

OFPT_ERROR

ECHO消息

OFPT_ECHO_REQUEST

 OFPT_ECHO_REPLY

控制器/交換機配置消息

Features消息

OFPT_FEATURES_REQUEST

OFPT_FEATURES_REPLY

CONFIGS消息

OFPT_SET_CONFIG

統計消息

OFPT_STATS_REQUEST

OFPT_STATS_REPLY

障礙消息

OFPT_BARRIER_REQUEST

OFPT_BARRIER_REPLY

控制器命令消息

OFPT_PACKET_OUT

OFPT_FLOW_MOD

 異步消息

OFPT_PACKET_IN

 


上篇文章SDN-OpenFlow1.0協議分析對OpenFlow1.0協議進行了分析,本篇文章就抓一些包來看一看。

博主使用的是opendaylight氮版本,miniedit進行的網絡構建,wireshark進行抓包,一些配置等請查看本專欄其他文章。

Wireshark

Wireshark啓動

使用

sudo wireshark

啓動wireshark,一段時間後打開界面

打開wireshark

wireshark配置

選擇端口

選擇抓包接口

博主的控制器和Mininet在一臺虛擬機中,所以選擇的lo,讀者根據自己情況選擇。

 選擇篩選器

篩選openflow1.0協議的消息

選擇openflow_v1篩選of1.0協議的消息,否則有ICMP、ARP等協議的消息,列表過長。

使用

tshark -g protocols | grep -i openflow

查看你的wireshark支持的openflow協議版本

wireshark版本

對稱消息

Hello消息

OFPT_HELLO

OFPT_HELLO數據包

這是由交換機向控制器發送的HELLO消息,對稱消息的一種,用於控制器或交換機在連接建立的期間發送一個Hello數據包,用來表示所支持的最高版本的Openflow協議,協商版本號,建立連接,連接可以從交換機或控制器啓動。

ERROR消息

OFPT_ERROR

OFPT_ERROR數據包

這是由交換機向控制器發出的ERROR消息,對稱消息的一種。控制器或交換機發送此消息用來指示正常運行期間的故障。錯誤由消息類型和代碼以及對錯誤的描述來組成。返回碼爲1表示沒有問題,建立連接成功,若爲0則失敗。

ECHO消息

OFPT_ECHO_REQUEST

OFPT_ECHO_REQUEST數據包

當沒有其他的數據包進行交換時,交換機會定期循環給控制器發送OFPT_ECHO_REQUEST來確保與控制器的連接。

 OFPT_ECHO_REPLY

 OFPT_ECHO_REPLY數據包

控制器對交換機進行迴應,確保連接沒有問題。

控制器/交換機配置消息

Features消息

OFPT_FEATURES_REQUEST

OFPT_HELLO和OFPT_FEATURES_REQUEST數據包

這是控制器發給交換機的兩個數據包,Hello是對稱消息,交換機之前給控制器發了,控制器要回一下,可以看到控制器還支持openflow1.3版本。Request消息用於控制器向交換機請求信息,在交換Hello數據包並且建立雙方支持的最高版本的Openflow之後,控制器向交換機發送功能請求以檢索緩衝區的數量,數據路徑ID或其他。

OFPT_FEATURES_REPLY

OFPT_FEATURES_REPLY數據包

交換機向控制器發出,告知控制器自身的信息,這個是交換s1進行的響應,同樣還有s2和s3的。 。

Datapath unique id:交換機標識符。
        n_buffers:一次最多緩存的數據包數量。
        n_tables:表示交換機支持的流表數量。每個流表可以設置不同的通配符和不同數量的流表項。控制器和交換機第一次通信的時候,控制器會從OFPT_FEATURES_REPLY消息中找出交換機支持多少流表,如果控制器還想了解大小、類型和流表查詢的順序,就發送一個OFPT_STATS_REQUEST消息,交換機必須按照數據包遍歷流表的順序把這些流表回覆給控制器,並且精確匹配流表排在通配流表前。

CONFIGS消息

OFPT_SET_CONFIG

OFPT_SET_CONFIG數據包

控制器發出的消息,用於對交換機進行配置。

統計消息

OFPT_STATS_REQUEST

OFPT_STATS_REQUEST數據包

控制器想了解更多交換機的信息時發出。

OFPT_STATS_REPLY

OFPT_STATS_REPLY數據包

障礙消息

OFPT_BARRIER_REQUEST

OFPT_BARRIER_REQUEST數據包

控制器向交換機發送該消息,詢問之前的命令是否正確運行。

OFPT_BARRIER_REPLY

OFPT_BARRIER_REPLY數據包

交換機向控制器報告命令運行結果。

控制器命令消息

OFPT_PACKET_OUT

OFPT_PACKET_OUT數據包

控制器響應交換機,用於命令交換機將某一數據包進行轉發。可以看到動作是Output,端口號是2,也就是命令交換機從端口2將數據包轉發出去。

OFPT_FLOW_MOD

OFPT_FLOW_MOD

        Cookie爲流表項標識符
        Command是flow-mod的類型
        Idle time-out是流表項的空閒超時時間
        hard time-out是流表項的最大生存時間
        Priority爲流表項的優先級,交換機優先匹配高優先級的流表項;
        Buffer Id爲交換機中的緩衝區ID,flow-mod消息可以指定一個緩衝區的ID,該緩衝區的數據包會按照此flow-mod消息的action列表處理。如果是手動下發的流,buffer_id應填-1,即0xffff,告訴交換機這個數據包並沒有緩存在隊列中。
        Out port爲刪除流表的flow_mod消息提供的額外的匹配參數。
        Flags爲flow-mod命令的一些標誌位,可以用來指示流表刪除後是否發送flow-removed消息,添加流表時是否檢查流表重複項,添加的流表項是否爲應急流表項。
                當OFPFF_SEND_FLOW_REM 被設置的時候,表項超時刪除會觸發一條表項刪除的信息。
                當OFPFF_CHECK_OVERLAP 被設置的時候,交換機必須檢查同優先級的表項之間是否有匹配範圍的衝        突。
                當OFPFF_EMERG_被設置的時候,交換機將表項當作緊急表項,只有當與控制器連接斷的時候才啓用。

 異步消息

OFPT_PACKET_IN

OFPT_PACKET_IN數據包

如果由動作集指示或者由於表遺漏或TTL錯誤,交換機可以向控制器發送在PACKET_IN信息中接收到的包。       

        Buffer Id是packet-in消息所攜帶的數據包在交換機中的緩存ID
        Total_length爲data段的長度
        In port數據包進入交換機的入端口號
        Reason爲packet-in事件的產生原因(OFPR_NO_MATCH和OFPR_ACTION)

部分消息在抓包時沒有體現,可以查看文章

SDN-OpenFlow1.0協議分析

更多SDN相關內容,請查看:SDN-自學筆記

有問題請下方評論,轉載請註明出處,並附有原文鏈接,謝謝!如有侵權,請及時聯繫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章