Phần này xin giới thiệu qua về giao thức STP; những điểm yếu của giao thức : thiếu sự chứng thực của bản tin BPDU và thời gian hội tụ quá lâu gây ra đồng thời nêu ra cách phòng chống.
1.Giới thiệu chung:
STP là giao thức dùng để chống loop các bản tin ở lớp 2. Trường hợp xảy ra loop là do trong mạng có các kết nối dư thừa dẫn đến việc gói tin bị chuyển đi lòng vòng. Ví dụ:
Hình 3.1: Hiện tượng lặp gói tin trong mạng.
giả sử giữa hai switch A và B tồn tại hai đường nối qua các giao diện Eo và E1. Khi SWA nhận được bản tin broadcast và gửi ra Eo; gói tin này sẽ đi sang SWB; khi SWB nhận được bản tin này, nó sẽ gửi ra tất cả các giao diện của nó trừ giao diện E0 mà nó nhận được. Khi đó, gói tin broadcast sẽ sang E1 của SWA và SWA lại gửi ra E0…Cứ tiếp tục như vậy và kết quả là gói tin sẽ chạy lòng vòng trong mạng.
Ý tưởng chung của giao thức STP là xây dựng mạng thành một đồ thị hình cây, trong đó các nút trên cây chính là các switch và một nút gốc có nhiệm vụ trao đổi thông tin giữa các nút trên cây. Chính nhờ đồ thị hình cây không có chu trình này mà giữa hai switch chỉ tồn tại một đường đi duy nhất.
Để có được điều đó, cần phải loại bỏ bớt đi một số liên kết trao đổi dữ liệu giữa các switch. Tuy nhiên không thể loại bỏ đi các kết nối vật lí bởi vì còn phải duy trì các liên kết dư thừa. Thay vào đó, STP sẽ loại bỏ các liên kết một cách logic bằng cách đặt một số cổng của switch trong trạng thái có thể vừa gửi và nhận dữ liệu (trạng thái forwarding) và một số cổng của switch trong trạng thái không được gửi và nhận dữ liệu (trạng thái blocking).
Ví dụ về một mạng có sử dụng giao thức STP: topology của mạng trước khi chạy STP:
Hình 3.2: Cây STP
Ta có thể thấy, sau khi chạy thuật toán STP; các switch đã bầu ra được gốc cây STP là switch A và giữa các switch chỉ tồn tại một đường đi duy nhất (Ví dụ đường đi từ switch E đến switch D).
2.Cách thức hoạt động của STP:
Quá trình từ khi các switch được bật lên (tất cả các cổng đều ở trong trạng thái blocking) cho đến khi tất cả các switch đều ở trong trạng thái hội tụ (các cổng của chúng hoặc là đang ở trong trạng thái blocking hoặc ở trong trạng thái forwarding) diễn ra khá phức tạp. Bước khởi đầu của quá trình hội tụ đó bao gồm:
Bầu ra switch đóng vai trò làm gốc: được gọi là root bridge.
Tìm các root port trên các switch còn lại; root port là giao diện trên một switch mà trên đó nó nhận được quảng cáo đến gốc có chi phí ít nhất.
Gán designated port: xác định xem trong các cổng còn lại của các switch không phải là root bridge xem chúng phải ở trong trạng thái forwarding hay blocking.
Bước tiếp theo; các switch sẽ trao đổi với nhau nội dung bảng CAM của chúng và bước cuối cùng, căn cứ vào quá trình bình bầu ở trên mà các cổng của switch hoặc sẽ ở trong trạng thái blocking hoặc sẽ ở trong trạng thái forwarding.
Thuật toán STP được thực hiện khi các switch trao đổi thông tin STP với các switch khác. Việc trao đổi này dựa vào hai loại bản tin BPDU(bridge protocol data unit) : bản tin BPDU cấu hình (configuration BPDU) và bản tin thông báo sự thay đổi cấu hình TCN BPDU (topology change notification BPDU).
Cấu trúc chung của hai loại bản tin được mô tả như sau:
Trong đó có các trường cần chú ý là :
Bridge ID của switch gốc (Root bridge ID): bridge ID là một chỉ số ưu tiên mà mỗi switch được gán nhằm phục vụ cho quá trình bình bầu. Bridge ID gồm 8 byte với hai thành phần: priority (2 byte) và địa chỉ MAC của switch (6 byte).
Root path cost: chi phí tối thiểu từ switch có thể đến được gốc. Chi phí này có giá trị nằm trong khoảng từ 0 đến 65535 và lúc đầu tiên khi gửi bản tin này đi thì cost=0.
Sender bridge ID: đây là bridge ID của chính switch gửi đi gói tin BPDU
2.1.Bầu chọn root bridge:
Đầu tiên, khi các switch được bật lên, chúng sẽ không biết đâu là gốc nên sẽ tự quảng cáo mình là gốc bằng cách gửi đi các bản tin BPDU cấu hình. Bản tin BPDU này được gửi đến địa chỉ multicast của STP là 01-80-C2-00-00-00. Khi bắt đầu gửi đi bản tin BPDU thì root bridge ID chính là bridge ID của switch đó do nó coi chính nó là gốc và root path cost =0.
Khi một switch nhận được gói tin BPDU từ một switch khác, nó sẽ tiến hành so sánh:
Nếu root bridge ID của nó bé hơn thì nó sẽ huỷ gói tin BPDU của switch kia đi và tiếp tục quảng cáo về root mà nó biết.
Nếu root bridge ID của nó lớn hơn, nó sẽ cập nhật lại về root bridge. Khi đó root bridge ID sẽ là root bridge ID của switch kia và nó tiếp tục gửi đi bản tin BPDU mới được cập nhật.
Nếu hai switch có cùng priority thì địa chỉ MAC sẽ được dùng để so sánh và do đó sẽ không có trường hợp hai switch có bridge ID bằng nhau.
Sau một khoảng thời gian nhất định tất cả các switch sẽ có cùng một root bridge ID và switch nào có bridge ID trùng với root bridge ID sẽ làm root bridge. Khi đó tất cả các cổng trên root bridge sẽ đặt vào trạng thái forwarding bởi vì nó có nhiệm vụ trung chuyển thông tin giữa các switch. Ví dụ:
Hình 3.3: Bầu chọn Root Bridge
Trong ví dụ trên thì tuy cả 3 switch đều có cùng priority nhưng địa chỉ MAC của Switch A bé hơn nên Switch A sẽ làm root bridge.
2.2.Bầu chọn root port:
Sau khi đã bầu xong root bridge; các switch sẽ chọn ra cổng có chi phí đến root bridge là nhỏ nhất để làm root port và cổng này cũng sẽ được đặt vào trạng thái forwarding. Chi phí này được tính như sau: khi một switch nhận được một gói tin BPDU từ một switch khác; giá trị của root path cost sẽ được tăng thêm một trọng số tương ứng với tốc độ của cổng mà nó nhận được bản tin đó. Trọng số tương ứng với tốc độ được cho bởi bảng:
Hình 3.4: Bảng giá trị STP
Sau khi đã tăng root path cost lên, switch sẽ ghi nhớ giá trị này vào bộ nhớ của nó và khi nó nhận được một bản tin BPDU từ một port khác có root path cost nhỏ hơn thì ngay lập tức giá trị mới này sẽ được lưu lại và cổng mà switch nhận được bản tin BPDU có root path cost nhỏ nhất sẽ trở thành root port.
Ví dụ:
Hình 3.5: Bầu chọn Root Port
Trong ví dụ trên, switch C nhận được hai bản quảng cáo BPDU trên hai cổng 1/1 và 1/2 nhưng root path cost của gói tin nhận được từ cổng 1 chỉ là 19; nhỏ hơn root path cost nhận được từ cổng 2. Do đó switch C sẽ đặt cổng 1/1 là root port. Tất cả các cổng là root port trên switch cũng được đặt vào trạng thái forwarding.
2.3.Gán designated port:
Sau hai quá trình trên, ta đã hình thành được gốc cây STP và các nhánh cây tương ứng đến mỗi switch, tuy nhiên giữa các switch vẫn còn tồn tại các đường nối dư thừa và vẫn có thể dẫn đến loop. Do đó để loại bỏ tình trạng dư thừa này thì cần phải loại bỏ việc truyền nhận các frame dữ liệu thông thường trên các kết nối này. Việc đó có thể được thực hiện bằng cách đặt một cổng của một switch vào trạng thái gửi dữ liệu (trạng thái forwarding) và các cổng còn lại của các switch khác có chung một đoạn mạng LAN segment (các switch có chung các thiết bị truyền dẫn là thiết bị lớp 1) với switch đó vào trạng thái không nhận dữ liệu (trạng thái blocking).
Cổng được lựa chọn để phát ra dữ liệu được gọi là Designated Port (DP) và các switch sẽ lựa chọn ra DP dựa vào root path cost Trong một LAN segment, nếu switch nào có root path cost nhỏ nhất, cổng của nó sẽ được làm designated port. Nếu hai switch có cùng root path cost, chỉ số dùng để so sánh sẽ là brigdeID của 2 switch; switch nào có bridgeID bé hơn thì cổng của nó sẽ là DP.
Tóm lại, các điều kiện được xét đến trong quá trình lựa chọn DP lần lượt là:
Switch gửi đi bản tin có root bridgeID thấp nhất.
Switch có root path cost bé nhất.
Switch có sender brigdeID bé nhất.
Switch có sender portID bé nhất.
Ví dụ:
Hình 3.6: Gán Designated Port
Trong ví dụ trên, ở đoạn mạng 1: các switch đều có chung một root bridge nên root bridgeID là bằng nhau. Tuy nhiên cổng 1/1 của root bridge sẽ là DP bởi vì nó gửi đi bản tin BPDU có root path cost bằng 0 nhỏ hơn root path cost trong bản tin BPDU được gửi đi từ cổng 1/1 của switch B. Tương tự với cổng 1/2 của root bridge trong đoạn mạng 2.
Vấn đề là cần phải chọn ra DP cho đoạn mạng 3. So sánh các thông số được gửi từ bản tin BPDU trên hai cổng 1/2 của switch B và C : các bản tin này có cùng root bridge ID; có cùng root path cost là 19. Tuy nhiên, sender bridgeID của bản tin BPDU được gửi từ B lại nhỏ hơn sender bridgeID của C. Do đó cổng 1/2 của Switch B sẽ là Designated Port. Tất cả các cổng DP trên switch đều đặt vào trạng thái forwarding; các cổng còn lại không phải là root port được đặt vào trạng thái blocking.
Kết quả của quá trình hội tụ:
Hình 3.7: Trạng thái hội tụ của mạng
2.4.Phản ứng với thay đổi của mạng:
Sau một khoảng thời gian trao đổi thông tin STP và bình bầu, cuối cùng tất cả các switch trong mạng có chạy STP sẽ ở vào trạng thái hội tụ. Tuy nhiên, điều đó không có nghĩa là thuật toán STP sẽ ngừng hoạt động. Nếu xảy ra bất kì một sự thay đổi kết nối vật lí nào trong mạng; tất cả các switch sẽ phải chạy lại thuật toán STP để xây dựng một cây STP mới.
Việc phát hiện ra có sự thay đổi có được nhờ Root bridge sẽ liên tục gửi bản tin BPDU cấu hình đi theo chu kì mặc định 2s. Các switch khác sẽ lắng nghe bản tin này để biết rằng đường kết nối giữa nó với root bridge vẫn hoạt động tốt. Nếu sau một khoảng thời gian gọi là Maxage (mặc định là 20s) nếu switch không nhận được bản tin BPDU từ root port của nó, switch coi như đã có sự thay đổi cấu hình mạng. Khi đó, switch sẽ gửi đi bản tin BPDU quảng cáo mình là root bridge và quá trình hội tụ lại diễn ra.
Ví dụ:
Hình 3.8: Thay đổi topology mạng.
Giả sử đường kết nối vật lí giữa SW1 và SW3 bị hỏng. Sau một khoảng thời gian maxage; SW3 sẽ không nhận được bản tin BPDU từ root port của nó; SW3 hoặc sẽ tự quảng cáo nó chính là root bridge hoặc tin rằng sẽ có một switch khác sẽ làm root bridge. Bởi vì SW3 vẫn nhận được bản tin hello BPDU từ SW2 qua cổng 0/27 nên nó biết rằng SW1 vẫn là root bridge. Khi đó SW3 tiến hành:
Đưa cổng 0/27 trở thành root port bởi vì nó nhận được BPDU với chi phí bé hơn.
Đưa cổng 0/26 vào trạng thái blocking.
Thông báo lại địa chỉ MAC của hai giao diện cho các switch khác biết bởi vì đã có sự thay đổi: thay vì gửi tin đến cổng 0/26 thì phải gửi tin đến cổng 0/27.
Trên thực tế thì cổng 0/27 sẽ không chuyển ngay sang trạng thái forwarding mà còn trải qua hai trạng thái trung gian; mỗi trạng thái trung gian này sẽ kéo dài trong khoảng thời gian forward delay bởi vì nếu nó chuyển ngay sang trạng thái forwarding thì có thể có một số switch khác chưa ở trạng thái hội tụ hoặc liên kết vật lí đó chưa bị hỏng hoàn toàn và có thể dẫn đến loop.
Trạng thái trung gian listening: diễn ra trong khoảng thời gian forward delay (mặc định là 15 s). Đây là khoảng thời gian các switch thực hiện quá trình bình bầu root bridge; root port và designated port [2]. Ở trạng thái này, switch chỉ được phép gửi và nhận bản tin BPDU mà không được gửi, nhận frame dữ liệu. Trong ví dụ trên, SW 3 sẽ thực hiện:
Gửi đi bản tin BPDU quảng cáo nó là root do nhận được bản tin BPDU từ SW 2 có root bridge ID tốt hơn nên sẽ coi SW 1 là root bridge và coi cổng 0/27 của nó là root port.
Gửi đi bản tin TCN qua root port để thông báo cho các switch khác biết đã có sự thay đổi cấu hình trong mạng [13]. Bản tin TCN này đến root bridge sẽ được root bridge gửi lại bản tin phúc đáp TCA và switch chỉ ngừng gửi đi bản tin TCN sau khi đã nhận được bản tin TCA từ root.
Hình 3.9: Quá trình gửi bản tin TCN
Đồng thời root bridge cũng gửi đi bản tin BPDU cấu hình tới các switch còn lại với cờ TC =1 để thông báo cho các switch khác biết đã có sự thay đổi trong mạng.
Hình 3.10: Quá trình gửi bản tin BPDU có TC =1
Khi các switch khác nhận được bản tin này, sẽ giảm thời gian tồn tại của ánh xạ bảng CAM xuống còn 15s thay vì 300s như mặc định. Trong ví dụ trên, SW 2 sẽ xoá đi ánh xạ về máy của Bob trong bảng CAM của nó bởi vì để có thể đến được máy của Bob thì không phải đi qua cổng 0/26 như trước.
Trạng thái trung gian learning: diễn ra trong khoảng thời gian forward delay. Trong trạng thái này, cổng vẫn có thể gửi nhận BPDU, tuy nhiên switch có thêm khả năng nhận frame (để học các địa chỉ MAC mới) nhưng không được gửi frame đi. Ví dụ nếu SW 3 nhận được một frame từ Archie; nó sẽ lưu địa chỉ nguồn của Archie và cổng nhận được 0/27 vào bảng CAM đồng thời sẽ huỷ gói tin nhận được mà không forward đi.
Sau hai trạng thái trung gian trên; cổng 0/27 của SW 3 sẽ được đặt vào trạng thái forwarding và mạng ở trong trạng thái hội tụ.



LinkBack URL
About LinkBacks














Trả lời với trích dẫn
