在Cisco設備設定訊框中繼網路

2008-09-04
在前幾期的文章中,筆者介紹了許多和訊框中繼網路相關的知識,也說明訊框中繼網路的設計與其帶來的可能問題,當然也講解了相關的解決方案,以及訊框中繼網路的訊號處理方式和位址對應技術。訊框中繼網路技術較為複雜些,因此筆者花比較多的篇幅來說明這個重要的技術。在以下的文章內容中,將討論如何在Cisco網路設備上設定訊框中繼網路。
訊框中繼網路簡介

訊框中繼(Frame Relay,也有人稱之為幀中繼)網路協定是一個效能相當高的廣域網路協定,運作於OSI網路模型中的實體層(第一層)和資料連結層(第二層)。訊框中繼(Frame Relay)網路協定是連線導向的網路協定,因此訊框中繼(Frame Relay)網路協定可以提供高效率而且品質很好的網路連線。而在網路傳輸資料的錯誤偵測與保護方面,訊框中繼網路協定依靠於高階層的網路協定。訊框中繼網路協定定義了介於路由器和網路服務供應商的交換機設備之間的互動連線。

底下先為各位介紹訊框中繼網路重要的名詞解釋,並簡單介紹一下重要的知識,因為後面的設定過程之中,如果讀者沒有對這些名詞先一有些基本的認識的話,可能會不知所云。

何謂虛擬線路

虛擬線路(Virtual Circuit),是由資料連結連線辨識元(Data-link Connection Identifier,DLCI)所辨識出來的,是邏輯性線路。虛擬線路用來保證兩台資料終端設備(DTE)之間的雙向通路。多條虛擬線路可以集結成單一條實體線路。這種特性主要是降低多台資料終端設備(DTE)之間的複雜度。而單一條虛擬線路可以通過任意數目個中繼的資料線路終端設備(DCE),也就是用於訊框中繼網路的交換機。

虛擬線路,有兩種型態,一種是永久性虛擬線路(Permanent Virtual Circuit),另一種則是交換式虛擬線路(Switched Virtual Circuit),單一條虛擬線路可以是這兩種的其中一種類型,若不是永久性虛擬線路,就一定是交換式虛擬線路。

交換式虛擬線路(SVC)

在訊框中繼網路之中,交換式虛擬線路(Switched Virtual Circuit,SVC)主要針對偶然才會需要傳遞資料的連線,提供網路連線。當然,提供服務的對象是位於訊框中繼網路之中的資料終端設備(DTE)。在使用交換式虛擬線路之前,必須建立連線,而這種建立的動作是依據需求才產生的,也就是On Demand,而連線結束時,也必須關閉連線。Cisco IOS在11.2以後的版本就支援交換式虛擬線路。

永久性虛擬線路(PVC)

在訊框中繼網路之中,有些網路連線需要非常頻繁的流通,甚至是永久性的流通,此時永久性虛擬線路(Permanent Virtual Circuit,PVC)就可以針對這種需求,針對資料終端設備(DTE)之間的訊框中繼網路提供這樣的永久性連線。藉由永久性虛擬線路產生的連線,不必像交換式虛擬線路一樣還需要建立連線(Setup)和關閉連線(Teardown)等等的過程。

訊框中繼網路的訊號處理與位址對應

在訊框中繼網路技術中,訊號處理與位址對應技術算是相當重要的,這也是訊框中繼交換機與路由器之間重要的互動關係。而訊號處理與位址對應技術最重要的就是Inverse ARP和LMI兩者。底下就簡單介紹一下Inverse ARP和LMI兩個名詞,至於相關的詳細技術說明可以參考上一期的文章。

Inverse ARP

Inverse ARP全稱為「Inverse Address Resolution Protocol」,可以找尋DLCI和遠端路由器在網路層的位址。而Inverse ARP就可以讓路由器自動去搜尋虛擬線路另一端的資料終端設備的位址。

對Cisco的路由器而言,透過動態地使用Inverse ARP,會自動把本地端的DLCI值對應到遠端路由器的網路層位址。對於某個特定的連線而言,Inverse ARP會把給定的DLCI值對應到下一個節點的位址。Inverse ARP的詳細內容可以參考RFC 1293文件。

LMI

LMI的全名是「Local Management Interface」,它是一種訊號標準,用於路由器等資料終端設備(DTE設備)和訊框中繼交換機(DCE設備)之間,LMI是用來負責這兩者之間的連線管理與維護的功能。而Cisco網路設備所支援的LMI種類有以下三種:
1.Cisco:這種LMI類型是由Cisco、StrataCom、Northern Telecom和Digital Equipment Corporation所訂立的。
2.ANSI:此LMI類型是由ANSI標準中的T1.617 Annex D所定義。
3.Q.933A:該LMI類型定義在ITU-T Q.933 Annex A之中。

如果是網路管理人員自行設定LMI類型,則必須確保設定到正確的LMI類型,這樣訊框中繼網路才能正常運作。而當路由器收到由訊框中繼網路交換機所發送過來的LMI類型資料之後,路由器會將自己的虛擬線路設定成以下三種狀態的其中一種:
1.啟動狀態(Active state):這種狀態代表目前虛擬線路正常運作中,可以正確無誤地在訊框中繼網路上交換網路封包。
2.非啟動狀態(Inactive state):這個非啟動狀態不是代表虛擬線路不正常運作,事實上,它所代表的意思是本地端路由器連到訊框中繼交換機這段的連線是正常的,但是遠端路由器到它自己的訊框中繼交換機之間的連線是不正常的。
3.刪除狀態(Deleted state):這個狀態有兩種可能的代表意義,第一種情況是目前這台路由器並沒有從訊框中繼網路交換機收到LMI資料,而第二種情況則是本地端路由器連往訊框中繼網路交換機之間的服務不正常。

設定基本的訊框中繼網路

在Cisco網路設備中,如果要設定支援訊框中繼網路,必須注意Cisco IOS的版本,就交換式虛擬線路(SVC)而言,Cisco IOS在11.2以後的版本才支援交換式虛擬線路。不過,一般應該都以設定永久性虛擬線路(PVC)為主。

此外,當讀者使用舊版的Cisco IOS(版本為11.2或是更舊的版本),則必須自行手動設定LMI,若使用新版本的Cisco IOS(例如Cisco IOS 12.0),就不需要自行設定。接下來看看新舊版本的Cisco IOS,在設定指令上有哪些不同之處。

如果是Cisco IOS 12.0和以後的版本,其設定使用訊框中繼網路的指令如下所示:

Router(config)#interface serial1
Router(config-if)#ip address 10.46.0.1 255.255.255.0
Router(config-if)#encapsulation frame-relay
Router(config-if)#bandwidth 64

若為Cisco IOS 11.2和以前的版本,設定使用訊框中繼網路的指令則為:

Router(config)#interface serial1
Router(config-if)#ip address 10.46.0.1 255.255.255.0
Router(config-if)#encapsulation frame-relay
Router(config-if)#bandwidth 64
Router(config-if)#frame-relay lmi-type ansi

兩者的差異就在於,舊版本的指令最後一行必須手動設定LMI。在此分析每個指令的詳細內容,一開始的「interface serial」指令是為了進入到Serial介面,因為訊框中繼網路是廣域網路所使用的協定,而Serial介面就是給廣域網路所使用的介面。

接著就是要設定這個介面的IP位址,而這邊的指令範例假設Serial介面的IP位址為10.46.0.1。

設定封裝方式

下一個指令「encapsulation frame-relay」的作用在於指定端點之間所流通的網路封包要使用哪一種封裝方式,在剛剛的範例中,我們所下達的指令只有「encapsulation frame-relay」,事實上這裡並沒有明確指定要使用哪一種封裝方式,如果要指定封裝方式,必須再加上一個參數,如下所示:

Router(config-if)#encapsulation frame-relay cisco

上面這個範例就是使用cisco封裝方式,這也是預設的封裝方式,如果沒有指定封裝方式就是使用cisco。另外,也可以指定使用ietf,如下所示:

Router(config-if)#encapsulation frame-relay ietf

IETF是「Internet Engineering Task Force」的縮寫,IETF這種封裝方式定義在RFC 1490文件之中。

設定使用頻寬

至於bandwidth指令是用來設定這個介面所要使用的頻寬,指令範例如下:

Router(config-if)#bandwidth 64

數字所使用的單位是kilobits(千個位元),這個範例是要把頻寬設定成使用六萬四千個位元。

選擇LMI種類

接下來的步驟是選擇LMI的種類,指令的關鍵字是「frame-relay lmi-type」,後面接上LMI的類型,指令範例如下:

Router(config-if)#frame-relay lmi-type ansi

而LMI的類型有三種關鍵字可以輸入,分別是「ansi」、「cisco」和「q933a」。預設值為「cisco」,對於這個指令,只有當使用舊版本的Cisco IOS才需要執行,而這種LMI類型,當然可以為每個不同的介面設定不同的類型,本例設定成ansi。

啟動Inverse ARP

另外,還有一個指令是這個範例所沒有列出來的,也就是用來啟動Inverse ARP功能,其指令範例如下所示:

Router(config-if)#frame-relay inverse-arp ip 16

這個指令的關鍵字是「frame-relay inverse-arp」,後面第一個參數是協定,這個範例中所選擇的協定是IP協定,這個指令所支援的協定除了IP之外,還支援IPX、AppleTalk、DECnet、VINES和XNS等等。而下一個參數代表DLCI的值,也就是本地端針對這個介面所使用的DLCI值。事實上,Inverse ARP預設值是啟動的,所以並不需要我們手動去啟動它。

設定靜態訊框中繼網路位址對應表

如果遠端的設備不支援Inverse ARP,而讀者此時又剛好想針對永久性虛擬線路的廣播封包(Broadcast)和群播封包(Multicast)進行控制的話,就必須透過靜態訊框中繼網路位址對應表來將本地端的DLCI值與遠端路由器網路層位址作對應關係的設定,如此一來,才能夠控制廣播封包和群播封包。靜態訊框中繼網路位址對應表稱為Static Maps。

接下來,透過一個簡單的範例來解釋如何設定靜態訊框中繼網路位址對應表。假設網路架構如下圖所示:

左邊的路由器的IP位址為「10.46.0.1/24」,其DLCI值為100,經過一大段廣域網路之後連線到右邊的網路,而右邊的路由器的IP位址為「10.46.0.2/24」,其DLCI值為200,此時,假設要在左邊的路由器上設定靜態訊框中繼網路位址對應表,則執行如下的指令:

Router(config)#interface Serial1
Router(config-if)#ip address 10.46.0.1 255.255.255.0
Router(config-if)#encapsulation frame-relay
Router(config-if)#bandwidth 64
Router(config-if)#frame-relay map ip 10.46.0.2 100 broadcast

請注意,這些指令是在左邊的路由器上進行設定,指令一開始就是為了要進入Serial介面,設定好這個介面的IP位址,啟動訊框中繼網路和設定頻寬等等。這些指令的設定方式剛剛都已經介紹過,重點在於最後一行的指令,這個指令的關鍵字為「frame-relay map」,這個指令所設定的意義是:「由目前這台路由器,透過DCLI值為100的介面,可以到達10.46.0.2這個位址的網路設備,並把這樣的對應關係加到靜態訊框中繼網路位址對應表之中」。

瞭解這個指令所代表的意義之後,就可以開始逐一介紹後面所接的參數:

網路協定參數

第一個參數要接上網路協定,這裡是設定ip這個協定,frame-relay map這個指令所支援的協定很多,包含appletalk、decnet、dlsw、ip、ipx、llc2、rsrb、vines和xns等等,讀者可以直接輸入這些協定當作設定上的參數。

位址參數

跟在協定後面的參數代表位址,因為這裡的範例是指定IP協定,所以理所當然後面所接的就是IP位址,還記得剛剛提到有關於這個指令的意義嗎?因為要加上的是遠端設備的IP位址,所以這裡所要指定的是遠端的IP位址,並不是本地端的IP位址。

DLCI值參數

指定好遠端的IP位址之後,指定所對應到的本地端介面的DLCI值,請注意,這裡也不是設定遠端的DLCI值,這點蠻重要的。

廣播封包參數(可有可無)

在指令的最後面,可以看到另外設定了broadcast,這裡代表的是,在這個永久性虛擬線路上允許廣播封包和群播封包的流通,若這樣設定的話,同時也代表可以讓動態路由協定的網路封包在這個永久性虛擬線路上通行,這個參數可有可無。 前文筆者提到,如果遠端的設備不支援Inverse ARP,而讀者又想針對永久性虛擬線路的廣播封包(Broadcast)和群播封包(Multicast)進行控制的話,就必須透過靜態訊框中繼網路位址對應表,將本地端的DLCI值與遠端路由器網路層位址作對應關係的設定,如此才能夠控制到廣播封包和群播封包。這裡指的就是這個參數。

不過也要注意,這樣的廣播封包和群播封包設定,預設是關閉的,也就是預設不允許廣播封包和群播封包通行。

封裝參數(可有可無)

和廣播參數一樣,這個參數也是可有可無。這裡可以指定ietf或cisco關鍵字當作參數,以便指定封裝的方式。增加這個參數,相當於設定之前所提到的以下指令:

Router(config-if)#encapsulation frame-relay cisco

Router(config-if)#encapsulation frame-relay ietf

同樣地,預設的封裝方式是採用cisco。

訊框中繼網路子介面

接下來介紹訊框中繼網路子介面(Sub-interface)的設定方式,子介面的使用對於訊框中繼網路來說相當重要,因為子介面可以很有效地解決訊框中繼網路所可能帶來的路由更新(Routing Update)的可到達性問題(Reachability Issue),以及重複發送廣播封包問題(Broadcast Replication)。

接著,先瞭解一下訊框中繼網路的問題和解決方案。

非廣播式多重存取連線

預設上,訊框中繼網路在遠端設備之間提供「非廣播式多重存取」的連線類型,非廣播式多重存取就是「Non-broadcast Multi-access」,簡稱NBMA。這種連線類型其實和一般的廣播網路環境(例如乙太網路)類似,差別只在於所有的路由器都位於同樣的子網路之中。

然而,因為成本的考量,非廣播式多重存取連線網路通常位於Hub-and-spoke的網路拓撲之中。但是在這樣的Hub-and-spoke的網路拓撲中,實體拓撲並沒有提供像乙太網路一樣的多重存取功能,因此在同一個子網路之中,每一個路由器並沒有專門的永久性虛擬線路,分別連線到不同的遠端路由器。

因為訊框中繼網路的非廣播式多重存取連線架構,讓訊框中繼網路產生兩個問題:
1.路由更新的到達性問題。
2.當一個實體介面接上多個永久性虛擬線路時,必須重複發送廣播封包。

路由更新的可到達性問題

Distance Vector路由協定中,為了減少路由迴圈(Routing Loop)的問題,衍生出Split Horizon的解決方案,但是在訊框中繼網路之中,Split Horizon卻衍生出其他的問題。

在訊框中繼網路的Hub-and-spoke網路架構之中,遠端的路由器(也就是Spoke端路由器)會發送路由更新給主要的路由器(Headquarter端路由器),而這個主要的Headquarter端路由器會透過同一個實體的介面來建立許多條不同的永久性虛擬線路。

在這樣的環境之中,當這台Headquarter端路由器由這個實體介面收到廣播封包(也就是路由更新),卻不能轉發這個路由更新封包透過同一個介面轉發給其他不同的遠端路由器(Spoke路由器),因此造成無法傳送路由更新出去的問題。

當然,如果Headquarter端路由器的每一個實體介面都只有建立一個永久性虛擬線路,路由器更新的問題就不會發生。

重複發送廣播封包問題

這個問題的發生環境和上一個問題相同,但不同的是,重複發送廣播封包是因為上述問題解決之後所衍生而來。就因為主要的Headquarter端路由器會透過同一個實體的介面來建立出很多不同條的永久性虛擬線路,所以一旦收到廣播封包,並打算將這樣的廣播封包真的傳送到不同的永久性虛擬線路,這些廣播封就會耗盡大量的網路頻寬,而造成網路嚴重延遲。

上面的問題,其實有很多種解決方案,但是只有子介面這個解決方案是最好的,底下將說明各種可能的解決方案。

第一種解決方案:關閉Split Horizon

因為路由更新的可到達性問題都是由「Split Horizon」所引起的,所以其中一種解決的方法就是把「Split Horizon」機制關閉,不過把「Split Horizon」機制關閉,會發生兩種可能的問題。第一個可能的問題是,一旦把「Split Horizon」機制關閉,「Split Horizon」所要解決的路由迴圈(Routing Loop)問題又會重新發生,另外第二個問題是,不見得所有的網路都可以這樣關閉「Split Horizon」機制,必須考慮到各種網路架構的解決方案。

第二種解決方案:使用全狀拓撲網路架構

所以,最好考慮其他的解決方案來解決訊框中繼網路的路由更新可到達性問題。另一種解決方案就是維持使用「Split Horizon」機制,但是卻使用全狀拓撲(Full Mesh Topology)。這種網路拓撲架構顧名思義,就是每一台路由器與其他各個路由器都有永久性虛擬線路(PVC)的連線,如下圖所示:

由上圖可以看出,這種網路拓撲架構需要架設的永久性虛擬線路數目是最高的,因此成本也最高。但是,也因為從一個路由器到另一個路由器的路徑不只一條,所以當某條網路路徑發生問題時,路由器依然可以透過其他路徑傳送網路封包給目的端的路由器。

當然,這種網路拓撲所要注意的是,一旦增加一台新的路由器設備,就要多建立N - 1條永久性虛擬線路(N是全部的路由器數目),而永久性虛擬線路的總數目會變成n ( n - 1) / 2個。

舉例來說,如果有20台路由器設備使用這種網路拓撲結構,就必須架構190條永久性虛擬線路,但如果使用星狀網路拓撲結構,則只要N – 1條,也就是19條永久性虛擬線路即可。兩者之間的成本就相差了十倍以上。

因此,使用全狀拓撲網路架構時,必須把成本列入考量。但是至少比剛剛第一個解決方案好一點,至少用錢就可以解決所有的問題,而且不會衍生出其他的問題。

最好的解決方案:使用子介面

如果不想衍生出其他的問題,也不想耗費太多成本的話,還有另外一個解決方案——使用子介面(Sub-interface)。這種做法是在訊框中繼的hub-and-spoken的網路拓撲中,啟動路由更新廣播封包的轉發功能(Forwarding)。若使用這樣的解決方案,必須在Hub路由器上設定子介面,而這些子介面實際上是實體介面的分支。如此一來,即使在「Split Horizon」網路環境之中,當一個子介面收到路由更新的封包之後,就會轉送到另一個子介面並且轉發出去。

而在這種子介面的環境之中,每一個虛擬線路都可以設定成點對點(Point-to-point)的連線型態,當設定成點對點的連線型態時,就可以模擬成專線(Leased line)的運作模式。「Leased Line」是其中一種廣域網路的連線種類,就是所謂的Point-to-point或Dedicated的連線,說穿了,它就是固定的電路,也就是專線,如下圖所示:

優點是可以保證頻寬,而且頻寬是獨享的,不會與其他網路共享。不過,當然也有缺點,缺點就是花費太高,因為是專線,所以成本相對很高。而在速度上,則可以到達45Mbps。不過這裡使用模擬的方式讓子介面運作得像「Leased line」一樣,所以成本相對地就沒有實體「Leased line」那麼高了。而如此處所說的,在訊框中繼網路中使用點對點的子介面,則每一對使用子介面的路由器,都是在屬於自己的子網路之中。

子介面的分類

瞭解子介面的好處之後,接下來介紹訊框中繼子介面的分類。基本上,可以將子介面設定成以下兩種模式的其中一種:
1. 點對點模式
2. 多點模式

就點對點模式而言,這種子介面通常是用來與遠端路由器的「一個」實體介面或是「一個」子介面建立起永久性虛擬線路。在這種情況之下,每個子介面都是位於自己的子網路(Subnet),也是屬於自己的子網路,而且每個子介面都有自己的DLCI值。由於在這樣的點對點的網路環境之中,每個子介面都像是點對點的介面,所以路由更新的網路封包與Split-horizon無關,因此點對點的子介面是可以解決Split-horizon的問題。

但是多點模式中的子介面就不一樣了,多點模式的子介面,通常是用來與遠端路由器的「多個」實體介面或是「多個」子介面建立起永久性虛擬線路。在這種情況之下,所有相關的子介面都屬於同一個子網路之中,而每個子介面都像是一般的非廣播式多重存取網路(NBMA)的訊框中繼網路介面,所以路由更新的網路封包與Split-horizon是有相關的。

簡單來說,多點模式的子介面並沒有解決Split-horizon的問題,但是由於多點模式子介面都屬於同一個子網路,因此可以節省位址的使用數量,此外也可以用於全狀拓撲的網路架構。

設定點對點模式子介面

瞭解子介面的分類之後,就來介紹一下點對點子介面的設定方式,利用下面這個網路架構圖為例來說明:

假設在上面的網路架構圖中,路由器A擁有S0.110和S0.120這兩個子介面,其IP位址分別是10.4.0.1和10.6.0.1,而S0.110這個子介面會連接到路由器B,這段連線的DLCI值為110,至於S0.120這個子介面則會連到路由器C,而這段連線的DLCI值為120。由此可以觀察出,點對點子介面的每個子介面(S0.110和S0.120)都擁有自己的子網路(10.4.0.1/24與10.6.0.1/24)。現在若要設定這兩個子介面來連接路由器B和路由器C的實體介面,則設定步驟如下:

Router_A(config)#interface Serial0
Router_A(config-if)#no ip address
Router_A(config_if)#encapsulation frame-relay

以上指令用來進入Serial0介面,並且設定沒有IP位址,因為我們要設定子介面。另外,就是設定使用訊框中繼網路的封裝方式。

Router_A(config-if)#interface serial0.110 point-to-point
Router_A(config-subif)#ip address 10.4.0.1 255.255.255.0
Router_A(config-subif)#bandwidth 64
Router_A(config-subif)#frame-relay interface-dlci 110

第一行是最關鍵的指令,這裡指定serial0介面,110則為子介面,子介面的編號範圍為1到4294967293之間,最後接上子介面模式種類,有兩種模式可以選擇,因為這裡是要設定點對點模式,所以關鍵字是point-to-point,若是多點模式關鍵字則為multipoint。須注意的是,一定要選擇其中一種子介面模式,子介面模式是沒有預設值。第二行與第三行指令比較簡單,目的在於設定這個子介面的IP位址和設定頻寬。

第四行指令則是為了指定DLCI值,這是只有當我們把子介面設定為點對點模式時,才需要設定。設定的目的在於分別實體介面和子介面的分別,請注意,這裡所指的DLCI值是指本地端的DLCI值。而當我們把子介面設定成多點模式的子介面而且啟動Inverse ARP時,也需要設定這行指令。這個指令的關鍵字是「frame-relay interface-dlci」,後面接上本地端DLCI值,代表目前這個子介面使用什麼DLCI值。

讀者也要注意,這個指令只能用於子介面,並不能用於實體的介面上。另外,每個子介面所使用的編號必須不同,同一個子介面編號不能同時使用於兩個以上的子介面上。

設定多點模式子介面

接著用下面這個網路架構範例來解釋如何設定多點模式子介面:

如上圖所示,現在要在左邊的路由器A設定多點模式子介面來使用訊框中繼網路,和剛剛上一個範例的點對點模式不同,此處所有的路由器介面都屬於同一個子網路,這裡的路由器使用訊框中繼靜態路由位址對照表,在這種情形下,子介面扮演著實體介面的角色,所以此處子介面算是非廣播式多重存取網路(NBMA)的訊框中繼網路介面,因此路由更新的網路封包與Split-horizon是相關的。這裡的好處是只需要一個子網路。路由器A有三個子介面,分別連到路由器B、C和D,其DLCI值分別是150、160和170,都是透過永久性虛擬線路來連接。

至於大家所關心的「split horizon」設定,在訊框中繼主要的子介面上預設是關閉,而在訊框中繼子介面上預設為啟動。

Router_A(config)#interface Serial0
Router_A(config-if)#no ip address
Router_A(config_if)#encapsulation frame-relay
Router_A(config-if)#interface serial0.2 multipoint
Router_A(config-subif)#ip address 10.46.0.1255.255.255.0
Router_A(config-subif)#bandwidth 64
Router_A(config-subif)#frame-relay map ip 10.46.0.2150
Router_A(config-subif)#frame-relay map ip 10.46.0.3160
Router_A(config-subif)#frame-relay map ip 10.46.0.4170

其設定指令基本上和剛才所提到點對點模式子介面差不多,差別只在於原本設定成point-to-point,現在變成multipoint。

結語

這篇文章介紹了如何在Cisco網路設備之中設定訊框中繼網路的設定,同時也介紹了子介面的用途,以及如何設定子介面以應用到訊框中繼網路之中。下一篇文章預計會介紹如何檢視所設定的訊框中繼網路設定值。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!