專(zhuān)利名稱(chēng)::基于nat-pt的ftp應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種FTP應(yīng)用層網(wǎng)關(guān),尤其涉及基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法。
背景技術(shù):
:IPv4(TCP/IP)協(xié)議是當(dāng)Internet上最重要的協(xié)議族,它是連接到Internet上的所有計(jì)算機(jī)都必須支持的協(xié)議。但是,隨著Internet的發(fā)展,IPv4的一些缺點(diǎn)也逐漸暴露出來(lái),其中最主要的缺點(diǎn)就是地址空間嚴(yán)重不足。由于歷史原因,分配給我國(guó)的IPv4地址較少,地址枯竭問(wèn)題就更加嚴(yán)重。IPv6是設(shè)計(jì)用來(lái)替代現(xiàn)有IPv4(TCP/IP)協(xié)議,也被稱(chēng)作下一代互聯(lián)網(wǎng)協(xié)議。IPv6是為了解決IPv4所存在的一些問(wèn)題和不足而提出的,同時(shí)它還在許多方面提出了改進(jìn),例如路由方面、自動(dòng)配置方面。IPv6協(xié)議包括IPv6基本協(xié)議和ICMPv6協(xié)議。雖然IPv6的優(yōu)越性無(wú)庸置疑,但要IPv4馬上退出歷史舞臺(tái)顯然是不可能的,所以在一段很長(zhǎng)的時(shí)間內(nèi),V4節(jié)點(diǎn)和V6節(jié)點(diǎn)將共同存在。由于V4禾BV6節(jié)點(diǎn)必然要經(jīng)常通信,所以必須要實(shí)現(xiàn)一種有效的轉(zhuǎn)換機(jī)制,使得V4節(jié)點(diǎn)和V6節(jié)點(diǎn)能夠無(wú)障礙的通信。為了解決這個(gè)難題,提出了網(wǎng)絡(luò)地址轉(zhuǎn)換-協(xié)議轉(zhuǎn)換(NAT-PT)及網(wǎng)絡(luò)地址端口轉(zhuǎn)換-協(xié)議轉(zhuǎn)換(NAPT-PT)。從而在網(wǎng)絡(luò)層上實(shí)現(xiàn)了從IPv6節(jié)點(diǎn)主動(dòng)向IPv4節(jié)點(diǎn)建立單向連接。圖1是NAT-PT應(yīng)用示意圖。當(dāng)IPv6主機(jī)101要與IPv4主機(jī)121通信時(shí),首先需要在IPv6網(wǎng)絡(luò)100中標(biāo)識(shí)IPv4主機(jī),NAT-PT網(wǎng)關(guān)110向IPv6網(wǎng)絡(luò)100中廣播一個(gè)96位的地址前綴,用96位地址前綴加上32位IPv4主機(jī)地址作為對(duì)IPv4網(wǎng)絡(luò)120中的主機(jī)的標(biāo)識(shí)。IPv6主機(jī)101發(fā)給IPv4主機(jī)121的報(bào)文,通過(guò)96位前綴被路由到NAT-PT網(wǎng)關(guān)110處,NAT-PT網(wǎng)關(guān)對(duì)IPv6報(bào)文頭進(jìn)行轉(zhuǎn)換,利用一IPv4地址池111分配臨時(shí)IPv4地址標(biāo)識(shí)IPv6源地址,報(bào)文轉(zhuǎn)換為IPv4報(bào)文后發(fā)給IPv4目的主機(jī)。由于全球公用的IPv4地址的獲取困難,NAT-PT網(wǎng)關(guān)必須實(shí)現(xiàn)IPv4地址的共享。NAT-PT的地址共享是通過(guò)傳輸層標(biāo)識(shí)(TCP/UDP端口或ICMP類(lèi)型碼)的跟蹤與復(fù)用來(lái)實(shí)現(xiàn)的。這時(shí),當(dāng)內(nèi)部網(wǎng)絡(luò)主機(jī)向外建立連接時(shí),NAT-PT網(wǎng)關(guān)必須動(dòng)態(tài)分配對(duì)外的地址和傳輸層標(biāo)識(shí),記錄每個(gè)連接會(huì)話(huà)(UDP/ICMP是偽連接)與外部地址的綁定關(guān)系,然后跟蹤該連接的狀態(tài),當(dāng)連接關(guān)閉后,NAT-PT網(wǎng)關(guān)必須自動(dòng)釋放先前分配的地址和傳輸層標(biāo)識(shí),以便后續(xù)連接使用。通過(guò)傳輸層標(biāo)識(shí)的復(fù)用及會(huì)話(huà)跟蹤,NAT-PT網(wǎng)關(guān)能夠使一個(gè)IPv4地址最多建立63K個(gè)TCP/UDP連接或ICMP應(yīng)答??紤]NAPT-PT的情況。同樣假設(shè)內(nèi)部V6主機(jī)主動(dòng)向外部V4主機(jī)建立連接,從V6主機(jī)給V4主機(jī)發(fā)送一個(gè)V6報(bào)文,則轉(zhuǎn)換前源地址FEDC:BA98::7654:3210源TCP端口3017目的地址PREFIX::132.146.243.30目的TCP端口23轉(zhuǎn)換后源地址120.130.26.15源TCP端口1025目的地址132.146.243.30目的TCP端口23但是涉及更高層協(xié)議的轉(zhuǎn)換還必須在應(yīng)用層添加應(yīng)用層網(wǎng)關(guān)(ALG)才能實(shí)現(xiàn)。例如為了實(shí)現(xiàn)IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)之間FTP協(xié)議(文件傳輸協(xié)議)的轉(zhuǎn)換,就需要FTP應(yīng)用層網(wǎng)關(guān)。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問(wèn)題是提供一種基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法。本發(fā)明為解決上述技術(shù)問(wèn)題而采用的技術(shù)方案是提供一種基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,用于IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)之間FTP協(xié)議的轉(zhuǎn)換,其包括以下步驟接收FTP報(bào)文,判斷其是否是數(shù)據(jù)包報(bào)文,如果是,則創(chuàng)建數(shù)據(jù)會(huì)話(huà);如果不是數(shù)據(jù)包報(bào)文,則執(zhí)行下列步驟首先,解析FTP命令以獲悉該命令的類(lèi)型;接著,對(duì)FTP命令進(jìn)行轉(zhuǎn)換,其中當(dāng)命令包含IP地址和/或端口時(shí),同時(shí)對(duì)IP地址和/或端口進(jìn)行轉(zhuǎn)換;之后,當(dāng)FTP命令是PORT命令、EPRT命令、PASV命令、或者EPSV命令時(shí),創(chuàng)建控制會(huì)話(huà);以及當(dāng)FTP命令是EPRT命令時(shí),在創(chuàng)建控制會(huì)話(huà)的同時(shí)創(chuàng)建數(shù)據(jù)會(huì)話(huà),而當(dāng)命令是EPSV命令時(shí),在創(chuàng)建控制會(huì)話(huà)的同時(shí)創(chuàng)建一數(shù)據(jù)臨時(shí)會(huì)話(huà)。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是PORT命令時(shí),則對(duì)所述FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取命令中的IPv4地址和端口;利用IPv4地址查找一地址映射表以獲得映射的一IPv6地址,或者査找一地址前綴表以獲得一地址前綴,該地址前綴可與IPv4地址組成一IPv6地址;以及將PORT命令轉(zhuǎn)換為EPRT命令,將PORT命令中的IPv4地址相應(yīng)轉(zhuǎn)換為IPv6地址。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是EPSV應(yīng)答命令時(shí),則在步驟c中,對(duì)FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取EPSV命令發(fā)送端的IPv6地址和端口;利用IPv6地址查找一地址映射表和一地址前綴表以獲得一IPv4地址;將EPSV應(yīng)答命令轉(zhuǎn)換為PASV應(yīng)答命令,在PASV應(yīng)答命令中加入該IPv4地址。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是EPRT命令時(shí),則對(duì)FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取EPRT命令中的IPv6地址和端口;利用IPv6地址查找地址映射表和地址前綴表中是否有匹配的IPv4地址和端口,如果有,則將所述端口作為數(shù)據(jù)端口;如果沒(méi)有,則從一FTP地址池中取出一IPv4地址和兩個(gè)端口,其中一端口作為控制端口,另一端口作為數(shù)據(jù)端口,同時(shí),建立該IPv4地址和Ipv6地址的地址映射關(guān)系表;以及將EPRT命令轉(zhuǎn)換為PORT命令,將其中的IPv6地址轉(zhuǎn)換成IPv4地址,而EPRT命令中的端口轉(zhuǎn)換為所述數(shù)據(jù)端口。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是PASV應(yīng)答命令時(shí),則對(duì)FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取PASV應(yīng)答命令中的IPv4地址和端口;查找一地址映射表和一地址前綴表;將該端口寫(xiě)入數(shù)據(jù)臨時(shí)會(huì)話(huà)中;以及將PASV應(yīng)答命令轉(zhuǎn)換為EPSV應(yīng)答命令。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是EPRT命令時(shí),則創(chuàng)建的數(shù)據(jù)會(huì)話(huà)與控制會(huì)話(huà)具有相同的客戶(hù)端地址。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是EPSV命令時(shí),則創(chuàng)建控制會(huì)話(huà)的步驟包括以客戶(hù)端的IPv6地址查找地址映射表和地址前綴表,以獲得一映射的IPv4地址和端口,其中該端口作為數(shù)據(jù)端口;如果沒(méi)有映射的IPv4地址,則從一FTP地址池中分配一個(gè)IPv4地址和兩個(gè)端口,建立該IPv4地址與IPv6地址的映射關(guān)系表,并將兩個(gè)端口的其中一個(gè)端口作為客戶(hù)端的控制端口,另一個(gè)端口作為客戶(hù)端的數(shù)據(jù)端口;在控制會(huì)話(huà)中記錄IPv4服務(wù)器的地址和控制端口,和IPv6客戶(hù)端的地址和控制端口。上述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法中,當(dāng)FTP命令是EPSV命令時(shí),則創(chuàng)建數(shù)據(jù)臨時(shí)會(huì)話(huà)的步驟包括在數(shù)據(jù)臨時(shí)會(huì)話(huà)中記錄IPv4服務(wù)器的地址,以及為IPv6客戶(hù)端分配的IPv4地址和數(shù)據(jù)端口。本發(fā)明由于采用以上技術(shù)方案,使之與現(xiàn)有技術(shù)相比,具有如下顯著優(yōu)點(diǎn)本發(fā)明的FTP應(yīng)用層網(wǎng)關(guān),可以在IPv4客戶(hù)端與IPv6服務(wù)器之間,或者IPv6客戶(hù)端與IPv4服務(wù)器之間翻譯FTP報(bào)文,并進(jìn)行控制會(huì)話(huà)和數(shù)據(jù)會(huì)話(huà)的建立,使IPv4網(wǎng)絡(luò)與IPv6網(wǎng)絡(luò)之間的FTP傳輸確實(shí)可以實(shí)現(xiàn)。為讓本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能更明顯易懂,以下結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式作詳細(xì)說(shuō)明,其中圖1是NAT-PT應(yīng)用示意圖。圖2是IPv4FTP客戶(hù)端與IPv6FTP服務(wù)器之間的FTP命令傳輸示意圖。圖3是本發(fā)明的FTP網(wǎng)關(guān)實(shí)現(xiàn)方法用于IPv4FTP客戶(hù)端與IPv6FTP服務(wù)器的步驟流程圖。圖4是IPv6FTP客戶(hù)端與IPv4FTP服務(wù)器之間的FTP命令傳輸示意圖。圖5是本發(fā)明的FTP網(wǎng)關(guān)實(shí)現(xiàn)方法用于IPv6FTP客戶(hù)端與IPv4FTP服務(wù)器的步驟流程圖。圖6是本發(fā)明的FTP網(wǎng)關(guān)實(shí)現(xiàn)方法的步驟流程圖。具體實(shí)施方式為了更清楚地說(shuō)明本發(fā)明的FTP網(wǎng)關(guān)實(shí)現(xiàn)方法,首先簡(jiǎn)單介紹一下在現(xiàn)有的IPv4協(xié)議中的FTP(FileTransmissionProtocol)協(xié)議。文件傳輸是指將文件從一臺(tái)計(jì)算機(jī)上發(fā)送到另一臺(tái)計(jì)算機(jī)上,傳輸?shù)奈募梢园娮訄?bào)表、聲音、編譯后的程序以及字處理程序的文檔文件。如果用戶(hù)要將一個(gè)文件從自己的計(jì)算機(jī)上發(fā)送到另一臺(tái)計(jì)算機(jī)上,就應(yīng)使用FTP上載(upload)或(put)。而更多種的情況是用戶(hù)使用FTP下載(download)或獲取(get)文件及管理文件進(jìn)行文件刪除、更名、移動(dòng)。在FTP協(xié)議的內(nèi)部實(shí)現(xiàn)中,主要具有主動(dòng)連接(Port)和被動(dòng)連接(Pasv)過(guò)程。Port模式的連接過(guò)程是在開(kāi)始一個(gè)FTP的連接時(shí),客戶(hù)端程序首先會(huì)為自己隨機(jī)分配一個(gè)TCP端口,它使用這個(gè)端口向服務(wù)器的FTP端口(默認(rèn)為21)發(fā)出連接請(qǐng)求,服務(wù)器接受請(qǐng)求之后會(huì)建立一條控制鏈路,然后客戶(hù)端程序發(fā)出Port命令,該命令中包含IP地址和端口,告訴服務(wù)器它的數(shù)據(jù)通道的端口打開(kāi)了。當(dāng)需要傳送數(shù)據(jù)時(shí),服務(wù)器便從數(shù)據(jù)端口(默認(rèn)為20)向客戶(hù)端告知的端口發(fā)送連接請(qǐng)求,請(qǐng)求被接受之后便開(kāi)始傳輸數(shù)據(jù),數(shù)據(jù)鏈路通道也就打開(kāi)了。Pasv模式的連接過(guò)程是在開(kāi)始一個(gè)FTP的連接時(shí),客戶(hù)端程序首先為自己隨機(jī)分配一個(gè)TCP端口,它使用這個(gè)端口向服務(wù)器的FTP端口(默認(rèn)為21)發(fā)出連接請(qǐng)求,服務(wù)器接受請(qǐng)求之后會(huì)建立一條控制鏈路,然后客戶(hù)端程序發(fā)出PASV命令,代替Port模式中的PORT命令,以請(qǐng)求服務(wù)器告知它的數(shù)據(jù)連接端口,于是服務(wù)器便為自己隨機(jī)分配一個(gè)數(shù)據(jù)通道端口,并回復(fù)一應(yīng)答命令,將這個(gè)端口號(hào)告訴客戶(hù)端程序。當(dāng)需要傳送數(shù)據(jù)時(shí),客戶(hù)端程序會(huì)從一隨機(jī)分配的數(shù)據(jù)端口向服務(wù)器的數(shù)據(jù)通道端口發(fā)送連接請(qǐng)求,請(qǐng)求被接受之后便開(kāi)始傳輸數(shù)據(jù),數(shù)據(jù)鏈路通道也就打開(kāi)了。在IPv6協(xié)議中,連接過(guò)程與IPv4中類(lèi)似,然而由于兩者的地址和端口的不同,導(dǎo)致FTP命令格式也不同,因此兩個(gè)網(wǎng)絡(luò)之間的FTP命令需要進(jìn)行一對(duì)一轉(zhuǎn)換。首先以表1說(shuō)明IPv4協(xié)議與IPv6協(xié)議中的主要FTP命令的一一對(duì)應(yīng)關(guān)系。<table>tableseeoriginaldocumentpage10</column></row><table>表1PORT命令的格式為PORThl,h2,h3,h4,pl,p2表示客戶(hù)機(jī)在1地址為111.112.113.114上的端口p"256+p2等待服務(wù)器連接。EPRT的命令格式為EPRT<space><d><net-prt><d〉<net-addr><d><tcp-port><d>其中net-prt表示網(wǎng)絡(luò)類(lèi)型(1為IPv4,2為IPv6),net-addr為客戶(hù)端IP地址,tcp-port為客戶(hù)端端口。PASV命令的格式就是PASV。EPSV的格式為EPSV<space〉<net-prt〉,其中net-prt表示網(wǎng)絡(luò)類(lèi)型(1為IPv4,2為IPv6)。PASV的應(yīng)答格式為227EnteringPassiveMode(hl,h2,h3,h4,pl,p2)其含義就是服務(wù)器在IP地址為hl.h2.h3.h4的端口pl*256+p2上等待客戶(hù)端的連接。EPSV的應(yīng)答格式為229EnteringExtendedPassiveMode(<d><d><d><tcp-port><d>)其中tcp-port為服務(wù)器打開(kāi)的端口號(hào)。在IPv4網(wǎng)絡(luò)與IPv6網(wǎng)絡(luò)之間傳輸FTP命令存在兩種情況,一種是在IPv4客戶(hù)端與IPv6服務(wù)器之間傳輸FTP命令,另一種是在IPv6客戶(hù)端與IPv4服務(wù)器之間傳輸FTP命令。這兩種情況下,都需要NAT-PT網(wǎng)關(guān)300作為中轉(zhuǎn),在本實(shí)施例中,F(xiàn)TP應(yīng)用層網(wǎng)關(guān)(圖未示)是集成在NAT-PT網(wǎng)關(guān)中的。下面以圖2圖5說(shuō)明本發(fā)明對(duì)FTP命令的轉(zhuǎn)換流程。首先請(qǐng)參閱圖2,圖3所示,這是對(duì)應(yīng)IPv4客戶(hù)端200(IPv4Client)與IPv6服務(wù)器210(IPv6Server)的情形。首先,IPv4客戶(hù)端200從隨機(jī)分配的一TCP端口向IPv6服務(wù)器210的控制端口(21)發(fā)出連接請(qǐng)求,IPv6服務(wù)器210接受請(qǐng)求之后會(huì)建立一條控制鏈路。在此過(guò)程中,為了能夠讓IPv4客戶(hù)端200主動(dòng)向IPv6服務(wù)器210發(fā)起連接,IPv4客戶(hù)端必須知曉IPv6服務(wù)器210所對(duì)應(yīng)的IPv4地址。為此,NAT-PT網(wǎng)關(guān)300事先已經(jīng)對(duì)IPv6服務(wù)器210做靜態(tài)映射(即將IPv6服務(wù)器210的IPv6地址靜態(tài)映射為一IPv4地址),或者由DNS應(yīng)用層網(wǎng)關(guān)(DNS一ALG)建立動(dòng)態(tài)映射,即在域名查詢(xún)服務(wù)時(shí),將IPv6服務(wù)器210的IPv6地址動(dòng)態(tài)映射為一IPv4地址。這樣,在NAT-PT網(wǎng)關(guān)中的地址映射表中已經(jīng)保存了IPv6服務(wù)器的IPv6—IPv4地址的映射關(guān)系。在主動(dòng)(PORT)模式中,IPv4客戶(hù)端200發(fā)出PORT命令,發(fā)送其IPv4地址和端口,以便告知IPv6服務(wù)器210,它的數(shù)據(jù)通道的端口打開(kāi)了。此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該P(yáng)ORT命令的報(bào)文,在步驟301,判斷該報(bào)文是否是數(shù)據(jù)包報(bào)文,在確定不是數(shù)據(jù)包報(bào)文后,進(jìn)入步驟302,解析該命令,確認(rèn)該命令為PORT命令后,進(jìn)行下面的處理在步驟310,獲取PORT命令中的IPv4地址和端口p01,然后,在步驟3H,以該IPv4地址查找地址映射表,以獲得一映射后的IPv6地址,如果沒(méi)有命中,則為該IPv4地添加一96位(bit)地址前綴,該地址前綴可和IPv4地址組合成IPv6地址。此后,在步驟312,即可將PORT命令轉(zhuǎn)換為EPRT命令,將其中的IPv4地址轉(zhuǎn)換成IPv6地址,而端口不變。最后,在步驟313,創(chuàng)建控制會(huì)話(huà),該控制會(huì)話(huà)記錄IPv4客戶(hù)端200的地址和端口,以及IPv6服務(wù)器210的地址和端口(2),以便在后續(xù)處理中查找使用。服務(wù)器210接收到EPRT命令后,回復(fù)一200EPRT的應(yīng)答命令,此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該應(yīng)答命令的報(bào)文,經(jīng)過(guò)步驟301、302后,確認(rèn)其是200EPRT命令,隨之在步驟320進(jìn)行命令轉(zhuǎn)換,轉(zhuǎn)換為200PORT命令。當(dāng)需要傳送數(shù)據(jù)時(shí),服務(wù)器210從數(shù)據(jù)端口(20)向客戶(hù)端所告知的數(shù)據(jù)通道的端口p01發(fā)送連接請(qǐng)求,請(qǐng)求被接受之后發(fā)送數(shù)據(jù)包報(bào)文,NAT-PT網(wǎng)關(guān)300接獲該數(shù)據(jù)包報(bào)文后,在步驟350創(chuàng)建數(shù)據(jù)會(huì)話(huà),數(shù)據(jù)鏈路通道也就打開(kāi)。其中該數(shù)據(jù)會(huì)話(huà)記錄IPv4客戶(hù)端200的地址和端口(p01),以及IPv6服務(wù)器210的地址和端口(20),以便在后續(xù)處理中查找使用。請(qǐng)繼續(xù)參閱圖2,圖3,在被動(dòng)(PASV)模式中,IPv4客戶(hù)端200經(jīng)TCP端口發(fā)出PASV命令,以等待服務(wù)器應(yīng)答。此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該P(yáng)ASV命令的報(bào)文,在步驟301,判斷該報(bào)文是否是數(shù)據(jù)包報(bào)文,在確定不是數(shù)據(jù)包報(bào)文后,進(jìn)入步驟302,解析該命令,確認(rèn)該命令為PASV命令后,由于該命令中并不包含地址和端口,只需執(zhí)行步驟330:轉(zhuǎn)換為EPSV命令,以及步驟331:創(chuàng)建控制會(huì)話(huà)。該控制會(huì)話(huà)記錄IPv4客戶(hù)端200的地址和端口,以及IPv6服務(wù)器210的地址和端口(21),以便在后續(xù)處理中査找使用。承上述,IPv6服務(wù)器210接收到經(jīng)過(guò)NAT-PT網(wǎng)關(guān)300轉(zhuǎn)換后的EPSV命令后,便為自己隨機(jī)分配一個(gè)數(shù)據(jù)通道端口p03,并回復(fù)一包含這個(gè)端口號(hào)的EPSV應(yīng)答命令,此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該EPSV應(yīng)答命令的報(bào)文,經(jīng)過(guò)步驟301、302,確認(rèn)該命令為EPSV應(yīng)答命令后,進(jìn)行下述處理在步驟340,獲取IPv6服務(wù)器210的IPv6地址,以及EPSV應(yīng)答命令中的端口p03,然后,在步驟341,以該IPv6地址查找地址映射表和地址前綴表,以獲得映射的IPv4地址,此后在步驟342,可將EPSV應(yīng)答命令轉(zhuǎn)換為PASV應(yīng)答命令,其中PASV應(yīng)答命令包含服務(wù)器210的IPv4地址和端口p03。當(dāng)需要傳送數(shù)據(jù)時(shí),客戶(hù)端200會(huì)由一隨機(jī)分配的的數(shù)據(jù)端口p02向服務(wù)器210的數(shù)據(jù)端口p03發(fā)送連接請(qǐng)求,請(qǐng)求被接受之后發(fā)送數(shù)據(jù)包報(bào)文,NAT-PT網(wǎng)關(guān)300接獲該數(shù)據(jù)包報(bào)文后,在步驟350創(chuàng)建數(shù)據(jù)會(huì)話(huà),數(shù)據(jù)鏈路通道也就打開(kāi)。其中該數(shù)據(jù)會(huì)話(huà)記錄IPv4客戶(hù)端200的地址和端口(p02),以及IPv6服務(wù)器210的地址和端口(p03),以便在后續(xù)處理中査找使用。在上述在IPv4客戶(hù)端200與IPv6服務(wù)器210之間傳輸?shù)膶?shí)施例中,由于FTP是支持分布式服務(wù)器的,所以當(dāng)IPv6服務(wù)器210發(fā)起數(shù)據(jù)連接(PORT模式)的時(shí)候,其IPv6地址所映射的IPv4地址與控制連接時(shí)IPv6地址所映射的IPv4地址不一致并不會(huì)導(dǎo)致客戶(hù)端不接受數(shù)據(jù)連接的數(shù)據(jù)。所以這種情況下,F(xiàn)TP應(yīng)用層網(wǎng)關(guān)在轉(zhuǎn)換控制連接載荷時(shí),不用對(duì)數(shù)據(jù)連接附加任何動(dòng)作。而在PASV模式中,控制連接和數(shù)據(jù)連接都有IPv4客戶(hù)端200主動(dòng)發(fā)起,對(duì)于IPv6服務(wù)器的IPv6地址如何被映射為IPv4地址,在兩次連接中肯定是一致的,要么同時(shí)由靜態(tài)映射決定,要么由DNS應(yīng)用層網(wǎng)關(guān)建立的動(dòng)態(tài)映射決定。所以這種情況下,F(xiàn)TP應(yīng)用層網(wǎng)關(guān)在轉(zhuǎn)換控制連接載荷時(shí),不用對(duì)數(shù)據(jù)連接附加任何動(dòng)作。下面以圖4、圖5說(shuō)明IPv4服務(wù)器220(IPv4Server)與IPv6客戶(hù)端230(IPv6Client)的情形。首先,IPv6客戶(hù)端230從隨機(jī)分配的一TCP端口向IPv4服務(wù)器220的控制端口(21)發(fā)出連接請(qǐng)求,IPv4服務(wù)器220接受請(qǐng)求之后會(huì)建立一條控制鏈路。在主動(dòng)(EPRT)模式中,數(shù)據(jù)連接將由IPv4服務(wù)器220主動(dòng)發(fā)起,但是由于預(yù)先并沒(méi)有DNS應(yīng)用層網(wǎng)關(guān)的干預(yù)將IPv6客戶(hù)端230的IPv6地址映射為IPv4地址,所以我們只能在對(duì)控制連接的載荷進(jìn)行解析時(shí),預(yù)先將數(shù)據(jù)連接的數(shù)據(jù)會(huì)i舌(SessionEntries)創(chuàng)建,其過(guò)程如下IPv6客戶(hù)端230發(fā)出EPRT命令,發(fā)送其IPv6地址和端口p01',以便告知IPv4服務(wù)器220,它的數(shù)據(jù)通道的端口打開(kāi)了。此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該P(yáng)ORT命令的報(bào)文,在步驟401,判斷該報(bào)文是否是數(shù)據(jù)包報(bào)文,在確定不是數(shù)據(jù)包報(bào)文后,進(jìn)入步驟402,解析該命令,確認(rèn)該命令為EPRT命令后,進(jìn)行下面的處理在步驟410,獲取EPRT命令中的IPv6地址和端口pOl,,然后,在步驟411,以該IPv6地址查找地址映射表和地址前綴中是否有匹配的IPv4地址和端口,如有則直接進(jìn)入步驟413,此時(shí)該端口將作為數(shù)據(jù)端口p01",如果沒(méi)有,則進(jìn)入步驟412,從一含有IPv4地址和端口的FTP地址池中取出一IPv4地址和兩個(gè)端口,其中一端口作為控制端口,另一端口作為數(shù)據(jù)端口p01"。同時(shí),步驟412還包括建立該IPv4地址和Ipv6地址的地址映射關(guān)系表,以便在后續(xù)的處理中查詢(xún)。此后,在步驟413,即可將EPRT命令轉(zhuǎn)換為PORT命令,將其中的IPv6地址轉(zhuǎn)換成IPv4地址,而端口p01,轉(zhuǎn)換為IPv4地址的數(shù)據(jù)端口p01"。接下來(lái),在步驟414,創(chuàng)建控制會(huì)話(huà),該控制會(huì)話(huà)記錄IPv6客戶(hù)端230的地址和控制端口,以及IPv4服務(wù)器220的地址和控制端口(21),以便在后續(xù)處理中查找使用。最后,在步驟415,預(yù)先創(chuàng)建數(shù)據(jù)會(huì)話(huà),該數(shù)據(jù)會(huì)話(huà)記錄IPv6客戶(hù)端230的地址和數(shù)據(jù)端口(pOr'),以及IPv4服務(wù)器220的地址和數(shù)據(jù)端口(20)。其中IPv6客戶(hù)端230的地址和IPv4服務(wù)器220的地址與控制會(huì)話(huà)中所記錄的地址是一致的。服務(wù)器220接收到PORT命令后,回復(fù)一200PORT的應(yīng)答命令,該命令可為IPv6客戶(hù)端所識(shí)別,因此不必轉(zhuǎn)換。當(dāng)需要傳送數(shù)據(jù)時(shí),IPv4服務(wù)器220從數(shù)據(jù)端口向IPv6客戶(hù)端230的數(shù)據(jù)通道的端口p01,發(fā)送連接請(qǐng)求,請(qǐng)求被接受之后發(fā)送數(shù)據(jù)包報(bào)文,NAT-PT網(wǎng)關(guān)300接獲該數(shù)據(jù)包報(bào)文后,找到已經(jīng)建立的數(shù)據(jù)會(huì)話(huà)(步驟441),利用該數(shù)據(jù)會(huì)話(huà)記錄的信息進(jìn)行數(shù)據(jù)傳送。在被動(dòng)(EPSV)模式中,控制連接和數(shù)據(jù)連接都有IPv6客戶(hù)端230主動(dòng)發(fā)起,而且必須保證兩個(gè)連接的IPv6客戶(hù)端230的IPv6地址被映射為同一個(gè)IPv4地址,否則IPv4服務(wù)器220將拒絕連接。但是在EPSV模式下,由于數(shù)據(jù)連接源端口(即客戶(hù)端230的數(shù)據(jù)端口)的隨機(jī)性,并不能像EPRT模式時(shí)那樣預(yù)先建立數(shù)據(jù)連接的數(shù)據(jù)會(huì)話(huà)。為此本發(fā)明采用一種數(shù)據(jù)臨時(shí)會(huì)話(huà)(AlgDataSession),在確定數(shù)據(jù)連接的首報(bào)文后,再轉(zhuǎn)發(fā)至FTP應(yīng)用層網(wǎng)關(guān)為這個(gè)連接建立相應(yīng)的Session,并且保證其IPv6客戶(hù)端230的IPv6地址映射和控制連接一致。具體過(guò)程如下請(qǐng)繼續(xù)參閱圖4,圖5,IPv6客戶(hù)端230發(fā)出EPSV命令,以等待服務(wù)器應(yīng)答。此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該EPSV命令的報(bào)文,在步驟401,判斷該報(bào)文是否是數(shù)據(jù)包報(bào)文,在確定不是數(shù)據(jù)包報(bào)文后,進(jìn)入步驟402,解析該命令,確認(rèn)該命令為EPSV命令后,由于該命令中并不包含地址和端口,因此直接在步驟420將該命令轉(zhuǎn)換為PASV命令;隨后,創(chuàng)建控制會(huì)話(huà)(步驟421),并且創(chuàng)建數(shù)據(jù)臨時(shí)會(huì)話(huà)(步驟422)。在創(chuàng)建控制會(huì)話(huà)過(guò)程中,需要以客戶(hù)端230的IPv6地址查找地址映射表和地址前綴表,以確認(rèn)是否有映射的IPv4地址,如果沒(méi)有,則從FTP地址池中取一個(gè)IPv4地址和兩個(gè)端口,并建立與IPv6地址的映射關(guān)系表。其中,一個(gè)端口作為控制端口,另一個(gè)端口作為數(shù)據(jù)端口p02,,。這樣,控制會(huì)話(huà)中記錄了IPv4服務(wù)器220的地址和控制端口(21),以及IPv6客戶(hù)端230的地址和控制端口。而在創(chuàng)建數(shù)據(jù)臨時(shí)會(huì)話(huà)(AlgDataSession)時(shí),在其中記錄了IPv4服務(wù)器220的地址,以及為IPv6客戶(hù)端230分配的地址和數(shù)據(jù)端口(p02"),此時(shí)IPv4服務(wù)器220的數(shù)據(jù)端口還未獲得。承上述,IPv4服務(wù)器220接收到經(jīng)過(guò)NAT-PT網(wǎng)關(guān)300轉(zhuǎn)換后的EPSV命令后,便為自己隨機(jī)分配一個(gè)數(shù)據(jù)通道端口p03',并回復(fù)一包含自身地址和端口p03,的PASV應(yīng)答命令,此時(shí),NAT-PT網(wǎng)關(guān)300接獲含有該P(yáng)ASV應(yīng)答命令的報(bào)文,經(jīng)過(guò)步驟401、402,確認(rèn)該命令為PASV應(yīng)答命令后,進(jìn)行下述處理在步驟440,獲取PASV應(yīng)答命令中的服務(wù)器220的IPv4地址和端口p03,,然后,在步驟441,査找一地址映射表和一地址前綴表,即根據(jù)IPv4地址査找地址映射表,獲取轉(zhuǎn)換到IPv6的地址。如果地址映射表里沒(méi)有找到,則查找地址前綴表,根據(jù)前綴+IPv4地址組成IPv6地址。而后在步驟442,將端口p03,寫(xiě)入數(shù)據(jù)臨時(shí)會(huì)話(huà)中,此后在步驟443,可將PASV應(yīng)答命令轉(zhuǎn)換為EPSV應(yīng)答命令,將其中的IPv4地址轉(zhuǎn)換成IPv6地址,而端口p03,轉(zhuǎn)換為IPv6地址的數(shù)據(jù)端口。當(dāng)需要傳送數(shù)據(jù)時(shí),IPv6客戶(hù)端230會(huì)由一隨機(jī)分配的的數(shù)據(jù)端口p02'向服務(wù)器220的數(shù)據(jù)端口p03'發(fā)送連接請(qǐng)求,請(qǐng)求被接受之后發(fā)送數(shù)據(jù)包報(bào)文,NAT-PT網(wǎng)關(guān)300接獲該數(shù)據(jù)包報(bào)文后,在步驟340正式創(chuàng)建數(shù)據(jù)會(huì)話(huà),數(shù)據(jù)鏈路通道也就打開(kāi)。其中該數(shù)據(jù)會(huì)話(huà)記錄客戶(hù)端230的IPv4地址和端口(p02"),以及服務(wù)器220的IPv6地址和端口(p03'),以便在后續(xù)處理中查找使用。在上述實(shí)施例中,F(xiàn)TP地址池例如可以為現(xiàn)有的NAPT地址池的一個(gè)子集,比如256IPv4*1024Port(占用的port為1024-2047)。對(duì)于每個(gè)FTP連接,對(duì)應(yīng)一個(gè)控制連接,并且其控制連接存在期間,可能會(huì)出現(xiàn)多個(gè)數(shù)據(jù)連接,但是我們注意到一個(gè)事實(shí),多個(gè)數(shù)據(jù)連接是串行出現(xiàn)的,也就是同一時(shí)刻一個(gè)FTP連接只可能存在一個(gè)數(shù)據(jù)連接。所以在從地址池中取地址和端口時(shí),只給每個(gè)FTP連接分配一個(gè)控制端口,用來(lái)映射IPv6FTP控制會(huì)話(huà)報(bào)文中的源端口;分配一個(gè)數(shù)據(jù)端口,用來(lái)映射IPv6FTP數(shù)據(jù)會(huì)話(huà)報(bào)文中的源端口,并且這個(gè)數(shù)據(jù)端口是一個(gè)復(fù)用的端口號(hào),即每次建立數(shù)據(jù)連接,即采用這個(gè)數(shù)據(jù)端口?;谏鲜?,本發(fā)明的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法可概括為(請(qǐng)參閱圖6):首先,執(zhí)行步驟601,接收FTP報(bào)文,判斷其是否是數(shù)據(jù)包報(bào)文,如果是,則創(chuàng)建數(shù)據(jù)會(huì)話(huà)(步驟606)并結(jié)束(步驟607),如果不是數(shù)據(jù)包報(bào)文,則執(zhí)行下列步驟-步驟602,解析FTP命令以獲悉該命令的類(lèi)型;步驟603,對(duì)該FTP命令進(jìn)行轉(zhuǎn)換,其中當(dāng)FTP命令包含IP地址和/或端口時(shí),同時(shí)對(duì)IP地址和/或端口進(jìn)行轉(zhuǎn)換;步驟604,當(dāng)FTP命令是PORT命令、EPRT命令、PASV命令、或者EPSV命令時(shí),創(chuàng)建控制會(huì)話(huà);以及步驟605,當(dāng)FTP命令是EPRT命令時(shí),在創(chuàng)建控制會(huì)話(huà)的同時(shí)創(chuàng)建數(shù)據(jù)會(huì)話(huà),而當(dāng)命令是EPSV命令時(shí),在創(chuàng)建控制會(huì)話(huà)的同時(shí)創(chuàng)建一數(shù)據(jù)臨時(shí)會(huì)話(huà)。其中,每一步驟中,對(duì)于各種命令的具體轉(zhuǎn)換步驟請(qǐng)參照前述敘述和圖2圖5所示,在此不再展開(kāi)。綜上所述,本發(fā)明的FTP應(yīng)用層網(wǎng)關(guān),可以在IPv4客戶(hù)端與IPv6服務(wù)器之間,或者IPv6客戶(hù)端與IPv4服務(wù)器之間翻譯FTP報(bào)文,并進(jìn)行控制會(huì)話(huà)和數(shù)據(jù)會(huì)話(huà)的建立,使IPv4網(wǎng)絡(luò)與IPv6網(wǎng)絡(luò)之間的FTP傳輸確實(shí)可以實(shí)現(xiàn)。以上的實(shí)施例說(shuō)明僅為本發(fā)明的較佳實(shí)施例說(shuō)明,本領(lǐng)域技術(shù)人員可依據(jù)本發(fā)明的上述實(shí)施例說(shuō)明而作出其它種種等效的替換及修改。然而這些依據(jù)本發(fā)明實(shí)施例所作的種種等效替換及修改,屬于本發(fā)明的發(fā)明精神及由權(quán)利要求所界定的專(zhuān)利范圍內(nèi)。權(quán)利要求1.一種基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,用于IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)之間FTP協(xié)議的轉(zhuǎn)換,其特征在于,包括以下步驟a.接收FTP報(bào)文,判斷其是否是數(shù)據(jù)包報(bào)文,如果是,則創(chuàng)建數(shù)據(jù)會(huì)話(huà);如果不是數(shù)據(jù)包報(bào)文,則執(zhí)行下列步驟b.解析FTP命令以獲悉該命令的類(lèi)型;c.對(duì)所述FTP命令進(jìn)行轉(zhuǎn)換,其中當(dāng)所述命令包含IP地址和/或端口時(shí),同時(shí)對(duì)所述IP地址和/或端口進(jìn)行轉(zhuǎn)換;d.當(dāng)所述FTP命令是PORT命令、EPRT命令、PASV命令、或者EPSV命令時(shí),創(chuàng)建控制會(huì)話(huà);以及e.當(dāng)所述FTP命令是EPRT命令時(shí),在創(chuàng)建所述控制會(huì)話(huà)的同時(shí)創(chuàng)建數(shù)據(jù)會(huì)話(huà),而當(dāng)所述命令是EPSV命令時(shí),在創(chuàng)建所述控制會(huì)話(huà)的同時(shí)創(chuàng)建一數(shù)據(jù)臨時(shí)會(huì)話(huà)。2.如權(quán)利要求1所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,當(dāng)所述FTP命令是PORT命令時(shí),則在所述步驟c中,對(duì)所述FTP命令迸行轉(zhuǎn)換的步驟包括獲取命令中的IPv4地址和端口;利用所述IPv4地址査找一地址映射表以獲得映射的一IPv6地址,或者查找一地址前綴表以獲得一地址前綴,該地址前綴可與IPv4地址組成一IPv6地址;以及將PORT命令轉(zhuǎn)換為EPRT命令,將PORT命令中的IPv4地址相應(yīng)轉(zhuǎn)換為IPv6地址。3.如權(quán)利要求1所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,當(dāng)所述FTP命令是EPSV應(yīng)答命令時(shí),則在所述步驟c中,對(duì)所述FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取EPSV命令發(fā)送端的IPv6地址和端口;利用所述IPv6地址查找一地址映射表和一地址前綴表以獲得一IPv4地址;將EPSV應(yīng)答命令轉(zhuǎn)換為PASV應(yīng)答命令,在所述PASV應(yīng)答命令中加入所述IPv4地址。4.如權(quán)利要求1所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,當(dāng)所述FTP命令是EPRT命令時(shí),則在所述步驟c中,對(duì)所述FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取EPRT命令中的IPv6地址和端口;利用所述IPv6地址査找地址映射表和地址前綴表中是否有匹配的IPv4地址和端口,如果有,則將所述端口作為數(shù)據(jù)端口;如果沒(méi)有,則從一FTP地址池中取出一IPv4地址和兩個(gè)端口,其中一端口作為控制端口,另一端口作為數(shù)據(jù)端口,同時(shí),建立該IPv4地址和Ipv6地址的地址映射關(guān)系表;以及將EPRT命令轉(zhuǎn)換為PORT命令,將其中的IPv6地址轉(zhuǎn)換成IPv4地址,而EPRT命令中的端口轉(zhuǎn)換為所述數(shù)據(jù)端口。5.如權(quán)利要求1所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,當(dāng)所述FTP命令是PASV應(yīng)答命令時(shí),則在所述步驟c中,對(duì)所述FTP命令進(jìn)行轉(zhuǎn)換的步驟包括獲取PASV應(yīng)答命令中的IPv4地址和端口;查找一地址映射表和一地址前綴表;將所述端口寫(xiě)入所述數(shù)據(jù)臨時(shí)會(huì)話(huà)中;以及將所述PASV應(yīng)答命令轉(zhuǎn)換為EPSV應(yīng)答命令。6.如權(quán)利要求1所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,在所述步驟e中,當(dāng)所述FTP命令是EPRT命令時(shí),所述創(chuàng)建的數(shù)據(jù)會(huì)話(huà)與所述控制會(huì)話(huà)具有相同的客戶(hù)端地址。7.如權(quán)利要求l所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,當(dāng)所述FTP命令是EPSV命令時(shí),則所述步驟d中,創(chuàng)建控制會(huì)話(huà)的步驟包括.-以客戶(hù)端的IPv6地址查找地址映射表和地址前綴表,以獲得一映射的IPv4地址和端口,其中所述端口作為數(shù)據(jù)端口;如果沒(méi)有映射的IPv4地址,則從一FTP地址池中分配一個(gè)IPv4地址和兩個(gè)端口,建立該IPv4地址與所述IPv6地址的映射關(guān)系表,并將所述兩個(gè)端口的其中一個(gè)端口作為客戶(hù)端的控制端口,另一個(gè)端口作為客戶(hù)端的數(shù)據(jù)端口;在控制會(huì)話(huà)中記錄IPv4服務(wù)器的地址和控制端口,和IPv6客戶(hù)端的地址和控制端口。8.如權(quán)利要求7所述的基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,其特征在于,當(dāng)所述FTP命令是EPSV命令時(shí),則步驟e中,創(chuàng)建數(shù)據(jù)臨時(shí)會(huì)話(huà)的步驟包括在數(shù)據(jù)臨時(shí)會(huì)話(huà)中記錄IPv4服務(wù)器的地址,以及為IPv6客戶(hù)端分配的所述IPv4地址和數(shù)據(jù)端口。全文摘要本發(fā)明公開(kāi)一種基于NAT-PT的FTP應(yīng)用層網(wǎng)關(guān)的實(shí)現(xiàn)方法,用于IPv4網(wǎng)絡(luò)和IPv6網(wǎng)絡(luò)之間FTP協(xié)議的轉(zhuǎn)換,其包括以下步驟a.接收FTP報(bào)文,判斷其是否是數(shù)據(jù)包報(bào)文,如果是,則創(chuàng)建數(shù)據(jù)會(huì)話(huà);如果不是數(shù)據(jù)包報(bào)文,則執(zhí)行下列步驟b.解析FTP命令以獲悉該命令的類(lèi)型;c.對(duì)FTP命令進(jìn)行轉(zhuǎn)換,其中當(dāng)命令包含IP地址和/或端口時(shí),同時(shí)對(duì)IP地址和/或端口進(jìn)行轉(zhuǎn)換;d.當(dāng)FTP命令是PORT命令、EPRT命令、PASV命令、或者EPSV命令時(shí),創(chuàng)建控制會(huì)話(huà);以及e.當(dāng)FTP命令是EPRT命令時(shí),在創(chuàng)建控制會(huì)話(huà)的同時(shí)創(chuàng)建數(shù)據(jù)會(huì)話(huà),而當(dāng)命令是EPSV命令時(shí),在創(chuàng)建控制會(huì)話(huà)的同時(shí)創(chuàng)建一數(shù)據(jù)臨時(shí)會(huì)話(huà)。文檔編號(hào)H04L12/66GK101325580SQ20071004204公開(kāi)日2008年12月17日申請(qǐng)日期2007年6月15日優(yōu)先權(quán)日2007年6月15日發(fā)明者兵楊申請(qǐng)人:上海億人通信終端有限公司