以前上過網路課程,知道有VLAN這個協定,可以將交換機的PORT切割成虛擬網段,最典藏的運用就是大公司分部門別,可以有效讓廣播封包的問題降低,讓網路更有效率。

因為沒有實做過,看過這篇文章後才發現,原來切VLAN若是交換器與交換器的串接,就要用到 Trunk ,不怕您笑,之前我還以為Trunk是合併頻寬用的,直到最近有需求,想找合併頻寬的相關文件,才發現有其它方式,如  LACP 802.3ad協定………………….

 

文章出處:http://www.netadmin.com.tw/article_content.asp?sn=1002020020

延伸多實體區域網路區段 增加網路組織彈性
善用指令 有效管理虛擬區域網路

clip_image001

網管論壇

文.胡凱捷

clip_image002

虛擬區域網路是網路管理之中很重要的範疇,因為虛擬區域網路,我們可以很有效地管理企業內部的區域網路,而不用在實體的分配上做更動,只需要做邏輯上的管理即可。

clip_image002[1]

虛擬區域網路,英文叫Virtual LAN,簡稱為VLAN(以下稱為VLAN)。不少讀者應該已經大略明白VLAN的概念,但是如果一家大型企業要設定VLAN,IT人員肯定會忙到暈頭轉向。比較大型企業的VLAN,因為交換機設備(Switch)很多,必須要有一個比較好的管理模式與相關的指令,網管人員才能在最短的時間之內做最有效的管理。如果某台交換機設備能夠自動地對其他的交換機設備做VLAN的設定,那該有多好。使用VTP就可以完成這樣的夢想。本文主將詳細介紹VTP協定,並說明如何透過VTP有效地管理VLAN。

VLAN簡介

也許有些讀者還不瞭解VLAN是什麼,為了讓所有讀者都能完全明白這篇文章所要著重的主題,筆者還是稍微介紹一下VLAN。

一個VLAN是由一群終端機器組合而成,例如一堆使用者的PC設備,而這些VLAN中的機器通常擁有相同的特性,而這特性並不需要與這些機器的所在位置有任何的關係。此外,VLAN技術也允許把一台交換機設備的埠分成幾個群組,並可以針對每個不同的群組套用不同的設定。

換句話說,VLAN是可以在邏輯上區分不同的廣播網域,而這樣的廣播網域可以延伸到多個實體區域網路區段,因此VLAN技術可以增加網路組織的彈性。

舉例來說,假設現在要為一家大型企業組織整個網路設計,假設希望將整個大型網路區分成幾個小型的網段,而每個網段都是針對不同的使用者,例如,工程師應該存取同一個網段的網路,而銷售人員可能會存取另一個不同的網段,但尷尬的是,工程師可能橫跨很多個樓層,同樣地,銷售人員的電腦位置也處於多個樓層,此時,如果希望根據實體的電腦位置來區分不同的網段,想必是一件相當累人的事情。

這個時候就要使用VLAN技術來區分不同的網段,可以把工程師全部分到同一個VLAN中,而把銷售人員集中到同一個VLAN中,這樣就不用牽扯到實體的網路連線而達到網段區分的效果。當然,也可以根據公司裡的各個單位來區分網段,或是根據各種其他的區分條件。

VLAN最重要的概念—Trunk

其實VLAN的相關理論頗多也頗複雜,這裡當然無法整個介紹,但讀者若對整個VLAN不是很瞭解,至少要明白VLAN的Trunk在VLAN中扮演相當重要的角色。瞭解Trunk,才能明白VLAN的資料傳遞方式。

一般來說,若在眾多的交換機設備之間架設VLAN,則只有同一個VLAN中的電腦才可以互相傳遞資料,在交換機設備內部,事實上是透過限制資料的轉送來達到這種VLAN的資料傳遞過程。當交換機設備收到資料之後,會根據學習過的MAC位址對應表來決定資料要送往哪個埠。

如果沒有學習過,則預設會flooding到所有的埠,這是因為預設上所有的埠都屬於預設的VLAN之中,也就是所有的埠都屬於同一個VLAN,因此這樣的flooding動作不會有什麼問題。但若有分割VLAN的話,就不能這樣做了,因為這樣做就會把某個VLAN的資料送往其他的VLAN,所以,在這種情況下,交換機設備會了解哪些埠是屬於哪個VLAN,而且限制flooding時只能送往同一個VLAN。

當VLAN的資料要跨越多個交換機設備傳遞到其他交換機設備所連接的同一個VLAN時,就必須使用Trunk技術。因為交換機設備之間只會用一條網路線連接起來,而這條網路線必須要能傳遞承載所有VLAN的資料,為了達到這種需求,在設定這種交換機設備之間的連線時,就必須設定成Trunk類型。

Trunk主要有兩種:分別使用802.1Q協定以及ISL協定。簡單來說,Trunk會在資料中增加一個標籤(也就是Tag),用來表示目前這份資料是屬於哪一個VLAN,貼上標籤之後,再把這份資料傳到另一台設備,另一台設備收到之後,再根據這個標籤得知這份資料是屬於哪個VLAN,然後把這份資料送往所屬的VLAN。這就是Trunk主要的工作,所以這個Trunk必須能夠傳送所有VLAN的資料,反正也不會搞混,因為都會在資料上貼上標籤。

VTP協定介紹

當設定VLAN時,會有很多指令必須執行,對於每個交換機設備和交換機設備上的埠都要作相對應的設定,但如果使用VTP協定,就可以一次更改數個設定,而且在一個大型網路中,在某一台交換機設備上做設定,就可以讓這台交換機設備幫忙「告知」其他交換機設備,並指揮這些設備套用新的設定值。聽起來相當神奇,但是VTP在VLAN管理中就是可以發揮這樣的功能。

VTP的全名是VLAN Trunking Protocol,VTP是運作在OSI網路七層協定中的第二層,也就是Data Link Layer。請注意,VTP協定是只有Cisco交換機設備才會支援,其他品牌的交換機設備則沒有。

VTP協定主要是可以建立一套機制,以便在Cisco交換機設備之間做訊息交換的動作,而VLAN的相關資料就是可以透過這樣的機制互相傳遞到別台Cisco交換機設備上,以便達到Cisco交換機設備之間的VLAN資料同步。

這些所要同步的資料當然都是經由Cisco交換機設備之間的trunk連線來傳遞的,所以在某台Cisco交換機設備上做了VLAN的設定動作,VTP協定就會將這樣的VLAN設定與其他的Cisco交換機設備達到同步。這些同步的VLAN設定包含VLAN的增加、移除與VLAN名稱的設定。VTP協定不僅加快了VLAN設定動作,也能避免設定VLAN時所可能造成的設定失誤等等。

另外,VTP協定還定義了VTP domain,只有位於同一個VTP domain底下的Cisco交換機設備才能互相同步VLAN資料,而預設上Cisco交換機設備是不屬於任何一個VTP domain之中,除非管理者加以設定。如此一來,就可以把一家大型企業中的所有Cisco交換機設備依照需求先分成好各個群組(Group),而每個群組都設定成一個VTP domain,所以同一個VTP domain就可以互相傳遞並同步彼此之間的VLAN資料。

假設現在有五台Cisco交換機設備,其VTP domain的值與連接關係如下圖所示:

clip_image003

A、C與D三台Cisco交換機設備都處於D1這個VTP domain之中,而B和E這兩台Cisco交換機設備被分派到另一個D2的VTP domain中,如果要在Switch A設備上新增一個VLAN,因為C和D都與A處於同一個VTP domain中,所以C和D這兩台設備也會依據情況來做VLAN資料的同步動作。至於為什麼說「依據情況」呢?因為這要看A、C和D這三台交換機設備的角色為何而決定,後面會詳細說明。

Cisco SwitchVTP所扮演的角色

前面提到VLAN的設定資料同步是依據情況來進行的,意思是要看每一台Cisco交換機設備在VTP中所扮演的角色是什麼來決定的,也就是這些設備所設定的模式。每一台Cisco交換機設備所能設定的模式,一共有三種選擇:

1. Server模式
2. Client模式
3. Transparent模式

以下就分別針對Server、Client、Transparent這三種模式來加以說明。

Server模式

Server模式是預設的模式。若要在設定成Server模式的Cisco交換機設備上做任何的VLAN設定,這台Server模式的設備就會把所作的任何改變傳遞到位於同一個VTP Domain下的所有Cisco交換機設備。

所以,在Server模式的Cisco交換機設備上可以建立新的VLAN、修改既有的VLAN、刪除VLAN,而Server模式的設備會把所改變的VLAN設定傳遞到其他設備上,也會在自己的設備上儲存這樣的設定,並儲存在NVRAM之中,當然Server模式也會同步由其他設備傳遞過來的VLAN設定值。

Client模式

在Client模式上的Cisco交換機設備所能做的事情就比較少了。在這個模式中,管理者無法建立新的VLAN資料,無法修改VLAN資料,也不能刪除VLAN資料,也不會在自己的設備中將VLAN設定值儲存在NVRAM之中。

事實上,這個模式的設備可以做的就只能被動地做同步動作,根據別台設備傳遞過來的設定做同步。

此外,就是再把別台設備傳遞過來的VLAN設定值再次傳遞到別台Cisco交換機設備上。

Transparent模式

讀者可能會想,那這樣一來的話也只能在Server模式上設定VLAN資料,可是Server模式又會把這些資料全部丟到別台設備上,強迫別台設備和Server模式做同步。基本上是這樣的沒錯,但是VTP協定提供了第三種模式:Transparent模式。

在Transparent模式中,管理者可以新增VLAN資料、修改VLAN資料,以及刪除任何的VLAN資料,但是這些所做的改變只會影響到自己本身這台設備,Transparent模式並不會把這樣的設定值丟到其他設備來做同步的動作。

雖然Transparent模式比較特異一點,但是它仍然會把別台設備傳遞過來的VLAN設定值再次傳遞到別台Cisco交換機設備上,而且也能把VLAN設定儲存在自己設備中的NVRAM。

談到這裡,也許讀者已經有點混亂,筆者在這裡整理出以下這樣的表格,也許讀者就能一眼看出各個模式的差異以及所支援的東西有哪些:

clip_image005

舉例說明VTP各種角色的功能

底下舉例說明這三種模式的真正運作的流程,先看下面這張網路架構圖:

clip_image006

接著,將以上面的網路架構為例,分別說明建立VLAN以及自動傳遞這些VLAN設定兩種不同的方式。

Server角色建立/修改/刪除VLAN設定

假設現在有五台Cisco交換機設備,Switch A的VTP角色為Server,而Switch B、D和E的VTP角色都是Client,至於Switch C的VTP角色為Transparent,並且這五台Cisco交換機設備都是屬於同一個VTP Domain之中。

如果目前在Cisco Switch A上建立VLAN 1和VLAN 2兩個VLAN,則因為Switch A的VTP角色是Server,因此Switch A會把這兩個新的VLAN設定轉發給鄰近的交換機設備Switch B和Switch C。

Switch B因為是Client的角色,所以Switch B不但把這樣的VLAN設定值套用到自己的設備,也會把設定轉發給鄰近的交換機設備,因此Switch B會把VLAN設定轉發給Switch D。

而另一邊的Switch C因為是Transparent角色,所以Switch C也會把VLAN設定轉發給Switch E,但是卻不會套用這樣的VLAN設定值。

不僅新增VLAN設定是套用這樣的傳遞方式,同理,修改和移除VLAN設定也是用一樣的傳遞方法。

Transparent角色建立/修改/刪除VLAN設定

假設是在Switch C上新增一個VLAN 3,由於Switch C是Transparent的角色,所以當然可以在這台設備上新增∕修改∕移除VLAN設定值,但是Transparent角色的交換機設備無法主動發送自己的VLAN設定值而只會轉發,所以由Switch C設備上所建立的VLAN 3只有Switch C自己才知道。

現在各位讀者應該都能感覺到,Transparent角色聽起來其實有點自成一格,既不套用其他設備所傳來的VLAN設定值,也不願意和其他交換機設備分享自己設定好的VLAN設定值,但是卻也不會阻礙其他設備互相分享VLAN設定的動作。

所以對整個網路而言,Transparent角色的交換機設備是「透明」的,所以才叫做Transparent,這樣應該就很容易地記住這角色所帶來的意義。

Transparent所帶來的這種情況看起來雖然有點特殊,但是用途卻也蠻廣泛的。舉例來說,如果希望重要的伺服器不要受到其他交換機設備的VLAN設定值所影響,就可以把這些重要的伺服器連接到Transparent角色的交換機設備上,這樣一來就將問題解決了。

詳細同步方式

前面提到過,這樣的VLAN設定值只會在同一個VTP domain中作同步,而傳送的時機是每隔五分鐘各個交換機設備就會做一次同步的動作,或是當VLAN設定值有任何改變的時候也會立即做同步的動作。

而傳送同步資料的方式,是採用multicast的方式來傳送,這每一次的同步資料,稱為VTP advertisement。

在每一次所傳送的同步資料中,會加上一個revision number,也就是版本號碼,以便於讓各個Cisco交換機設備知道現在所接收到的同步資料是比較新的,還是比較舊的資料,而根據這樣的資訊來決定是否要採用新的同步資料。revision number的值越大,代表所包含的VLAN設定值越新。

當Cisco交換機設備收到由其他設備所傳來的同步資料之後,第一步會先確認這份同步資料是不是由同一個VTP Domain中的交換機設備傳送過來的,接著會比對密碼等資訊(如果有設定密碼的話),最後則比較revision number。因此,revision number也是VLAN同步資料中最重要的資料之一。

每當Server模式的Cisco交換機設備改變VLAN的設定值,要傳送VLAN設定值給其他設備進行同步時,會先把這個revision number加1,然後再把同步資料送出。

而其他Cisco交換機設備收到這個同步資料時,會先比對revision number,如果所收到的同步資料中的revision number比儲存於設備中的revision number值還大的話,就會把所收到的設定值覆蓋掉原本儲存於設備中的設定值。

而因為Transparent模式的Cisco交換機設備不希望其他交換機設備同步到它所設定的VLAN設定值,所以由Transparent角色所產生的VLAN設定值同步資料的revision number永遠為0。

若要讓revision number從零開始重新計算,必須執行delete vtp指令,如下所示:

Switch_406>enable
Enter Password: Switch_406#configure terminal
Switch_406(config)#delete vtp

VTP最佳化

VTP協定其實還可以做最佳化的動作,根據前面提到的流程,各位讀者一定了解到如果某一台Server模式的Cisco交換機設備對VLAN做了新的設定動作,所有其他的交換機設備都必須根據這個新設定值做同步的動作,無論其他交換機設備有沒有這樣的VLAN都會做同步,所以其實還蠻費事的。因此,VTP有辦法可以針對這點來做最佳化的動作,只要開啟VTP Pruning即可。

詳細最佳化的過程如右上:

clip_image007

根據以上這個網路架構圖,假設目前有六台Cisco交換機設備,其中Switch A和Switch E各接有位於VLAN 1的伺服器,而現在Switch A想變更VLAN 1中的設定,而Switch B、D和F這三台設備都沒有接到VLAN 1的設備。

照理說,Switch B、D和F都不需要針對Switch A這台設備對VLAN 1所作的變更做同步的動作。若開啟VTP Pruning模式,各個Cisco交換機設備就會自動辨識出這三台交換機設備不需要做同步,所以VLAN設定值的同步資料也就不會送到這些設備之中。而這種最佳化的動作也可以增加網路的使用頻寬。

另外必須注意的是,VTP Pruning最佳化設定只能在Server模式的Cisco交換機設備上設定,Client模式和Transparent模式都不能設定。

VTP pruning最佳化的設定指令如下:

Switch_406>enable
Enter Password:
Switch_406#configure terminal
Switch_406(config)#vtp pruning

如果想關閉VTP pruning設定,只要在指令前面加上no關鍵字即可:

Switch_406(config)#no vtp pruning

設定VTP的指令

在設定VTP之前,必須要先了解VTP的預設值是如何才知道要更改哪些設定值。預設的VTP設定,因不同的Cisco交換機設備而不同,也依據不同的Cisco IOS版本而有差異。

其中,Cisco Catalyst 2950交換機設備的VTP預設值如下所示:

VTP Domain名稱:無
VTP模式:Server
VTP密碼:無
VTP Pruning模式:關閉
VTP Trap:關閉

VTP密碼預設是關閉的,管理者可以選擇性地設定VTP密碼來保護VTP的管理。如果在相同VTP domain中的其他Cisco交換機設備沒有設定相同的密碼,則不會同步由其他設備所傳來的VLAN設定資料。設定VLAN的步驟如下:

1. 設定Trunk
2. 建立VLAN
3. 將埠設定到各個VLAN之中

其實在第一步驟之前,還可以選擇性地設定VTP設定,當然也只有Cisco的交換機設備才有辦法設定VTP。而設定VTP的相關指令有以下幾種。(以下的指令都是用Cisco Catalyst 2950交換機設備為例子來說明,因為這款是比較常見的Cisco交換機型號)

建立VTP Domain

建立VTP Domain的指令如下所示。設定VTP的指令都是使用vtp關鍵字,後面若接上mode關鍵字代表要設定VTP模式,也就是所扮演的角色,最後模式的關鍵字可以是server、client和transparent等。

而「vtp domain」指令則是用來設定這台交換機設備要加入到哪一個VTP Domain之中。「vtp password」指令則是用來設定密碼。

Switch_406>enable
Enter Password:
Switch_406#configure terminal
Switch_406(config)#vtp mode transparent
Switch_406(config)#vtp domain DOMAIN_1
Switch_406(config)#vtp password CISCO
Switch_406(config)#vtp pruning Switch_406(config)#end

如果是設定成transparent模式,還可以透過以下的指令將這些設定值儲存起來:

Switch_406(config)#copy running-config startup-config

檢視VTP設定

設定完VTP指令之後,接著可以用以下這些指令來檢視VTP設定是否成功:

Switch_406#show vtp status
VTP Version                                 : 2
Configuration Revision                       : 0
Maximum VLANs supported locally : 64
Number of existing VLANs              : 17
VTP Operation Mode              :Transparent
VTP Domain Name          : DOMAIN_1
VTP Pruning Mode           : Disabled
VTP V2 Mode                 : Disabled
VTP Traps Generation              : Disabled
MD5 digest    : 0x7D 0x6E 0x5E 0x3D 0xAF 0xA0 0x2F 0xAA
Configuration last modified by 10.1.1.4 at 7-23-06 20:21:22

執行「show vtp status」指令之後,就會顯示出以上這些資訊。其中,VTP Version的值若為1,代表是乙太網路使用的VTP,如果VTP Version為2,則代表可以給乙太網路和Token Ring網路使用。但是,即使支援Version 2,也可以選擇是否要運行在Version 2上。

由上面這個例子中,可以看出VTP V2 Mode的值是Disabled,代表並沒有運行在Version 2上。通常在這輸出結果上最常觀察的值就是VTP Operation Mode和VTP Domain Name,用來檢視這台Cisco交換機設備是扮演什麼模式,以及檢視目前處於哪一個VTP Domain。

最多就是再留意Configuration Revision,這就是之前所談到的Revision Number,因為這裡把VTP Operation Mode設定成Transparent,所以為了不讓其他Cisco交換機設備同步到這台設備所設定的VLAN設定值,Transparent模式的Configuration Revision都一定是0。

檢視Trunk設定指令

在使用VTP協定來同步各個Cisco交換機設備的VLAN資料之前,必須記得要先設定成Trunk模式,而若要檢視與Trunk相關的設定,其檢視指令如下:

Switch_406#show interface fa0/11 switchport
Name : Fa0/11
Switchport : Enabled
Administrative Mode : trunk
Operational Mode : down
Administrative Trunking Encapsulation : dot1q
Negotiation of Trunking : On
Access Mode VLAN : 1 (default)
Trunking Native Mode VLAN : 1 (default)

執行以上的指令之後,可以顯示出這個埠關於Switchport的詳細設定,其中,若看到Administrative Mode的值是trunk,代表trunk已經設定成功,而從Administrative Trunking Encapsulation也可以看出這個埠是使用哪一種trunking協定。

另一種檢視Trunk設定的指令如下:

itch_406#show interface fa0/11 trunk

Port  Mode             Encapsulation  Status      
Native      vlan
Fa0/11     desirable      802.1q         trunking         
1
Port  Vlans allowed on trunk
Fa0/11  1-4094

Port  Vlans allowed and active in management domain
Fa0/11     1-13

這個指令可以讓管理者用不同的觀點來檢視這個埠的Trunk設定值。這個指令比較不同的地方是,可以看出這個埠對於Trunk設定的模式,例如是desirable還是auto等等。

檢視VLAN設定指令

下面這樣的指令可以用來檢視VLAN設定是否成功,也可以顯示VLAN相關的設定值:

Switch_406#show vlan id 2
VLAN     Name               Status       Ports
--------------------------------------------------------------------------------------------------
2      VLAN_KC      active       Fa0/2, Fa0/12

VLAN     Type SAID        MTU        Parent      RingNo    BridgeNo Stp   BrbgMode       Trans1    
Trans2

-------------------------------------------------------------------------------------------------
2       enet  100002     1500        -       -       -       -       0      0

這個指令的語法是「show vlan id」後面再接上VLAN的ID,就可以顯示指定的這個VLAN的詳細設定值,如果忘記ID的話,也可以使用「show vlan name」這個指令,後面再接上VLAN的名稱。

由上面的輸出結果可以看出,可以查出有哪些埠已經被指定到這個VLAN中,以及看出目前這個VLAN是啟動還是暫時關閉的狀態,不過同時也顯示了許多其他更進階的資訊。因為這些資訊比較複雜,這裡就不再一一為各位介紹,因為很多是給其他種類的VLAN使用,例如SAID是指Security Association ID,是給FDDI Trunk專用的。

如果各位讀者想看比較精簡的輸出結果,可以執行「show vlan brief」這個指令,這個指令可以一次顯示出所有VLAN的名稱、狀態以及有哪些埠屬於這個VLAN等等,如底下所示:

Switch_406#show vlan brief
VLAN     Name       Status       Ports

------------------------------------------------------------------------------------

1      default      active       Fa0/1, Fa0/2

2      vlan2        active       Fa0/3, Fa0/4

3      vlan3        active

4      vlan4        active

1002        fddi-default       act/unsup

1003        token-ring-default     act/unsup

1004        fddinet-default  act/unsup

1005        trnet-default      act/unsup

上面這樣的輸出就簡單多了,各位讀者會發現到有一些奇怪的VLAN也名列其中,像是1002到1005這些VLAN,這些都是屬於系統預設的VLAN,是給FDDI和Token Ring網路專用,這裡略過即可。

檢視VLAN中的STP設定

最後,讀者免不了也想知道在某個VLAN中的STP設定值到底是如何,如果想知道這樣的資訊,可以執行以下這個指令來顯示STP設定值:

Switch_406#show spanning-tree vlan 2

VLAN0002

Spanning tree enabled protocol ieee

Root ID    Priority     2         Address   0008.20fc.a840

Cost 31         Port  12 (FastEthernet0/12)

Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority     32770 (Priority 32768 sys-id-ext 2)         Address   0008.a445.9b40

Hello Time 2 sec Max Age 20 sec                    Forward Delay 15 sec Aging Time 300

Interface   Role Sts   Cost Prio.Nbr   Type

--------------------------------------------------------------------------------------------

Fa0/2       Desg        FWD       100  128.2       Shr
Fa0/12     Root FWD       19    128.12     P2p

上面的指令就可以看到VLAN 2的STP設定值,由以上的輸出結果,可以看出Fa0/12這個埠是這個VLAN的Root Port。

此外,可以看到在VLAN 2這個STP中,Root Bridge的Priority值是2,而目前這一台Cisco交換機設備的Priority是32770,同時也可以看出Root Bridge的MAC位址是0008.20fc.a840,而自己這台Cisco交換機設備的MAC位址是0008.a445.9b40,所以這台Cisco交換機設備並不是這個STP的Root Bridge。

CCNA考試中也常出現這樣的輸出結果,然後要應考者知道這台設備是不是STP中的Root Bridge,或是使用哪一種STP協定,從輸出的第二行,可以看到最後面寫著ieee的字樣,所以也可以從這裡得知這個STP是採用IEEE 802.1d的STP協定。

結語

經由這一篇文章的介紹,各位讀者應該就能夠了解Cisco交換機設備的VTP該如何設定,也完全清楚其內部觀念與使用時機。Cisco交換機設備最大的重點就是STP和VLAN,若能完全了解這兩大重點並記下指令,對Cisco交換機設備的認識就已經非常足夠,尤其是對於要準備CCNA的讀者而言,更是不能錯過的重點。而對於VTP的認識與活用,更是網路管理人員不能錯過的主題。

arrow
arrow
    全站熱搜

    NoMoney NoHoney 發表在 痞客邦 留言(0) 人氣()