Bài 30b: Thực hành STP & Rapid PVST+ — Chọn Root Bridge, PortFast và BPDU Guard
Sơ đồ lab Bài 30b · ⬇️ Tải sơ đồ (SVG) · 🔍 Mở cỡ lớn
💡 Liên hệ thực tế
Công ty ABC muốn mạng có dự phòng: nối thêm một sợi cáp trực tiếp giữa SW2 và SW3, để lỡ dây lên SW1 bị đứt thì vẫn còn đường đi. Ba switch nối thành tam giác tức là có vòng lặp Layer 2 — STP sẽ tự chặn một cổng để mạng không bị bão broadcast.
Vấn đề là nếu để mặc định, switch có địa chỉ MAC nhỏ nhất (thường là switch cũ nhất) sẽ được bầu làm root — rất có thể là một switch truy cập yếu ớt ở góc phòng. Anh Nam (VNExperts) không bao giờ để chuyện đó xảy ra: anh luôn chỉ định root bằng tay. Và vì từng có nhân viên mang switch mini từ nhà lên cắm vào ổ mạng, anh bật thêm BPDU Guard trên mọi cổng nối máy tính.
Quy tắc ghi nhớ: đừng để STP tự bầu root — hãy chọn root cho từng VLAN bằng priority, và bật PortFast + BPDU Guard trên mọi cổng nối máy tính.
🎯 Mục tiêu bài lab
- Quan sát kết quả bầu root bridge mặc định và hiểu vì sao không nên để mặc định.
- Chuyển sang Rapid PVST+ và chọn root primary/secondary cho từng VLAN.
- Đọc
show spanning-treeđể xác định cổng Root, Designated, Alternate. - Cấu hình PortFast, BPDU Guard và phục hồi cổng bị err-disabled.
- Quan sát RSTP hội tụ nhanh khi một đường uplink bị đứt.
📋 Bảng VLAN, địa chỉ IP và đấu nối
| Thiết bị | Cổng switch | VLAN | Địa chỉ IP / Prefix |
|---|---|---|---|
| PC1 | SW2 Fa0/1 | 10 (KinhDoanh) | 192.168.10.11/24 |
| PC3 | SW2 Fa0/2 | 30 (KyThuat) | 192.168.30.11/24 |
| PC2 | SW3 Fa0/1 | 10 (KinhDoanh) | 192.168.10.12/24 |
| PC4 | SW3 Fa0/2 | 30 (KyThuat) | 192.168.30.12/24 |
| Từ | Cổng | Đến | Cổng | Ghi chú |
|---|---|---|---|---|
| SW1 | Gi0/1 | SW2 | Gi0/1 | Trunk, Copper Cross-Over |
| SW1 | Gi0/2 | SW3 | Gi0/1 | Trunk, Copper Cross-Over |
| SW2 | Gi0/2 | SW3 | Gi0/2 | Trunk, Copper Cross-Over — đường dự phòng tạo vòng lặp |
| SW-LAB | Fa0/1 | SW2 | Fa0/24 | Chỉ nối ở Bước 7 |
🗺️ Kế hoạch root bridge (đây là thiết kế bạn sẽ áp dụng):
| VLAN | Root primary | Root secondary |
|---|---|---|
| 10, 20 | SW1 | SW2 |
| 30 | SW2 | SW1 |
⚙️ Các bước thực hiện
⚙️ Bước 1 — Dựng sơ đồ
Kéo ra 3 switch 2960-24TT và 4 PC, nối cáp theo bảng (chưa nối SW-LAB). Đặt IP tĩnh cho 4 PC.
⚙️ Bước 2 — Dán cấu hình nền
Phần VLAN và trunk bạn đã luyện ở Bài 24b, nên bài này cho sẵn để tập trung vào STP. Trên mỗi switch, vào enable → configure terminal rồi dán:
SW1
hostname SW1
vlan 10
name KinhDoanh
vlan 20
name KeToan
vlan 30
name KyThuat
interface range gigabitEthernet 0/1 - 2
switchport mode trunk
end
SW2 (SW3 dán y hệt, chỉ đổi hostname SW3)
hostname SW2
vlan 10
name KinhDoanh
vlan 20
name KeToan
vlan 30
name KyThuat
interface range gigabitEthernet 0/1 - 2
switchport mode trunk
interface fastEthernet 0/1
switchport mode access
switchport access vlan 10
interface fastEthernet 0/2
switchport mode access
switchport access vlan 30
end
🔍 Bước 3 — Quan sát STP mặc định (chưa can thiệp)
Trên cả 3 switch, chạy:
SW1# show spanning-tree vlan 10
Ghi lại vào bảng nháp: switch nào là root (dòng This bridge is the root), mỗi switch có root port là cổng nào, cổng nào đang Altn BLK.
📎 Mặc định switch 2960 chạy PVST+ (dòng Spanning tree enabled protocol ieee). Cả 3 switch có cùng priority 32768, nên root được quyết định bởi MAC nhỏ nhất — tức là "ngẫu nhiên" theo thiết bị. File Packet Tracer của bạn và của bạn bè có thể ra root khác nhau.
⚙️ Bước 4 — Chuyển sang Rapid PVST+ (cả 3 switch)
SW1(config)# spanning-tree mode rapid-pvst
Kiểm tra: show spanning-tree vlan 10 phải hiện Spanning tree enabled protocol rstp.
⚙️ Bước 5 — Chỉ định root bridge theo từng VLAN
Trên SW1:
SW1(config)# spanning-tree vlan 10,20 root primary
SW1(config)# spanning-tree vlan 30 root secondary
Trên SW2:
SW2(config)# spanning-tree vlan 30 root primary
SW2(config)# spanning-tree vlan 10,20 root secondary
SW3 giữ nguyên mặc định.
📎root primaryđặt priority về 24576 (hoặc thấp hơn root hiện tại 4096 nếu cần).root secondaryđặt 28672. Bạn cũng có thể đặt trực tiếp, ví dụspanning-tree vlan 10 priority 4096— giá trị phải là bội số của 4096.
Bây giờ chạy lại show spanning-tree vlan 10 và show spanning-tree vlan 30 trên cả 3 switch. Tự dự đoán trước cổng nào sẽ bị chặn ở mỗi VLAN, rồi đối chiếu với phần Kiểm tra kết quả.
⚙️ Bước 6 — PortFast và BPDU Guard trên cổng truy cập (SW2, SW3)
SW2(config)# interface range fastEthernet 0/1 - 24
SW2(config-if-range)# switchport mode access
SW2(config-if-range)# spanning-tree portfast
SW2(config-if-range)# spanning-tree bpduguard enable
SW2(config-if-range)# exit
Làm tương tự trên SW3. IOS sẽ in một cảnh báo dài rằng PortFast chỉ nên bật trên cổng nối một máy trạm — đó là bình thường.
🎯 Cách viết gọn ngoài thực tế:spanning-tree portfast default(bật PortFast cho mọi cổng access) vàspanning-tree portfast bpduguard default(bật BPDU Guard cho mọi cổng đang chạy PortFast) — gõ ở chế độ global, không cần vào từng cổng.
⚙️ Bước 7 — Thử "cắm switch lạ" để kích hoạt BPDU Guard
- Kéo thêm 1 switch 2960, đổi tên SW-LAB.
- Nối SW-LAB Fa0/1 ↔ SW2 Fa0/24 bằng Copper Cross-Over.
- Quan sát console SW2:
%SPANTREE-2-BLOCK_BPDUGUARD: Received BPDU on port FastEthernet0/24 with BPDU Guard enabled. Disabling port.
%PM-4-ERR_DISABLE: bpduguard error detected on Fa0/24, putting Fa0/24 in err-disable state
Kiểm tra trạng thái cổng:
SW2# show interfaces fastEthernet 0/24
FastEthernet0/24 is down, line protocol is down (err-disabled)
Phục hồi cổng: xoá dây nối SW-LAB, rồi:
SW2(config)# interface fastEthernet 0/24
SW2(config-if)# shutdown
SW2(config-if)# no shutdown
⚠️ Nếu chưa gỡ switch lạ mà đãno shutdown, cổng sẽ lại bị err-disable ngay lập tức. Trên thiết bị thật có thể bật tự phục hồi bằngerrdisable recovery cause bpduguard(Packet Tracer có thể không hỗ trợ lệnh này).
⚙️ Bước 8 — Quan sát RSTP hội tụ khi đứt link
- Từ PC1, ping liên tục tới PC2:
ping -t 192.168.10.12. Với VLAN 10, gói đang đi PC1 → SW2 → SW1 → SW3 → PC2. - Trên SW1, cắt đường xuống SW3 bằng các lệnh bên dưới.
SW1(config)# interface gigabitEthernet 0/2
SW1(config-if)# shutdown
- Quan sát cửa sổ ping: chỉ mất rất ít gói. Trên SW3,
show spanning-tree vlan 10→ Gi0/2 đã chuyển từ Altn BLK thành Root FWD, cost lên 8. - Trả lại:
no shutdowntrên SW1 Gi0/2, dừng ping bằng Ctrl+C.
📎 Với STP 802.1D cổ điển, cổng bị chặn phải đi qua Listening → Learning, mất khoảng 30–50 giây. RSTP có sẵn cổng Alternate làm "phương án B", nên chuyển sang Forwarding gần như tức thì.
💾 Bước 9 — Lưu cấu hình
SW1# copy running-config startup-config
🔍 Kiểm tra kết quả
Kết quả mong đợi: cổng Alternate (BLK) khác nhau theo từng VLAN · ⬇️ Tải sơ đồ (SVG) · 🔍 Mở cỡ lớn
| VLAN | Root | SW1 Gi0/1 | SW1 Gi0/2 | SW2 Gi0/1 | SW2 Gi0/2 | SW3 Gi0/1 | SW3 Gi0/2 |
|---|---|---|---|---|---|---|---|
| 10, 20 | SW1 | Desg | Desg | Root | Desg | Root | Altn BLK |
| 30 | SW2 | Root | Desg | Desg | Desg | Altn BLK | Root |
Vì sao lại ra như vậy? (VLAN 10)
- SW1 có priority thấp nhất (24576) → root. Trên root, mọi cổng đều Designated.
- SW3 có 2 đường về root: đi thẳng Gi0/1 (cost 4) hoặc vòng qua SW2 (cost 4 + 4 = 8) → root port = Gi0/1. SW2 tương tự → root port = Gi0/1.
- Đoạn SW2–SW3: cả hai đều cách root cost 4 → hoà. So Bridge ID: SW2 (28682) nhỏ hơn SW3 (32778) → SW2 Gi0/2 là Designated, SW3 Gi0/2 là Alternate (bị chặn).
VLAN 30 lý luận tương tự nhưng root là SW2, nên cổng bị chặn chuyển sang SW3 Gi0/1. Kết quả: cả hai đường lên của SW3 đều được dùng — đường này cho VLAN 10/20, đường kia cho VLAN 30. Đây là ý nghĩa thực tế của "Per-VLAN" trong PVST+.
🔍 Output mẫu trên SW3 (sau Bước 6)
SW3# show spanning-tree vlan 10
VLAN0010
Spanning tree enabled protocol rstp
Root ID Priority 24586
Address 0002.4A1B.1111
Cost 4
Port 25(GigabitEthernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Bridge ID Priority 32778 (priority 32768 sys-id-ext 10)
Address 0060.5C3D.3333
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 300 sec
Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Desg FWD 19 128.1 P2p Edge
Gi0/1 Root FWD 4 128.25 P2p
Gi0/2 Altn BLK 4 128.26 P2p
📎 Địa chỉ MAC trong file của bạn sẽ khác. Chú ý: priority hiển thị 24586 = 24576 + 10 (số VLAN, gọi là sys-id-ext). Chữ Edge ở cổng Fa0/1 xác nhận PortFast đã có hiệu lực.
| # | Kiểm tra | Kết quả mong đợi |
|---|---|---|
| 1 | show spanning-tree vlan 10 trên SW1 |
Có dòng This bridge is the root |
| 2 | show spanning-tree vlan 30 trên SW2 |
Có dòng This bridge is the root |
| 3 | Cổng bị chặn trên SW3 | VLAN 10: Gi0/2 · VLAN 30: Gi0/1 |
| 4 | Cổng nối PC | Loại P2p Edge, lên xanh ngay khi cắm |
| 5 | Cắm SW-LAB vào SW2 Fa0/24 | Fa0/24 err-disabled |
| 6 | PC1 ↔ PC2, PC3 ↔ PC4 | ✅ Ping thành công, kể cả khi tắt SW1 Gi0/2 |
🛠️ Lỗi thường gặp & cách xử lý
| Triệu chứng | Nguyên nhân thường gặp | Cách kiểm tra & sửa |
|---|---|---|
| Root không phải switch mong muốn | Gõ nhầm số VLAN, hoặc gõ lệnh trên nhầm switch | show spanning-tree vlan X trên từng switch, đối chiếu kế hoạch root |
Lệnh spanning-tree vlan 10 priority 1000 bị báo lỗi |
Priority phải là bội số của 4096 | Dùng 0, 4096, 8192 … 61440 |
| Cắm PC mất khoảng 30 giây mới có mạng | Cổng chưa bật PortFast | Kiểm tra cột Type có chữ Edge chưa |
| Cổng vẫn down sau khi đã gỡ switch lạ | Cổng đang err-disabled, không tự lên | shutdown rồi no shutdown |
show spanning-tree vlan 30 báo instance không tồn tại |
Switch chưa tạo VLAN 30 | show vlan brief → tạo VLAN 30 |
| Cả 3 switch không có cổng nào bị chặn | Link SW2–SW3 chưa lên hoặc không phải trunk | show interfaces trunk trên SW2, SW3 |
🏆 Thử thách mở rộng
- Root Guard: bảo vệ để SW3 không bao giờ cướp được vai trò root. Bật Root Guard trên các cổng của SW1 và SW2 hướng về SW3, sau đó thử đặt
spanning-tree vlan 10 priority 0trên SW3 và quan sát. - Đổi cost: trên SW3 gõ
interface gigabitEthernet 0/1→spanning-tree vlan 10 cost 10. Dự đoán trước: với VLAN 10, root port của SW3 sẽ là cổng nào, cổng nào bị chặn? Rồi kiểm chứng.
Cổng chuyển sang trạng thái root-inconsistent (bị chặn) và tự phục hồi khi SW3 ngừng quảng bá BPDU tốt hơn. Đừng bật Root Guard trên SW1 Gi0/1: ở VLAN 30, SW2 là root hợp lệ nên SW1 Gi0/1 phải nhận BPDU tốt hơn từ SW2. Thử thách 2: đường qua SW2 có cost 4 + 4 = 8 < 10, nên root port của SW3 chuyển sang Gi0/2, còn Gi0/1 trở thành Alternate (bị chặn).👉 Gợi ý đáp án
! Thử thách 1 — cổng hướng về SW3 là SW1 Gi0/2 và SW2 Gi0/2
SW1(config)# interface gigabitEthernet 0/2
SW1(config-if)# spanning-tree guard root
SW2(config)# interface gigabitEthernet 0/2
SW2(config-if)# spanning-tree guard root
! Khi SW3 gửi BPDU "tốt hơn", console báo dạng:
%SPANTREE-2-ROOTGUARD_BLOCK: Root guard blocking port GigabitEthernet0/2 on VLAN0010.
💬 Hỏi & Đáp nhanh
❓ PVST+ và Rapid PVST+ khác nhau gì trong bài lab này?
✅ Cả hai đều chạy một tiến trình STP riêng cho mỗi VLAN. Rapid PVST+ dùng cơ chế proposal/agreement và có sẵn cổng Alternate, nên khi đường chính đứt, cổng dự phòng lên Forwarding gần như ngay lập tức thay vì chờ 30–50 giây.
❓ Vì sao priority hiển thị là 24586 chứ không phải 24576?
✅ Bridge Priority = priority cấu hình + số VLAN (sys-id-ext). Với VLAN 10: 24576 + 10 = 24586.
❓ BPDU Guard khác Root Guard thế nào?
✅ BPDU Guard: nhận bất kỳ BPDU nào là err-disable cổng — dùng cho cổng nối máy tính. Root Guard: chỉ chặn khi nhận BPDU "tốt hơn" muốn giành vai trò root, cổng tự phục hồi khi hết — dùng cho cổng nối xuống switch cấp dưới.
📝 Bài tập đánh giá
Câu 1: Một switch để priority mặc định 32768. Trong show spanning-tree vlan 30, Bridge Priority hiển thị là bao nhiêu?
- A. 32768
- B. 32798
- C. 32769
- D. 30
Câu 2: Cổng Fa0/5 đã bật PortFast và BPDU Guard. Một người dùng cắm switch nhỏ vào cổng này. Trạng thái của Fa0/5 là gì?
- A. Blocking
- B. Alternate
- C. err-disabled
- D. Forwarding nhưng gửi cảnh báo
👉 Đáp án
- Câu 1: B — 32768 + 30 = 32798.
- Câu 2: C — BPDU Guard tắt cổng ngay khi nhận BPDU; quản trị viên phải gỡ thiết bị lạ và bật lại cổng.
💡 Output trong bài là output mẫu trên Packet Tracer, trên máy bạn có thể khác một chút (ví dụ địa chỉ MAC).
📚 Bài thực hành thuộc Khóa học CCNA Online của VNExperts.
🧭 Điều hướng
| ⬅️ Bài trước | 🏠 Mục lục khóa học | Bài kế tiếp ➡️ |
|---|---|---|
| Bài 30: RSTP & các biến thể STP (PVST+, Rapid PVST+) | Mục lục khóa học CCNA | Bài 31: EtherChannel — gộp nhiều link vật lý thành 1 logic |