NAT打洞

NAT(Network Address Translation)是一種廣域網的接入技術,將私有地址轉換爲合法的公共IP地址,能夠完美的解決IP地址不足問題,並且還能有效避免來自外部網絡的攻擊,隱藏並保護網絡內部的計算機。html

NAT的功能一般被集成到路由器、防火牆、ISDN路由器或者單獨的NAT設備中。後端

1、NAT有三種實現方式:安全

1. 靜態轉換:即1對1。好處是外部能夠訪問內部網絡;服務器

2. 動態轉換:多內部IP對幾個外部IP,動態適配。沒法實現對網絡內部主機的訪問;網絡

3. 端口多路複用:即PAT,在NAT中保留NAT內部端口的映射,並向NAT外部端口轉換,能夠實現多對1,也是最經常使用的;多線程

4. 幾種方法的組合。好比 動態地址+端口複用:一些FTP網站考慮到服務器性能和Internet鏈接帶寬佔用問題,會限制同一個IP地址的多線程訪問,此時若是隻採用端口複用,形成同一外部IP的多個內部主機同時訪問Internet,目的網站有可能禁掉該IP。因此最好採用與動態地址相結合的方案(若是有多個公共IP的話)。socket

2、NAT端口轉換的幾種方法:性能

1. Full cone NAT:即一對一NAT,一旦一個內部地址(iADDr:port1)映射到外部地址(eAddr:port2),全部發自iADDr:port1的包都通過eAddr:port2向外發送。同時,任意的外部主機都能經過eAddr:port2發包到(即訪問)iADDr:port1。網站

2. Address-Restricted cone NAT:一旦一個內部地址(iADDr:port1)映射到外部地址(eAddr:port2),全部發自iADDr:port1的包都通過eAddr:port2向外發送。同時,任意的外部主機都能經過eAddr:port2發包到(即訪問)iADDr:port1,但有個前提,即,iAddr:port1以前向該外部主機發過包(外部主機的端口不受限制,即以前發送到的外部主機端口和當下訪問內部網絡的外部主機端口能夠不一樣)。ui

3. Port-Restricted cone NAT:與2相似,可是要求外部主機的端口保持一致。

4. Symmetric NAT:內網主機創建一個socket(iAddr:prot0),當用這個socket第一次發送數據給外部主機1時,NAT爲其映射一個(eAddr1:port1),若是內網主機同時用這個socket向主機2發送數據,NAT爲其分配一個(eAddr2:port2),之後發往主機1和主機2的數據分別使用這兩個socket。若是NAT有多於一個公網IP,則eAddr1和eAddr2可能不一樣,若是NAT只有一個公網IP,則port1和port2確定不一樣,也就是說,必定不能是eAddr1等於eAddr2且port1等於port2。同時,若是任何外部主機向要發送數據給這個內網主機,那它首先應該收到內網主機發送給他的數據,而後才能往回發送,不然即便知道內網主機的一個映射socket也不能發送數據給內網主機。這種NAT沒法實現P2P通訊。可是若是另外一方是Full cone NAT的話,仍是能夠穿透的。

3、NAT打洞

NAT打洞發生在當兩個主機位於不一樣的局域網中時,假設分別爲A和B,根據幾種端口轉換方法的特色(除了Full cone NAT),若是沒有中間設備(位於外網)輔助的話,A和B永遠沒法通訊。所以,假設有位於公網的中間服務器S,A和B首先會鏈接到S,S分別記錄A和B通過NAT後的IP和端口,當A想要鏈接到B時,首先向S發出請求,S把B通過NAT後的IP和端口告訴A,同時向B發送A通過NAT後的IP和端口,並要求B發送數據給A,B發送給A的數據會被A的NAT拋棄,可是B的NAT會有B發送數據到A的記錄,此時A再向B發送數據時就會被B的NAT放行。也就是說當A向B發送數據時,惟一的阻礙是NAT_B,要想發送成功,必須先把NAT_B打一個洞,這樣NAT_B就會誤覺得A發送的數據是上次會話的一部分而不予阻攔。

關於打洞的分析:

1. 以上的分析是針對雙方都是2,3,4的情形。只要A或B有一方爲Full cone NAT,那麼便可實現雙向通訊,不須要打洞。

2. 只要兩側NAT都不屬於Symmetric NAT,能夠打通,也就是說,只要兩側NAT都屬於cone NAT,便可雙向通訊。

3. 一側屬於Symmetric NAT,而另外一側屬於Restricted cone,能夠打通;

4. 一側屬於Symmetric NAT,而另外一側屬於Port-Restricted cone,打不通;(因爲Symmetric NAT會使到不一樣目的主機的端口不一樣,此時C告知B的A的端口不是A真正發往B的端口,同時Port-Restricted cone要求先後端口一致,而其實是不一致的,所以打不通)

5. 兩側都屬於Symmetric NAT,打不通。

     一般來講,只有比較注重安全的大公司會使用Symmetric NAT,禁止使用P2P類型的通訊,不少地方使用的都是cone NAT,所以基本都能穿透。

出處:http://blog.csdn.net/woshishuizzz/article/details/8447920

參考:http://wenku.baidu.com/view/6a7892daad51f01dc281f127.html

相關文章
相關標籤/搜索