李佩佩+胡曦明
摘要:NAPT(網(wǎng)絡(luò)端口地址轉(zhuǎn)換)使用傳輸層標(biāo)示符來確定一個(gè)特定的數(shù)據(jù)包和私有主機(jī)之間的聯(lián)系。那么對(duì)于不含標(biāo)示符的數(shù)據(jù)包分片如何處理?在H3 Cloud Lab模擬器上進(jìn)行仿真實(shí)驗(yàn),對(duì)數(shù)據(jù)包進(jìn)行分片,探究NAPT對(duì)分片的處理過程。實(shí)驗(yàn)發(fā)現(xiàn)地址轉(zhuǎn)換設(shè)備記錄并保存了數(shù)據(jù)包首片的標(biāo)示符信息,以便對(duì)后續(xù)分片(不合標(biāo)示符)的處理。
關(guān)鍵詞:網(wǎng)絡(luò)端口地址轉(zhuǎn)換;分片;傳輸層;路由;MTU
1概述
局域網(wǎng)內(nèi)的IP地址大多為私有地址,但私有地址只能在局域網(wǎng)內(nèi)部網(wǎng)中使用,不能在Internet公網(wǎng)上使用,現(xiàn)行的路由器設(shè)置也不轉(zhuǎn)發(fā)帶有私有地址的數(shù)據(jù)包。當(dāng)私有網(wǎng)絡(luò)內(nèi)的主機(jī)需要與位于Internet公網(wǎng)上的主機(jī)進(jìn)行通訊時(shí)需要采用網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT),將私有地址轉(zhuǎn)換為合法公網(wǎng)地址,對(duì)外進(jìn)行訪問。
基本NAT將一組私有地址轉(zhuǎn)換為一組公有地址,但I(xiàn)Pv4下的公有地址有限,為了解決公有地址的不足,提高公有地址的利用率,提出了網(wǎng)絡(luò)地址端口轉(zhuǎn)換(Network Address PortTranslation,NAPT)技術(shù)。
2NAPT原理
NAPT基于傳統(tǒng)的NAT,使用傳輸層標(biāo)示符(TCP和UDP端口、ICMP查詢標(biāo)示符)來確定一個(gè)特定的數(shù)據(jù)包和私有主機(jī)之間的關(guān)聯(lián)。當(dāng)不同私有地址的應(yīng)用程序采用的標(biāo)示符信息相同時(shí),進(jìn)行標(biāo)示符的改寫,并將此記錄保存,以便對(duì)私有主機(jī)正確應(yīng)答。若不同私有主機(jī)的標(biāo)示符信息不同,則保留其原有標(biāo)示符信息,即NAPT使用“IP地址+標(biāo)示符”的形式進(jìn)行轉(zhuǎn)換。這使得大量的內(nèi)部主機(jī)(即好幾千臺(tái))能夠同時(shí)訪問互聯(lián)網(wǎng),而使用的公有地址數(shù)量卻很少,通常只需要一個(gè)。
3NAPT仿真實(shí)驗(yàn)
3.1實(shí)驗(yàn)拓?fù)?/p>
在思科模擬器Cisco Packet Tracer 5.3上搭建實(shí)驗(yàn)拓?fù)洌鐖D1。Router0為網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備,其左右兩個(gè)IP地址分別為192.168.0.1和192.168.1.1,Routerl左右兩個(gè)IP地址分別為192.168.1.2和192.168.2.1,Server0的IP地址為192.168.2.2
3.2關(guān)鍵技術(shù)
搭建好實(shí)驗(yàn)拓?fù)浜螅M(jìn)行配置并添加路由,其中網(wǎng)絡(luò)地址轉(zhuǎn)換設(shè)備Router0配置命令如下:
命令中overload關(guān)鍵詞表明:雖然在路由器0串口處提供可轉(zhuǎn)換的地址池192.168.1.10-192.168.1.12,但只能使用一個(gè)合法公有地址,即采用網(wǎng)絡(luò)地址端口轉(zhuǎn)換技術(shù)實(shí)現(xiàn)共享合法IP地址。配置完成后,進(jìn)行ping命令測(cè)試,連通性正常。
3.3實(shí)驗(yàn)結(jié)果
為了清楚地查看端口轉(zhuǎn)換情況,讓私有主機(jī)pc0、pcl同時(shí)對(duì)服務(wù)器Server0進(jìn)行訪問,得到如下的網(wǎng)絡(luò)地址端口轉(zhuǎn)換關(guān)系,如圖2。
通過以上基礎(chǔ)實(shí)驗(yàn),對(duì)網(wǎng)絡(luò)端口地址轉(zhuǎn)換技術(shù)進(jìn)行學(xué)習(xí)與理解,可以看到當(dāng)不同主機(jī)的tcp端口號(hào)在同一時(shí)刻相同時(shí),端口號(hào)將被替換,由此證明NAPT依靠IP地址和標(biāo)示符來對(duì)內(nèi)網(wǎng)主機(jī)的請(qǐng)求進(jìn)行正確應(yīng)答。
3.4實(shí)驗(yàn)結(jié)論
NAPT使得一組主機(jī)可以共享唯一的外部地址,當(dāng)位于內(nèi)部網(wǎng)絡(luò)中的主機(jī)通過NAT設(shè)備向外部主機(jī)發(fā)起會(huì)話請(qǐng)求時(shí),NAT設(shè)備就會(huì)查詢NAT表,看是否有相關(guān)會(huì)話記錄,如果有相關(guān)記錄,就會(huì)將內(nèi)部IP地址及端口同時(shí)進(jìn)行轉(zhuǎn)換,再轉(zhuǎn)發(fā)出去;如果沒有相關(guān)記錄,進(jìn)行IP地址和端口轉(zhuǎn)換的同時(shí),還會(huì)在NAT表增加一條該會(huì)話的記錄。外部主機(jī)接收到數(shù)據(jù)包后,用接受到的合法公網(wǎng)地址及端口作為目的IP地址及端口來響應(yīng),NAT設(shè)備接收到外部回來的數(shù)據(jù)包,再根據(jù)NAT表中的記錄把目的地址及端口轉(zhuǎn)換成對(duì)應(yīng)的內(nèi)部IP地址及端口,轉(zhuǎn)發(fā)給該內(nèi)部主棚.。
4NAPT對(duì)分片的處理實(shí)驗(yàn)
4.1實(shí)驗(yàn)背景
在前面,可以看到NAPT依靠IP地址和tcp/udD端口號(hào)對(duì)內(nèi)網(wǎng)主機(jī)進(jìn)行服務(wù),但較大的數(shù)據(jù)包在傳輸時(shí)往往會(huì)被分片,這就導(dǎo)致了非首部分片不含端口號(hào)或標(biāo)示符。那么轉(zhuǎn)換設(shè)備在缺少端口號(hào)或標(biāo)示符時(shí)如何工作?猜想有兩種可能:①先在地址轉(zhuǎn)換設(shè)備處重組,再進(jìn)行轉(zhuǎn)換,最后重新分片轉(zhuǎn)發(fā)出去;②在第一個(gè)分片到達(dá)并轉(zhuǎn)換以后,轉(zhuǎn)換設(shè)備記錄并保存第一個(gè)分片使用的標(biāo)示符信息,使后續(xù)分片能夠正常轉(zhuǎn)換。為了查看網(wǎng)絡(luò)端口地址轉(zhuǎn)換對(duì)數(shù)據(jù)包分片,尤其是對(duì)不含標(biāo)示符的分片的處理方式,展開探究實(shí)驗(yàn)。
4.2實(shí)驗(yàn)過程
4.2.1實(shí)驗(yàn)拓?fù)?/p>
由于Cisco Packet Tracer 5.3無法進(jìn)行分片,在H3 CloudLab上搭建實(shí)驗(yàn)拓?fù)?,如圖3。
hostl的IP為192.168.1.2,Host2的IP為192.168.3.2,路由器MSR36-20_l左右兩個(gè)端口地址為192.168.1.3和192.168.2.1,路由器MSR36-20_2左右兩個(gè)端口地址為192.168.2.2和192.168.3.1。
4.2.2實(shí)驗(yàn)說明
路由器MSR36-20_1為地址轉(zhuǎn)換設(shè)備,將192.168.1.2的網(wǎng)絡(luò)地址重寫為192.168.2.10,配置命令略。將路由器MSR36-20_2的左端口的mtu設(shè)置為200,使得返回的數(shù)據(jù)包被分片,以便查看路由器MSR36-20_1對(duì)回顯應(yīng)答的數(shù)據(jù)分片的處理是重組后重新分片還是直接進(jìn)行轉(zhuǎn)換并轉(zhuǎn)發(fā)數(shù)據(jù)包到相應(yīng)私有主機(jī)。
在hostl命令行輸入ping 192.168.3.2-1 1500,可知應(yīng)答的報(bào)文在MSR36-20_2的左端口被分片,分片大小(含數(shù)據(jù)鏈路層幀首部14個(gè)字節(jié))不超過214個(gè)字節(jié)。在hostl和MSR36-20_1的路徑上使用Wireshark抓包,得到圖4。
可以看到MSR36-20_1并沒有將數(shù)據(jù)包分片重組后重新分為1514和62字節(jié),而依舊是MSR36-20_2分片后的狀態(tài)。分析后得出結(jié)論:對(duì)于分片的處理,在第一個(gè)分片(包含tep pMdp端口號(hào)或ICMP標(biāo)示符)到達(dá)以后,地址轉(zhuǎn)換設(shè)備記錄并保存第一個(gè)分片使用的端口號(hào)或ICMP標(biāo)示符信息,以使后續(xù)分片能夠正常進(jìn)行網(wǎng)絡(luò)地址端口轉(zhuǎn)換。對(duì)于為什么不重組后再進(jìn)行地址轉(zhuǎn)換和轉(zhuǎn)發(fā),個(gè)人認(rèn)為原因可能是:①每個(gè)分片到達(dá)的時(shí)間不確定,若要重組,等待時(shí)間可能較長(zhǎng),對(duì)用戶來說,及時(shí)性較差,用戶體驗(yàn)不好;②若在地址轉(zhuǎn)換設(shè)備處重組,則需要較大的存儲(chǔ)空間,對(duì)轉(zhuǎn)換設(shè)備來說,工作量大且負(fù)擔(dān)太重。
5結(jié)束語(yǔ)
NAPT技術(shù)將多個(gè)內(nèi)部地址映射為一個(gè)合法公網(wǎng)地址,但以不同的協(xié)議端口號(hào)與不同的內(nèi)部地址相對(duì)應(yīng),也就是<內(nèi)部地址+內(nèi)部端口>與<外部地址+外部端口>之間的轉(zhuǎn)換。NAPT普遍用于接入設(shè)備中,它可以將中小型的網(wǎng)絡(luò)隱藏在一個(gè)合法的IP地址后面。NAPT使得內(nèi)網(wǎng)多臺(tái)私有主機(jī)利用1個(gè)公有IP就可以同時(shí)和公共網(wǎng)絡(luò)進(jìn)行通信,對(duì)于私有IP上網(wǎng)、解決IP地址不足問題有很大幫助。最重要的是,即使是被分片的數(shù)據(jù)包,地址轉(zhuǎn)換設(shè)備也可以正確進(jìn)行轉(zhuǎn)發(fā)。