Contents

【Network】有無 add 的 switchport trunk allowed vlan 影響

話說 switchport trunk allowed vlan {vlan ID} 與 switchport trunk allowed vlan add {vlan ID} 這兩種方法實際上是等價的,在工作時也沒有想那麼多,想說就新增一個 allowed vlan,就用第一個方法,結果被經驗老到的同事制止了,要求我使用第二個方法,這又是為什麼呢?讓我們繼續看下去 …

什麼是 allowed vlan

請直接看網路上 Jan Ho 大神的筆記比較快,allowed vlan

例子

# show running gi 1/1/1
interface GigabitEthernet1/1/1
switchport mode trunk
switchport trunk allowed vlan 10

今天因為工作需求,我需要增加 VLAN20 的流量,我有兩種新增方式
以下兩種方式省略了一些前置,像是怎麼進入該 interface 等等。

第一種:

switch(config-if)# switchport trunk allowed vlan 10,20

第二種:

switch(config-if)# switchport trunk allowed vlan add 20 

讓我們再回來檢查設定:

# show running gi 1/1/1
interface GigabitEthernet1/1/1
switchport mode trunk
switchport trunk allowed vlan 10,20

一樣啊,為什麼要我用第二種呢?

太長

如果我現在的情況如下:

# show running gi 1/1/1
interface GigabitEthernet1/1/1
switchport mode trunk
switchport trunk allowed vlan 10,30,40,55,100,288,333,401,507

我使用第一個方法的話,我就要輸入:

switch(config-if)#switchport trunk allowed vlan 10,20,30,40,55,100,288,333,401,507

這樣子新增時,我需要重新輸入這些 vlan ID,這可能會有打錯的風險,當我們使用錯誤的 vlan ID 時,可能會影響網路的運作。
好,但是現在資訊愈來愈發達,我在 cmd, putty 上都可以使用複製貼上了,我直接用複製貼上總行了吧?

Danger
複製貼上有時候不小心碰到右鍵,阿就把指令給輸進去了! 再來,你真的這麼有自信複製貼上會貼對?以上面例子來說,你不怕後面的 507 少一個 7 變成 50 嗎?

如果真的要貼,會建議另外開個文字編輯先貼上去做確認後,再貼到 Console 中。 這可能會是一個選擇第二個方法的原因,但這並不是主要原因。

Set, Add

以前面提到的兩種方式來說,第一種是 Set,第二種則是 Add。

switch(config-if)# switchport trunk allowed vlan 10,20

用 Set 的話,代表我會下一次設定,把 vlan 10, 20 設定為 allowed,即便我的 vlan 10 已經 allowed,他仍然會重新加入。

至於重新加入會做什麼事呢?這就要看設備的製造商怎麼設計的了,比方說設備可能會先建立一個 list,將我們要 allow 的 vlan 加到該 list 中,那我們再下一次設定時,是不是又要重新建立一個 list,這個時候原先的設定就會暫時消失,然後再重新加入一次,原先在 queue 的封包可能因為這樣子不符規則而 Drop,就可能會對網路現況造成影響,比方說瞬斷。

但 add 就比較像是我透過 pointer 存取這個 list,然後透過 push 的方式加入,不太會影響原先的設定。
也有可能說,我知道會有這個問題,但我在設計時有注意就好,但也要注意 chip 的運作方式,現在許多的 switch 都是使用別家廠商的晶片,比方說 Broadcom, Marvell, 透過這些晶片廠提供的晶片與API 進行設備開發,因此在晶片原先的設計上也有可能導致這種問題的發生,這就無法避免。

比較直白點,我下了 switchport trunk allowed vlan 10,20 結果到 chip 前只剩下 vlan 20,這樣肯定是不符合我原先所想要的設定。

二來是必須為了這種情況開發判斷式,多一次運算都會影響設備的效能,不要忘記 switch 每秒鐘可是幾千萬上下,而且是每一個 port …

# show running gi 1/1/1
interface GigabitEthernet1/1/1
switchport mode trunk
switchport trunk allowed vlan 10,30,40,55,100,288,333,401,507

switchport trunk allowed vlan 10,20,30,40,55,100,288,333,401,507 
! 這樣我得看有沒有在裡面,我就要看 10 次,不然就是全部重新再設一次。

switchport trunk allowed vlan add 20
! 我只要看 20 有沒有在裡面就好。

結論

雖然前面提到的兩種 command 是等價的,但希望在變更環境需要加入 vlan 時,可以透過 add 的方式,盡可能降低設定時對現有網路所帶來的影響。

另外在變更網路時,需要先擬好要變更的點,要如何變更,變更後可能會帶來什麼影響,如果帶來影響後我能如何處理?復歸準備好了嗎?發生影響後能不能看 log 來判斷如何處理?
無論如何,為了避免現有的網路環境受影響,設定前能夠先做好妥善的預防,設定中盡量採取影響程度最小的設定方式,設定後再檢查、測試一下是否符合預期。

雖然只是改變小小的改變架構,仍然要小心,可不要像我一樣認為等價,指令下下去結果就瞬斷啦!

參考資料

  1. 以前開發 Switch 的經驗
  2. 幾位沒有到很熟的 CCNP, CCIE 也踩過這個坑