轉載:http://blog.sina.com.cn/s/blog_51abf7f801009qmm.html
今天看了一下某位同事的NAT穿越的ppt,上網百度了一下相關資料,總結如下。
Nat穿越其實可以簡單的劃分為幾個維度,弄清楚這幾個維度之後,就很好理解Nat的種類和穿越辦法了。 維度1:NAT與NAPT,一個是Net Address轉換,一個是NetAddress&Port轉換,故名思義,NAT路由器只會修改IP地址,並做IP地址的映射,這樣有多少個內網主機,就要多少個公網的IP。而NAPT路由器會修改資料包的IP地址和連接埠,理論上無論多少個內網主機,只要一個公網地址就夠了。目前由於中國的IP地址太少了,一般說的NAT穿越都是指NAPT。估計老美用NAT比較多。 維度2:錐形與對稱。一般來說,編程的時候一個插口可以存在多個會話,也就是說,在NAPT穿越時,一個路由器上的連接埠很可能對應著多個會話,這樣我們看的話,從路由器到內網主機連線的話,是不是可以成一個錐形?這就是錐形的概念(注意,如果內網主機有多個連接埠出來的話,還是對應路由器多個連接埠的)。而對稱呢,對稱就是說,每一個會話就會在路由器上對應一個新的連接埠。 維度3:受限與不受限。NAPT路由器在傳遞資料包時,如果他是受限型的路由器,它的行為是:當發送資料包的時候記載資料包的目的地址和連接埠成一個列表,當有資料包傳送進來的時候,如果發現寄件者不在這個列表的時候,將丟棄這個包。不受限的路由器沒有這個規矩。 如果我們只考慮NAPT,那麼就只有維度2和維度3的四種組合了。在我們打洞的時候,如果一方是公網IP,另一方是內網,那麼打洞一定可以成功。 總結一下,可能成功也可能失敗的組合有: 1,受限錐形VS受限錐形 一定可以成功的有: 1,自由錐形VS自由錐形 2,自由錐形VS受限錐形 3,自由錐形VS受限對稱 4,自由錐形VS自由對稱 5,自由對稱VS自由對 6,自由對稱VS受限對稱
7,受限錐形VS自由對稱
一定不可以成功的有(有疑問): 1,受限錐形VS受限對稱 2,受限對稱VS受限對稱 這10種情況,我們可以總結一下,對於自由的路由器,我們可以先開一個連接埠向伺服器發送一個資料包,然後讓對方內網機器向這個連接埠發送資料包即可打洞成功;所以自由的路由器是通吃的;只要有一個是自由的路由器,即可打洞成功。 對於一定不可以成功的情況,主要是由於雙方都是受限而引起的。 對於上面總結的規律,有一對組合比較特殊,不符合我們的規律,那就是我們的“受限錐形VS受限錐形”組合。這個組合的打洞需要總結一下,事實上,這個組合的打洞是通過雙方都向對方先發送一個TTL為2的包之後,破除了受限這個限制之後,才可以通訊的。這個TTL的值2是一個經驗值,因為本來是應該為的,但是經驗發現機器可能位於兩層路由器下面,所以TTL要為2,但是這樣一來,如果兩個機器之間只隔兩個路由器的話,打洞將會失敗,因為一般的受限錐形路由器一旦發現有不明來路的包,就會將其加入黑名單。 總結一下,受限意味著對方不能主動串連你,而對稱意味著對方不知道你的連接埠號碼。 除了路由器有自由和受限之外,客戶機上的防火牆也有受限和自由之分,一般在XP機器上,諾頓是受限的,瑞星比較好,只要你不把程式加入不可信列表裡,就可以是自由的。 再就是Vista機器好像都是受限的,並且TTL=2的包無效。使得Vista上的打洞很不容易成功。