基于雙棧協(xié)議的IPV4向IPV6過渡方案設(shè)計(jì)
摘要 隨著Internet網(wǎng)絡(luò)在全球范圍內(nèi)的迅速擴(kuò)大,應(yīng)用日益增加,IP地址即將耗盡的矛盾更加突出,同時(shí)為解決IPv4的設(shè)計(jì)缺陷,國(guó)際互聯(lián)網(wǎng)工程任務(wù)組開發(fā)了新一代Internet協(xié)議-IPv6,但由于IPv4與IPv6之間存在著很大的差異,同時(shí)存在眾多基于IPv4協(xié)議的網(wǎng)絡(luò)及應(yīng)用,因此,要用新的IPv6代替舊的IPv4必然存在一個(gè)過渡時(shí)期。針對(duì)上述問題我們研究了一種過渡機(jī)制,并針對(duì)該過渡機(jī)制設(shè)計(jì)實(shí)現(xiàn)了瀏覽器模式的IPv4客戶機(jī)對(duì) IPv6服務(wù)器的訪問。
關(guān)鍵詞 IPv4 IPv6 過渡機(jī)制 雙協(xié)議棧 代理服務(wù) Java
前 言
如今,Internet在全球范圍內(nèi)的普及應(yīng)用超過了歷史上的任何一項(xiàng)新技術(shù)所產(chǎn)生的影響和帶來的變化,實(shí)踐證明,IPv4不僅是健壯的、而且是易于實(shí)現(xiàn)的,并具有很好的互操作性。這些都充分肯定了IPv4協(xié)議(IPv4 protocol)初始設(shè)計(jì)的正確性。但是隨著Internet迅速發(fā)展,接入Internet的網(wǎng)絡(luò)設(shè)備和運(yùn)行在其上的應(yīng)用程序急劇增加,由此帶來了 IP地址的迅速耗盡與路由表膨脹等問題,對(duì)IP地址范圍的擴(kuò)大也迫在眉睫。針對(duì)IP地址的問題,IETF(Internet 工程任務(wù)組)提出了新一代網(wǎng)際互聯(lián)協(xié)議――IPv6協(xié)議(IPv6 protocol),它不但解決了IPv4的地址問題,并且改善了IP協(xié)議的性能[1,2]。而在現(xiàn)階段中,由于Internet完全是建立在IPv4的體系結(jié)構(gòu)上,所有的應(yīng)用程序也是按照IPv4格式書寫的。因此如何由IPv4向IPv6過渡以及由此而產(chǎn)生的過渡機(jī)制成為了一個(gè)新的研究熱點(diǎn)。針對(duì)IPv4向IPv6的過渡,我們研究了用雙協(xié)議棧來過渡的方式,遵循IPv4中的代理服務(wù)機(jī)制,嘗試實(shí)現(xiàn)了用Firefox為瀏覽器通過雙協(xié)議棧的代理服務(wù)器訪問基于IPv6的網(wǎng)頁(yè)。
1 IPv4向IPv6的過渡
1.1 過渡的必然性
隨著Internet應(yīng)用范圍的擴(kuò)大,發(fā)現(xiàn)IPv4有著很多不可克服的問題,必須通過新的協(xié)議來最終替代。通常,協(xié)議的過渡是很不容易的,從IPv4向 IPv6的過渡也是如此。目前由于IPv4協(xié)議已經(jīng)成功的使用了將近20年,基于IPv4的應(yīng)用程序和設(shè)備已經(jīng)相當(dāng)成熟和具有相當(dāng)?shù)囊?guī)模,不可能一夜之間完成所有升級(jí)變更。而另一方面,IPv6的應(yīng)用程序和設(shè)備還不成熟完備,這樣必然會(huì)出現(xiàn)許多孤立的IPv6網(wǎng)絡(luò)。那么如何完成從IPv4向IPv6的過渡,是發(fā)展IPv6首要解決的問題。由此在相當(dāng)長(zhǎng)時(shí)間內(nèi),IPv6節(jié)點(diǎn)之間的通信還要依賴于原有IPv4網(wǎng)絡(luò)的設(shè)施,同時(shí)IPv6節(jié)點(diǎn)也必不可少的要與 IPv4節(jié)點(diǎn)通信,因此過渡是不可避免的,并且過渡[3]必將是分布式的、漸進(jìn)的進(jìn)行。據(jù)專家的預(yù)測(cè),過渡初期的 Internet將由少量運(yùn)行 IPv6協(xié)議設(shè)備組成小的網(wǎng)絡(luò)“孤島”和大量運(yùn)行 IPv4協(xié)議的設(shè)備組成的“海洋”組成。如圖1所示:
圖1:IPv4網(wǎng)絡(luò)海洋中的IPv6孤島 |
而隨著時(shí)間的推移,IPv4的海洋將會(huì)逐漸變小,而IPv6的小島不僅會(huì)越來越多,而且越來越大 ,并最終完全取代IPv4形成新的下一代Internet網(wǎng)絡(luò)。
1.2 過渡策略的主要原則
考慮到網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和現(xiàn)實(shí)世界的商業(yè)需求,在進(jìn)行IPv4網(wǎng)絡(luò)向IPv6網(wǎng)絡(luò)過渡策略的設(shè)計(jì)中,如下方向性問題必須遵循,在“下一代協(xié)議建議規(guī)范”(RFC1752)中,明確定義了以下的過渡原則:
1. 過渡方式應(yīng)該是逐步的和漸進(jìn)的,保護(hù)IPv4網(wǎng)絡(luò)設(shè)備的投資,確保在一個(gè)相當(dāng)長(zhǎng)的歷史階段,IPv4網(wǎng)絡(luò)設(shè)備可以在過渡時(shí)期中正常地獨(dú)立使用。
2. IPv4網(wǎng)絡(luò)世界和IPv6網(wǎng)絡(luò)世界相互滲透,長(zhǎng)期并存,這就要求IPv4和IPv6網(wǎng)絡(luò)設(shè)備彼此可以互連互通,實(shí)現(xiàn)互操作。
3. IPv4網(wǎng)絡(luò)世界向IPv6網(wǎng)絡(luò)世界過渡過程中,IPv4向IPv6升級(jí)的費(fèi)用應(yīng)盡可能地低,過渡技術(shù)應(yīng)盡可能地簡(jiǎn)單,以盡快地吸引廣大用戶主動(dòng)的向IPv6過渡。
由于IPv4協(xié)議和IPv6協(xié)議之間不具有相關(guān)性,因此IPv4和IPv6體系結(jié)構(gòu)之間還需要構(gòu)建相關(guān)的過渡機(jī)制來支持二者無縫地并存。
2 過渡方案設(shè)計(jì)與實(shí)現(xiàn)
2.1 IPv4/IPv6雙協(xié)議棧代理服務(wù)器原理
借鑒傳統(tǒng)的IPv4代理服務(wù)器原理,聯(lián)想到在一臺(tái)代理服務(wù)器上安裝具有IPv4/IPv6雙協(xié)議棧,那么代理服務(wù)器就可以作為IPv4客戶端向IPv6服務(wù)器的“中轉(zhuǎn)站”,從而實(shí)現(xiàn)兩者間的間接通信。其具體實(shí)現(xiàn)原理如圖2。
圖2 IPv4應(yīng)用程序通過代理訪問IPv6服務(wù)器 |
2.2 IPv4/IPv6過度方案設(shè)計(jì)與實(shí)現(xiàn)
本方案立足于應(yīng)用最為普遍的瀏覽器技術(shù),而直接改寫瀏覽器本身的代碼是不現(xiàn)實(shí)的,因此我們采用一種比較直接的解決方案:在雙協(xié)議棧主機(jī)的傳輸層中,借鑒傳統(tǒng)IPv4的傳輸層代理機(jī)制對(duì)IPv4和IPv6協(xié)議進(jìn)行“轉(zhuǎn)換”,從而讓僅支持IPv4的應(yīng)用程序無需升級(jí)就能夠“無縫”地訪問純IPv6服務(wù)。這樣我們只需對(duì)代理服務(wù)器編程,同時(shí)利用socket的獨(dú)立于網(wǎng)絡(luò)協(xié)議的特性,通過編寫程序完成對(duì)socket套接字中某些參數(shù)的修改,讓代理服務(wù)器調(diào)用系統(tǒng)的 IPv6協(xié)議棧來通信,實(shí)現(xiàn)接入IPv6。實(shí)現(xiàn)上述設(shè)計(jì)思路的關(guān)鍵就是對(duì)編寫修改完成對(duì)socket套接字中某些參數(shù)的修改并完成調(diào)用,下面是構(gòu)造代理服務(wù)器過程相關(guān)代碼提煉如下:
//
在給定
Socket
上創(chuàng)建一個(gè)代理線程。
public HttpProxy(Socket s) { socket=s; start(); }
public void writeLog(int c, boolean browser) throws IOException {
log.write(c);
}
public void writeLog(byte[] bytes,int offset,
int len, boolean browser) throws IOException {
for (int i=0;ilen;i++) writeLog((int)bytes[offset+i],browser);
}
public String processHostName(String url, String host, int port, Socket sock) {
java.text.DateFormat cal=java.text.DateFormat.getDateTimeInstance();
System.out.println(cal.format(new java.util.Date()) + " - " +
url + " " + sock.getInetAddress()+"BR>");
return host;
//
執(zhí)行操作的線程
public void run() {
S
ocket outbound=null;
try {
socket.setSoTimeout(TIMEOUT);
InputStream is=socket.getInputStream();
OutputStream os=null;
……
outbound.setSoTimeout(TIMEOUT);
os=outbound.getOutputStream();
os.write(line.getBytes());
os.write(' ');
os.write(host0.getBytes());
os.write(' ');
……
……
和所有線程對(duì)象一樣,HttpProxy類的主要工作在run方法內(nèi)完成。run方法實(shí)現(xiàn)了一個(gè)簡(jiǎn)單的狀態(tài)機(jī),從Web瀏覽器每次一個(gè)讀取字符,持續(xù)這個(gè)過程直至有足夠的信息找出目標(biāo)Web服務(wù)器。然后,run打開一個(gè)通向該Web服務(wù)器的Socket(如果有多個(gè)代理服務(wù)器被鏈接在一起,則run方法打開一個(gè)通向鏈里面下一個(gè)代理服務(wù)器的Socket)。打開Socket之后,run先把部分的請(qǐng)求寫入Socket,然后調(diào)用pipe方法。pipe方法直接在兩個(gè)Socket之間以最快的速度執(zhí)行讀寫操作。完成了代理服務(wù)器程序的設(shè)計(jì)后,要使得客戶端能使用代理,還需要在客戶端的瀏覽器進(jìn)行相應(yīng)的設(shè)置,即在瀏覽器中配置代理服務(wù)器,這樣就完成了全部過程。
3 結(jié)論
Internet的發(fā)展趨勢(shì)將證明IPv4必將會(huì)被IPv6所替代,但其過渡過程也一定會(huì)是一個(gè)漫長(zhǎng)的、艱難的。因此,對(duì)過渡問題的研究不僅有利于完成過渡,而且還能保障Internet網(wǎng)絡(luò)長(zhǎng)期穩(wěn)定運(yùn)行。本設(shè)計(jì)不僅能夠完成轉(zhuǎn)換同時(shí)采用較低成本模式,形成一個(gè)解決方案,系統(tǒng)測(cè)試的結(jié)果表明所采取的技術(shù)是合理的,能夠滿足實(shí)際運(yùn)行需要。
參考文獻(xiàn)
[1]周玲,尹霞, 吳建平. 實(shí)現(xiàn)IPv4向IPv6過渡的隧道技術(shù).計(jì)算機(jī)工程與應(yīng)用,2002:156
[2]Jim Bound, L aurent Toutain. Dual Stack transition mechanism(DSTM) http://www.ietf.org/interner-drafts/draft-ietf-ngtrans-dstm-00.txt, October,1999
[3]R.Hinden . RFC2732: Format for Literal IPv6 Address in URL’s , 2002-12
評(píng)論