STP主要是用來防止實體線路的迴圈,會從邏輯上刻意block可能產生迴圈的路徑,會產生迴圈有許多因素像是一開始沒有設計好,或者為了要使用備援機制等等,都有可能造成迴圈。
STP的流程
1.選擇Root Bridge(根交換器):是依據每一台的BID(bridge ID)來決定。
STP在每台交換器的連接埠發送彼此的BPDU(Bridge Protocol Data Unit)封包,此封包內有8 bytes BID其中包含兩個值,Bridge Priority和MAC位址,交換器會先比較Bridge Priority數值較小的成為Root Bridge如果一樣則比較MAC位址。
2.選擇Root Port (根連接埠RP):除了Root Bridge以外每台交換器都會有一個RP,它是依據Path cost(路徑成本)來決定,如果相同就去跟另一端的交換器BID和port ID來做比較。
在選擇完Root Bridge後接下來就是分配每個連接埠的角色,總共有三種分別為RP、DP、NDP每一個Port都會被指定一種角色。一開始STP會選擇一個Port當作RP,此為交換器到Root Bridge的最佳路徑,判斷方式則是依據Path cost來比較越小的優先
假設Switch 2為根交換器當Switch 0要選擇RP時就有兩條路徑第一條Switch 0---->Switch 2 cost為19,第二條Switch 0---->Switch 1---->Switch 3---->Switch 2 cost為19+19+19=57,因此就以最小成本的第一條port當作RP其他交換器則依此類推。
3.選擇Designated Port(委任連接埠DP):每一個LAN區段只會有一個DP,如果有兩個要競爭則是選擇最低連接埠成本和BID來決定。
目前剩下的Port通通先假設為DP再來查看一個LAN segment只有一個DP的原則,這時你會發現有一個LAN segment出現了兩個DP,他們會以最小的路徑成本來做比較,Switch 0的cost有兩個分別為19和57,Switch 1的cost都是38,先在開始比較Switch 0最小cost為19,Switch 1最小cost為38因此Switch 0的Fa0/1成為DP。
4.選擇Non-Designated Port(非委任連接埠NDP):剩下的就是NDP此埠會被封鎖。
接下來就是如何手動設定根交換器,設定方法有下列兩種
1.調整BID的值:
指令為spanning-tree vlan 1 priority 20480
在調整BID的數值時要注意必須為4096的倍數
因為在前面有提到BID是由兩個部分組成分別為Bridge Priority和MAC位址
但是在多重Vlan時就無法判別因此就有一種新的STP版本誕生了,就是PVSTP他將Bridge Priority有劃分為4bits與12bits分別表示Bridge Priority和Extend System ID(等於Vlan ID或sys-id-ext),在Bridge Priority的值就只能動到2的12次方以後也就是4096的倍數。
2.直接下spanning-tree vlan X root primary指令
BPDU Guard
設定此功能的介面只要收到BPDU封包就會將介面關閉並呈現error disable那為何要有此功能因為在PC連接交換器時是不可能有迴圈發生的因此也就不需要BPDU。
PortFast
在交換器接PC時是不會有迴圈發生的但是STP還是會檢查因此我們可以使用PortFast來停止STP的運作,當PortFast執行時會掉過學習和傾聽的過程直接重封鎖轉換到轉送,所以PC就可以直接使用網路,而不用等STP運行完畢。
Port State
1.Block(BLK):STP一運作時,port就會進入block,此時並不能傳送資料,只能接收BPDU來確認Root Bridge和Root Bridge ID。
2.Listen(LSN):此狀態port會接收別人的BPDU,和傳送自己的BPDU
3.Learn(LRN):此狀態開始學習MAC,並將其儲存到MAC Table中。
4.Forward(FWD):此狀態表示port已經在可以正常轉送資料,同時也會發送、接收BPDU。
5.Disable:此狀態為停用,通常是由管理者自行關閉。
STP與RSTP比較:
STP(IEEE802.1D)的收斂時間約為30秒因為在Port State轉換需要Timer(計數器),所以收斂時間較長,因此出現了RSTP(Rapid STP IEEE802.1w),在RSTP的Port State轉換是用Proposal and Agreememt(主動協商)所以收斂時間較快。在RSTP Port Role中將NDP用Alternate Port與Backup Port取代。
在RSTP Port State 中將Block、Disable合為Discard(丟棄),Listen、Learn合為Learn(學習)
指令
========================================================================
S1(config)#spanning-tree vlan x priority 20480(將vlan x 的BID調整為20480)
S1(config)#spanning-tree vlan X root primary(將S1的vlan x 設定為根交換器)
S1(config)#spanning-tree vlan X root secondary(將S1的vlan x 設定為備援根交換器)
S1(config)#spanning-tree portfast bpduguard default(將所有的Port啟動BPDU Guard)
S1(config-if)#spanning-tree portfast bpduguard ecable(在某介面啟用BPDU Guard)
S1(config-if)#spanning-tree portfast bpduguard disable(在某介面停用BPDU Guard)
S1(config)#spanning-tree portfast default(將所有的Port啟動PortFast)
S1#show spanning-tree (顯示STP)
S1#show spanning-tree vlan 5(顯示vlan 5 的STP)
在交換器的port安全性上可以設定Port-security來完成,Port-security的功能是將port的可使用mac記錄起來當違反時可以做適當的處理。
記錄方式有三種
1.Static Secure MAC(靜態安全MAC):由管理者手動設置,安全的MAC並將其記錄在Secure MAC Table中。要將以設定的Static Secure MAC清空要使用clear port-securty all指令。
2.Dynamic Secure MAC(動態安全MAC):由交換器自動記錄安全的MAC是採用先到先記錄的方式,在交換器重新啟動後記錄將被移除。
3.Sticky Secure MAC(黏滯安全MAC):由交換器自動記錄安全的MAC是採用先到先記錄的方式,會記錄在Secure MAC Table和run組態檔中,重新啟動後還可繼續使用。
一般來說違反的條件都是以MAC的數量來判斷,如果違反時會有三種方式可以使用。
違反安全MAC處理方法
1.Protect(保護):將接收到的封包直接丟棄
2.Restrict(限制):將封包直接丟棄並將違反的相關資訊記錄起來。
3.Shutdown(關閉):會將此port介面設定為error-disabled,並且發送通知和記錄,要再次啟動此介面時須先shutdown在使用no shutdown。
設定指令
========================================================================
S1(config)#interface fastEthernet 0/1(進入介面0/1設定模式)
S1(config-if)#switchport mode access(設定為存取模式)
S1(config-if)#switchport port-security(啟動port-security)
S1(config-if)#switchport port-security maximun 5(設定安全MAC數量為5)
S1(config-if)#switchport port-security mac-address xxxx.xxxx.xxxx(設定靜態安全MAC為xxxx.xxxx.xxxx)
S1(config-if)#switchport port-security mac-address sticky(設定黏滯安全MAC)
S1(config-if)#switchport port-security violation restrict(當違反安全原則時restrict)
S1(config-if)#switchport port-security violation protect(當違反安全原則時protect)
S1(config-if)#switchport port-security violation shutdown(當違反安全原則時shutdown)
S1#show port-security interface fastEthernet 0/1(顯示fa0/1的port-security)
S1#show mac-address-table(顯示交換器上的MAC table)
S1#show port-securty address(顯示Secure MAC Table)
S1#clear mac-address-table(清除交換器上的MAC table)
S1#clear port-securty all(清除Secure MAC Table)
========================================================================
VTP的主要功能就是將Vlan傳遞出去,在設定交換器的vlan時假設你要設定5台交換器那你就設定5次其實不用這麼麻煩,只要使用VTP就可以自動幫你完成。
交換器的模式有下列三種
1.Client mode:不可自行修改、刪除、建立Vlan只能透過VTP更新封包來完成。
2.Server mode:可以自行修改、刪除、建立Vlan,並會產生VTP更新封包來幫助Client完成更新。
3.Transparent mode:可以自行修改、刪除、建立Vlan,還可幫忙傳遞VTP更新封包,但並不會產生VTP更新封包。
要使用VTP必須符合以下條件
1.交換器之間的連線必須為Trunk模式
2.Domain的名稱必須要相同
3.其中一臺交換器必須為Server模式
4.有設密碼時必須相同
設定指令
========================================================================
S1(config)#vtp mode client(設定vtp為client模式)
S1(config)#vtp mode server(設定vtp為server模式)
S1(config)#vtp mode transparent(設定vtp為transparent模式)
S1(config)#vtp domain aaa(設定vtp domain名稱為aaa)
S1(config)#vtp password bbb(設定vtp 密碼為bbb)
S1#show vtp status(顯示vtp狀態)
S1#show vtp password(顯示vtp 密碼)
========================================================================
VTP Revision號碼
在VTP的狀態內會有一行configuration Revision這個數值越大代表被修改的次數越多,在一般的情況下Client mode是不提供VTP更新封包的,但是當Server mode 的Revision小於Client mode,這時Client就會產生VTP更新封包讓Server更新,也就是說Revision越大VTP資訊就越新,在更新時數值大的會將小的蓋掉,因此防止來路不明的交換器就相當重要。
(要將交換器的configuration Revision歸零只要更改domain名稱,之後再改回來就可以了)
交換器的port模式有兩種分別為Access和Trunk每一個port只能為其中一種狀態,設定的方法有兩種分別為手動和自動,自動又分為兩種一是auto二是desirable。
下面有一張對照表
簡單的說手動遇到自動就是以手動為主desirable遇到auto就以desirable為主其中desirable代表Trunk
auto代表Access
設定指令
========================================================================
S1(config-if)#switchport mode trunk(設定port為主幹模式)
S1(config-if)#switchport mode access(設定port為存取模式)
S1(config-if)#switchport mode dynamic auto(設定port為auto模式)
S1(config-if)#switchport mode dynamic desirable(設定port為desirable模式)
S1(config-if)#switchport nonegotiate(停止DTP協商)
========================================================================
Vlan的用處在於它可以用來邏輯切割廣播網域,在一台交換器上所有的廣播封包是可以互通的,假設一台交換器上接20台電腦PC1~PC20,當PC1發出廣播封包時PC2~PC20都會收到這個廣播封包,相當的浪費資源,這時就可以用Vlan來切割廣播網域來減少不必要的浪費,再來就是安全性,當PC1發送廣播封包其內容是"XX醫院在哪裡",這時所有人都知道PC1要去醫院了,如果我們用Vlan切割就可以相對的提高安全性。那為什麼不用路由器呢?原因很簡單你會為了殺死一隻蟑螂就拿飛彈去轟牠嗎?相信你不會況且你還不一定有飛彈哩。簡而言之就是殺雞焉用牛刀,在加上你不一定有路由器的管理權限阿!!(Vlan1預設為原生可用Vlan為2~1001,1002~1005保留給其他協定使用)
建立Vlan
========================================================================
S1(config)#vlan 3(建立vlan 3)
S1(config-vlan)#name xxx(名稱為xxx)
S1(config)#interface fastEthernet 0/1(進入介面0/1設定模式)
S1(config)#interface range fastEthernet 0/2 - 3(進入介面0/2~0/3設定模式)
S1(config-if)#switchport access vlan 3(指定為vlan 3)
========================================================================
Trunk(主幹)
trunk的功能就是將多條實體連線變成只用一條就可以達成目的,因為如果1個VLAN需要一條線10的VLAN就需要十條線這並不是我們所樂見的,因此Trunk就可以只用一條線路來傳遞多個不同的VLAN封包。
Trunk有兩種
1.IEEE802.1Q
2.Cisco ISL
802.1Q要分辨封包所屬哪一個VLAN,只要在Ethernet Hearder上tag VLAN ID就可以輕易地分辨出來。Ethernet Hearder內會多了兩個欄位第一個是TPID這是代表有被標記過,第二個是TCI這表示Vlan ID的標記。
設定Trunk指令
========================================================================
S1(config)#interface fastEthernet 0/5(進入介面0/5設定模式)
S1(config)#switchport mode trunk(設定為Trunk port)
========================================================================
Trunk port 不屬於任何VLAN
Router on Stick(單臂路由)
既然交換器間可以使用Trunk來減少實體線路那路由器和交換器間也可以使用嗎?答案是可以的只是設定上有所差異。
在路由器上Trunk的設定要先使用Sub-Interface來設定預設閘道的IP位址在來使用encapsulation dot1Q X的指令來辨識所屬VLAN
設定指令
========================================================================
R1(config)#interface fastEthernet 0/0(進入介面0/0設定模式)
R1(config-if)#no shutdown(開啟此介面)
R1(config-if)#interface fastEthernet 0/0.20(產生子介面.20)
R1(config-subif)#encapsulation dot1Q 10(設定802.1Q的Trunk協定 所屬VLAN10)
R1(config-subif)#ip address X.X.X.X X.X.X.X(設定IP 遮罩)
========================================================================
子介面的號碼不一定要和VLAN ID相同
修改Native Vlan
在交換器出廠時都會預設一個Native Vlan通常為Vlan 1這個是非常特別的Vlan既不能刪除也不能修改,在傳輸資料時也不用tag Vlan ID 簡而言之就是沒有設定Vlan ID的都會往這裡送。
雖然不能修改Native Vlan但我們可以藉由修改Vlan ID來達到目的例如我們可以把Native Vlan指定到Vlan 20這樣更改是為了提高資料的安全性。(記得要所有交換器一起更改,如果有用Router on Stick也要修改)
設定指令
========================================================================
S1(config)#interface fastEthernet 0/0(進入介面0/0設定模式)
S1(config-if)#switchport trunk native vlan 20(指定Native Vlan為Vlan 20)
R1(config-subif)#encapsulation dot1Q 20 native(設定802.1Q的Trunk協定 Native Vlan指定為20)
========================================================================
限制Vlan傳輸
在預設是所有Vlan都可以傳輸的如果只要Vlan 20才可以傳輸那就要用switchport trunk allowed vlan 20的指令來完成。
設定指令
========================================================================
S1(config-if)#switchport trunk allowed vlan 20(只允許Vlan 20使用)
========================================================================
IPv6是由128位元所組成的,每16位元為一組,共八組,並以16為元表示,間格方式則是使用":"來隔開。
EX: 3002 : 0AC5 : BB11 : 2222 : 0000 : 0000 : 0000 : 0001
由於IPv6較為長且複雜,所以可以使用化簡的方式來縮寫。
1.前面為0的可以省略
EX: 3002 : AC5 : BB11 : 2222 : 0 : 0 : 0 : 1
2.連續的0可以用"::"來代替但是只可使用一次,因為使用兩次會有複數的組合產生。
EX: 3002 : AC5 : BB11 : 2222 :: 1
在IPv6將位元分為2部分第一為Prefix(前置碼)第二部分為Interface ID(介面ID)(Prefix就如同IPv4的網路位元)
IPv6取消了遮罩,只使用前置碼來表示。
EX: 3002 :: 1/48
表示 前48個為網路位元(3002 : 0 : 0)剩下的80個為主機位元(0.0.0.0.1)
Prefix是由RIR(Regional Internet registry)、ISP Prefix、Site Prefix、Subnet Prefix所構成。
在IPv6位址中定義了三種位址
一、Unicast Address(單播位址)
1.Global Unicast
2.Link-Local
3.Unique Local
4.Embedded IPv4
二、Multicast Address(群播位址)
1.Solicited Node Multicast
2.Assigned
三、Anycast Address(任播位址)
交換器相當於集線器的加強版,目前市面上較便宜的交換器大都屬於Switch-Hub,這種交換器並沒有IOS的進階功能,但有些較貴的交換器像是Cisco Switch,又有提供IOS和Routing等進階功能,因此交換器又可以分為Layer3 Switch和Layer2 Switch。
為什麼會說交換器是集線器的加強版呢?因為交換器比集線器多了一個MAC Table的功能,在交換器的RAM裡面會儲存MAC位址,而交換器會根據MAC位址來將資料傳送到目的電腦而部會用廣播的方式,如此一來就可以節省很多的資源,當然一開始交換器的MAC Table會是空的,當有電腦需要傳送資料時,就會使用廣播去詢問目的電腦的MAC位址,並將傳送端的MAC記錄在MAC Table中。
========================================================================
指令
S1>enable(從使用者介面進入特權模式)
S1#Show mac-address-table(顯示MAC Table資料)
S1#Clear mac-address-table(清除MAC Table資料)
S1#conf terminal(從特權模式進入全域組態設定模式)
S1(config)#mac-address-table static 0040.F524.324B vlan 1 int fa0/2(加入靜態MAC 0040.F524.324B 到介面0/2的Vlan 1裡)
====================================
設定速度與雙工模式
S1(config)#int f0/2(進入介面0/2)
S1(config-if)#duplex auto(設定雙工模式為自動協商)
S1(config-if)#duplex full(設定雙工模式為全雙工)
S1(config-if)#duplex half(設定雙工模式為半雙工)
S1(config-if)#speed auto(設定速度為自動協商)
S1(config-if)#speed 10(設定速度為10M)
S1(config-if)#speed 100(設定速度為100M)