互聯網是基于32位IP地址的,這意味著互聯網理論上最大電腦數目約為四萬億。由于IP地址使用方式的無效性,實際的數量會少得多。實際上,互聯網過不了多久就會將IP地址用完。
因為可用的IP地址越來越少,一種被稱為網絡地址解析或箭稱NAT的技術被開發出來,它允許以一個IP地址來代表整個網絡的電腦。
一個NAT處在公用互聯網與它所服務的網絡之間,重寫數據中IP頭部的IP地址和端口號以使所有的包看上去都象從一個NAT設備的公用IP地址發來(或到它去)的,而不是發自(往)實際的源或者目標。
NAT如今已經在小型家庭-辦公室路由被普遍租用,也在很多軟件中被用戶使用以連接幾臺PC到一個唯一的電纜MODEM。它甚至被一些ISP使用。
(NAT不是唯一可能的解決辦法,代理服務器也被普遍使用,但需要更多的配置,有時還需要要定制的客戶端軟件。而最終,我們都將轉換到IPv6,它將使用128位地址,可以解決已有的及所有的問題,但那將在很久后才會普及。
某些協議是非NAT友好的
一些應用程序將IP和端口號隱藏在它們的數據包中發送,NAT不能正確重寫它們,所以當你想在NAT網絡內使用那些程序的話,它們將不會正確運行。
一些NAT,由于安全原因,只允許從已經發送過數據去的外部地址接收數據。這意味著處于不同NAT后的兩個人不能以通常的方式建立連接。
解決辦法
希望NAT友好的Peer-to-peer(點對點)協議必須明確:其所嵌入數據包的任何地址在通過NAT時都可能變夢扌В虼誦枰咕取R桓隹尚械姆椒ㄈ縵攏?/p>
兩點之間所有的數據流都通過一個單一的UDP端口。存在著一個不處于任何NAT之后的地址服務器,用戶首先與地址服務器連接,并發送他們認為擁有的IP地址;服務器標記該地址和它在UDP頭部所看到的地址。然后服務器將兩個地址都送往其它點。這樣,所有人都知道其它人的地址。
為打開點對點的連接,所有的舊(結)點發送一個UDP包到新的(結)點,且新(結)點發送一個UDP包到每一個老(結)點。因為無人知道開始它們是否處于同一個NAT之后,第一個包往往被同時送往公有和私有地址。
這導致每個人的NAT為UDP數據流的通過打開一個雙向的洞。一旦第一個響應從每個(結)點返回,發送者就知道使用哪個返回地址,并能停止向兩個地址發送數據。
兼容性需求
基于和超越基本的NAT RFC,一個想支持這個技術的NAT設備必須有以下要求的屬性:
>>NAT不允許改變被數據流使用的UDP端口號。
如果一個處于NAT之后的主機從一個單一的UDP口發送了一系列的包,被NAT接棒后的包也必須表現為來自同一主機和UDP口。
RFC藍圖
我正在擬訂這項技術RFC藍圖更為詳細的細節。如果你感興趣,請與我聯系。
兼容性測試結果
我正在測試實現幾個NAT通訊的兼容性。這里是部分結果:
已知的NAT實現的兼容性
>>NAT1000:完全兼容。感謝Nevod技術人員早期所幫助做的兼容性測試。無任何東西需要改變;這項技術與他們的NAT一起運行很穩定。Nevod已經不再存在了,它已被微軟兼并。
>>Win98 SE包含的網絡聯接共享軟件,起源贜AT1000,所以一定運行良好。
>>SYGATE:完全兼容。
>>NAT32:1999年1月5號公布的BETA測試版完全兼容。現在公布的版本也應該完全兼容。
>>LINUX IP Masquerading(LINUX IP偽裝):2.2.1版本內核和后續版本可以正常運行。請到http://juanjox.linuxhq.com/?尋找早期2.1版本的補丁。2.0版本的補丁見Glenn Lamb的頁面:http://home.indyramp.com/lists/masq/msg03024.html:
ftp://ftp.netcom.com/pub/mu/mumford/loose-udp-2.0.36.patch.gz;
Glenn的端口使之擁有一個配置時選項CONFIG_IP_MASQ_LOOSE_UDP,這是一個很好的舉措。
>>WinNAT:當前版本工作正常。
NAT實現即將可兼容的
>>Arescom Apex 1100 ISDN路由:Arescom在1999年1月針對此問題發布了一個固件補丁;也許現在已經并入其標準固件里了,但我還沒有證實。
>>Vicomsoft Softrouter Plus:Vicom曾公布過一個版本以解決這個問題,但我還沒有機會來測試一下。注意:為使這個實現正常運行,你必須把網關設備上除指向內部以太適配器外的所有本地TCP綁定禁止。在使用Vicom的安裝助手之前請閱讀其文檔。
未知是否兼容的
>>Cisco IOS有一內置的NAT兼容特性,也許有用也許不然。
>>我們已經測試了我們手上所有能得到的WIN32軟件。但還沒有測試嵌入到許多小型家庭辦公路由中的NAT,也沒有測試外置的NAT如SonicWall等。
不兼容的
>>所有的純代理服務器解決辦法,如WINGATE2或者PPPShar,都不能正常運行。
使用這項技術的軟件
以下軟件包是已知的支持在NAT后操作的:
>>Civilization: Call To Power
>>Heavy Gear 2
討論區
我想聽到其它開發者對于這項技術的想法,以及Masq如何被重寫以正確復用UDP端口。加入NAT-peer-games(http://onelist.com/viewarchive.cgi?listname=nat-peer-games)郵件列表讓我們一起討論。
實施問題
在測試SYGATE和近期NAT1000版本時,我遇到一些實施方面的問題。當運行網關的機器是通過MODEM與INTERNET聯接的話所有一切均正常。但如果網關機器是通過以太網與INTERNET聯接的話,客戶端不能訪問那個外部以太網上的其它主機。看上去就象那臺網關送出來的包完全被外部以太網上的其它主機丟棄了。然而路由器不會丟棄數據,所以與遠程主機聯接沒有問題。想了解更多信息,請到my Usenet post(http://www.dejanews.com/getdoc.xp?AN=427631763)獲取。
我傾向于相信這是硬件原因,但誰知道呢...
鏈接
>>IETF Working Group on NAT:
http://www.ietf.org/html.charters/nat-charter.html
新的RFC草圖和郵件列表。其中一個文檔
http://www.ietf.org/internet-drafts/draft-ietf-nat-protocol-issues-01.txt
提到這項技術;搜索關鍵詞“Activision”
>>NAT頁面:
http://www.uq.edu.au/~gadmacka/the-nat-page/
列出了一些可行的NAT實現
>>LINUX IP偽裝:
http://www.indyramp.com/masq/
都是關于NAT實現的LINUX之Masq。
>>MASQ郵件列表的可查詢索引:
http://www.mail-archive.com/masq@tori.indyramp.com/
>>LINUX IP NAT論壇:
http://serf.csn.tu-chemnitz.de/HyperNews/get/linux-ip-nat.html
NAT論文,老式的不支持的LINUX NAT實現和一個討論區。多半為了歷史興趣。
歷史
相對于我的知識來講這是一項新技術。我在1997年開始研究它,并在1998年用它完成了我的第一個作品。這項技術在制作Activision多玩家游戲中被開發。
1999 DAN KEGEL 版權所有
dank@alumni.caltech.edu
最近更新:1999年7月17日
KEGEL的主頁:http://www.kegel.com/
posted on 2006-04-02 01:00
地獄男爵(hellboys) 閱讀(421)
評論(0) 編輯 收藏 所屬分類:
系統綜合