国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 網絡通信 > 正文

P2P網絡NAT介紹

2020-04-29 13:42:06
字體:
來源:轉載
供稿:網友
  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類型檢測(繼續)。
(責任編輯:VEVB)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丘北县| 招远市| 宁波市| 嘉峪关市| 宜兰县| 南木林县| 旬阳县| 报价| 新巴尔虎左旗| 罗田县| 富顺县| 龙岩市| 金昌市| 襄城县| 峡江县| 辰溪县| 绥中县| 玉溪市| 凉山| 安溪县| 眉山市| 柏乡县| 孙吴县| 湖南省| 巩留县| 黑龙江省| 汉源县| 宁国市| 常宁市| 鄂伦春自治旗| 公安县| 东乌珠穆沁旗| 崇州市| 江阴市| 汝州市| 乌拉特中旗| 昌黎县| 长子县| 石狮市| 贵南县| 营口市|