STP dùng các thông điệp giữa các switch để giúp ổn định hệ thống mạng về một sơ đồ không bị vòng lặp. Để làm được như cậy, STP sẽ đưa vài cổng của switch về trạng thái bị khóa (blocking), cổng sẽ không truyền hay nhận dữ liệu. Các cổng còn lại sẽ ở trạng thái chuyển tiếp dữ liệu (forwarding). Tất cả các loại cổng này sẽ giúp hình thành một sơ đồ mạng không bị lặp vòng.
Các bước diễn tiến của hoạt động của giao thức STP:
Bầu chọn switch làm gốc của cây STP (root switch – root bridge)
Thông thường, bridgeID được hình thành gồm giá trị độ ưu tiên (priority - 2 byte)và địa chỉ MAC của switch. Chỉ một switch có thể là gốc của một cây STP. Để tìm ra Switch gốc, các switch phải bầu chọn. Từng switch sẽ bắt đầu hoạt động STP của nó bằng cách tạo và gửi các gói STP BPDU, trong đó thông báo chính nó là gốc của cây STP. Nếu một switch nghe một BPDU tốt hơn (tức là BPDU có bridgeID nhỏ hơn), switch đó sẽ không khai báo nó là gốc của cây STP nữa. Thay vào đó, switch sẽ bắt đầu gửi ra các BPDU nhận được từ switch ứng cử viên tốt hơn. Cuối cùng, tất cả các switch ngoại trừ switch có bridgeID tốt nhất sẽ ngừng gửi BPDU. Switch chiến thắng trong quá trình bầu cử trở thành switch gốc của cây STP.
Giá trị bridgeID nguyên thủy của 802.1D có hai trường:
Việc bầu chọn Bridge gốc dựa vào hai yếu tố theo thứ tự sau:
Switch(config)#spanning-tree vlan vlan-id priority bridge-priority
Thông số độ ưu tiên khoảng từ 0 đến 65535 và giá trị mặc định là 32768. Ta cũng có thể lựa chọn switch làm gốc của cây STP trực tiếp bằng lệnh:
Switch(config)#spanning-tree vlan vlan-id root {primary | secondary} [diameter diameter]
Hình 1. Định dạng của bridgeID
Định dạng của BPDU bị thay đổi là do việc phát minh ra các phiên bản PVST+ và MST. Với kiểu bridgeID cũ, một bridgeID của một switch cho mỗi phiên bản spanning tree là giống nhau nếu switch dùng một MAC. Nếu dùng nhiều spanningtree, việc mỗi switch chỉ có một bridgeID có thể gây ra nhầm lẫn. Vì vậy Cisco dùng một địa chỉ MAC khác nhau cho từng VLAN khi tạo ra bridgeID. Điều này dẫn đến các giá trị bridgeID khác nhau mỗi VLAN, nhưng cũng sẽ làm tốn nhiều địa chỉ MAC trong từng switch. Trường SystemID mở rộng cho một mạng dùng nhiều phiên bản spanningtree, mà không cần dùng các địa chỉ MAC riêng biệt cho từng switch. Trường này cho phép các VLAN-ID được đặt trong 12 bit cuối cùng của trường độ ưu tiên. Một switch có thể dùng một địa chỉ MAC để xây dựng nên bridgeID và với chỉ số VLAN trong trường SystemID, switch này vẫn có một bridgeID duy nhất trong từng VLAN. Việc sử dụng trường systemID mở rộng còn được gọi là cơ chế giảm địa chỉ MAC (MAC address reduction).
Xác định root port
Sau khi Switch gốc đã được bầu chọn, các switch còn lại cần phải xác định cổng gốc (root port). Tiến trình bầu chọn được mô tả như sau:
Switch gốc tạo ra các gói hello BPDU và gửi mỗi hai giây. Từng switch khi nhận gói hello sẽ tiếp tục chuyển các gói hello. Switch có cập nhật một số trường trong hello như chi phí (cost), bridgeID, độ ưu tiên của cổng và số thứ tự cổng của switch gửi. Switch không gửi hello BPDU ra những cổng đã trong trạng thái bị khóa. Trong tất cả các cổng của switch nhận gói tin hello, các cổng có chi phí thấp nhất về Switch gốc sẽ là cổng gốc (root port). Một switch phải kiểm tra giá trị chi phí trong mỗi BPDU, thêm vào giá trị chi phí của cổng để xác định đường đi ngắn nhất về Switch gốc. Switch sẽ cộng thêm vào giá trị chi phí được chỉ ra trong BPDU với giá trị chi phí của switchport mà nó nhận gói BPDU. Chi phí đường đi (Path cost) được xem như là chi phí của kết nối, tỉ lệ với băng thông của liên kết. Thông số này có thể được cấu hình bằng dòng lệnh.
Switch(config-if)#spanning-tree vlan vlan-id cost cost
Hình 2. Quá trình bầu chọn cổng gốc
Trong hình trên, sw1 là switch gốc và ban đầu gửi ra các gói hello có chi phí=0. switch sẽ nhận được hai gói hello. Một gói có chi phí bằng 0 và một gói có chi phí bằng 38. Tuy nhiên, SW3 sẽ tính toán chi phí của nó để đi về switch gốc. Chi phí này được tính bằng cách cộng chi phí trên cổng của nó vào các giá trị trên. Kết quả là, mặc dù sw3 có kết nối trực tiếp vê SW1, chi phí tổng cộng đi ra cổng F0/4 thấp hơn chi phí đi ra cổng F0/1. Vì vậy SW3 sẽ chọn F0/4 là đường đi về switch gốc. Cần lưu ý là giá trị chi phis STP thường được kết hợp với các giao diện (interface). Thực tế có vài khuyến cáo dùng cùng giá trị chi phí STP trên từng kết nối điểm-điểm của các phân đoạn Ethernet. Giá trị mặc định của một số cổng Ethernet:
Tốc độ Ethernet |
Giá trị cost kiểu cũ |
Giá trị cost mới |
10Mbps |
100 |
100 |
100Mbps |
10 |
19 |
1Gbps |
1 |
4 |
10Gbps |
1 |
2 |
Khi một switch nhận được nhiều BPDU có tổng chi phí bằng nhau, switch sẽ dùng tiêu chí sau để so sánh:
Trong danh sách này, nếu điều kiện 1 không thỏa mãn, switch này phải có nhiều kết nối đến cùng switch láng giềng. Hai điều kiện sau chỉ giúp thiết bị nên chọn kết nối nào để dùng.
Xác định cổng designated
Một mạng STP hội tụ sẽ dẫn đến chỉ một switch đẩy traffic vào và ra trên phân đoạn mạng đó. Switch đẩy traffic vào/ra một phân đoạn mạng được gọi là designated switch. Cổng dùng để chuyển frame ra khỏi phân đoạn mạng đó được gọi là designated port (DP). Để được bầu chọn quyền làm DP, một switch phải gửi gói tin Hello với giá trị chi phí thấp nhất vào phân đoạn mạng.
Hội tụ về sơ đồ mạng mới
STP sẽ tiếp tục giám sát tiến trình gửi các BPDU ngay cả khi cấu trúc mạng đã ổn đinh. Khi có sự thay đổi, STP cần phải phản ứng và hội tụ về một sơ đồ mạng mới. Khi mạng đã ổn định, các tiến trình sau xảy ra:
Một vài bước sẽ xảy ra:
SW3 nhận được BPDU từ SW4 nhưng BPDU này kém hơn (không ưu tiên) so với BPDU mà SW3 nhận được từ SW1. Vì vậy, SW3 trở thành DP trên phân đoạn mạng giữa nó và SW4 và bắt đầu gửi ra BPDU trên cổng đó. Trước đây, SW1 đã thắng quá trình bầu cử, như vậy các gói BPDU từ SW1 và SW2 sẽ tiếp tục cạnh tranh với nhau và SW1 sẽ thắng một lần nữa. Phần còn lại của tiến trình sẽ dẫn đến cổng F0/4 của SW3 là DP, cổng F0/3 của SW4 là RP, SW4 F0/2 là DP và SW f0/4 là RP.
Các thông báo thay đổi mô hình STP (TCN) và việc cập nhật bảng CAM
Khi STP tái hội tu, một vài hàng trong bảng CAM có thể không còn hợp lệ. Ví dụ, trong ví dụ trên, SW3 có trong bảng MAC của nó một hàng là 0200.1111.1111 là địa chỉ của Router1 MAC chỉ ra cổng F0/4 của nó. Khi kết nối giữa SW1 và SW2 bị lỗi, SW3 cần phải cập nhật bảng CAM của nó để chỉ ra 0200.1111.1111 chỉ ra cổng F0/1. Để cập nhật bảng CAM, có hai việc cần diễn ra: Tất cả các switch cần phải được lưu ý để xóa các hàng trong bảng CAM. Từng switch phải sử dụng khoảng thời gian timeout ngắn, tương đương forward delay 15 giây để xóa bảng CAM.
Bởi vì một vài switch có thể không trực tiếp nhận thấy sự thay đổi trong sơ đồ mạng, bất kỳ switch nào khi phát hiện một sự thay đổi đều có trách nhiêm lưu ý cho các switch còn lại. Lúc này, một switch sẽ lưu ý switch gốc thông qua các TCN BPDU. TCN sẽ được gửi ngược về switch gốc. Sau đó, switch gốc sẽ lưu ý tất cả các switch còn lại. Quá trình hoạt động như sau:
Khi một switch nhận ra một sự thay đổi trạng thái, switch sẽ gửi ra TCN BPDU ra khỏi cổng gốc. Switch sẽ lặp lại thông điệp này cho đến khi nào nó nhận được ACK. Switch kế tiếp nhận được TCN BPDU sẽ gửi ngược lại ACK thông qua hello BPDU bằng cách đánh dấu bit TCA trong hello BPDU. Switch Designated trên một phân đoạn mạng sẽ tiếp tục gửi ra các TCN BPDU trên các cổng gốc của nó và chờ hồi đáp (ACK) từ DP trên phân đoạn mạng đó.
Bằng cách lặp lại các bước 1 và 2, cuối cùng switch gốc cũng sẽ nhận được TCN BPDU. Khi nhận được, switch gốc sẽ thiết lập bit TCA trong hello BPDU của nó và gửi ra tất cả các switch khác, lưu ý các switch khác là đã có một sự thay đổi xảy ra. Một switch nhận một hello BPDU với bit TCA được thiết lập sẽ làm ngắn khoảng thời gian xóa các dòng không còn hợp lệ trong bảng CAM.
Chuyển đổi từ trạng thái khóa sang chuyển tiếp
Khi STP chuyển sang một dạng hội tụ mới, một vài cổng đang trong trạng thái khóa có thể được gán vai trò là DP hoặc RP. Vì vậy, các cổng này cần phải được chuyển sang trạng thái chuyển tiếp. Tuy nhiên, việc chuyển trạng thái từ khóa sang trạng thái chuyển tiếp không thể được thực hiện mà không có nguy cơ gây ra vòng lặp. Để chuyển một cổng sang trạng thái chuyển tiếp, đầu tiên switch sẽ đặt cổng này vào trạng thái lắng nghe, sau đó sang trạng thái học địa chỉ MAC. Mỗi trạng thái sẽ tồn tại trong khoảng thời gian gọi là thời gian trì hoãn chuyển tiếp (forward delay timer) 15 giây.
Trạng thái |
Có chuyển frame dữ liệu |
Học địa chỉ MAC nguồn trên frame nhận được |
Trạng thái tạm thời hay ổn định? |
Khóa (blocking) |
No |
No |
Ổn định |
Lắng nghe (listening) |
No |
No |
Tạm thời |
Học địa chỉ MAC (learning) |
No |
Yes |
Tạm thời |
Chuyển tiếp (forwarding) |
Yes |
Yes |
Ổn định |
Tắt (disable) |
No |
No |
Ổn định |
Tóm lại, khi STP nhận ra một sự thay đổi trong sơ đồ mạng, nó sẽ hội tụ có thể bằng cách chọn ra một số cổng khác làm RP, DP…Bất kỳ một switch nào thay đổi các RP hoặc DP sẽ gửi ra các TCN BPDU về switch gốc. Đối với các cổng được gán như RP hoặc DP, 802.1D sẽ dùng các trạng thái lắng nghe và học địa chỉ MAC trước khi có thể chuyển sang trạng thái chuyển tiếp. Trong khi quá trình từ trạng thái chuyển tiếp sang trạng thái khóa có thể thực hiện tức thời.