APPENDIX A. 實驗網路說明

為了進一步實地了解IPv6在無線網路上的行為,並尋求可能發生的困難,我們利用以Linux為作業系統的PC主機建置了一套簡易的IPv6實驗網路。

我們使用了四台Pentium III PC以及一台Pentium Notebook來建置這個實驗網路,其中兩台作為IPv6 Router,其他主機則當作一般v6 Host

用來連接這幾台主機的介面,分成有線及無線兩種,在有線部分我們所使用的一般100M Ethernet,而在無線部份則是使用LucentORINOCO 802.11 silver PC card[1] (IEEE 802.11b)作為介面。在介面卡之外,另外作為測試用的兩台Lucent Orinoco AP-1000Access Point,這兩台AP主要是用來作為試驗Mobile Host能否在AP之間移動並仍能保持與網路之間的連線所用。

在實際架設時,為了降低架設複雜度並逐步確認各個Component都能正確運作,我們設定了不同的階段來一步步了解現有的軟硬體能同時對IPv6wireless communication作到什麼程度的支援。

以下為在實驗網路中的主機列表,

 

Host Name

O.S

Function

Odyssey

RedHat 7.2[2]

Router

Drake

RedHat 7.2

Router

Notebook

RedHat 7.2

Wireless Host

Mobile_1

RedHat 7.2

Wire Host

Daemon

Windows 2000[3]

Wire Host

Table 2. Host List

 

 

        我們的目標是觀察Mobile Host在IPv6無線網路內作移動所引起的問題與狀況,簡單的移動可以利用一主機跨越兩個鄰近的網域來達成,而兩個網域可以利用同一台router的不同interface來達成,但是為了讓packet在不同網域中轉送的效果更易觀察,我們決定把兩個網域分別利用不同台router上的interface來切分,這使得在實驗網路中最起碼要有兩台router,才能達到上述的效果。

        而這樣的設計也增加了部份困難度,因為packet不會只經過一個hop,在經過兩個hop以上時,要妥善設定的就不只是一台router上的各個介面,而要讓router間彼此能交換packet。

 

 

 

 

 

Figure 9. A simple setting in Experimental Network

 
 

 

 


第一步,我們希望能先確認現有的LinuxMicrosoftIPv6 implementation是否有效。利用第一個Scenario,首先可以確認IPv6 router是否具有RFC2460所描述的Router behavior,在這方面,我們發現這個版本的router並不會定時發出RA (Router Advertisement) ,尚需另外安裝其他application[4]來輔助router來發RA,讓其下的IPv6 host能根據此RA來進行stateless auto-configuration

在正式進行資傳輸前,我們要先確定所有的IPv6 link都是通的,在這方面有線部份較沒有問題,比較有問題的是wireless段。由於wireless段的介面有多種版本,造成使用不同版本驅動程式的介面無法互通,而在不同作業系統上這個問題顯得更加嚴重,並不是所有版本的驅動程式都能讓互通,當情況成為與AP溝通時又會有所不同,為了降低複雜度,所有在Linux上的wireless card都使用由Lucent發出的同一版本Driver[5]

由於Router本身便具有wireless interface,故在此網路中不使用AP,驅動一個wireless interface時可以有三種不同的模式選擇{ManagedAd-hocAP},由於目前可用的Driver並未將AP的功能實作完成,而Managed模式又必須要另外有AP存在,故採用Ad-hoc模式,同樣的在一般Host端的wireless interface也一樣設定為Ad-hoc模式。

Router部份,一方面由於topology相當簡單一方面也為了降低複雜度,我們沒有使用任何routing protocol,改以在所有的Router上設定static route,並且手動設定Router上的所有Interface[6]

第一個簡單的測試如圖9,理想的狀況為DaemonNotebook兩台主機都能在開機後進行auto-configuration,並在完成這項動作後能直接存取網路資源。在這個測試裡,我們試圖讓DaemonNotebook在開機後對彼此進行傳輸。要讓這樣的動作完成,先決條件是所有的Host都必須先藉由auto-configuration取得unicast address以及default router的相關資訊,當packet送至中介的router時,router必須要能夠先進行每個hop要完成的基本動作,如檢查Hop Limitcheck sum等,再根據IPv6 routing table決定要將packet forward出的方向,在另一端的Host也必須要能認出送往自身的packet並進行收取packet的動作。

第一個測試相當的成功,我們可以利用icmpv6來辨認所有host是否仍在線上,也可以進行一般IP packet的傳送,我們利用修改過能支援IPv6 sockettelnetftp,來看一般IP packet forwarding的效果,結果兩種應用程式都運作的相當順利。

接下來我們要作的是建立起連結兩個router的網路,為了降低複雜度排除不穩定的元件。在這個實驗中,所有的連結都是有線的,這是為了將無線界面的設定與router的設定動作分開處理,再分別確定兩者都是可行的之後,再將兩者合併。

在這個階段(如圖10),我們所遭遇到的主要困難為routerrouting table的設定問題,由於router間不會利用auto-configuration找出其他router,在設定routing table時除了要設定輸出界面外,尚要指明下一站routerIP位址,才能真正讓packet在兩個router間作forwarding[詳細設定請見附件二]

Figure 10. Experiment for 2 hop forwarding

 
 

 


在完成設定之後,我們採取跟上一個實驗類似的方式來測試經過兩站的forwarding能否成功,利用icmpv6telnet以及ftp的傳輸來觀察packet在兩個router間是否有如預期般的進行轉送並經過適當的處理。結果相當令人振奮,此時網路內所有的節點皆可互相連通進行傳輸。

最後,我們試圖將上述兩種不同特性的元件合併在一起進行測試,以真正觀察mobile hostwireless IPv6 network內的行為。

網路topology如圖11,每台router上分別有三個interface連結至不同的子網段,其中各有一個無線界面提供一個無線網段的連結,其餘的界面皆為有線。這樣設計的目的在產生一個single hop wireless network,讓mobile host利用無線界面連結上網路,並可以跨越網段後改經由另外一個gateway接上網路。其他的主機如routercorresponding node則不會改變他們的網路連接點。

我們讓NotebookOdyssey所轄範圍內開機,讓NotebookOdyssey為一開始的default router,先進行所有node之間的連結測試,若一切正常(即所有node之間都為reachable),再將Notebook移動到Drake所轄之無線網路範圍內,觀察Notebook在這種handoff下會有什麼樣的行為與問題。理論上由於在跨越子網路後Mobile Host會在新的router範圍內進行另一個auto-configuratoin以取得在該網路內之合法IP,並改變它的default routerDrake。雖然原有connection會因此中斷,但Notebook可在handoff完成後開啟新的connection

在測試時雖然遭遇到些許困難,主要是由於router上的interface變多使得在設定routing table時必須更仔細,所幸結果最後還是成功的。

 

Figure 11. Experiment for integrated test

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

APPENDIX B. 實驗網路架設

Windows 2000 IPv6 package installation

        Requirement﹕Windows 2000 with Service Pack 2

        Download Site﹕http://www.research.microsoft.com/msripv6/

        Documentation﹕http://www.research.microsoft.com/msripv6/docs/config.htm

 

        安裝說明在取得msripv6-bin-1.4.exe自解檔後,可以將它解壓縮至想放置之處,接下來在控制台à網路和撥號連線à欲安裝IPv6協定之連線上選內容,加入新通訊協定à選擇由磁片安裝,此時將檔案指向剛剛解壓縮的IPv6kit目錄內,再選取MSR IPv6 PROTOCOL即可完成在windows上的IPv6安裝。

 

Linux Host installation

        RequirementRedHat 7.2、RADVD(required for router)

        Download SiteRedHathttp://www.redhat.com、

RADVDftp://ftp.cityline.net/pub/systems/linux/network/ipv6/radvd/

Documentation Sitehttp://www.bieringer.de/linux/IPv6/

                                http://www.csc.fi/~psavola/ipv6/ipv6.html

                                http://www.wcug.wwu.edu/ipv6/faq/

安裝說明﹕通常generic的kernel中不會包含有IPv6 component,所以必須由我們自己enable在Networking Option中的IPv6 Option。以下為在Linux下建立一個有IPv6 functionality kernel的步驟。

u        /usr/src/{CURRENT_KERNEL}/make menuconfig。

u        Enable Networking optinsàThe IPv6 protocol (EXPERIMENTAL),在這個部份可以依使用者需要compile成kernel module或直接將它compile進kernel內。

u        Save current setting for kernel and Leave menuconfig。

u        之後便可依照一般編譯kernel的方式來編譯它,一般使用的方式為/usr/src/{CURRENT_KERNEL}/make clean;make dep;make bzImage

l          若為kernel module則需另外make modules再make modules_install

若一切順利,只要重新啟動這個編譯好的kernel,便能開始使用IPv6協定。以下為在Linux下一主機開機取得Link-Local Address à 收到 RA à 取得 Global unicast Address的示意圖。

 

 

 

 

 

Figure 12. Configuration without RA

 
 

 


Figure 13. Configuration after RA received

 
 

 

 


但對router來說,在有了IPv6 networking能力之外,使用者還要將此主機設定為router,才會將此主機IPv6行為改為IPv6 router而不是一般的IPv6 host。最簡單的作法便是利用sysctl將net.ipv6.conf.all.forwarding這個核心參數設定為TRUE。使用者可以利用以下的命令來改變這個參數值

u        sysctl –w net.ipv6.conf.all.forwarding=1   ,or

u        echo 1 >> /proc/sys/net/ipv6/conf/all/forwarding

 

由於router本身(最起碼直到實驗網路所用的版本為止)不會主動定時送RA出去,想要建立一個可讓IPv6 host自行進行auto-configuration的網路,必須要在router處多安裝一個daemon來協助router以定時發出RA,此daemon即為RADVD。

把從網路上下載的RADVD tar包解壓縮後,可以按照一般在Linux下安裝應用程式的方式的安裝RADVD。以下為RADVD之安裝步驟。

u        cd {Directory of RADVD}

u        ./configure

u        make all;make install

u        在編譯好後欲啟動radvd只需執行radvd便可讓radvd進行它的工作

現在我們有了定時發出RA的機制,但我們需要對RA的內容依據不同需一些調整,隨著不同distribution版本,RADVD所使用的config file的位置也不相同,不過通常是在/usr/src/local/v6/etc或是/etc裡的radvd.conf,以下為在Odyssey上所使用的radvd.conf,此時所用的topology可見,其中eth0為與Daemon相連之界面、eth1與Drake相連、eth2則為無線界面。

 

interface eth0

{

        AdvSendAdvert on;

        MinRtrAdvInterval 3;

        MaxRtrAdvInterval 5;

        prefix 3ffe::202:b3ff:fe0c:4d86/64

        {

                AdvOnLink on;

                AdvAutonomous on;

                AdvPreferredLifetime 10;

                AdvValidLifetime 20;

        };

};

 

interface eth1

{

        AdvSendAdvert on;

        MinRtrAdvInterval 3;

        MaxRtrAdvInterval 5;

        prefix 3ffe:0:0:100:2:b3ff:fe15:fca7/64

        {

                AdvOnLink on;

                AdvAutonomous on;

        };

};interface eth2

{

        AdvSendAdvert on;

        MinRtrAdvInterval 3;

        MaxRtrAdvInterval 5;

        prefix 3ffe:0:0:200:2:2dff:fe0b:c51b/64

        {

                AdvOnLink on;

                AdvAutonomous on;

                AdvPreferredLifetime 10;

                AdvValidLifetime 20;

        };

};

 

        在RADVD啟動之後,可以在/var/log/message裡找到RADVD所產生的偵錯訊息,可以幫助使用者找出RADVD無法正常運作的原因。使用者可以另外使用RADVD所內附的工具程式如radvdump來檢視主機有沒有如預期送出正確的RA,radvdump會把所有不論是由本機發出或來自其它主機的RA攔截並顯示出來,功能有點類似sniffer軟體,但是radvdump只針對RA作攔截。

Figure 14. Dump message from radvdump

 
 

 

 


Wireless Card installation on Linux

        由於我們所使用的PCMCIA Card,故在此小節所描述的為安裝PCMCIA wireless card的步驟,更詳細的原理與安裝方式可以參考PCMCIA HOW-TO。

        Requirement﹕Linux Driver Source/Library for ORiNOCO PC Card  Version 6.10

                                PCMCIA package Version 3.1.25

      Download Sitehttp://www.orinocowireless.com

http://pcmcia-cs.sourceforge.net

        Documentation﹕http://www.orinocowireless.com

                                http://pcmcia-cs.sourceforge.net

安裝說明﹕由於Linux內附的WaveLan Driver較舊,兩個wireless Interface無法利用Ad-hoc mode進行連結,只能個別使用Managed mode與AP作通訊,新版的Driver支援到11Mbps的傳輸速率,同時也解決了上述問題。但新的問題是使用這個版本的Driver會造成無法使用Managed mode跟AP連結。由於我們不使用AP,而是利用Ad-hoc mode來作測試,故我們採用新版的Driver。以下為安裝此PCMCIA driver module的步驟。

u        pcmcia package解壓縮至/usr/src

u        Orinoco Driver解壓縮至/usr/src/{PCMCIA-package}

u        cd /usr/src/{PCMCIA-package}

u        make config,填入目前所使用的Linux Kernel目錄路徑

u        make all

u        ./Install

如此便將新版的WaveLan Driver安裝進目前的kernel module中,使用者可以利用RedHat內建的pcmcia啟動script來重新驅動無線網卡,/etc/rc.d/init.d/pcmcia restart,若一切正常,應該可以聽到三聲較高的Beep聲,若沒有表示安裝出現問題,可以自 /var/log/message中尋找錯誤訊息來作偵錯。

        在安裝成功並驅動之後,使用者可以利用iwconfig這個公用程式來設定無線網卡的無線通訊屬性。以下為iwconfig一些常用的parameter。

u        mode。即目前所使用之無線模式,一般常用的為{Ad-hoc|Managed|AP}三個模式。

u        channel。網卡目前所使用之channel id,一般來說有0~11號可供使用。網卡間必須使用同一個channel才能互相通訊。

u        Encryption key。網卡目前所用以為其資料加解密之key,off時為不為資料作加解密。

u        ESSID。網卡所屬ESS之ID,可以填入any以加入任何可用之ESS。

Figure 15. output of “iwconfig eth2”

 
 

 


Configuration on router

        如同上文所述,IPv6 router並不會進行auto-configuration,在router上還是要有管理者來為這個網路作設定,以下為在此實驗網路中用來設定各router之routing table與為各個Interface設定IP的script。

Startup Script on Odyssey

 

ifconfig eth0 up

啟動所有Interface

 
ifconfig eth1 up

ifconfig eth2 up

ifconfig eth0 140.112.8.185

 

設定無線網卡

 
iwconfig eth2 mode ad-hoc

iwconfig eth2 enc off

iwconfig eth2 channel 10

 

modprobe ipv6

Enable IPv6 forwarding

 
 


echo 1 >> /proc/sys/net/ipv6/conf/all/forwarding

 

Assign IP

 
ifconfig eth1 add 3ffe::100:2:b3ff:fe15:fca7/128

ifconfig eth0 add 3ffe::202:b3ff:fe0c:4d86/128

ifconfig eth2 add 3ffe::200:2:2dff:fe0b:c51b/128

 

建立 static routing entry

 
route -A inet6 add 3ffe::100:50:4ff:feb9:c34b eth1

route -A inet6 add 3ffe:0:0:100::/56 dev eth1

route -A inet6 add 3ffe:0:0:200::/56 dev eth2

 

route -A inet6 add 3ffe:0:0:110::/60 gw 3ffe::100:50:4ff:feb9:c34b dev eth1

route -A inet6 add 3ffe:0:0:120::/60 gw 3ffe::100:50:4ff:feb9:c34b dev eth1

route -A inet6 add 3ffe:0:0:100::/56 gw 3ffe::100:50:4ff:feb9:c34b dev eth1

route -A inet6 add default dev eth0

 

Startup Script on Drake

啟動所有Interface

 

設定無線網卡

 
 


ifconfig eth1 up

ifconfig eth2 up

modprobe ipv6

 

iwconfig eth2 enc off

iwconfig eth2 mode ad-hoc

iwconfig eth2 channel 3

 

Enable IPv6 forwarding

 
 


echo 1 >> /proc/sys/net/ipv6/conf/all/forwarding

 

ifconfig eth1 add 3ffe::110:2:b3ff:fe0c:4f9e/128

Assign IP

 
ifconfig eth0 add 3ffe::100:50:4ff:feb9:c34b/128

ifconfig eth2 add 3ffe::120:202:2dff:fe1f:f1af/128

建立 static routing entry

 
 


route -A inet6 add 3ffe::100:2:b3ff:fe15:fca7 eth0

 

route -A inet6 add 3ffe:0:0:100::/64 gw 3ffe::100:2:b3ff:fe15:fca7 dev eth0

route -A inet6 add 3ffe:0:0:200::/64 gw 3ffe::100:2:b3ff:fe15:fca7 dev eth0

 

route -A inet6 add 3ffe:0:0:110::/64 dev eth1

route -A inet6 add 3ffe:0:0:120::/64 dev eth2

 

 

 

 

 

 

 

 



[1] http://www.lucent.com

[2] with kernel 2.4.7

[3] with Microsoft IPv6 packet installed , http://www.research.microsoft.com/msripv6/

[4] RADVD ,

[5] Linux Driver Source/Library for ORiNOCO PC Card , Variant 1, Version: 6.10

 

[6] Linux中設定為router的主機不會進行auto-configuration