IST · บทที่ 3 Spanning Tree Protocol

หัวข้อ 12 · 18 นาที

Port state, RSTP, PVST+ และ MSTP

นึกภาพก่อน

ประตูที่ล็อกไว้จะเปิดใช้ทันทีไม่ได้ ถ้าเปิดเร็วเกินไปขณะที่อีกบานยังไม่รู้เรื่อง จะมีช่วงที่ทางวนเกิดขึ้น STP จึงให้พอร์ต รอเป็นขั้น ๆ: ฟังก่อน (มีใครดีกว่าฉันไหม) → เรียนรู้ก่อน (ใครอยู่ทางไหน) → แล้วจึงเปิด ปลอดภัยแต่ช้า: รวม ราว 50 วินาที ที่เครือข่ายใช้ไม่ได้

Port state ของ STP (802.1D)

Stateเวลารับ BPDUเรียน MACส่ง data
Blockingสูงสุด 20 วินาที (Max Age)✓✗✗
Listening15 วินาที (Forward Delay)✓ (และส่ง)✗✗
Learning15 วินาที (Forward Delay)✓✓✗
Forwarding–✓✓✓
Disabled–✗✗✗ (ผู้ดูแลปิดพอร์ต)
  • Listening: ประมวลผล BPDU เพื่อตัดสินบทบาทของพอร์ต ยังไม่เรียน MAC
  • Learning: เรียน MAC ลงตาราง ยังไม่ forward — เพื่อไม่ต้อง flood ทุกอย่างตอนเปิดใช้

ที่มาของ 50 วินาที

Max Age 20 + Forward Delay 15 (Listening) + Forward Delay 15 (Learning) = 50 วินาที

Forward Delay ถูกใช้ สองครั้ง

ขั้นที่ 1 / 5Blocking
โพรโทคอล
Max Age (วินาที)
20
Forward Delay (วินาที)
15
Blockingเวลาหลังลิงก์ล่ม: 0 วินาที
020s35s50s
รับ/ส่ง BPDUเรียน MACส่ง data frame
ทำไม่ทำไม่ทำ
default: Hello 2, Forward Delay 15, Max Age 20
1.0×

คำอธิบายทีละขั้น

ก่อนเกิดเหตุ: พอร์ตสำรองอยู่ในสถานะ Blocking

พอร์ตนี้ถูก block เพื่อตัด loop ไม่ส่ง data frame และไม่เรียน MAC แต่ยังรับ BPDU ที่ root ส่งมาทุก 2 วินาที (Hello time) เพื่อรู้ว่าเส้นทางหลักยังอยู่

RSTP (802.1w)

สถานะเหลือสาม

STP (802.1D)RSTP (802.1w)
Disabled, Blocking, ListeningDiscarding
LearningLearning
ForwardingForwarding

บทบาทใหม่

Roleเป็นตัวสำรองของอธิบาย
Alternate PortRoot Portอีกเส้นทางไป root ถ้า Root Port ล่มขึ้นแทนได้ทันที
Backup PortDesignated Portพอร์ตสำรองบน segment เดียวกัน กับ DP ของ switch ตัวเดียวกัน

(Root Port และ Designated Port ยังมีเหมือนเดิม)

ทำไมเร็วกว่า

STP รอ timer ทุกขั้น ส่วน RSTP ใช้ Proposal / Agreement handshake: switch สองฝั่งของลิงก์ตกลงกันโดยตรงว่าพอร์ตนี้ forward ได้โดยไม่เกิด loop แล้วข้ามไป Forwarding เลย ประกอบกับมี Alternate Port ที่คำนวณไว้ล่วงหน้า

STPRSTP
convergence~50 วินาที< 10 วินาที
กลไกtimer (Max Age, Forward Delay)Proposal / Agreement
port state53

PVST+ กับ MSTP

PVST+ / Rapid-PVST+MSTP (802.1s)
เจ้าของCiscoIEEE
STP instanceหนึ่งชุดต่อ VLANหลาย VLAN ต่อหนึ่ง instance
ข้อดีroot bridge แยกต่อ VLAN ได้ → load balancing ละเอียดใช้ CPU น้อยแม้ VLAN มาก และยัง load balance ได้ด้วย 2–3 instance
ข้อเสียใช้ CPU สูงเมื่อ VLAN มาก (100 VLAN = 100 ชุด)ตั้งค่าซับซ้อนกว่า

ตัวอย่าง MSTP ในสไลด์:

InstanceVLAN
CIST (instance 0)1, 999
Instance 110, 20, 30
Instance 240, 50, 60

หก VLAN ผู้ใช้ทำงานด้วย STP เพียงสองชุด ถ้าตั้ง root ของ instance 1 ไว้ที่ switch ตัวหนึ่ง และของ instance 2 ไว้อีกตัว ลิงก์ที่ถูก block ของกลุ่มหนึ่งจะเป็นลิงก์ที่ใช้งานของอีกกลุ่ม ทุกลิงก์จึงถูกใช้

Tuning และ Security

คำสั่งทำอะไรใช้ที่
spanning-tree vlan 1 root primaryตั้งให้ switch นี้เป็น root bridge (ลด priority อัตโนมัติ)switch แกนกลาง
spanning-tree portfastข้าม Listening/Learning ไป Forwarding ทันทีพอร์ตที่ต่อ end device เท่านั้น
spanning-tree bpduguard enableถ้าพอร์ตได้รับ BPDU → err-disabledพอร์ต PortFast
spanning-tree guard rootไม่ยอมให้พอร์ตนี้กลายเป็น Root Portพอร์ตที่หันไปทาง switch ซึ่งไม่ควรเป็น root
cisco
spanning-tree vlan 1 root primary

interface fastEthernet 0/1
 spanning-tree portfast
 spanning-tree bpduguard enable

interface gigabitEthernet 0/2
 spanning-tree guard root
  • PortFast: PC ไม่สร้าง loop จึงไม่ต้องรอ 30 วินาที (Listening + Learning) ทุกครั้งที่เสียบสาย
  • BPDU Guard: คู่กับ PortFast — ถ้ามีคนเอา switch มาเสียบพอร์ตที่ควรเป็นของ PC พอร์ตจะปิดทันที ป้องกันทั้ง loop และ BPDU attack
  • Root Guard: ป้องกัน switch แปลกปลอมที่ส่ง BPDU ด้วย priority ต่ำมาแย่งเป็น root

ตัวอย่างไล่ทีละขั้น

โจทย์: ใช้ STP 802.1D ค่า default ลิงก์หลักล่มที่เวลา 0 โดย switch ไม่เห็นการล่มโดยตรง (BPDU แค่หยุดมา) พอร์ตสำรองที่ Blocking อยู่จะเริ่มส่ง data เมื่อใด และช่วงวินาทีที่ 25 กับ 40 พอร์ตทำอะไรได้บ้าง

ช่วงเวลา (วินาที)สถานะทำอะไร
0–20Blockingรอ Max Age หมด (BPDU ล่าสุดยังไม่หมดอายุ)
20–35Listeningแลก BPDU ตัดสินบทบาท ไม่เรียน MAC
35–50Learningเรียน MAC ยังไม่ส่ง data
50 เป็นต้นไปForwardingส่ง data
  • วินาทีที่ 25: อยู่ใน Listening → รับส่ง BPDU ได้ เรียน MAC ไม่ได้ ส่ง data ไม่ได้
  • วินาทีที่ 40: อยู่ใน Learning → เรียน MAC ได้ ยังส่ง data ไม่ได้
  • เริ่มส่ง data ที่วินาทีที่ 50

ถ้าปรับ Forward Delay เป็น 10: 20 + 10 + 10 = 40 วินาที

ถ้าใช้ RSTP: Alternate Port ขึ้นเป็น Root Port ทันทีด้วย Proposal/Agreement ไม่รอ timer ใดเลย

จุดที่มักพลาด

1. คิดว่า 50 วินาที = 20 + 15 + 15 ของสาม timer ที่ต่างกัน

เป็น Max Age หนึ่งครั้ง + Forward Delay สองครั้ง (Hello 2 วินาทีไม่ได้อยู่ในผลรวม)

2. สลับ Listening กับ Learning

Listening ยังไม่เรียน MAC · Learning เรียน MAC แล้ว แต่ยังไม่ forward

3. สลับ Alternate กับ Backup

Alternate สำรองของ Root Port · Backup สำรองของ Designated Port

4. เปิด PortFast บนพอร์ตที่ต่อ switch

เสี่ยงเกิด loop ชั่วคราว ใช้กับ end device เท่านั้น และควรเปิด BPDU Guard คู่กัน

5. สลับ BPDU Guard กับ Root Guard

BPDU Guard: ได้ BPDU ใดก็ตาม → ปิดพอร์ต · Root Guard: ยอมรับ BPDU แต่ ไม่ยอมให้เป็น Root Port

6. คิดว่า MSTP ใช้หนึ่ง instance ต่อ VLAN

นั่นคือ PVST+ ส่วน MSTP รวมหลาย VLAN ต่อ instance

ที่มา: Spanning Tree Protocol Presentation (1).pdf หน้า 20–27 · chapter2 Switched Network.pdf หน้า 72–73