P2P中的NAT穿越方案

2022-06-23 07:24:04 字數 4825 閱讀 3269

1 p2p簡介

p2p即點對點通訊,或稱為對等聯網,與傳統的伺服器客戶端模式有著明顯的區別,傳統的伺服器客戶端模型如圖2所示。p2p這一術語在不同的上下文環境裡可能有不同的內涵,它可以指一種通訊模式、一種邏輯網路模型、一種技術、甚至一種理念。在p2p網路中如圖1所示,所有通訊節點的地位都是對等的,每個節點都扮演著客戶機和伺服器雙重角色,節點之間通過直接通訊實現檔案資訊、處理器運算能力、儲存空間等資源的共享。

p2p網路具有分散性、可擴充套件性、健壯性等特點,這使得p2p技術在資訊共享、實時通訊、協同工作、分布式計算、網路儲存等領域都有廣闊的應用。

圖1p2p結構模型

圖2cs模式

2 nat簡介

目前,ipv4位址資源的緊缺使得nat技術獲得了廣泛的應用。nat技術是一種把內部網路(簡稱為內網)私有ip位址轉換為外部網路(簡稱為外網)公共ip位址的技術,它使得一定範圍內的多台主機只利用乙個公共ip位址連線到外網,可以在很大程度上緩解了公網ip位址緊缺的問題。

3 nat對p2p通訊的影響

nat技術雖然在一定程度上解決了ipv4位址短缺的問題,在構建防火牆、保證網路安全方面都發揮了一定的作用,卻破壞了端到端的網路通訊。nat阻礙主機進行p2p通訊的主要原因是nat不允許外網主機主動訪問內網主機,因為nat裝置上沒有相關**表項,要在nat網路環境中進行有效的p2p通訊,就必須尋找相應的解決方案。本文就著重介紹幾種常見的解決方案。

4 p2p穿越nat的幾種方案

4.1 反向鏈結技術

當通訊的雙方中只有一方位於nat之後時,它們可以利用反向鏈結技術來進行p2p通訊。圖3中client a(擁有內網ip位址10.0.

0.1)位於nat之後,它通過tcp埠1234連線到伺服器(擁有外網ip位址)的tcp埠1235上,nat裝置(擁有外網ip位址155.99.

25.11)為這個連線重新分配了tcp埠62000。client b(擁有外網ip位址138.

76.29.7)也通過tcp埠1234連線到伺服器端口1235上。

client a和client b從伺服器處獲知的對方的外網位址二元組分別為和,它們在各自的本地埠上進行偵聽。

由於client b擁有外網ip位址,所以client a要發起與client b的通訊,那麼它可以直接通過tcp連線到client b。但如果client b嘗試通過tcp連線到client a進行p2p通訊,則會失敗,原因是client a位於nat裝置後,雖然client b發出的tcp syn請求能夠到達nat裝置的埠62000,但nat裝置會拒絕這個連線請求。要想與client a通訊,client b要通過伺服器給client a**乙個連線請求,反過來請求client a連線到client b(即進行反向鏈結),從而建立起它們之間的tcp連線。

圖3反向鏈結示意圖

4.2 udp打洞技術

如果兩個p2p客戶端都位於nat裝置後面,想要進行p2p通訊,那又該如何解決呢?udp打洞技術就是為解決這個問題而應運而生的,它能夠通過中間伺服器實現p2p客戶端互連。該技術在rfc 3027的第5.

1節中有所提及,目前在多種**遊戲協議中已經得到了應用,下面來重點介紹下。

4.2.1 集中伺服器

打洞技術假定客戶端a和客戶端b都可以與公網內的已知集中伺服器建立udp連線,乙個客戶端在集中伺服器上登陸的時候,伺服器記錄下該客戶端的兩對位址二元組資訊,一對是該客戶端與集中伺服器進行通訊的自身的ip位址和埠號,另一對是集中伺服器記錄下的由伺服器「觀察」到的該客戶端實際與自己通訊所使用的ip位址和埠號。我們可以把前一對位址二元組看作是客戶端的內網ip位址和埠號,把後一對位址二元組看作是客戶端的內網ip位址和埠號經過nat轉換後的外網ip位址和埠號。集中伺服器可以從客戶端的登陸訊息中得到該客戶端的內網相關資訊,還可以通過登陸訊息的ip頭和udp頭得到該客戶端的外網相關資訊。

如果該客戶端不是位於nat裝置後面,那麼採用上述方法得到的兩對位址二元組資訊是完全相同的。

4.2.2 建立p2p的session

假定客戶端a要發起對客戶端b的直接連線,具體的「打洞」過程如下:

(1)客戶端a最初不知道如何向客戶端b發起連線,於是客戶端a向集中伺服器傳送訊息,請求集中伺服器幫助建立與客戶端b的udp連線。

(2)集中伺服器將含有客戶端b的外網和內網的位址二元組發給客戶端a,同時,集中伺服器將包含有客戶端a的外網和內網的位址二元組資訊的訊息也發給客戶端b。這樣一來,客戶端a與客戶端b就都知道對方外網和內網的位址二元組資訊了。

(3)當客戶端a收到由集中伺服器發來的包含客戶端b的外網和內網的位址二元組資訊後,客戶端a開始向客戶端b的位址二元組傳送udp資料報,並且客戶端a會自動鎖定第乙個給出響應的客戶端b的位址二元組。同理,當客戶端b收到由集中伺服器發來的客戶端a的外網和內網位址二元組資訊後,也會開始向客戶端a的外網和內網的位址二元組傳送udp資料報,並且自動鎖定第乙個得到客戶端a回應的位址二元組。由於客戶端a與客戶端b互相向對方傳送udp資料報的操作是非同步的,所以客戶端a和客戶端b傳送資料報的時間先後並沒有時序要求。

下面來看下這三者之間是如何進行udp打洞的。在這我們分三種具體情景來討論:

第一種是最簡單的一種情景,兩個客戶端都位於同乙個nat裝置後面,即位於同一內網中;

第二種是最普遍的一種情景,兩個客戶端分別位於不同的nat裝置後面,分屬不同的內網;

第三種是客戶端位於兩層nat裝置之後,通常最上層的nat是由網路提供商提供的,第二層nat是家用的nat路由器之類的裝置提供的。

4.2.3 p2p的兩個客戶端位於同乙個nat裝置後面

首先假設兩個客戶端位於同乙個nat裝置後面,並且位於內網,如圖4所示。客戶端a與集中伺服器建立了udp連線,經過nat轉換後,a的公網埠被對映為62000。客戶端b同樣與集中伺服器建立了udp連線,公網埠對映為62005。

圖4位於同乙個nat裝置後的udp打洞過程

假設客戶端a想通過集中伺服器,發起對客戶端b的連線。客戶端a向集中伺服器發出訊息請求與客戶端b進行連線,集中伺服器將客戶端b的外網位址二元組以及內網位址二元組發給客戶端a,同時把客戶端a的外網以及內網的位址二元組資訊發給客戶端b。客戶端a和客戶端b發往對方公網位址二元組資訊的udp資料報不一定會被對方收到,這取決於當前的nat裝置是否支援不同埠之間的udp資料報能否到達即hairpin轉換特性,無論如何客戶端a與客戶端b發往對方內網的位址二元組資訊的udp資料報是一定可以到達的,內網資料報不需要路由,且速度更快。

客戶端a與客戶端b推薦採用內網的位址二元組資訊進行常規的p2p通訊。

假定nat裝置支援hairpin轉換,具體的hairpin轉換見4.2.5章節,應用程式也應忽略與內網位址二元組的連線,如果客戶端a、客戶端b採用外網的位址二元組做為p2p通訊的連線,這勢必會造成資料報無謂地經過nat裝置,這是一種對資源的浪費。

就目前的網路情況而言,應用程式在「打洞」的時候,最好還是把外網和內網的位址二元組都嘗試一下。如果都能成功,優先以內網位址進行連線。

4.2.4 p2p客戶端位於不同的nat裝置後面

假定客戶端a與客戶端b在不同的nat裝置後面,分屬不同的內網,如圖5所示。客戶端a與客戶端b都經由各自的nat裝置與集中伺服器建立了udp連線,客戶端a與客戶端b的本地埠號均為4321,集中伺服器的公網埠號為1234。在向外的會話中,客戶端a的外網ip被對映為155.

99.25.11,外網埠為62000,客戶端b的外網ip被對映為138.

76.29.7,外網埠為31000。

如下所示:

客戶端a——>本地ip:10.0.0.1,本地埠:4321,外網ip:155.99.25.11,外網埠:62000

客戶端b——>本地ip:10.1.1.3,本地埠:4321,外網ip:138.76.29.7,外網埠:31000

圖5位於不同nat裝置後的udp打洞過程

在客戶端a向伺服器傳送的登陸訊息中,包含有客戶端a的內網位址二元組資訊,即10.0.0.

1:4321;伺服器會記錄下客戶端a的內網位址二元組資訊,同時會把自己觀察到的客戶端a的外網位址二元組資訊記錄下來,即155.99.

25.11:62000。

同理,伺服器也會記錄下客戶端b的內網位址二元組資訊為10.1.1.

3:4321和由伺服器觀察到的客戶端b的外網位址二元組資訊,138.76.

29.7:31000。

無論a與b二者中的任何一方向伺服器傳送p2p連線請求,伺服器都會將其記錄下來的上述的外網和內網位址二元組傳送給a或b。

a、b分屬不同的內網,它們彼此的內網位址在外網中是沒有路由的,所以發往各自內網位址的udp資料報會傳送到錯誤的主機或者根本不存在的主機上。現在假定a的第乙個訊息將發往b的外網位址,如圖5所示。該訊息途經a的nat裝置,並在該裝置上生成乙個會話表項,該會話的源位址二元組資訊是,該位址二元組資訊和客戶端a與伺服器建立連線的時候nat生成的源位址二元組資訊一樣,但它的目的位址不同。

如果a的nat裝置給出的響應是ok的,那麼a的nat裝置將保留a的內網位址二元組資訊,並且所有來自a的源位址二元組資訊為的資料報都沿用a與集中伺服器事先建立起來的會話,外網位址二元組資訊均為。

a向b的外網位址傳送訊息的過程就是「打洞」的過程,從a的內網的角度來看應為從發往,從a在其nat裝置上建立的會話來看,是從發到。

如果a發給b的外網位址二元組的訊息包在b向a傳送訊息包之前到達b的nat裝置,b的nat裝置會認為a發過來的訊息是未經授權的外***,會丟棄掉該資料報。b發往a的訊息包與上述的過程一樣,會在b的nat裝置上建立乙個的會話(通常也會沿用b與集中伺服器連線時建立的會話,只是該會話現在不僅接受由伺服器發給b的訊息,還可以接受從a的nat裝置155.99.

25.11:6200發來的訊息),一旦a與b都向對方的nat裝置在外網上的位址二元組傳送了資料報,就開啟了a與b之間的「洞」,a與b向對方的外網位址傳送資料,等效為向對方的客戶端直接傳送udp資料報了。

一旦應用程式確認已經可以通過往對方的外網位址傳送資料報的方式讓資料報到達nat後面的目的應用程式,程式會自動停止繼續傳送用於「打洞」的資料報,轉而開始真正的p2p資料傳輸。

關於p2p的未來發展模式而提出的p2p策略

晉商貸 p2p業務,它的本質就在於對等這兩個字,本來p2p業務就是建立在對等網際網路上面的,在網際網路上面進行各種發展,是擁有著非常多的優點和優勢的,因為網際網路的人脈廣,資訊強大,非常適合用來發展p2p,而在我們現在的市場上,這個行業發展的可以說是非常不錯的了,據業內人士透露,p2p已經被人們稱為...

p2p貸款平台的特點

當下的社會生活節奏加快,提前消費成為時尚,貸款也充斥在人們生活的各個角落,如 貸款買房,貸款買車,貸款消費等,各種不同的貸款產品和貸款機構也應運而生,貸款平台多樣。然而對於多數急需用錢的客戶,貸款是乙個非常陌生而且複雜的過程,經常沒有辦法找到適合自己的貸款產品,同樣很多優質的貸款產品也找不到相應的使...

揭秘中國P2P的生存邏輯

第三,沒有監管下的p2p最大的問題,是資訊不透明帶來的道德問題。現在市面上有很多很多的p2p,都尚未倒閉,他們是不是就一定沒有現在大家所說的所謂假p2p的幾個特徵?一定沒有高息承諾,一定沒有單筆金額較大,一定沒有組團現象呢?這個問題除了平台運營者自己以外,是不可能有人知道的。這種資訊的極度不透明,是...