地址轉(zhuǎn)換的概念
地址轉(zhuǎn)換,又稱地址代理,用來實現(xiàn)私有網(wǎng)絡(luò)地址與公有網(wǎng)絡(luò)地址之間的轉(zhuǎn)換。
什么是私有及公有網(wǎng)絡(luò)地址?
私有地址是指內(nèi)部網(wǎng)絡(luò)(局域網(wǎng)內(nèi)部)的主機地址,而公有地址是局域網(wǎng)的
外部地址(在因特網(wǎng)上的全球唯一的IP 地址)。因特網(wǎng)地址分配組織規(guī)
定以下的三個網(wǎng)絡(luò)地址保留用做私有地址:
10.0.0.0 —— 10.255.255.255
172.16.0.0 —— 172.31.255.255
192.168.0.0 —— 192.168.255.255
也就是說這三個網(wǎng)絡(luò)的地址不會在因特網(wǎng)上被分配,但可以在一個企業(yè)
(局域網(wǎng))內(nèi)部使用。各個企業(yè)根據(jù)在可預(yù)見的將來主機數(shù)量的多少,
來選擇一個合適的網(wǎng)絡(luò)地址。不同的企業(yè),他們的內(nèi)部網(wǎng)絡(luò)地址可以相
同。如果一個公司選擇其他的網(wǎng)段作為內(nèi)部網(wǎng)絡(luò)地址,則有可能會引起
路由表的混亂。
什么情況下會用到地址轉(zhuǎn)換?
當(dāng)內(nèi)部網(wǎng)絡(luò)的主機訪問因特網(wǎng)或與外部網(wǎng)絡(luò)的主機通信時,需要用到地址轉(zhuǎn)換。如圖1 所示:
圖 1: 地址轉(zhuǎn)換示意圖
局域網(wǎng)內(nèi)部網(wǎng)絡(luò)的地址是10.0.0.0 網(wǎng)段,而對外的正式IP 地址是
202.196.3.23 。內(nèi)部的主機10.1.1.48 以www 方式訪問網(wǎng)外的服務(wù)器
202.18.245.251。主機10.1.1.48 發(fā)出一個數(shù)據(jù)報文,選擇一個源端口6084,目的端口為80。在通過代理服務(wù)器后,該報文的源地址和端口可
能改為203.196.3.23:32814,目的地址與端口不做改變。在代理服務(wù)器
中維護著一張地址端口對應(yīng)表。當(dāng)外部網(wǎng)絡(luò)的WWW 服務(wù)器返回結(jié)果時,
代理服務(wù)器會將結(jié)果數(shù)據(jù)報文中的目的IP 地址及端口轉(zhuǎn)化為
10.1.1.48:6084。這樣,內(nèi)部主機10.1.1.48 就可以訪問外部的服務(wù)器了。
地址轉(zhuǎn)換的功能
在因特網(wǎng)的發(fā)展過程中,地址轉(zhuǎn)換的提出是為了解決因特網(wǎng)地址短缺所
面臨的問題。(RFC1631)。
路由器結(jié)合地址轉(zhuǎn)換可以完成以下功能:
一個企業(yè)通過路由器來訪問因特網(wǎng),示意圖如圖2 所示;
圖2 通過路由器訪問因特網(wǎng)
另外一個部門的路由器通過缺省路由功能,如圖3 所示,利用此路由器訪問因特網(wǎng);
地址轉(zhuǎn)換的實現(xiàn)
實現(xiàn)的機制是將網(wǎng)內(nèi)主機的IP 地址和端口替換為路由器的外部網(wǎng)絡(luò)地址
和端口,以及從路由器的端口轉(zhuǎn)換為主機的IP 地址和端口。也就是<地
址+端口> ?? <端口>。(符號玙代表映射)
為了完成這樣的轉(zhuǎn)換,選取的數(shù)據(jù)結(jié)構(gòu)至少需要包含下列信息:
主機地址;
主機端口;
轉(zhuǎn)換之后的端口;
?? 該連接的協(xié)議類型;
針對FTP 應(yīng)用的“port”命令的特殊情況,需要對報文做sequence num
調(diào)整。對于該調(diào)整需要做相應(yīng)記錄,數(shù)據(jù)結(jié)構(gòu)中需要額外包括這些信息;
FTP 的“port”命令有什么特點?
FTP 涉及雙重連接,一個是控制連接,一個是數(shù)據(jù)連接??刂七B接負(fù)責(zé)
傳輸控制信息,尤其是客戶命令??蛻籼岢鲆粋€請求,服務(wù)器與客戶建
立一個數(shù)據(jù)連接,進行實際數(shù)據(jù)傳輸?!皃ort”命令用來指明與FTP 客戶
端建立數(shù)據(jù)連接相關(guān)時,客戶端的IP 地址及端口。即“port”命令的數(shù)
據(jù)中含有IP 地址(這個IP 地址甚至可以填上不是客戶端地址的任意的一
個IP 地址。有關(guān)這個命令所引起的網(wǎng)絡(luò)安全方面的問題,有興趣的可以
在計算機緊急事件反應(yīng)組織的網(wǎng)點查看:www.cert.org,由卡耐基.梅隆大
學(xué)維護)。這個IP 地址也需要進行轉(zhuǎn)換,從而引起該tcp 報文所攜帶的
數(shù)據(jù)發(fā)生變化,需要進行sequence num 調(diào)整。
經(jīng)過把數(shù)據(jù)報文中的地址和端口轉(zhuǎn)換為路由器的地址與端口后,報頭數(shù)
據(jù)發(fā)生了變化。而一般性的協(xié)議報頭中都有一項稱為checksum(校驗和)
的域,那一項也需要做調(diào)整。否則在數(shù)據(jù)報文發(fā)送到對端,在IP 層進行
的校驗和計算后,會被以“bad checksum”的原因被丟棄。
對于TCP、UDP 這些上層協(xié)議(包括ICMP),需要進行兩次校驗和調(diào)
整。一次是IP 報頭自身的校驗和調(diào)整,一次是TCP 等頭標(biāo)的校驗和調(diào)整。
為了有效的實現(xiàn)〈地址+端口〉與〈端口〉之間的映射,選取hash 表的方
式來實現(xiàn)映射算法。選取以下的HASH 函數(shù):
usIndex = ((ulIpAddr&0x000000FF)<<4) + (usSrcPort&0x000F);
采取此種方式是對在一個C 類子網(wǎng)內(nèi)部的主機地址取其低8 位,由于一
臺主機的socket API 中對于端口號一般是連續(xù)分配的(而在一臺主機上所
開的通信客戶端程序是有限的),再取其低4 位,可以較好地將由源地址
和源端口及協(xié)議所組成的半相關(guān)散列開至整個HASH 表中。采取hash 表結(jié)構(gòu)后,還需要處理hash 沖突的情況,即需要維護一個鏈表
結(jié)構(gòu)來放置hash 沖突之后的數(shù)據(jù)。
在具體實現(xiàn)的時候,考慮到一個連接都不會超過一定的時間。在數(shù)據(jù)結(jié)
構(gòu)中增加一項用來記錄該連接創(chuàng)建時的時間,如果超過了所設(shè)定的時間,
則將此項從hash 表中刪除。
總結(jié)這一節(jié),地址轉(zhuǎn)換的實現(xiàn)要點如下:
選擇一個數(shù)據(jù)結(jié)構(gòu)來保存地址、端口等信息;
選擇一個合適的算法來實現(xiàn)地址加端口與端口之間的映射;
對轉(zhuǎn)換后的報文做校驗和調(diào)整;
對FTP 的“port”命令做sequence number 調(diào)整;
地址轉(zhuǎn)換的優(yōu)缺點
地址轉(zhuǎn)換的優(yōu)點在于:
內(nèi)部網(wǎng)絡(luò)的主機可以通過該功能訪問網(wǎng)外資源;
為內(nèi)部主機提供了“隱私”(privacy)保護;
缺點也是由轉(zhuǎn)換功能所引起:
由于需要對數(shù)據(jù)報文進行IP 地址的轉(zhuǎn)換,涉及IP 地址的數(shù)據(jù)報的報頭不
能被加密。在應(yīng)用協(xié)議中,不能使用加密的FTP 連接。否則FTP 的port
命令不能被正確轉(zhuǎn)換。
網(wǎng)絡(luò)調(diào)試變得更加困難。比如,某一臺內(nèi)部網(wǎng)絡(luò)的主機試圖攻擊其他網(wǎng)
絡(luò),則很難指出究竟是哪一臺機器是惡意的,因為主機的IP 地址被屏蔽了。
評論
查看更多