本文章內容過長,上篇請移步主頁進行觀看。
書接上文,我們繼續來說說NAT在SDWAN中的技術實現。
STUN報文結構
STUN基于UDP傳輸協議報文,協議報文的封裝格式如下圖所示。
圖STUN報文結構
如下圖所示,STUN消息(STUN Message)包括STUN消息頭和STUN消息屬性兩部分。STUN消息頭的長度為20字節,后面跟著零個或多個屬性。
圖STUN消息結構
STUN消息頭包含如下字段:
STUN Message Type:STUN消息類型,長度為14比特。當前僅支持STUN捆綁請求和STUN捆綁響應兩種類型的消息。
Message Length:STUN消息長度,長度為16比特(不包括消息頭長度)。
Magic Cookie:魔術字,長度為32比特。魔術字包含固定值0x2112A442,用于STUN服務器檢測STUN客戶端是否可以識別特定屬性。此外,當STUN與其他協議使用相同的端口號時,通過魔術字可以將STUN和其他協議區分開。
Transaction ID:事務ID,長度為96比特,用于唯一標識一次STUN探測。事務ID由STUN客戶端來選擇。在一次STUN探測中,STUN服務器收到STUN客戶端發送的STUN捆綁請求消息后,回復的STUN捆綁響應消息的事務ID與STUN捆綁請求消息的事務ID相同。同時,STUN服務器根據事務ID來唯一標識STUN客戶端的不同探測請求。
STUN消息屬性采用TLV(Type/Length/Value,類型/長度/值)格式,結構如圖所示。其中,Type和Length字段的長度均為16比特,Value字段的長度可變。
圖STUN消息屬性結構
常見的STUN消息屬性包括如下幾種:
CHANGE-REQUEST:捆綁請求中攜帶的消息屬性,STUN客戶端使用此屬性來請求STUN服務器改變發送捆綁響應報文的IP地址、端口號。
MAPPED-ADDRESS:捆綁響應中攜帶的消息屬性,表示經過地址轉換后的STUN客戶端的IP地址和端口。
XOR-MAPPED-ADDRESS:捆綁響應中攜帶的消息屬性,表示經過地址轉換后的STUN客戶端的IP地址和端口。與MAPPED-ADDRESS不同的是,XOR-MAPPED-ADDRESS屬性中攜帶的IP地址經過了異或(XOR)處理。
RESPONSE-ORIGIN:捆綁響應中攜帶的消息屬性,表示STUN服務器發送數據的IP地址和端口。
OTHER-ADDRESS:捆綁響應中攜帶的消息屬性,表示STUN服務器的另一個IP地址和端口號。假設STUN服務器的IP地址為Y1,替代IP地址為Y2,端口號為YP1,替代端口號為YP2。Da表示STUN客戶端發送捆綁請求的目的IP地址,Dp表示STUN客戶端發送捆綁請求的目的端口號。如果Da為Y1,那么OTHER-ADDRESS中的IP地址為Y2;如果Da為Y2,那么OTHER-ADDRESS中的IP地址為Y1。如果Dp為YP1,那么OTHER-ADDRESS中的端口號為YP2;如果Dp為YP2,那么OTHER-ADDRESS中的端口號為YP1。當STUN客戶端要求STUN服務器使用不同的IP地址發送捆綁響應時,如果Da為Y1,則捆綁響應報文OTHER-ADDRESS中的IP地址為Y2;如果Da為Y2,則OTHER-ADDRESS中的IP地址為Y1。類似地,當STUN客戶端要求STUN服務器使用不同的端口號發送捆綁響應時,如果Dp為YP1,那么OTHER-ADDRESS中的端口號為YP2;如果Dp為YP2,那么OTHER-ADDRESS中的端口號為YP1。
STUN工作機制
STUN客戶端通過和STUN服務器交互STUN協議報文,探測網絡中NAT設備上的NAT映射的類型和NAT過濾的方式,并根據探測結果判斷NAT類型。
1.NAT映射類型探測
假設STUN服務器進行STUN探測使用的IP地址為Y1、Y2,端口號為YP1、YP2。STUN客戶端的IP地址和端口號為(X,XP)。STUN進行NAT映射探測的流程如下圖所示,具體步驟為:
(1)STUN客戶端以Endpoint(X,XP)為源地址和源端口向STUN服務器的外網Endpoint(Y1,YP1)發送捆綁請求。STUN服務器使用Endpoint(Y1,YP1)給STUN客戶端發送捆綁響應,響應內容包括:STUN客戶端經過NAT映射后的外網Endpoint(X1,XP1),以及STUN服務器的另一個外網Endpoint(Y2,YP2)。
(2)STUN客戶端收到STUN服務器發送的捆綁響應報文后,判斷NAT映射后的Endpoint(X1,XP1)是否與內網Endpoint(X,XP)相同:
a. 如果Endpoint(X1,XP1)與Endpoint(X,XP)相同,則SUTN客戶端認為不存在NAT映射。
b. 如果Endpoint(X1,XP1)與Endpoint(X,XP)不同,則STUN客戶端使用第(3)步進行探測。
(3)STUN客戶端以Endpoint(X,XP)向STUN服務器的外網Endpoint(Y2,YP1)發送捆綁請求。STUN服務器使用Endpoint(Y2,YP1)向STUN客戶端發送捆綁響應,響應內容包括:STUN客戶端經過NAT映射后的外網Endpoint(X2,XP2)。
(4)STUN客戶端收到STUN服務器發送的捆綁響應報文后,判斷NAT映射后的Endpoint(X2,XP2)是否與第(1)步中NAT映射后的Endpoint(X1,XP1)相同:
a. 如果Endpoint(X2,XP2)與Endpoint(X1,XP1)相同,則STUN客戶認為NAT映射類型為EIM。
b. 如果Endpoint(X2,XP2)與Endpoint(X1,XP1)不同,則STUN客戶端使用第(5)步進行探測。
(5)STUN客戶端以Endpoint(X,XP)向STUN服務器的外網Endpoint(Y2,YP2)發送捆綁請求。STUN服務器使用Endpoint(Y2,YP2)向STUN客戶端發送捆綁響應,響應內容包括:STUN客戶端經過NAT映射后的外網Endpoint(X3,XP3)。
(6)STUN客戶端收到STUN服務器發送的捆綁響應報文后,判斷NAT映射后的Endpoint(X3,XP3)是否與第(3)步中NAT映射后的Endpoint(X2,XP2)相同:
a. 如果Endpoint(X3,XP3)與Endpoint(X2,XP2)相同,則STUN客戶認為NAT映射類型為ADM。
b. 如果Endpoint(X3,XP3)與Endpoint(X2,XP2)不同,則STUN客戶認為NAT映射類型為APDM。
NAT映射類型探測流程圖
2.NAT過濾方式探測
假設STUN服務器的IP地址為Y1,替代IP地址為Y2,端口號為YP1,替代端口號為YP2。STUN客戶端的IP地址和端口號為(X,XP)。STUN進行NAT映射探測的流程如下圖所示,具體步驟為:
(1)STUN客戶端以Endpoint(X,XP)為源地址和源端口向STUN服務器的外網Endpoint(Y1,YP1)發送捆綁請求,請求報文中攜帶CHANGE-REQUEST屬性,要求STUN服務器改變IP地址和端口號來發送捆綁響應。STUN服務器使用Endpoint(Y2,YP2)向STUN客戶端發送捆綁響應。
(2)STUN客戶端根據是否能收到響應報文進行如下判斷:
a. 如果STUN客戶端收到了捆綁響應報文,則STUN客戶端認為NAT過濾類型為EIF。
b. 如果STUN客戶端未收到捆綁響應報文,則STUN客戶端使用第(3)步進行探測。
(3)STUN客戶端以Endpoint(X,XP)向STUN服務器的外網Endpoint(Y1,YP1)發送捆綁請求,請求報文中攜帶CHANGE-REQUEST屬性,要求STUN服務器改變端口號來發送捆綁響應。STUN服務器使用Endpoint(Y1,YP2)給STUN客戶端發送捆綁響應。
(4)STUN客戶端根據是否能收到響應報文進行如下判斷:
a. 如果STUN客戶端收到了捆綁響應報文,則STUN客戶端認為NAT過濾類型為ADF。
b. 如果STUN客戶端未收到捆綁響應報文,則STUN客戶端認為NAT過濾類型為APDF。
圖NAT過濾方式探測流程圖
STUN客戶端重傳機制
STUN基于UDP傳輸協議報文,STUN協議報文有可能在傳輸過程中被丟棄。通過STUN客戶端的重傳機制可以提高STUN協議報文傳輸的可靠性。具體機制如下:
(1)STUN客戶端發送捆綁請求報文后,如果在一定時間沒有收到捆綁響應報文,STUN客戶端會以一定的時間間隔重傳捆綁請求報文。
(2) 當STUN客戶端收到捆綁響應報文,或者STUN報文的重傳次數達到最大,STUN客戶端將停止重傳。
(3) 如果STUN客戶端重傳STUN報文的次數達到最大后,還未收到捆綁響應報文,則STUN客戶端認為捆綁請求報文傳輸失敗,無法進行STUN探測。
(部分內容素材來源網絡,侵權請聯系刪除)
審核編輯 黃昊宇
-
NAT
+關注
關注
0文章
145瀏覽量
16256 -
sdwan
+關注
關注
2文章
124瀏覽量
7242
發布評論請先 登錄
相關推薦
評論