利用P2P點對點技術實現UDP內網穿透

2021-05-22 03:12:51 字數 1835 閱讀 6819

點對點技術在近幾年應用很廣,主要代表有qq、skype、bt、迅雷、ppstream、pplive、qvod。我們可以看到,只要是資料量很大,而一般利用中轉伺服器又需要一定規模投入的應用,我們都可以考慮用p2p技術。有兩個好處:1.可以降低成本與投入。2.提高傳輸效能。

從上面的描述,我們可以得出兩個結論,做好p2p應用至少需要解決兩個問題:1.實現內網之間機器的網路通訊。2.需要解決udp出現的資料傳輸不穩定問題。

先說第一點,內網穿透,假設一台在nat211.133.*後的192.168.1.77:8000要向nat211.134.*後的192.168.1.88:9000傳送資料,假設你向211.134.*這個ip位址的9000埠直接傳送資料報,則資料報在到達nat211.134.*之後,會被當做無效非法的資料報被丟棄,nat在此時相當於乙個防火牆,會對沒有建立起有效session的資料報進行拒絕轉遞。當然,你也不能直接用內網位址192.168.1.88進行傳送資料報,這就好比你在廣州要打**到上海的某個地方,如果你不加區號,直接撥打區域內**是件很愚蠢的事。

那我們要怎麼實現穿透?首先我們要認識nat裝置,nat英文全拼是network address translator(網路位址轉換器),說白了就是凡是經過nat發出去的資料報,都會通過一定的埠轉換(而非使用原埠)再發出去,也就是說內網和外網之間的通訊不是直接由內網機器與外網nat進行,而是利用內網對外網的nat建立起session與外網nat的session進行。然後,根據session的不同,nat主要分成兩種:symmetric napt以及cone napt。簡單的說,symmetric napt是屬於動態埠對映的nat,而cone napt是屬於靜態埠對映的nat。而市場上目前大多屬於後者,cone的英文意思錐,意思就是乙個埠可以對外部多台nat裝置通訊。這個也正是我們做點對點穿透的基本,是我們所希望的,否則現在的大部分點對點軟體將無法正常使用。

像上面的例子,nat211.133.*和nat211.134.*之間需要進行通訊,但開始不能直接就發資料報,我們需要乙個中間人,這個就是外部索引伺服器(我們假設是211.135.*:7000),當nat211.133.*向211.135.*:7000傳送資料報,211.135.*:7000是可以正常接收到資料,因為它是屬於對外型開放的服務埠。當211.135.*:7000收到資料報後可以獲知nat211.133.*對外通訊的臨時session資訊(這個臨時的埠,假設是6000會過期,具體的時間不同,但我個人的測試是每30秒傳送乙個心跳包keep住連線以保證埠維持住通訊連線不斷開),索引伺服器此時應將此資訊儲存起來。而同時,nat211.134.*也在時刻向索引伺服器傳送心跳包,索引伺服器就向nat211.134.*傳送乙個通知,讓它向nat211.133.*:6000傳送探測包(這個資料報最好多發幾個),nat211.133.*在收到通知包之後再向索引伺服器傳送反饋包,說明自己已經向nat211.133.*:6000傳送了探測包,索引伺服器在接收到反饋包之後再向nat211.133.***反饋包,nat211.133.*在接收到資料報之後再向原本要請求的nat211.134.*傳送資料報,此時連線已經打通,實現穿透,nat211.134.*會將資訊**給192.168.1.88的9000埠。

對於symmetric napt的情況,網上有人說可以通過探測埠的方式,不過成功率並不高,我建議可用伺服器進行中轉。另外,最好在資料報傳送前先檢測是否進行的是同個nat的情況,也就是內網發內網,如果是,直接傳送即可,而無需通過外網再繞回來。

其次關於第二點,解決udp傳輸的不穩定問題,其實這裡涉及到另乙個方面的知識,就是滑動視窗的東西,可以開乙個緩衝區用於迴圈接收資料以及重組,另外加上超時重發機制以及確認傳送機制,有點像tcp的傳輸原理,不過如果處理的好,效率絕對比採用tcp的方式要高。另外對於滑動視窗機制的知識在這裡就不說了,有興趣可以上網找找資料。

利用P2P點對點技術實現UDP內網穿透

點對點技術在近幾年應用很廣,主要代表有qq skype bt 迅雷 ppstream pplive qvod。我們可以看到,只要是資料量很大,而一般利用中轉伺服器又需要一定規模投入的應用,我們都可以考慮用p2p技術。有兩個好處 1.可以降低成本與投入。2.提高傳輸效能。從上面的描述,我們可以得出兩個...

C 下用P2P技術實現點對點聊天

p2p技術簡介 p2p,英文peer to peer的縮寫,中譯為對等互聯或點對點技術。p2p技術可以讓使用者可以直接連線到其他使用者的計算機,進行檔案共享與交換,同時p2p在深度搜尋 分布計算 協同工作等方面也大有用途。目前internet的儲存模式是 內容位於中心 而p2p技術的運用將使inte...

C 下用P2P技術實現點對點聊天

p2p技術簡介 理解p2p技術的最好方法莫過於仔細觀察並理解乙個實際的p2p應用程式。c 作為微軟.net戰略的重要棋子,對網路程式設計提供了很好的支援和優化。本文就通過乙個程式,向大家介紹一下c 下的p2p程式設計的方法和實現機理。本文的這個程式不是很有用,但卻很直觀地給出了p2p 點對點 程式設...