精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

基于SDN的網絡狀態測量

責任編輯:editor007

作者:李呈

2016-01-27 15:16:40

摘自:SDNLAB

本文將主要介紹如何通過SDN控制器和OpenFlow協議來測量和收集網絡中的時延、帶寬以及拓撲狀態等信息。(2)交換機B收到了交換機A發送過來的數據包,無法匹配對應流表項,從而packet_in到控制器。

為了更好地管理和運行網絡,非常有必要收集網絡資源及其狀態信息。在很多網絡場景中,SDN控制器的決策都取決時延,帶寬和拓撲等網絡狀態。在開發SDN應用的過程中,筆者總結了一些有用的網絡狀態測量的解決方案,可以為初學者在解決網絡問題時提供一些啟發。本文將主要介紹如何通過SDN控制器和OpenFlow協議來測量和收集網絡中的時延、帶寬以及拓撲狀態等信息。

時延

時延的測試在終端會顯得很容易,但是在交換機節點上測試時延就比較麻煩。在SDN中,可以通過以下步驟實現交換機之間鏈路的時延。

(1)控制器向交換機A下發一個Packet_out報文。報文的數據段攜帶了任意一個約定好的協議報文,其報文的數據段攜帶了控制器下發報文時的時間戳。Packet_out報文的動作指示交換機將其泛洪或者轉發到某端口。

(2)交換機B收到了交換機A發送過來的數據包,無法匹配對應流表項,從而packet_in到控制器。控制器接收到這個數據包之后,和當下時間相減,得到時間差T1。其時間差約等于數據包從控制器到交換機A + 交換機A到交換機B + 交換機B到控制器的時延。

(3)同理,控制器向交換機B發送一個類似的報文。然后控制器從交換機A收到Packet_in報文,記錄下時間差T2。所以T1+T2=控制器到交換機A的RTT+控制器到交換機B的RTT+交換機A到交換機B的時延RTT。

(4)控制器向交換機A和交換機B分別發送帶有時間戳的Echo request。交換機收到之后即刻回復攜帶echo request時間戳的echo reply消息。所以控制器可以通過Echo reply的時間戳減去Echo reply攜帶的時間,從而得到對應交換機和控制器之間的RTT。通過這種方法測得控制器到交換機A,B的RTT分別為Ta,Tb。

(5)T1+T2-Ta-Tb則得到交換機A到交換機B的RTT。假設往返時間一樣,則交換機A到交換機B的鏈路時延為(T1+T2-Ta-Tb)/2。

這種方法可以相對準確地測試到鏈路的實驗,無法計算而忽略掉的部分時間是數據包在交換機中的處理時延。而這種簡單的方法已經被申請專利了,不知道我這么寫會不會有問題。

帶寬

帶寬數據是網絡狀態中的重要數據。在SDN網絡中獲取帶寬可以通過OpenFlow協議,也可以通過第三方的測量軟件獲取數據,如sFlow。此處僅介紹如何通過OpenFlow協議來獲取可用帶寬。

一條鏈路的帶寬由兩個端口的能力決定。所以我們可以通過獲取端口的流量來得到鏈路的流量。OpenFlow協議中可以通過統計報文來獲取端口、流表、流表項、組表和meter表的統計信息。以端口的統計信息為例,控制器通過周期下發Port statistics消息可以獲得交換機端口的統計信息,其返回的統計消息格式如下:

從消息格式中可以發現可獲取到收發的包數、字節數以及這個統計持續的時間。如果把兩個不同時間的統計消息的字節數相減,再除以兩個消息差也即統計時間差則可以得到統計流量速度。如果想得到剩余帶寬則可以用端口最大帶寬減去當前流量帶寬,則得端口剩余帶寬。同理,可以計算出對應流表項或者組表等的統計流量。基于以上計算出來的端口剩余帶寬等數據,可為部署負載均衡等流量優化工程提高數據支撐。

拓撲

拓撲的發現比較容易理解。控制器通過將攜帶dpid+port_no信息的LLDP數據包從對應端口packet_out出去,然后LLDP數據包被對端交換機Packet_in到控制器,最后再由控制器結合Packet_in消息報頭的DPID和in_port和LLDP報文中的DPID和Port_no從而得出一條鏈路信息。依次類推,控制器可以發現全部的鏈路信息,從而發現網絡拓撲。

以上的解決方案需要向每個端口下發packet_out,而此舉會產生很多的OpenFlow消息,消耗OpenFlow channel寶貴的帶寬資源。所以可以采用以下的優化結局方式。

(1)收集swicth features時記錄交換機上端口號和端口mac的對應關系。

(2)棄用port_id的tlv,轉而使用端口的mac作為端口的標記。

(3)下發packet_out時,actions中添加對每個端口的OFPActionSetField(eth_src=port_infor.hw_addr)動作和OFPActionOutput(port_infor.port_no)動作,從而使得僅對交換機下發一個Packet_out就可以完成對所有的端口進行LLDP發送的操作。在每個端口發送數據之前,都需要對數據的src_mac地址置位成端口的mac地址。而控制器收到LLDP的packet_in時,通過mac和port_id的對應關系找出鏈路。通過這種方法可以將packet_out的數目大大降低,從每個端口發送端口數目N個降低至到1個。

以上的解決方案僅能發現OpenFlow的網絡,如果OpenFlow網絡中間存在傳統網絡設備形成的子網絡,則以上的解決方案將會將與傳統網絡連接的端口誤認為是接入端口。

這個問題可以通過LLDP和發送廣播包的方式解決。首先通過LLDP發現OpenFlow的拓撲。然后再往“邊緣端口”(與傳統網絡相連的端口此時也被認為是邊緣端口)發送廣播包,如果廣播包從某一個交換機端口回來,則說明這個端口之外未知的地方還有一些交換設備,則證明這個端口不是主機的接入端口。但是傳統設備如果不通過其他形式去發現還是無法發現具體的網絡拓撲的信息。

總結

本文總結了在SDN網絡中如何發現和測量網絡的一些基礎的信息,比如鏈路的時延和帶寬,網絡的拓撲等等。發現和測量這些基礎的網絡狀態可以用于其他的網絡決策,從而使得網絡運行更加合理,進而提高資源利用率。以上部分內容以實現并公布,比如帶寬測量模塊可查看《SDN網絡感知服務與最短路徑應用》。

作者簡介:

李呈,2014/09-至今,北京郵電大學信息與通信工程學院未來網絡理論與應用實驗室(FNL實驗室)攻讀碩士研究生。

個人博客:www.muzixing.com

鏈接已復制,快去分享吧

企業網版權所有?2010-2024 京ICP備09108050號-6京公網安備 11010502049343號

  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 蛟河市| 甘肃省| 泽库县| 海口市| 上犹县| 竹山县| 乌苏市| 绥滨县| 南充市| 彭州市| 桂阳县| 齐河县| 集贤县| 石楼县| 卫辉市| 普兰店市| 耒阳市| 平潭县| 静宁县| 聂荣县| 洮南市| 菏泽市| 马龙县| 清河县| 襄汾县| 沂源县| 南漳县| 临朐县| 新乡市| 金湖县| 怀仁县| 台湾省| 出国| 临猗县| 乌恰县| 罗山县| 类乌齐县| 崇阳县| 津南区| 洪湖市| 饶平县|