Network Test Framework - In-band Network Telemetry(INT)
2017年4月23日
介紹
INT是被設計用來收集和報告網絡狀態的一個框架,他通過數據平面實現,不需要控制平面的干涉。在INT的架構模型裏,packet包含被稱網絡設備爲“telemetry instruction”的header field。這些instruction告訴支持INT的設備它需要收集什麼狀態(信息),並將這些信息寫入packet。INT traffic source(應用,網絡終端,etc.)能夠將這些instruction嵌入到普通或者特殊的packet中。同樣,INT traffic sink取回這些instruction的結果,以此準確地監控着數據層面的狀態。
一些traffic sink的行爲例子如下所述:
- OAM
- Real-time control or feedback loops
- Network Event Detection
INT架構模型具有通用性,有面向高層應用的傾向:
- Network troubleshooting
- Advanced congestion control
- Advanced routing
- Network data-plane verification
術語
INT header:任何包含INT information的packet header。這裏有兩種類型:Hop-by-Hop和Destination。
INT Packet:任何包含INT Header的packet。
INT Instruction:被嵌入的packet instruction指明瞭那些INT Metadata需要被收集,被收集的數據會被寫入到INT header。
INT Source:一個創造並嵌入INT header到packet中的受信任的實體。INT header至少要包含INT Instruction。
INT Sink:一個取出INT header並收集包含在INT header中的路徑狀態的受信任的實體。INT Sink負責移除INT header,使得INT對上層透明。
INT Transit Hop:一個把它自己的INT Metadata加入到INT Pakcet的網絡設備。
INT Metadata:INT source或者INT Transit Hop插入到INT Header的信息。metadata的例子如下所示。
監控對象(Metadata)
理論上,我們可以收集任何交換機內部的信息。然而在實際中,我們如果定義一個小的通用子集則能夠使得INT適用於更多的設備。
每個metadata有一個uint32_t的值編碼而成,主要分爲以下幾類:
- 交換機信息
- 交換機ID
- 報文進入信息
- 入口端口號
- 進入時的時間戳
- 報文發出信息
- 出口端口號
- 在設備中停留的時間
- 出口端口的鏈路利用率
- 緩衝區信息
- Queue Occupation??
- Queue Congestion Status??
處理INT Header
INT Header類型
這裏有兩種INT Header類型:Hop-by-Hop和Destination。一個給定的packet可能會有這兩者之一或者兩者都有(神奇)。當這兩者都存在與packet中時,Hop-by-Hop必須在Destination之前。
- Hop-by-Hop:中間設備必須處理該類型的packet header。
- Destination:中間設備必須無視該類型的packet header,該類型必須由INT Sink處理。
處理INT Packet
略
Header 格式
各種封裝的INT
INT Header的位置特意沒有被指定,這意味着INT header可以作爲任何封裝類型的payload或者option來插入。唯一的限制就是封裝的header要有足夠的空間來承載INT信息,並且source和sink在INT的位置上有共識。下面就是有可能被嵌入的封裝,當然不限於此:
- INT over VXLAN(作爲VXLAN option,每個GPE extension)
- INT over Geneve(作爲Geneve option)
- INT over NSH(作爲NSH option)
- INT over TCP(作爲TCP option或payload)
- INT over UDP(作爲UDP payload)
這裏我們來看看INT over VXLAN,這裏的例子使用VXLAN通用協議擴展來搬運INT Header。
鏈路上的Header創建
在INT模型中,packet轉發路徑上的每一個設備都會創建一個INT header。爲了避免在轉發loop或其他情況下的header空間的浪費,這裏強烈建議限制設備可添加的INT metadata field數量。
Header格式-INT over VXLAN
VXLAN Header:
VXLAN GPE Header:
VXLAN是一種爲網絡虛擬化設計的通用的管道協議並受到大多數軟件虛擬交換機的和硬件網絡單元的支持,他的詳細介紹可以參考Vxlan基礎理解。VXLAN header總共有8字節,他自己用了4個,剩餘空間的總數僅允許攜帶一個的網絡狀態信息,但我們希望能夠攜帶的信息足夠的多。
VXLAN定義了將以太網幀封裝在外部UDP報文中的封裝格式。VXLAN-GPE(Generic Protocol Extension VXLAN)則是對VXLAN的擴展,從而使得可以封裝任意層次的數據包,另外還提供了對OAM(Operations ,Administration and Management)協議的支持。VXLAN-GPE擴展的方法是通過對外層VXLAN 頭的一些保留位進行修改。如上圖所示,VXLAN-GPE對VXLAN頭做了以下4方面的變動:
1)增加封裝協議域(Next Protocol Field):該域用於指明被封裝的數據報的協議類型,當前已定義的Next Protocol值包括:
0x1 : IPv4
0x2 : IPv6
0x3 : Ethernet
0x4 : Network Service Header(NSH)
0x5 : In-band Network Telemetry Header(INT Header)
NSH頭包括兩部分內容:
1)服務路徑相關信息(服務節點要利用它來選擇服務路徑上的下一個服務節點)。
2)爲途徑的網絡設備和服務設備提供所需的元數據。NSH服務頭是由具有服務分類功能的設備或應用添加,該設備或應用可以確定哪些數據包需要服務,需要哪些服務,相應地經過怎樣的服務路徑。
2)增加P bit域:Flag域中的第5位(從零開始編號)被定義爲P bit,其中如果8比特的封裝協議域(Next Protocol)存在,則P bit需要設置爲1。如果P bit爲0,則按照標準的VXLAN協議進行解析。
3)增加O bit域:Flag的第7位被定義爲O(OAM)bit。當O bit被設置爲1時,內層的被封裝數據包爲OAM包,從而觸發OAM包的處理過程。
4)增加Ver域:Flag的第8和第9兩位被定義爲Ver(Version),用於指明VXLAN-GPE版本。
INT shim header:
INT Metadata Header格式
INT Metadata Header and Metadate Stack:
- 每個INT Metadata header是8B長。
- INT Instruction被寫入到16bit的INT Instruction field,每一位的含義如下:
- bit0 (MSB): Switch ID
- bit1: Ingress port ID
- bit2: Hop latency
- bit3: Queue occupancy
- bit4: Ingress timestamp
- bit5: Egress port ID
- bit6: Queue congestion status
- bit7: Egress port tx utilization
- The remaining bits are reserved.
- 其他field:控制作用,與INT packet的行爲有關,詳見spec。
例子:
Example with VXLAN GPE encapsulation: