Trong môi trường layer 2(switch và bridge) thì không có giao thức định tuyến được sử dụng và đường dự phòng active cũng không được cho phép. Thay vào đó, một số dạng của bridge cung cấp sự vận chuyển data giữa hai network hay giữa switch port. Giao thức spanning tree protocol cung cấp link dự phòng nên network của swicth layer 2 có thể có thể phục hồi những sự cố mà không cần sự can thiệp một cách kịp thời. Spanning tree được định nghĩa trong tiêu chuẩn IEEE 802. 1D.
1.Bridging Loops :
Swicth layer 2 giống chức năng trong suốt (transparent) của bridge. Một bridge trong suốt phải cung cấp những tính năng sau:
Để tìm hiểu về bridging loop chúng ta xét ví dụ sau:
1.Bridging Loops :
Swicth layer 2 giống chức năng trong suốt (transparent) của bridge. Một bridge trong suốt phải cung cấp những tính năng sau:
- Bridge không có kiến thức khởi tạo của thiết bị bất kì nào vì thế nó phải “lắng nghe” khi frame đến cổng của nó và tính toán xem nó thuộc network nào. Sau đó bridge sẽ xây dựng một bảng liên quan giữa địa chỉ MAC nguồn với port của bridge nơi mà frame được tìm thấy.
- Bridge luôn luôn update khi nó phát hiện ra địa chỉ MAC mới hay có sự thay đổi địa chỉ MAC từ port này sang port khác. Nó chuyển tiếp frame bằng cách nhìn vào địa chỉ MAC đích trong bảng của bridge.
Để tìm hiểu về bridging loop chúng ta xét ví dụ sau:
Ở hình trên ta thấy đây là một phần của hệ thống mạng của chúng ta. Hai port của switch có chức năng như là bridge chuyển tiếp frame giữa hai thiết bị đầu cuối. Nhưng trong mô hình trên thì ta nhận thấy rằng chúng không có đường dự phòng nên khi đường link đến switch bị sư cố thì hệ thống sẽ không hoạt động được. Để thêm vào tính dự phòng cho hệ thống ta có thể thêm vào một switch như hình dưới đây.
Ta xét ví dụ sau: PC-1 gửi frame sang cho PC-4. Cả PC-1 và PC-4 đều biết switch A và switch B. PC-1 gửi frame vào segment A, cả switch A và B đều nhận được frame ở port 1/1 sau đó frame sẽ được chuyển tiếp qua port 2/1 cho PC-4. Lúc này PC-4 nhận được hai frame giống nhau.
Xét ở trường hợp khác, PC-1 cũng gửi frame cho PC-4 nhưng switch không biết gì về PC-1 hay PC-4. Lúc này PC-1 sẽ gửi frame đến segment A. Những sự kiện sẽ được xảy ra sau đây:
- Cả 2 switch A và B đều nhận được frame ở port 1/1. Vì MAC của PC-1 không có trong bảng của switch nên nó sẽ được ghi lại trong bảng của switch với địa chỉ MAC và port của switch tương ứng.
- Vì cả hai switch không biết PC-4 nên nó sẽ broadcast frame ra tất cả port hiện có để tìm địa chỉ đích.
- Frame được chuyển ra port 2/1. Sau đó PC-4 được đặt trong segment B nhận được hai frame dành cho nó. Tuy nhiên, switch A nghe một frame mới từ switch B và ngược lại.
- Switch A nhận thấy có một frame mới PC-1 đến PC-4, switch thấy rằng PC-1 thuộc segment A và ở port 1/1 nhưng trong frame vừa mới nhận được nó lại thuộc segment B và ở port 2/1, do đó nó sẽ học lại địa chỉ MAC của PC-1 là nó thuộc về segment B( điều này xảy ra tương tự ở switch B).
- Switch A và B nhận thấy rằng PC-4 chưa nhận được frame này nên nó sẽ broadcast ra tất cả các cổng hiện có một lần nữa để tìm PC-4.
- Và sau đó, switch A và B lại nhận được một frame mới và tiếp tục học lại địa chỉ MAC này. Quá trình này sẽ tiếp tục được lặp lại.
Quá trình chuyển frame xung quanh giữa hai switch được gọi là bridging loop. Không có gì có thể ngăn chặn quá trình chuyển tiếp frame. Việc gì sẽ xảy ra nếu PC-1 gửi broadcast, sẽ xuất hiện bão broadcast trong hệ thống và sẽ lặp lại mãi mãi cho đến khi một trong hai switch bị ngắt kết nối.
Quá trình bão broacast có thể làm cho hệ thống của bạn không thể hoạt động được. Vì thế việc ngăn chặn nó là một vấn đề quan trọng cần phải chú ý khi thiết kế hệ thống. Spanning tree protocol được vận dụng trong trường hợp này để tránh bão broadcast bằng cách nó đặt những đường link dự phòng ở chế độ standby hay block để ngăn chặn việc chuyển tiếp frame. Nếu active link bị sự cố thì nó sẽ tính toán lại và những đường link bị block ấy có thể active lại. Bây giờ, chúng ta sẽ tìm hiểu về Spanning tree protocol:
2.Spanning-Tree Communication: Bridge Protocol Data Units
Hoạt động của spanning tree protocol như việc kết nối một swicth đến một switch khác. Tin nhắn dữ liệu được trao đổi được trao đổi theo form của bridge protocol data units (BPDU). Switch gửi BPDU ra khỏi port của nó sử dụng địa chỉ MAC của nó như là địa chỉ đích và địa chỉ đích là 01-80-c2-00-00-00. Những field trong BPDU liên quan đến việc xác định bridge( hay switch) , giá trị đường đi, giá trị thời gian. Theo mặc định, BPDU được gửi ra tất cả các cổng chuyển đổi mỗi 2 giây để thông tin cấu trúc mạng hiện tại được trao đổi và các vòng lặp được xác định một cách nhanh chóng.
Có hai dạng BPDU:
- Configuration BPDU: dùng cho việc tính toán spanning tree.
- BPDU thông báo việc thay đổi cấu trúc mạng (Topology Change Notification (TCN) BPDU): thông báo khi có sự thay đổi khi có sự thay đổi cấu trúc hệ thống.
Việc trao đổi các tin nhắn BPDU hoạt động hướng tới mục tiêu bầu chọn các điểm tham chiếu (reference point) như là một nền tảng để một cấu trúc mạng spanning-tree ổn định
2.1. Bình chọn Root Bridge
Điểm tham chiếu được gọi là root bridge. Quá trình lựa chọn cho tất cả các switch đã kết nối để chọn ra root bridge. Mỗi bridge đều có một bridge ID duy nhất để xác định nó đối với những bridge khác. Bridge ID có 8 byte và chứa những field sau:
- Độ ưu tiên của bridge ( bridge priority) có 2 byte: nó có liên quan với tất cả các switch. Nó có giá trị từ 0-65535 và là bội số của 4096, mặc định là 32768.
- Địa chỉ MAC: là địa chỉ duy nhất và được mã hóa cứng (hard-coded) người dùng không thể thay đổi chúng.
Khi một Switch bắt đầu mở nguồn, nó sẽ quan tâm đến các switch khác và tự xem nó là Root bridge. Điều này sẽ thay đổi khi có thêm một switch khác tham gia vào quá trình bầu chọn Root bridge. Bắt đầu quá trình lựa Root bridge. Các con switch sẽ bắt đầu gởi gói BPDU với trường Root Bridge ID chính là Bridge ID của nó và Sender Bridge ID là Bridge ID của nó. Sender Bridge ID là một giá trị dùng để xác định xem switch nào đang gởi gói tin BPDU đó (Sau khi đã bầu chọn được Root bridge thì chỉ có Root bridge mới gói BPDU ) Tất cả các Switch đều phải chuyển tiếp gói BPDU trong toàn mạng đồng thời gắn thêm Sender Bridge ID vào gói tin BPDU. Sau khi các switch nhận BPDU , chúng sẽ bắt đầu bình chọn xem switch nào sẽ làm Root bridge. Switch nào có giá trị Root Bridge ID nhỏ nhất sẽ làm Root bridge. Tuy nhiên, trong trường của Bridge ID có 2 trường nhỏ là Priority và MAC. Nếu ban đầu, theo mặc định thì tất cả Swith có cùng 1 giá trị Priority là 32768 với switch Cisco. Khi đó, switch nào có 6 Byte MAC nhỏ hơn sẽ đảm nhiệm vai trò làm Root bridge. Các switch sẽ xét đến giá trị Priority trước tiên, sau đó nếu các giá trị Priority đều bằng nhau thì sẽ xét đến MAC. Vì MAC là duy nhất trên mỗi switch nên chắc chắn sẽ có 1 switch làm Root Bridge. Sau khi một switch được chọn làm Root Switch, các con switch còn lại sẽ tự động gắn giá trị Bridge ID của con Root Switch vào trường Root Bridge ID của nó. Tiến trình bầu chọn Root Switch là một tiến trình thay đổi liên tục do cứ sau 2 giây, gói tin BPDU lại được gởi lại.
2.2. Bình chọn root port
Sau khi đã bình chọn được Root Bridge , các switch còn lại được gọi là non Root Bridge
Mỗi non-root switch đều phải chọn ra một Port gọi là Root Port. Root Port luôn là Port có đường đi trực tiếp về Root Bridge hay nói khác hơn, Root Port là Port đấu trực tiếp vào Root Bridge. STP sử dụng giá trị Cost để chọn ra Root Port và các vai trò khác của Port trong switch. Root Path Cost được đóng gói kèm theo trong frame BPDU. Là một giá trị dài 1 Byte – tỉ lệ nghịch với băng thông của đường Link . Theo IEEE 802. 1D định nghĩa Patch Cost sẽ là một tỉ lệ thức giữa 1000 Mbps với băng thông của cổng (tính theo Mega bits mỗi giây ). Mạng ngày nay, tốc độ lên tới 1 Gbps hoặc thậm chí 10 Gbps nên sẽ có một bảng giá trị khác cho Patch Cost.
Giá trị của Root path cost được xác định như sau:
- Root bridge gửi BPDU ra ngoài với giá trị path cost là 0 vì đây chính là port của nó.
- Khi mà láng giềng gần nhất nhận được BPDU thì nó thêm vào giá trị path cost của port mà nhận gói BPDU.
- Sau đó láng giềng sẽ gửi gói BPDU ra ngoài với giá trị tích lũy như là root path cost.
- Path cost cứ tăng dần lên sau mỗi lần gói BPDU được nhận bởi port của switch láng giềng.
Chú ý sự tăng dần của root path cost ở những port mà nó nhận gói BPDU chứ không phải port mà gói BPDU đi ra.
Sau khi nhận và tăng giá trị Root Patch Cost , switch sẽ ghi lại giá trị này trong bộ nhớ của nó. Khi nó lại nhận một gói BPDU từ một port khác với giá trị khác –nếu giá trị mới nhỏ hơn giá trị đang được lưu thì nó sẽ là Root Patch Cost mới. Switch sẽ hiểu rằng BPDU nhận từ Port nào có Root Patch Cost thấp nhất thì đó sẽ là đường đi tốt nhất về Root Switch và đó là Root Port. Nếu trên mô hình mà từ một switch đi về Root Switch có hai đường với Patch Cost bằng nhau thì switch sẽ chọn Port đi về Switch có Bridge ID thấp hơn. Switch nhận biết điều này thông qua thông số Bridge Sender ID trong gói tin BPDU.
2.3. Bình Chọn Designated Port
Sau khi bình chọn Root Port – mô hình mạng vẫn có thể xảy ra loop , vì trên một phân đoạn mạng vẫn có thể hai Port của hai switch khác nhau gởi tin qua lại dẫn đến hiện tượng loop như khi chưa chạy Spanning Tree. Theo đó, trên một phân đoạn mạng, chỉ có thể một port hoạt động và đó chính là khái niệm Designated Port. Swich sẽ chọn Designated Port dựa vào giá trị Root Patch Cost đi về Root Switch. Khi một con switch nhận được BPDU từ một switch khác trên cùng một phân đoạn mạng hoặc từ một switch kết nối trực tiếp với nó có giá trị Root Patch Cost thấp hơn giá trị mà nó nhận từ gói BPDU khác thì ngay lập tức switch sẽ cho Port đấu với láng giềng là Designated cho phân đoạn mạng đó. Sau khi đã chọn được Port làm Designated Port cho 1 phân đoạn mạng, Port còn lại trong phân đoạn mạng đó sẽ là Alternative Port hay đúng hơn là Port bị Block.
Ví dụ về việc bầu chọn designated port ở hình dưới:
Catalyst A: vì là root bridge nên tất cả các port active đều là designed port vì root path cost của mỗi port đều bằng 0.
Catalyst B: vì port ½ của Catalyst B có giá trị là 19 (vì root path cost của port 1/1 của Catalyst B là 19) bằng với giá trị của segment B-C nên ta cần xét sender bridge ID thấp nhất. Và vì địa chỉ MAC của Catalyst B thấp hơn Catalyst C nên port 1/2 được chọn làm designed port
Catalyst C: port 1/2 sẽ bị block.
Một port có thể có nhiều trạng thái tùy thuộc vào hệ thống mạng. Để hiểu thêm chi tiết về các trạng thái của STP chúng ta sẽ tìm hiểu ở phần tiếp theo.
3. Trạng thái của STP :
Để tham dự vào STP,mỗi port phải trải qua những trạng thái sau:
- Disable: port bị shutdown bởi người quản trị.
- Blocking: sau khi port khởi tạo, nó sẽ bắt đầu ở trạng thái block và không thể nhận hay truyền dữ liệu hay thêm địa chỉ MAC vào trong table của nó. Nó chỉ có thể nhận được gói BPDU hay nói cách khác port trong chế độ standby để tránh bridge loop.
- Listen: port chuyển từ trạng thái block sang trạng thái listen. Lúc này port vẫn chưa được nhận và chuyển data. Tuy nhiên, nó có nhận và gửi BPDU để tham gia quá trình STP. Nếu port đó trở thành root port hay designed port thì nó có thể gửi BPDU sang những switch khác nhưng nếu nó không thành root port hay designed port thì nó trở về trạng thái block.
- Learning: sau khoảng thời gian Forward Delay trong trạng thái listen, port sẽ chuyển sang trạng thái learning. Port có thể gửi và nhận BPDU và có thể học địa chỉ MAC mới và gi nó vào trong table của mình.
- Forwarding: sau khoảng thời gian forward delay ở trạng thái learning, port có thể chuyển sang trạng thái forwarding. Ở trạng thái này, port có thể nhận và gửi data và gói BPDU, thu thập địa chỉ MAC trong bảng table của nó. Đây là trạng thái với chức năng đầy đủ của port trong STP.
Switch có thể cho port chuyển sang trạng thái forwarding nếu không phát hiện link dự phòng( hay loop) hay nếu port đó có đường đi tốt nhất đến root bridge.
4. Bộ đếm thời gian của STP
STP có ba bộ đếm thời gian để đảm bảo rằng network hội tụ trước khi bridge loop hình thành:
- Hello time: là khoảng thời gian Configuration BPDU được gửi bởi root bridge. Mặc định là 2 giây.
- Forward delay: là khoảng thời gian switch port chuyển từ trạng thái listening sang trạng thái learning.
- Max( maximum) Age: là khoảng thời gian switch lưu lại BPDP trước khi loại bỏ nó. Trong khi thực hiện STP, mỗi cổng của switch giữ một bản sao của "tốt nhất" BPDU mà nó đã nghe. Nếu các cổng của switch mất liên lạc với nguồn của BPDU, switch các giả sử rằng một sự thay đổi cấu trúc liên kết đã xảy ra sau khi Max Age thời gian trôi qua và do đó, các BPDU được loại bỏ. Mặc định Max Age là 20 giây.
5. Cấu trúc mạng thay đổi
Cấu trúc mạng thay đổi khi một port chuyển sang trạng thái forwarding hay từ trạng thái forwarding hay learning chuyển sang trạng thái block hay nói cách khác là port đó up hay down. Switch sẽ gửi TCN BPDU ra khỏi root port của nó và sau đó root bridge sẽ nhận được thông tin về cấu trúc mạng thay đổi. Switch sẽ tiếp tục gửi TCN BPDU trong khoảng thời gian hello time cho đến khi nó nhận được acknowledgments từ hàng xóm ngược tuyến. Ở hàng xóm này sau khi nhận được gói tin thì nó sẽ truyền lại cho root bridge. Sau khi root bridge nhận được gói TCN BPDU, root bridge cũng gửi acknowledgment ra ngoài và nó sẽ sửa lại cờ Topology Change trong Configuration BPDU của nó về những trạng thái của bridge trong hệ thống. Cấu trúc mạng co1 thể thay đổi theo ba cách sau:
- Thay đổi trực tiếp
- Thay đổi gián tiếp
- Thay đổi không đáng kể
5.1 Cấu trúc mạng thay đổi trực tiếp
Cấu trúc mạng thay đổi trực tiếp có thể phát hiện trên interface của switch. Ví dụ đường trunk bị sự cố thì hai interface của đường trunk đó ngay lập tức phát hiện ra sự cố.
Ví dụ về việc thay đổi cấu trúc mạng trực tiếp:
Network bị sự cố ở link nối giữa A và C
- Switch C phát hiện ra sự cố ở port 1/1 và switch A cũng phát hiện ra ở port 1/2.
- Switch C loại BPDU “tốt nhất” trước đó nhận được từ switch A và cố gắng gởi TCN BPDU từ root port nhưng không thực hiện được
- Root switch là switch A gửi Configuration BPDU với bit TCN về đường link bị sự cố ở port 1/1 cho tất cả các switch còn lại sự thay đổi cấu trúc mạng.
- Switch B và C nhận được tin nhắn TCN. Phản ứng duy nhất của nó là rút ngắn age time của bridge table và Forward delay time. Tại thời điểm này switch B và C vẫn chưa biết cấu trúc mạng thay đổi.
- Switch C đang trong trạng thái đợi để nghe từ root bridge. Khi nhận được gói Config BPDU TCN từ port 1/2, lúc này port đang ở trạng thái block chuyển thành root port.
5.2 Cấu trúc mạng thay đổi gián tiếp
Link giữa switch A và C bị sự cố gián tiếp như lọc dữ liệu hay bị sự cố ở giữa đường link nhưng status của hai switch đó vẫn ở trạng thái up.
Cả hai switch A và C đều ở trạng thái up, data được lọc ở một nơi nào đó trên link.
Không phát hiện ra sự cố nên không có tin nhắn TCN được gửi.
Không có tin nhắn BPDU nhận được từ root bridge. Sau khi thời gian Max Age hết hạn, không có tin nhắn BPDU nào được nhận, switch C phải đợi để lắng nghe từ root bridge ở tất cả các port của nó.
Sau đó Configuration BPDU từ root bridge được nghe từ port 1/2 và port 1/2 trở thành root port của switch C.
Khi đường truyền bị sự cố thì Switch không thể phát hiện ra ngay mà phải đợi một khoảng thời gian.
5.3 Cấu trúc mạng thay đổi không đáng kể
Như hình dưới đây, ta có PC ở tầng access layer kết nối với switch C qua port 2/12. Nếu link up hay down thì switch C vẫn phải thông báo cho root bridge( ví dụ như tắt hay mở PC) .
Khi PC tắt, switch phát hiện ra link ở trạng thái down.
- Switch C bắt đầu gửi BPDU TCN cho root bridge thông qua port 1/1
- Root bridge gửi lại TCN acknowledgment cho switch C với Configuration BPDU và TCN bit để báo tin cho tất cả các switch về việc cấu trúc mạng thay đổi ở một nơi nào đó trong hệ thống.
- Cờ TCN từ root bridge được nhận bởi switch B và C. Sau đó, cả switch B và C rút ngắn age time.
Thật sự thì cấu trúc mạng không có sự thay đổi vì không có sự thay đổi trạng thái của port đi đến root bridge. Trạng thái liên kết của PC chỉ ảnh hưởng đến nội dung của CAM(Content addressable memory) table là một bảng ánh xạ giữa port và MAC của PC tương ứng được cắm vào port đó. Nếu entry của CAM table bị tràn thì nó sẽ học lại.
6. Các loại STP
6.1 Common Spanning Tree
Ta đã biết IEEE 802. 1q không chỉ định nghĩa làm sao mà các VLAN có thể trunking qua các switch , nó còn chỉ ra rằng chỉ có một tiến trình STP duy nhất chạy trên toàn bộ các VLAN mà thôi. Và tiến trình duy nhất này người ta gọi tên là CST. Tất cả các CST BPDUs được vận chuyển trên đường trunk bằng native vlan với các untagged frame . Việc chạy duy nhất một tiến trình STP có lợi ở chỗ nó không tiêu tốn nhiều khả năng xử lí của CPU khi phải tính toán lại STP topology , cũng như làm cho công việc cấu hình của chúng ta trở nên đơn giản. Tuy nhiên, nó hạn chế ở chỗ sẽ không cho phép load balancing được thực hiện.
6. 2 per VLan Spanning Tree
Đây là một version độc quyền của Cisco, cho phép hoạt động linh hoạt hơn CST. Mỗi VLAN sẽ chạy một tiến trình STP riêng biệt và không bị phụ thuộc lẫn nhau .
Ưu điểm : làm giảm kích thước của STP topology , chia ra làm các topology nhỏ hơn , dẫn đến thời gian hội tụ của STP giảm xuông . Thêm vào đó , nó còn cung cấp thêm khả năng load balancing .
Khuyết điểm : sử dụng nhiều tài nguyên của CPU trong việc quản lí nhiều VLAN . PVST sử dụng ISL trunking nên đối với một mạng tồn tại 2 dạng STP là PVST và CST thì sẽ dẫn đến không tương thích về mặt trunking . ( CST xài dot1q ) . Do đó BPDU sẽ không được quảng bá giữa 2 loại STP này .
6.3 per Vlan Spanning Tree Plus
Cisco tung ra một version khác của STP là PVST+ nhằm giải quyết vấn đề tương thích giữa CST và PVST . PVST+ đảm nhiệm vai trò như là một translator giữa PVST và CST. PVST+ có thể giao tiếp với PVST qua kết nối ISL trunking , ngược lại PVST+ có thể giao tiếp với CST qua kết nối dot1q trunking . Tại biên của PVST và PVST+ sẽ diễn ra việc mapping STP one-to-one . Tại biên của PVST+ và CST sẽ diễn ra việc mapping giữa một STP của CST và một PVST trong PVST+.
7. Cấu hình Spanning Tree Protocol
a. STP root bridge
Mặc định thì STP có hiệu lực cho tất cả các active VLAN nhưng có thể vì một số lí do nào đó nó đã bị vô hiệu hóa thì chúng ta có thể bật lại STP bằng câu lệnh:
Switch(config)# spanning-tree vlan vlan-id
Vlan-id: xác định VLAN nào ở port mấy bạn muốn bật tính năng STP
Để cấu hình cho root bridge ta cần phải:
- Cấu hình một root switch
- Cấu hình root switch thứ hai đề phòng trường hợp root switch chính bị sự cố.
Đầu tiên, để cấu hình root bridge bạn phải biết tất cả các giá trị của switch có trong hệ thống và chúng ta sẽ set giá trị ưu tiên của root bridge là nhỏ nhất.
Switch(config)# spanning-tree vlan vlan-list priority bridge-priority
bridge-priority: có giá trị mặc định là 32768 nhưng chúng ta có thể gán giá trị của nó từ 0-65535
Hay ta cũng có thể dùng một lệnh để một switch có thể tự động và trực tiếp thành root bridge:
Switch(config)# spanning-tree vlan vlan-id root {primary | secondary} [diameter diameter]
Từ khóa primary làm cho switch trở thành root bridge. Câu lệnh này làm cho giá trị ưu tiên của switch nhỏ hơn giá trị ưu tiên của root bridge hiện thời.
Từ khóa second làm cho switch trở thành root bridge thứ hai và nó sẽ trở thành root bridge chính khi root bridge chính gặp sự cố.
b. Điều chỉnh root path cost
Root path cost là chi phí từ port đó đến root. Chúng ta có thể sử dụng câu lệnh sau để cấu hình root path cost:
Switch (config-if)# spanning-tree [vlan vlan-id] cost cost
Giá trị của costcó thể từ 1-65535 hay dựa vào giá trị của bandwidth ở bảng dưới đây:
c. Điều chỉnh port ID
Giá trị của port ID là giá trị mà switch sử dụng gồm 16 bit: 8 bit về độ ưu tiên, 8 bit là port number. Giá trị ưu tiên của port từ 0-255 và mặc định là 128. Chúng ta có thể cấu hình độ ưu tiên bằng lệnh:
Switch(config-if)# spanning-tree [vlan vlan-list] port-priority port-priority
d. Điều chỉnh sự hội tụ của spanning tree
Tinh chỉnh STP timer
Cấu hình STP timer bằng tay bằng những câu lệnh sau:
Switch(config)# spanning-tree [vlan vlan-id] hello-time seconds
Switch(config)# spanning-tree [vlan vlan-id] forward-time seconds
Switch(config)# spanning-tree [vlan vlan-id] max-age seconds
Mặc định hello-time là 2 giây nhưng chúng ta có thể điều chỉnh từ 1-10.
Forward-time là thời gian port chuyển từ trạng thái listening sang trạng thái learning và forwarding. Theo mặc định là 15 giây nhưng chúng ta có thể điều chỉnh thời gian này từ 4-30 giây.
Max-age mặc định là 20 giây nhưng chúng ta có thể điều chỉnh thời gian này từ 6-40 giây.
Cấu hình STP timer tự động:
Switch(config)# spanning-tree vlan vlan-list root {primary | secondary} [diameter diameter [hello-time hello-time]]
Ở đây, ta có thể tùy chỉnh hello-time nếu không thì mặc định là 2 giây.
e. Redundant Link Convergence
Khi hệ thống gặp sự cố ở một link nào đó gây ra sự thay đổi trong hệ thống mạng thì yêu cầu cấp bách nhất là thời gian hội tụ của hệ thống phải nhanh để đảm bảo tính sẵn sàng cao. Có một số phương pháp làm cho STP hội tụ nhanh hơn nếu đường truyền xảy ra sự cố:
- Portfast: khả năng kết nối nhanh hơn được thiết lập ở access-layer cho các máy trạm.
- Uplinkfast: cho phép uplinh nhanh từ access-layer lên distribution-layer.
- Backbonefast: cho phép hội tụ nhanh ở hệ thống backbone hay switch core-layer sau khi cấu trúc spanning tree thay đổi.
Portfast
Mặc định thì tính năng Portfast không được sử dụng cho tất cả các port nhưng chúng ta có thể bật nó và cho nó làm mặc định bằng câu lệnh sau:
Switch(config)# spanning-tree portfast default
Chúng ta có thể tắt nó khi không cần:
Switch(config-if)# [no] spanning-tree portfast
Uplinkfast
Uplinkfast làm việc bằng cách theo dõi tất cả các đường dẫn tồn tại đi đến root bridge. Vì thế câu lệnh này sẽ không được sử dụng ở root bridge. Đây là một tính năng giúp cho các Switch trong spanning-tree đáp ứng được nhanh hơn nếu đường uplink đi lên phía root bridge bị down.
Ví dụ từ hình vẽ, xét Switch E
Nếu Rootport của SWE bị down (uplink bị down), thì phải mất 50s sau (Max-age + 2xForward Delay) cổng bên trái ở trạng thái blocking mới chuyển sang trạng thái forwarding để các PC bên phải có thể tiếp tục giao tiếp ở trên mạng.
Nếu SWE được kích hoạt tính năng uplink-fast, khi xảy ra hiện tượng uplink bị down thì cổng bên trái sẽ chuyển sang trạng thái forwarding trong khoảng thời gian rất ngắn, khoảng 3s. Rõ ràng là hiệu quả hơn nhiều.
Một số lưu ý đối với uplinkfast:
- Không thể cấu hình tính năng này trên root bridge, chỉ cấu hình được trên switch có cổng blocking.
- Trong mô hình 3 lớp, chỉ nên cấu hình tính năng này trên switch access, không làm cho lớp distribution và lớp core.
- Khi SW mở cổng blocking thì priority sẽ bị đẩy cao lên 49152 để tránh không bị làm root bridge, cost của đường này cũng sẽ bị tăng lên một giá trị đặc biệt là 3000. Có thể nói SWE lúc này chỉ cung cấp được truy cập cho các PC chứ không có ưu thế gì khi bầu cử spanning-tree so với các switch khác.
Để cho phép tính năng Uplinkfast ta có thể sử dụng câu lệnh sau:
Switch(config)# spanning-tree uplinkfast [max-update-rate pkts-per-second]
Tham số max-update-rate là tần suất (tốc độ) chỉ định những multicast frames được phát ra theo đơn vị packet trong mỗi giây. Giá trị mặc định là 150 nhưng giá trị này có thể thay đổi từ 0 đến 65535.
BackBonefast
Chuyện gì xảy ra khi một Bridge root gặp sự cố. Nó phải mật một thời gian để nhận ra, mất thêm một thời gian nữa để tìm bridge root mới, và để hội tụ lại đường đi mới. Backbonefast được sử dụng để các switch nhanh chóng nhận ra ngay đường thay thế, trong khi chờ đợi hội tụ mới.
Thông thường, một switch phải chờ đợi cho các bộ đếm thời gian Max Age hết hạn trước khi đáp ứng các BPDUs ở dưới. Tuy nhiên, BackboneFast bắt đầu để xác định xem những đường dẫn thay thế khác đến root bridge theo các loại port sau nhận được BPDU ở bên dưới:
- Nếu gói tin BPDU ở bên dưới đến từ port đang ở trạng thái block, switch bao gồm root port và những block port khác sẽ thành đường dẫn thay thế đến root bridge.
- Nếu gói tin BPDU ở dưới đến từ root port của nó thì switch chứa tất cả các port ở trạng thái block trở thành đường dẫn thay thế đến root bridge.
- Nếu gói tin BPDU ở dưới đến từ root port mà không có port nào bị block thì switch nhận ra rằng nó mất kết nối với root bridge và nó trở thành root bridge và Backbonefast cho phép điều này trước khi bộ dếm thời gian Max Age hết hạn.
- Nếu switch local có port bị block thì backbonefast sẽ dùng Root Link Query(RLQ) để tìm những switch ở trên có kết nối ổn định với root bridge.
Đầu tiên, RLQ request sẽ được phát ra. Nếu switch đó là root bridge hay switch mất kết nối đế root bridge thì nó sẽ gửi lại RLQ Reply, còn nếu không phải thì switch đó sẽ tiếp tục chuyển đi cho đến khi nào gặp RLQ Reply. Ở switch local, nếu RLQ Reply được nhận ở root port thì đường đi đó ổn định, nếu nó được nhận ở một port không phải là root port thì cần phải chọn một đường đi khác thay thế và bộ đếm thời gian Max Age ngay lập tức hết hạn và root port mới có thể được tìm thấy.
Để cấu hình Backbonefast ta dùng lệnh sau:
Switch(config)# spanning-tree backbonefast
f. Bảo vệ chống BPDU không mong đợi
Để bảo trì hiệu suất của cấu trúc mạng, vị trí của root bridge phải được đoán trước. Chuyện gì sẽ xảy ra nếu có một switch ở bên ngoài hay giả mạo có khả năng làm root bridge? Cisco thêm vào hai tính năng STP giúp ngăn chặn những điều bất ngờ đó: Root Guard and BPDU Guard.
Root Guard
Tính năng Root guard ra đời cho phép admin luôn giữ được vị trí Root switch theo ý đã chọn mà không sợ bị bất kì một switch lạ nào gắn thêm vào làm thay đổi STP topology. Với tính năng này, nếu có một switch lạ quảng bá một Superior BPDU cho root switch, Rootswitch sẽ không cho phép switch lạ này trở thành New Root Switch. Nó sẽ đưa cổng nhận superior BPDU trước đó trở về trạng thái Root-inconsistent. Data sẽ không được gửi nhận ở trạng thái này. Khi superior BPDUs không còn nhận được trên cổng này, cổng này sẽ trải qua các trạng thái của STP để đưa về sử dụng bình thường.
Ta chỉ cấu hình root guard trên Root switch hoặc các switch nào mà ta không muốn nhận BPDUs của một switch lạ, không cấu hình rootguard trên swich có tính năng uplinkfast. Vì khi cấu hình RootGuard trên switch này sẽ làm cho các alternated port rơi vào trạng thái Root-inconsistent. Điều này làm cho các alternated port không thể chuyển sang trạng thái forwarding. Cấu hình Rootguard trên interface nào muốn bảo vệ bằng câu lệnh:
Switch(config-if)# spanning-tree guard root
Nếu áp đặt tính năng RootGuard lên cổng thì cho dù Switch mới có Bridge ID ưu tiên hơn (về trị số sẽ là thấp hơn) thì vẫn không ảnh hưởng gì đến mạng. Tính năng này rất mạnh, nó cấm hoàn toàn Switch lạ vào mạng không thực hiện được telnet, ping …Khi kiểm tra láng giềng trên Switch mới này, bạn sẽ không thấy được Switch trong mạng.
Switch(config-if)#spanning-tree guard root
Root Guard và BPDU Guard là hai phương pháp nhằm ngăn chặn gói BPDU lạ đi vào mạng. Nói rõ hơn khi có Switch lạ cắm vào mạng thì Switch này không thể trao đổi với các Switch khác trong mạng nếu như có bật tính năng này lên. Các tính năng này chỉ có tác dụng trên cổng, có nghĩa là bạn phải cấu hình trên từng cổng. Nếu bạn cấu hình trên cổng f0/1 mà lại đi cắm Switch lạ vào cổng f0/2 thì Switch mới này vẫn có thể trao đổi thông tin với mạng một cách bình thường.
BPDU Guard
Vấn đề lớn cần quan tâm là khi có switch lạ nối vào mạng của ta, switch lạ này sẽ truyền gói BPDU của nó vào mạng. Các switch sẽ đồng bộ với nhau về sơ đồ mạng thông qua các gói tin BPDU. BPDU được truyền đến cổng của các Switch khác trong mạng, làm thay đổi quan điểm của những Switch này về mạng mà nó đang hoạt động và điều này có thể dẫn đến vòng lặp có thể xảy ra. Khi BPDU bị mất, cổng cũng thay đổi trạng thái của nó làm ảnh hưởng đến mô hình mạng ban đầu. Cả hai trường hợp vừa nêu ra ở trên đều có thể gây ra trạng thái lặp vòng và điều làm chúng ta lo lắng đó là mô hình cũ của mạng bị thay đổi.
Tính năng BPDU Guard cũng tương tự như RootGuard. Tính năng BPDUGuard được khuyến cáo sử dụng ở cổng có tính năng portfast. Tính năng portfast cho phép cổng của switch có thể vào trạng thái Forwarding ngay lập tức khi link kết nối với cổng đó up lên. Tính năng portfast được sử dụng khi kết nối với PC tại access-layer. Portfast được bật lên chỉ khi ta chắc chắn rằng trên cổng đó không thể xảy ra lặp vòng. Ta bật portfast lên không có nghĩa là đã tắt STP trên cổng đó. Nếu có một switch mới bị cắm nhầm vào cổng có tính năng portfast thì loop có thể xảy ra vì portfast cho phép chuyển cổng sang trạng thái forwarding ngay lập tức. Trong khi đó để phát hiện ra vòng lặp thì phải trải qua một khoảng thời gian và các trạng thái khác nhau thì cổng mới đưa vào sử dụng bình thường được. BPDUGuard sẽ cấm không cho switch lạ trao đổi BPDU với mạng. Khi switch nhận được BPDU trên portfast với tính năng BPDUGuard thì cổng sẽ bị đưa vào trạng thái disable. Muốn sử dụng lại cổng này thì phải cho phép cổng một cách thủ công hoặc đợi khoảng thời gian errdisable hết hạn.
Tóm lại, BPDU guard thường được dùng kết hợp với portfast. Nếu có một BPDU xuất hiện trên những cổng có bật BPDU guard thì cổng của switch sẽ rớt vào trạng thái disable.
Theo mặc định thì BPDU Guard bị vô hiệu ở tất cả các port. Nếu muốn bật nó thì ta sử dụng câu lệnh sau:
Switch(config)# spanning-tree portfast bpduguard default
Chúng ta có thể tắt tính năng này bằng câu lệnh:
Switch(config-if)# [no] spanning-tree bpduguard enable
g. Bảo vệ chống mất mát BPDU đột ngột
Gói tin BPDU được sử dụng như thăm dò để tìm hiểu về một cấu trúc liên kết mạng. Điều gì xảy ra nếu một switch không nhận được BPDUs một cách kịp thời hoặc khi nó không nhận được? Vòng lặp có thể sẽ xảy ra. Cisco đã bổ sung thêm hai tính năng giúp STP phát hiện và ngăn chặn sự mất mát bất ngờ của BPDU: Loop Guard và UDLD (Unidirectional Link Detection ).
Loop Guard
Một port trong trạng thái blocking vẫn nhận được BPDU. Điều gì sẽ xảy ra nếu bất ngờ dòng các BPDU đó bị mất đi, switch không còn nhận được BPDU trên port blocking đó nữa. Switch sẽ nghĩ rằng, không cần thiết phải blocking port đó nữa do có thể switch láng giềng của switch đã block port đấu nối vào nó. Do đó, switch quyết định chuyển port sang trạng thái forwarding, và thế là vòng lặp được hình thành hình thành. Cisco sẽ đưa ra tính năng Loop Guard để ngăn chặn tình trạng này. Switch sẽ theo dõi hoạt động của BPDU. Khi dòng chảy BPDU bị mất đi, switch sẽ không đưa port blocking kia về trạng thái forwarding mà nó đưa vào trạng thái loop-inconsistent. Điều này nhằm giúp tránh loop. Thông thường, tính năng này có thể cấu hình trên tất cả các switchport. Tính năng này sẽ theo dõi hoạt động của BPDU trên các port và giữ port trong trạng thái non-designated (root-port, blocking port).
Bạn có thể cấu hình Loop Guard bằng dòng lệnh:
Switch(config)# spanning-tree loopguard default
UDLD
Trong switch thường được kết nối hai chiều, nơi mà traffic có thể chạy theo hai hướng. Điều gì sẽ xảy ra nếu một bên của liên kết nhận được frame như: hỏng hóc chuyển mạch trong công cụ chuyển đổi interface gigabit( GBIC) thì lúc đó chỉ có một bên nhận được frame nhưng lúc ấy cả hai switch vẫn thấy chức năng liên kết hai chiều. Điều này được biết đến như liên kết một chiều.Dòng tín hiệu nhận được một cách chập chờn.
Một hệ quả của vấn đề nêu trên là thiết bị switch ở đầu bên kia không nhận được các dạng frame cần thiết, ví dụ như BPDU chằng hạn, switch đầu bên kia sẽ nghĩ rằng, nó cần thiết phải chuyển port đó ( không nhận được BPDU) sang trạng thái forwarding.
Lúc này, hiện tượng bridging loop có thể xảy ra do thuật toán Spanning tree đã quyết định sai trạng thái của port của switch (lẽ ra vẫn nên tiếp tục blocking nhưng switch lại quyết định chuyển sang forwarding).
Hiện tượng Unidirectional link này gây ra nhiều hệ quả khác nhau không có lợi cho môi trường LAN, bao gồm cả việc gây ảnh hưởng đến khả năng chống loop trong giao thức spanning-tree.
Khi hiện tượng Unidirectional Link được phát hiện, tính năng UDLD sẽ shutdown các cổng của switch bị ảnh hưởng, và phát ra cảnh báo cho các người dùng biết được tình trạng hiện tại của interface này.
UDLD là giao thức hoạt động tại lớp 2 nhưng lại làm việc và giúp phát hiện những vấn đề ở lớp physical với các thiết bị lớp một để có thể xác định trạng thái kết nối vật lý của một kết nối nào đó.
Tin nhắn của UDLD gửi đều đặn khi link còn active. Chúng ta có thể cấu hình khoảng thời gian của tin nhắc UDLD ( default là 15 giây). Thời gian để UDLD phát hiện ra link một chiều phải thấp hơn thời gian Max Age bằng gấp đôi thời gian Forward Delay( 50 giây).
UDLD có hai mode hoạt động:
- Chế độ hoạt động bình thường (Normal Mode): khi phát hiện ra liên kết một chiều thì UDLD vẫn tiếp tục cho port đó hoạt động nhưng sẽ đánh dấu port đó ở trạng thái chưa xác định và phát sinh tin nhắn syslog.
- Aggressive mode: khi phát hiện ra liên kết một chiều thì switch sẽ thiết lập lại đường link. Tin nhắn UDLD sẽ được gửi lần thứ 2 trong 8 giây. Nếu không có những tin nhắn được lặp lại, cổng được đặt trong tình trạng Errdisable để nó không thể được sử dụng
Chúng ta có thể cấu hình UDLD cho switch:
Switch(config)# udld {enable | aggressive | message time seconds}
Chúng ta có thể vô hiệu hóa hay bật tính năng này trên từng port của switch:
Switch(config-if)# udld {enable | aggressive | disable}
UDLD là một giao thức hoạt động ở Layer 2-Data Link trong mô hình OSI, cho phép những thiết bị kết nối trực tiếp thông qua cáp fiber-optic hoặc twisted-pair Ethernet có thể giám sát được phần cấu hình vật lý của những loại cáp đó và xác định được vấn đề về liên kết một hướng đang tồn tại. Tất cả các thiết bị kết nối trực tiếp sẽ phải có khả năng hỗ trợ giao thức UDLD để có thể nhận biết được và disable những liên kết một hướng duy nhất. Khi UDLD xác định được có một liên kết một hướng đang tồn tại, thì giao thức đó sẽ disable port đó đi và đưa ra một thông điệp cảnh báo cho quản trị mạng. Những liên kết một hướng có thể là nguyên nhân của một vài vấn đề, trong đó bao gồm cả việc loop sẽ xảy ra.
UDLD có khả năng hỗ trợ hai chế độ hoạt động: normal (chế độ này là mặc định) và aggressive. Trong chế độ hoạt động bình thường, UDLD có thể xác định được những liên kết một hướng nhờ đó nó sẽ disable những port đó trên những kết nối fiber-optic. Trong chế độ aggressive, UDLD cũng có thể xác định được những liên kết một hướng nhờ đó có thể nhận biết được các lưu lượng đang truyền theo một hướng trên những kết nối fiber-optic và twisted-pair và nó sẽ disable những port trên những kết nối fiber-optic.
Trong chế độ normal và chế độ aggressive, UDLD sẽ làm việc với những kỹ thuật của Layer 1 để học những trạng thái vật lý của một liên kết. Tại layer 1, quá trình tự động thương lượng sẽ xảy ra để có thể lấy được những tín hiệu vật lý và xác định được lỗi xảy ra. UDLD sẽ thi hành những nhiệm vụ mà quá trình tự động thương lượng không thể làm được như: xác định các ID của các thiết bị hàng xóm (neighbors) và trạng thái shut down của các port kết nối. Khi bạn enable cả hai phương pháp: autonegotiation và UDLD, thì quá trình xác định của Layer 1 và Layer 2 sẽ đều làm việc để ngăn cản những kết nối một hướng ở physical và logical.
Một liên kết một hướng có thể được tìm thấy bất cứ khi nào các lưu lượng được gửi bởi một thiết bị cục bộ và được nhận bởi các thiết bị hàng xóm của nó nhưng những lưu lượng đó lại không được nhận lại khi từ các thiết bị hàng xóm gửi lại.
Trong chế độ normal, UDLD có khả năng xác định một liên kết một hướng khi quá trình truyền dữ liệu trên cáp quang trong một port fiber-optic bị lỗi và những kỹ thuật của Layer 1 không thể xác định được lỗi này xảy ra. Nếu những port kết nối trực tiếp đang hoạt động tốt nhưng những lưu lượng lại truyền theo một hướng, thì UDLD không thể xác định được liên kết một hướng bởi vì các kỹ thuật của layer 1, không được hỗ trợ để xác định những điều kiện như vậy. Trong trường hợp này, liên kết logical cũng sẽ không thể xác định được, và UDLD sẽ bị disable trên port đó.
Khi UDLD hoạt động ở chế độ normal, nếu một quá trình truyền dữ liệu trên cáp quang bị hủy và autonegotiation được enable, thì liên kết sẽ không thể hoạt động bởi vì những kỹ thuật của layer 1 không có khả năng xác định được những vấn đề xảy ra với liên kết này. Trong trường hợp này, UDLD sẽ không được hoạt động, và liên kết logical cũng sẽ không được xác định.
Trong chế độ aggressive, quá trình xác định liên kết một hướng bằng cách sử dụng những phương thức xác định cũ. UDLD hoạt động ở chế độ aggressive cũng có thể xác định một liên kết một hướng trên kết nối point-to-point. Và UDLD cũng có thể xác định được những liên kết một hướng khi một trong các vấn đề sau xảy ra:
- Trên những liên kết fiber-optic hoặc twisted-pair, một port nào đó không thể gửi hoặc nhận dữ liệu.
- Trên những liên kết fiber-optic hoặc twisted-pair, một port nào đó bị down trong khi những port khác đang hoạt động bình thường (up).
- Quá trình truyền dữ liệu trên cáp quang bị lỗi.
Trong những trường hợp đó, UDLD sẽ bị disable trên những port đó.
Sử dụng bộ lọc BPDU để vô hiệu hóa STP trên một port
Theo mặc định thì STP chạy trên tất cả các port để ngăn chặn vòng lặp. Nhưng có nhiều trường hợp cần vô hiệu hóa quá trình gửi hay xử lý trên một số port. Chúng ta có thể sử dụng câu lệnh sau để vô hiệu hóa nó :
Switch(config)# spanning-tree portfast bpdufilter default
Từ khóa default cho phép bật tính năng lọc BPDU một cách tự động trên tất cả các port có PortFast được bật. Nếu tính năng PortFast bị vô hiệu hóa ở port đó thì tính năng lọc BPDU cũng không được cho phép.
Ta có thể cho phép hay vô hiệu hóa bộ lọc BPDU bằng câu lệnh sau :
Switch(config-if)# spanning-tree bpdufilter {enable | disable}
Đăng nhận xét