NAT型別 及其 檢測 詳解

2021-05-17 11:25:40 字數 4132 閱讀 3264

p2p的nat研究

第一部分:nat介紹

第二部分:nat型別檢測

第一部分: nat介紹

各種不同型別的nat(according to rfc)

full cone nat:

內網主機建立乙個udp socket(localip:localport) 第一次使用這個socket給外部主機傳送資料時nat會給其分配乙個公網(publicip:publicport),以後用這個socket向外面任何主機傳送資料都將使用這對(publicip:publicport)。此外,任何外部主機只要知道這個(publicip:publicport)就可以傳送資料給(publicip:publicport),內網的主機就能收到這個資料報

restricted cone nat:

內網主機建立乙個udp socket(localip:localport) 第一次使用這個socket給外部主機傳送資料時nat會給其分配乙個公網(publicip:publicport),以後用這個socket向外面任何主機傳送資料都將使用這對(publicip:publicport)。此外,如果任何外部主機想要傳送資料給這個內網主機,只要知道這個(publicip:publicport)並且內網主機之前用這個socket曾向這個外部主機ip傳送過資料。只要滿足這兩個條件,這個外部主機就可以用自己的(ip,任何埠)傳送資料給(publicip:publicport),內網的主機就能收到這個資料報

port restricted cone nat:

內網主機建立乙個udp socket(localip:localport) 第一次使用這個socket給外部主機傳送資料時nat會給其分配乙個公網(publicip:publicport),以後用這個socket向外面任何主機傳送資料都將使用這對(publicip:publicport)。此外,如果任何外部主機想要傳送資料給這個內網主機,只要知道這個(publicip:publicport)並且內網主機之前用這個socket曾向這個外部主機(ip,port)傳送過資料。只要滿足這兩個條件,這個外部主機就可以用自己的(ip,port)傳送資料給(publicip:publicport),內網的主機就能收到這個資料報

symmetric nat:

內網主機建立乙個udp socket(localip,localport),當用這個socket第一次發資料給外部主機1時,nat為其對映乙個(publicip-1,port-1),以後內網主機傳送給外部主機1的所有資料都是用這個(publicip-1,port-1),如果內網主機同時用這個socket給外部主機2傳送資料,第一次傳送時,nat會為其分配乙個(publicip-2,port-2), 以後內網主機傳送給外部主機2的所有資料都是用這個(publicip-2,port-2).如果nat有多於乙個公網ip,則publicip-1和publicip-2可能不同,如果nat只有乙個公網ip,則port-1和port-2肯定不同,也就是說一定不能是publicip-1等於 publicip-2且port-1等於port-2。此外,如果任何外部主機想要傳送資料給這個內網主機,那麼它首先應該收到內網主機發給他的資料,然後才能往回傳送,否則即使他知道內網主機的乙個(publicip,port)也不能傳送資料給內網主機,這種nat無法實現udp-p2p通訊。

第二部:nat型別檢測

前提條件:有乙個公網的server並且繫結了兩個公網ip(ip-1,ip-2)。這個server做udp監聽(ip-1,port-1),(ip-2,port-2)並根據客戶端的要求進行應答。

第一步:檢測客戶端是否有能力進行udp通訊以及客戶端是否位於nat後?

客戶端建立udp socket然後用這個socket向伺服器的(ip-1,port-1)傳送資料報要求伺服器返回客戶端的ip和port, 客戶端傳送請求後立即開始接受資料報,要設定socket timeout(300ms),防止無限堵塞. 重複這個過程若干次。如果每次都超時,無法接受到伺服器的回應,則說明客戶端無法進行udp通訊,可能是防火牆或nat阻止udp通訊,這樣的客戶端也就不能p2p了(檢測停止)。

當客戶端能夠接收到伺服器的回應時,需要把伺服器返回的客戶端(ip,port)和這個客戶端socket的(localip,localport)比較。如果完全相同則客戶端不在nat後,這樣的客戶端具有公網ip可以直接監聽udp埠接收資料進行通訊(檢測停止)。否則客戶端在nat後要做進一步的nat型別檢測(繼續)。

第二步:檢測客戶端nat是否是full cone nat?

客戶端建立udp socket然後用這個socket向伺服器的(ip-1,port-1)傳送資料報要求伺服器用另一對(ip-2,port-2)響應客戶端的請求往回發乙個資料報,客戶端傳送請求後立即開始接受資料報,要設定socket timeout(300ms),防止無限堵塞. 重複這個過程若干次。如果每次都超時,無法接受到伺服器的回應,則說明客戶端的nat不是乙個full cone nat,具體型別有待下一步檢測(繼續)。如果能夠接受到伺服器從(ip-2,port-2)返回的應答udp包,則說明客戶端是乙個full cone nat,這樣的客戶端能夠進行udp-p2p通訊(檢測停止)。

第三步:檢測客戶端nat是否是symmetric nat?

客戶端建立udp socket然後用這個socket向伺服器的(ip-1,port-1)傳送資料報要求伺服器返回客戶端的ip和port, 客戶端傳送請求後立即開始接受資料報,要設定socket timeout(300ms),防止無限堵塞. 重複這個過程直到收到回應(一定能夠收到,因為第一步保證了這個客戶端可以進行udp通訊)。

用同樣的方法用乙個socket向伺服器的(ip-2,port-2)傳送資料報要求伺服器返回客戶端的ip和port。

比較上面兩個過程從伺服器返回的客戶端(ip,port),如果兩個過程返回的(ip,port)有一對不同則說明客戶端為symmetric nat,這樣的客戶端無法進行udp-p2p通訊(檢測停止)。否則是restricted cone nat,是否為port restricted cone nat有待檢測(繼續)。

第四步:檢測客戶端nat是否是restricted cone nat還是port restricted cone nat?

客戶端建立udp socket然後用這個socket向伺服器的(ip-1,port-1)傳送資料報要求伺服器用ip-1和乙個不同於port-1的埠傳送乙個udp資料報響應客戶端, 客戶端傳送請求後立即開始接受資料報,要設定socket timeout(300ms),防止無限堵塞. 重複這個過程若干次。如果每次都超時,無法接受到伺服器的回應,則說明客戶端是乙個port restricted cone nat,如果能夠收到伺服器的響應則說明客戶端是乙個restricted cone nat。以上兩種nat都可以進行udp-p2p通訊。

注:以上檢測過程中只說明了可否進行udp-p2p的打洞通訊,具體怎麼通訊一般要借助於rendezvous server。另外對於symmetric nat不是說完全不能進行udp-p2p達洞通訊,可以進行埠**打洞,不過不能保證成功。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1 網路位址轉換(nat)的型別劃分

按照埠號轉換與否,nat可以分為以下兩種:

(1)basic nat:將私網主機的私有ip位址轉換成公網ip位址,但並不轉換tcp/udp埠資訊。

(2)network address port translation(napt):napt將單獨的公網ip位址和內部多台主機進行繫結,當不同的內部主機和外部通訊時,nat不僅將內部主機的私有ip轉換為公網ip,而且連埠號一起轉換。

按照埠號的分配情況,napt又可以分為以下兩種:

(1)symmetric nat:當同乙個內部主機向不同的外網主機發起多個會話時,symmetric nat為這些會話分配不同的埠,symmetric nat能夠區別多個不同的會話並進行位址轉換。

(2)cone nat:與symmetric nat不同,當同乙個內部主機向不同的外網主機發起多個會話時,cone nat為這些會話分配同乙個埠,並通過判斷資料報的**(即反饋資料報中的ip位址和埠)來維持會話。所分配的同乙個埠在所有會話結束後才收回。

由於當前的nat幾乎都是cone nat,所以本文只是基於cone nat進行了研究,後面出現的nat要是不特別說明,指的是cone nat。

路由器NAT 型別檢測實現

完全圓錐型nat full cone nat 受限圓錐型nat address restricted cone nat 埠受限圓錐型nat port restricted cone nat 對稱型nat symmetric nat 又稱為雙向nat,大型公司網路中經常採用的 所謂圓錐型nat是指內網...

NAT的四種型別及型別檢測

考慮到udp的無狀態特性,目前針對其的nat實現大致可分為full cone restricted cone port restricted cone和symmetric nat四種。值得指出的是,對於tcp協議而言,一般來說,目前nat中針對tcp的實現基本上是一致的,其間並不存在太大差異,這是因...

NAT的四種型別及型別檢測

考 慮到udp的無狀態特性,目前針對其的nat實現大致可分為full cone restricted cone port restricted cone和symmetric nat四種。值得指出的是,對於tcp協議而言,一般來說,目前nat中針對tcp的實現基本上是一致的,其間並不存在太大差異,這是...