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