p2p之nat穿透原理介紹
一次專案中,對於主動協議接入的裝置,客戶希望能夠裝置端直接推送碼流到客戶端以此減少中心**的負載。所以對p2p這塊方案做了了解,這裡做下整理。
即對等計算機網路,是一種在對等者(peer)之間分配任務和工作負載的分布式應用架構 ,是對等計算模型在應用層形成的一種組網或網路形式。「peer」在英語裡有「對等者、夥伴、對端」的意義。因此,從字面上,p2p可以理解為對等計算或對等網路。國內一些**將p2p翻譯成「點對點」或者「端對端」,學術界則統一稱為對等網路(peer-to-peer networking)或對等計算(peer-to-peer computing),其可以定義為:網路的參與者共享他們所擁有的一部分硬體資源(處理能力、儲存能力、網路連線能力、印表機等),這些共享資源通過網路提供服務和內容,能被其它對等節點(peer)直接訪問而無需經過中間實體。在此網路中的參與者既是資源、服務和內容的提供者(server),又是資源、服務和內容的獲取者(client)
優點
缺點
計算能力和儲存共享
即時通訊系統
遊戲網路電視
等等我們來看一組網路模型:
分別在兩個網段內的c和d該如何來建立通訊呢?
一般情況是這樣的:
通過乙個中心服務e,c和d分別連線到e,然後通過e來**資料,這樣就行完成c和d的相互通訊。但是這種方式,針對使用者端較多,且傳輸資料量較大時,中心節點的負載會急劇增大,導致構建中心服務的成本很高。如果能夠端到端直接通訊則中心成本能夠降低很多。
nat(network address translation,網路位址轉換)是2023年提出的。當在專用網內部的一些主機本來已經分配到了本地ip位址(即僅在本專用網內使用的專用位址),但現在又想和網際網路上的主機通訊(並不需要加密)時,可使用nat方法。
這種方法需要在專用網連線到網際網路的路由器上安裝nat軟體。裝有nat軟體的路由器叫做nat路由器,它至少有乙個有效的外部全球ip位址。這樣,所有使用本地位址的主機在和外界通訊時,都要在nat路由器上將其本地位址轉換成全球ip位址,才能和網際網路連線。
另外,這種通過使用少量的公有ip 位址代表較多的私有ip 位址的方式,將有助於減緩可用的ip位址空間的枯竭。在rfc1632中有對nat的說明。
nat上有關係對應表,當nat內部位址向外部目標位址傳送報文時,會產生乙個內部位址和nat對外位址的對應關係。
同時,也會有nat對外位址和目標位址的對映關係
一般來講, nat可以分為四種型別,分別是:
如上圖,如果b在nat a上有乙個對外的對映位址,那麼不管是c還是d都能通過該對映位址訪問到b.
對於目標ip的任意埠均可以訪問nat對外對映的位址。即,只限制ip不限制埠。
同乙個內部位址,向不同目標位址傳送報文時,使用的nat對外位址相同
這裡示例介紹對稱型中限制最多的穿透過程(兩個埠限制型的nat穿透過程),因為這個過程會包含所有限制更少的穿透過程。
1. 首先,c和d連線乙個中心服務e.
2. 通過中心服務e交換雙方的對外通訊位址
3. c向從e拿到的d的外部通訊位址傳送乙個報文,此時nat b沒有該路由資訊,報文會被丟棄,但是nat a上會有nat a 到 nat b的對映。
4. d向從e拿到的d的外部通訊位址傳送乙個報文,此時nat a上已經有對應路由資訊,所以資訊能夠通過nat a傳送到c。
5. 此時nat b上也有對nat a的對映關係,至此c和d的p2p通訊連線建立。
由於對稱型nat對於不同的目的位址,對外對映埠會發生改變,所以上述過程將無法直接打通,目前常用的方法是埠猜想,主要是基於大部分對稱nat一般新分配的埠是向下自增的原理。這裡不做具體介紹,過程基本和上述描述一致。
P2P之NAT穿透問題
stun協議 rfc3489 詳見http www.ietf.org rfc rfc3489.txt 提出了4種nat型別的定義及其分類,並給出了如何檢測 在用的nat究竟屬於哪種分類的標準。但是,具體到p2p程式如何應用stun協議及其分類法穿越nat,則是仁者見仁 智者見智。因為stun協議並沒...
p2p之Tcp穿透路由Nat
終於解決了關於基於tcp的p2p的內網穿透問題 其實本該在去年就解決這個問題的,寫出來了,只是一直沒時間去驗證。這幾天重寫了一下。中國的網路基本是全是內網,通過路由的nat轉換 udp的p2p實現起來非常簡單。只是udp太不穩定了,如果網路快的情況下丟包太嚴重。所以一直想是否能通過tcp來代替udp...
P2P 之 UDP穿透NAT的原理與實現
原創 shootingstars 參考 http midcom p2p.sourceforge.net draft ford midcom p2p 01.txt 論壇上經常有對p2p原理的討論,但是討論歸討論,很少有實質的東西產生 源 呵呵,在這裡我就用自己實現的乙個源 來說明udp穿越nat的原理...