一種基於udp協議實現p2p智慧型穿越nat的方案
於仁崗1常州工學院,常州
e-mail:
摘 要: 由於目前nat (network address translation ,網路位址轉換協議)的廣泛運用,處於internet上的公網主機與處於 nat之後的主機建立對等連線是實現 p2p (peer - to - peer ,點對點) 通訊很關鍵的問題。本文在分析了基於 udp(user datagram protocol ,使用者資料報)協議穿透 nat的實現原理的基礎上 ,給出了乙個基於udp協議,根據不同nat型別情況自適應選擇nat穿越方案,實現p2p通訊的實現方案。
中圖分類號: tp273
1. 引 言
nat技術不僅可以暫時解決ipv4中ip位址分配的限制,而且還可以隱藏內部的網路位址資訊,使外界無法直接訪問網內的網路資源,保護了內部網路,所以 nat在防火牆中也得到了非常廣泛的應用。基於以上原因,nat在現有的網路中是必不可少的[1]。
2. udp協議穿越nat的原理及特點
2.1中繼**方式
但是這種通訊方式效率底下,消耗了伺服器的處理能力和網路頻寬, 同時主機之間的資訊等待時間加長,且容納p2p使用者數有限。
2.2反向連線方式
這種方式僅工作在只有乙個主機a在 nat 後面,另外的主機b擁有合法公網 ip 位址[2]。 在試圖建立乙個直接到a 的連線失敗後,主機b 能夠通過伺服器s來中轉乙個請求到主機a ,使 a 發出乙個「反向的」連線請求到主機b。主機a在收到這個要求後,開始發起乙個到b的公網ip位址和埠號上udp連線。這樣a與b就可以相互建立連線了。目前大部分的p2p系統都採用這種方式。
這種工作方式的主要侷限性就是僅適合通訊點中的一方在nat的後面。如果通訊點都在 nat後面,那麼這種方式就行不通了。因此反向連線不是一種通用的解決問題方法.
2.3udp穿孔技術
udp穿孔技術(udp hole punching)是根據建立好的 nat 協議來允許 p2p 應用程式「punch holes」(穿孔) 通過 nat 和防火牆並且相互之間建立直接的連線技術[3]。以下考慮兩種情況典型情況——主機分別位於不同nat後和主機位於相同nat後。
2.3.1 主機位於不同nat後面
2.3.2 主機位於相同nat後面
兩台主機處於相同nat後,即雙方在同一私網內的情況下。由於雙方並不知道這種情況,主機a如果需要連線主機b,仍然向b的外網位址發起連線請求,採用打孔方案進行連線。只有在 nat允許內部的網路主機能夠和內部的其他主機進行udp會話的情況下連線也是可以實現的,但是顯然這種方式是完全沒必要的。同理,當一台主機位於nat後,另一台主機為公網位址時,這種方式雖然可以建立直接連線,但仍然顯得過於麻煩[5]。
由此可見,在通訊雙方同在相同nat內部,或只有一方在nat內部另一方在公網環境中時,打孔方式效率較低下,增加了通訊建立的反應時間,而且還對伺服器s產生不必要的額外負擔。
3. 一種自適應的nat穿越策略的方案
這種穿越策略的實現,需要一台具有公網位址的伺服器,客戶端兩部分的支援。且此p2p應用中的每乙個使用者,都擁有乙個唯一的標識id。
3.1伺服器功能設計
穿越協助伺服器包括三個服務:
1)網路型別監測服務。此服務接收使用者請求並檢測此使用者的網路型別,內網/外網的ip、port資訊,並將這些資訊返回給使用者,以便使用者根據這些資訊選擇策略。
2)查詢服務。如果某id的主機已經在此伺服器上註冊過,則其他主機可以通過此id,在伺服器上查詢到該使用者的網路資訊。
3)**服務。此服務會根據已註冊使用者的資訊,把某使用者的udp包**給另乙個使用者。**的訊息包可以分為兩類:一類是穿越請求,此類請求用於協助主機間的nat打孔。另一類是是**通訊資訊,當所有直接建立udp連線的嘗試失敗後,此服務可以**使用者的通訊資訊,建立使用者間間接的通訊。 - 2 -
3.2客戶端自適應的nat穿越策略設計
假設在位置網路環境下,某主機a需要與主機b建立p2p通訊。首先,任意主機在啟動時都與協助伺服器進行通訊,獲取自身的網路型別與位址資訊,如果是在nat內部則得到的內外網兩種位址資訊,且始終保持和協助通訊伺服器的連線,以便接收伺服器的訊息。
自適應穿越nat實現p2p通訊方案的流程如圖1所示: 圖1 自適應nat穿越策略流程圖
實現原理如下:
1) 判斷主機b是否在nat內部,如果b不在nat內部,則無論a的網路型別如何都可以直接向b發出連線請求,即便a在nat內部也不會影響直接通訊的建立。
2) 如果主機b在nat內部,則主機a需要判斷自己所在的網路型別,如果主機a不在nat內部則採用反向連線策略,主機a向伺服器傳送請求b反向連線的請求,伺服器接到此請求後向主機b傳送反向連線請求和主機a的位址資訊,b收到伺服器請求後,嘗試主動與主機a進行通訊連線。 - 3 -
3) 如果主機a與主機b都在nat內部,這時需要判斷雙方是否處於同一nat中,主機a比較自己與主機b的外網位址,如果位址相同則說明在同一nat中,主機a直接向b的內網位址發出連線請求即可[6]。
4) 如果雙方主機都在nat內部,且外網位址不相同,則說明a與b不在同一nat中,需要使用nat打孔技術。主機a向主機b傳送連線請求的同時,向伺服器發出反向連線請求,並等待接收b的反向連線資訊。
以上過程後,客戶端便完成了直接通訊連線的嘗試,主機a等待b傳送的連線確認資訊。如果接收到連線確認資訊,則證明直接連線建立成功,雙發開始p2p通訊。如果主機a等待主機b的連線資訊超時,則證明nat穿越失敗,雙方無法建立直接連線。雙方只能建立間接通訊連線,主機a所有的通訊訊息都通過協助伺服器**給主機b。
4. 結論
以上策略在建立連線的成功率和效率以及伺服器開銷方面取得了較好的平衡,根據不同網路特點,動態選擇連線策略。對每種情況,動態選取最佳的連線方案。
目前,世界上有關 p2p 的研究專案層出不窮 ,應用也越來越廣。p2p身後所蘊藏著無比的創造力是對p2p寄予厚望的原因所在。在可以預見的未來,隨著對p2p研究的進一步深入和關注p2p的企業逐漸增多,p2p必將進入乙個飛速發展的新時期。
NAT型別及打洞原理
nat是network address translation的縮寫,指的是主機位址與公網ip的對映規則 就是說比如你有乙個pc,連到區域網,然後你要訪問163.com,這時候區域網會你的ip和開啟的位址對映成1個 公網ip port 去訪問163.com 然後163.com發資料給你,它發的位址一...
NAT型別判斷
本文給出nat型別判斷方法。具體實現框圖如下 若server a和server b返回給client的port1和port2相等,則該nat為cone nat,否則為symmetric nat。具體實現框圖如下 若client能收到server b返回的資料,則nat為full cone nat。具...
WebRTC網路基礎 九 第二節 NAT打洞原理
今天我們來看一下nat穿越的原理 nat一共有四種型別,分別是完全錐型nat full cone nat 位址限制錐型nat address restricted cone nat 埠限制錐型nat port restricted cone nat 對稱型nat symmetric nat 對nat...