STUN详解
STUN是一個簡單的客戶端 – 服務器協議。客戶端發送一個請求到一臺服務器,而服務器返回一個響應。
有兩種類型的請求:
綁定請求(通過UDP發送)和共享密鑰請求(發送TLS (通過TCP)) 。
共享秘密請求服務器返回一個臨時的用戶名和密碼。此用戶名和密碼用于在隨后的綁定請求和綁定響應,身份驗證和消息完整性的目的。
STUN客戶和STUN服務器之間可能有一個或多個NAT 。其結果是,由服務器接收該請求的源地址將通過在NAT最接近服務器創建的映射地址。
STUN服務器復制該源IP地址和端口到一個STUN綁定響應,并將其發送回源IP地址和端口
的STUN請求。對于所有類型的NAT,這種響應都將能夠到達STUN客戶。
一個STUN服務器必須準備接收綁定請求在四個
地址/端口組合:(A1, P1 ),(A2 ,P1) , (A1, P2)和(A2 ,
P2)。
( A1 , P1)表示主地址和端口,而這些都是通過下面的客戶端發現程序中獲得的值。
通常情況下, P1的端口是3478 (默認的STUN端口)。 A2和P2是任意的。 A2和P2都通過CHANGED – ADDRESS屬性告訴客戶端的,如下所述。
一旦建立套接字,客戶端發送綁定請求。可靠性通過客戶端重傳完成的。客戶應在100ms的時間間隔仍未收到響應后開始重傳請求,第二次在200ms的時間間隔仍未收到響應則開始重傳,每次等待重傳增加一倍的時間,直到時間間隔達到1.6秒。重傳繼續以1.6秒的間隔,直到收到響應,或總共9個請求已被發送。如果最后一個請求已發送1.6秒鐘后仍未收到響應,客戶應考慮該鏈接已經失敗。換句話說,請求將在時間0毫秒, 100毫秒, 300毫秒, 700毫秒, 1500毫秒, 3100ms,4700ms , 6300ms和7900ms發送。在9500ms如果沒有收到響應客戶認為請求已經失敗。
以下是stun過程解析:?
test1:
客戶端發送一個STUN綁定請求到服務器,在屬性CHANGE-REQUEST中在不設置任何標志,并且沒有 RESPONSE-ADDRESS屬性。這會導致服務器會從接收請求的的地址和端口發送響應返回給客戶端。
test2:
客戶端發送一個帶有同時設置“改變IP”和“改變端口” 的CHANGE-REQUEST屬性的綁定請求
test3:
客戶端發送一個帶有設置“改變端口” 的CHANGE-REQUEST屬性的綁定請求
############################################################
?完全NAT(full-cone NAT): test1(MAPPED-ADDRESS屬性里的IP和端口與本地IP地址、端口不同)->test2(收到響應)
?對稱NAT(symmetric NAT): test1(收到響應)->(向另一IP端口)test1(收到響應但響應里面的 MAPPED-ADDRESS 屬性里的IP和端口與第一次的不一樣)
IP受限NAT: 判斷完對稱NAT之后->test3(收到響應)
端口受限NAT: 判斷完對稱NAT之后->test3(沒有收到響應)
#############################################################
客戶端首先發起第一次test1,如果這個測試沒有響應,客戶端知道了,這個網絡是不能夠運行UDP協議的連接。如果測試產生了一個響應,客戶端檢查響應的MAPPED-ADDRESS屬性 。如果這個地址、端口和本地IP地址、端口是相同的,客戶端知道它不是在NAT后面了。
然后它執行的測試二。如果收到一個響應,客戶端知道它有開放互聯網(或者,至少在一個有一個防火墻其行為像全錐型NAT ,但是沒有轉發) 。如果沒有響應被接收時,客戶端知道它的對稱的UDP防火墻后面(主機出口處沒有NAT設備,但有防火墻,且防火墻規則如下:從主機UDP端口A發出的數據包保持源地址,但只有從之前該主機發出包的目的IP/PORT發出到該主機端口A的包才能通過防火墻.)。
第一次test1中如果MAPPED-ADDRESS屬性里的IP和端口與本地IP地址、端口不同,
客戶端知道自己在NAT后面,他再執行test2如果這個響應被收到了則客戶端位于
full-cone NAT(全錐形NAT),如果沒有收到響應,客戶端將繼續執行第二次test1,但是這次這樣做:綁定請求發向的地址不再是之前的地址而是第一次test1的響應中CHANGED-ADDRESS 屬性里的IP地址和端口。
如果這次收到的響應里面的 MAPPED-ADDRESS 屬性里的IP和端口與第一次的不一樣,那么客戶端就是在symmetric NAT(對稱NAT)后面,如果這個地址是一樣的那么客戶端要么是在限制NAT之后要么是在端口受限NAT之后,要決定具體在那個NAT之后要進行test3,如果收到響應在是在受限NAT之后,如果沒有響應收到的,其背后的一個端口受限NAT 。
在多個NAT之后的情況客戶機與因特網之間,該類型被發現會是在客戶機和之間最嚴格的NAT的類型互聯網。
總結
- 上一篇: Attachment assignmen
- 下一篇: SAP CRM和Cloud for Cu