วันศุกร์ที่ 13 มิถุนายน พ.ศ. 2557

Spanning-Tree Portfast ทำให้เกิด Loop ได้จริงหรือ ??

โดยปกติแล้ว ถ้าเราพูดถึงโปรโตคอลที่ใช้ป้องกัน loop บน L2 ก็คงนึกถึงตัวไหนไปไม่ได้นอกจาก STP (Spanning Tree Protocol) โดยการทำงานของมันก็จะมี Transition State เพื่อคุยกันระหว่าง Switch ว่า port ไหนจะ block หรือ port ไหนจะ forward ดี ตัวไหนจะเป็น root ดี เป็นเวลา 50 วินาที (STP 802.1d) หรือ 6 วินาที (RSTP 802.1w) แล้วยังไงล่ะ ??

ก็ในบางครั้งไอ port ที่เราไปต่อกับ end point อย่างเช่น Notebook , PC , Server etc. มันเป็น device ที่ไม่จำเป็นต้อง learning STP แล้วทำไม ต้องให้มันไปรอ Transition State ด้วยตั้งหลายวินาที ??

ก็เลยมี Feature ที่ถูกพัฒนาขึ้นมาที่ใช้คู่กับ STP 802.1D เรียกว่า "portfast" (portfast เป็นชื่อ feature นะครับ ไม่ใช่ port fast ethernet 100Mbps อย่าเข้าใจผิดล่ะ = =" ) แทนที่เวลาเราเสียบสายเข้าไปจะต้องมารอ 50 วินาที เมื่อเราเปิดใช้งาน portfast ขึ้นมา port ที่ถูกกำหนดให้ใช้งาน portfast จะไม่ต้องรอ Transition State โดยมันจะเปลี่ยน State ไปเป็น Forward โดยทันที หมายความว่าเมื่อเราเสียบปุ๊ป ก็ใช้งานได้ปั๊ปเลย


แบบ นี้ก็แหล่มเลย งั้นเวลาต่อกับ Switch ผมใช้ portfast ละกันจะได้เร็วๆ.....เฮ้ยยย!!! ไม่ได้ๆ portfast เค้าให้ใช้กับ port ที่ต่อไปหา end device เท่านั้น ถ้าไปเปิด portfast บน port ต่อไปหา Switch ล่ะจะเป็นยัง ?? อ่ะ เดี๋ยวผมจะพูดให้ฟัง....

ป็นความเข้าใจผิดกันว่าการเปิดใช้งาน portfast คือการปิด STP
ไม่ใช่ ไม่ใช่ อย่าเข้าใจผิดนะครับ การที่เราเปิดใช้งาน portfast นั้น STP ยังคงทำงานอยู่ตามปกตินะครับ จากที่มันต้อง

Blocking -> Learning -> Listening -> Forwarding รวมๆแล้วประมาณ 50 วินาที

แต่เมื่อเปิดใช้งาน portfast มันจะข้าม State ไปเป็น Forwarding ทันทีนั่นเองงงงงงง


ถ้าไม่เชื่อเดี๋ยวผมทำทดสอบให้ดูครับ

 

ผมเปิด portfast บน fa0/13 ที่ SW2 และ shutdown port ไว้ก่อน
SW2(config)#interface fa0/13
SW2(config-if)#shutdown
SW2(config-if)#switchport mode access 
SW2(config-if)#spanning-tree portfast
ต่อมาผมใช้ debug เพื่อจะดู State ของ STP
SW2#debug spanning-tree events 
Spanning Tree event debugging is on
Enable interface fa0/13ขึ้นมาเลย
SW2(config)#interface fa0/13
SW2(config-if)#no shutdown
มี Log ขึ้นมาแล้ว
SW2#
setting bridge id (which=3) prio 20481 prio cfg 20480 sysid 1 (on) id 5001.0019.569d
set portid: VLAN0001 Fa0/13: new port id 800F
STP: VLAN0001 Fa0/13 ->jump to forwarding from blocking
เห็นไหมครับ ผมบอกแล้วว่า STP มันทำงานอยู่ แต่มันข้าม State ไปเป็น Forwarding เลยทันที

จะเห็นว่า interface fa0/13 เป็น portfast mode และยังคงมีการส่ง BPDU อยู่
SW2#show spanning-tree int fa 0/13 detail 
 Port 15 (FastEthernet0/13) of VLAN0001 is designated forwarding 
   Port path cost 19, Port priority 128, Port Identifier 128.15.
   Designated root has priority 20481, address 0019.569d.5700
   Designated bridge has priority 20481, address 0019.569d.5700
   Designated port id is 128.15, designated path cost 0
   Timers: message age 0, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   The port is in the portfast mode
   Link type is point-to-point by default
   BPDU: sent 74, received 0
ทีนี้ผมมาดูต่อว่า ไอ Port fa0/13 ของ SW2 เนี่ย มันเป็น portfast แล้วมันดันต่อไปหา SW1 มันจะเป็นยังไงล่ะ ??

ผมรอเวลาซักแปปนึง แล้วลอง show spanning-tree interface fa0/13 ดูใหม่
SW2#show spanning-tree int fa 0/13 detail 
 Port 15 (FastEthernet0/13) of VLAN0001 is root forwarding 
   Port path cost 19, Port priority 128, Port Identifier 128.15.
   Designated root has priority 20481, address 0011.bb0b.3600
   Designated bridge has priority 20481, address 0011.bb0b.3600
   Designated port id is 128.15, designated path cost 0
   Timers: message age 1, forward delay 0, hold 0
   Number of transitions to forwarding state: 1
   Link type is point-to-point by default
   BPDU: sent 148, received 43

จะเห็นว่าอ้าว !!! กลายเป็น mode ปกติซะแล้ว

เพราะฉะนั้น จึงสรุปได้ว่า จริงๆแล้ว
ต่อให้เราจะใช้ portfast เชื่อมต่อไปหา Switch ด้วยกัน (ที่มีการต่อ topology แบบ loop) ก็จะไม่ทำให้เกิดปัญหาที่เราเรียกว่า loop ขึ้น เพราะการทำงานของ STP ของ Cisco ระบุไว้ว่า เมื่อใดก็ตามที่ port ที่เป็น portfast ได้รับ BPDU เข้ามา มันจะสูญเสียการเป็น portfast ไป และกลับไปใช้ STP ตามปกตินั่นเองครับ

Note : พอ enable portfast switch ทุกตัวก็ต่าง forward โดยไม่มี port ไหน block จึงทำให้เกิด Loop ชั่วคราวขึ้นมา (Temporary Loop) แต่พอเมื่อ port ของ switch ได้รับ BPDU เข้ามาก็จะสูญเสีย portfast และกลับมาใช้ STP ตามปกติครับ


เพิ่มเติม :
แต่โดยปกติไม่ค่อยมีใครใช้งาน PortFast ระหว่าง Switch อยู่แล้ว ส่วนมาก PortFast จะใช้งานบน Port ที่ต่อกับ Endpoint ซึ่งถ้าอยู่ๆ Port ที่ต่อกับฝั่ง Endpoint ที่มีการใช้งาน PortFast มีการรับ BPDU ก็จะต้องทำการคำนวณใหม่ STP ใหม่ ดังนั้นมันจึงมี Feature ที่เข้ามาช่วยป้องกันการรับ BPDU สำหรับ Access Port ที่ใช้งาน PortFast อีกนั่นก็คือ BPDUGuard และ BPDUFilter นั่นเอง ไว้มีเวลาผมจะมาเขียนเพิ่มเติมให้ครับ


วันนี้ผมหวังว่าหลายๆ ท่านที่ได้อ่าน จะเข้าใจในส่วน STP เพิ่มมากขึ้นอีกนิดนึงนะครับ ที่บอกว่านิดนึงเพราะว่าจริงๆมันยังมีอีกเยอะมากกกก เลยเชียว ฮ่าๆๆ แล้วรอบหน้าผมก็คงหา technique ดีๆมาแนะนำกันอีกนะครับ ^_^

11 ความคิดเห็น:

  1. ขอบคุณครับอาจารย์นัท

    ตอบลบ
  2. ขอบคุณครับ อ.นัท กระจ่างชัดเจน

    ตอบลบ
  3. ขอบคุณครับ อ.นัท กระจ่างชัดเจน

    ตอบลบ
  4. แต๊งกิ้ว...ทีเช่อ มาก ๆ คับผม

    ตอบลบ
  5. ขอบคุณครับ อ่านแล้วเข้าใจเลยครับ

    ตอบลบ
  6. เขียนเข้าใจดีครับ

    ตอบลบ
  7. อธิบายได้น่าอ่านมากครับ

    ตอบลบ
  8. ความคิดเห็นนี้ถูกผู้เขียนลบ

    ตอบลบ
  9. สุดจัดเหมือนอ่านหนังสือการ์ตูนเลย คำพุด การยกตัวอยางสนุกเข้าใจง่ายเห็นภาพคับ ขอบคุณครับ

    ตอบลบ