- vừa được xem lúc

Giao thức Spanning Tree (STP - Spanning Tree Protocol)

0 0 17

Người đăng: Lại Đức Kiên

Theo Viblo Asia

1. Giới thiệu

Loop layer 2 là gì!? Nguyên nhân dẫn đến loop layer 2?

• Trong hệ thống mạng, ngoài việc thiết kế và cấu hình để hệ thống có thể chạy được thì người quản trị còn phải tìm cách để hệ thống vận hành một cách hiệu quả. Đặc biệt là khả năng tự khôi phục kết nối internet sau khi xảy ra sự cố. Trong hệ thống mạng việc đấu nối nhiều dây giữa các thiết bị lớp 2 nhằm tăng khả năng dự phòng khi có thiết bị hỏng đã không còn xa lạ, tuy nhiên việc này vô tình gây ra vòng lặp vô tận trên thiết bị lớp 2 hay còn được gọi là loop layer 2.Vậy loop layer 2 là gì!? Sau đây sẽ 2 ví dụ minh họa về loop layer 2!

• Hai nguyên nhân chính gây ra sự lặp vòng tai hại trong mạng chuyển mạch là do broadcast và sự sai lệch của bảng MAC.

TH1. Vòng lặp broadcast.

Hình 1: không có STP, broadcast tạo loop

Nguồn ảnh: http://www.howtonetwork.org/wp-content/uploads/2013/10/17.png

• Giả sử rằng không có Switch nào trong mô hình này sử dụng giao thức STP( Spanning Tree Protocol)

• B1. Host A gửi 1 frame bằng địa chỉ broad-cast (FF-FF-FF-FF-FFFF).

• B2. Frame đến cả SW1 và SW2 qua cổng Fa0/1

• B3. SW1 chuyển gói frame qua cổng Fa0/2

• B4. Gói tin sẽ được gửi dưới dạng broad-cast ra tất cả các cổng còn lại trên đường dây Ethernet trừ cổng nhận tin.

• B5. Gói tin sẽ đến cổng Fa0/2 của SW2, SW2 tiếp tục đẩy gói tin ra cổng Fa0/1

• B6. Một lần nữa gói tin sẽ được đẩy đến cổng Fa0/1 của SW1 lần thứ 2. Như vậy đã có sự xuất hiện của vòng lặp ở đây. Các dòng switch hiện tại có tốc độ xử lý rất nhanh do đó các gói tin lặp sẽ được nhân bản lên rất nhiều lần và đến 1 thời điểm switch sẽ bị tràn thậm chí là treo luôn cả con switch.

+) Lưu ý: Gói tin từ Host A cũng đến cổng Fa0/1 của SW2, do đó SW2 cũng đẩy gói tin broad-cast qua cổng Fa0/2 đến cổng Fa0/2 của SW1. Do đó loop-layer 2 sẽ xảy ra ở cả hai hướng!

TH2. Sự sai lệch của bảng MAC.

• Không chỉ có các gói tin broad-cast có thể truyền mãi trong hệ thống mạng, mà một gói tin unicast cũng có thể gây loop trong hệ thống mạng của chúng ta.

Hình 2: Unicast cũng có thể gây loop và sai lệch bảng MAC

• Giả sử rằng không có Switch nào trong mô hình này sử dụng giao thức STP( Spanning Tree Protocol)

B1. Host A muốn gửi 1 gói tin dạng unicast đến Host B, tuy nhiên Host B đã rời khỏi hệ thống mạng và trong bảng MAC không có địa chỉ MAC của Host B.

B2. Gói tin sẽ đến được cổng Fa0/1 của cả 2 SW.

B3. Do trong MAC của SW1 không có địa chỉ MAC của host B( do host B đã down) nên gói tin sẽ được tràn ra tất cả các cổng trừ cổng nhận gói tin và đến được cổng Fa0/2 của SW2

B4. • Vấn đề bắt đầu nảy sinh, SW2 không học được địa chỉ MAC của Host B nên nó tiếp tục tràn gói tin ra tất cả các cổng trừ cổng nhận gói tin. Một lần nữa gói tin lại đến cổng Fa0/1 của SW1 và bắt đầu xuất hiện loop-layer 2

• Lúc này SW2 sẽ thay đổi địa chỉ MAC của Host A trong MAC-table của SW1 dẫn đến sai cổng.

MAC PORT
AA-AA-AA-AA-AA-AA 1
AA-AA-AA-AA-AA-AA 2

Lưu ý: Lúc này địa chỉ MAC của Host A sẽ bị lẫn lộn giữa cổng Fa0/1 và Fa0/2 dẫn đến không chỉ hệ thống mạng bị treo mà con sai Mac-table. Do vậy không chỉ bão broadcast mới làm treo hệ thống mạng mà các gói tin unicast cũng có thể gây tràn mạng.

2. Giao thức Spanning Tree (STP - Spanning Tree Protocol)

• Loop-layer2 có thể gây hư hại rất lớn đến hệ thống mạng, spanning tree protocol (STP) ra đời để giải quyết vấn đề đó. Giao thức Spanning Tree hoạt động trên mạng chuyển mạch lớp 2 nhằm hỗ trợ các kết nối giữa các thiết bị dự phòng không xảy ra các tình trạng lỗi không đáng có, hay nói một cách dễ hiểu thì giao thức Spanning Tree giúp ngăn chặn các vòng lặp gói tin trong mạng. STP là giao thức mặc địch của các thiết bị switch.

• Trước khi tìm hiểu về giao thức spanning tree, chúng ta sẽ tìm hiểu về các định nghĩa cơ bản của STP.

Gói tin BPDU là gì?

• STP là giao thức mặc định có sẵn trên các thiết bị switch. Khi switch bắt đầu khởi động, chúng sẽ liên tục gửi các gói tin BPDU cho nhau, gói tin BPDU này chứa các trường thông tin BID và chi phí đường đi giúp các switch bầu chọn và tính toán các câu trúc trong cây spanning tree.

• Trong STP các switch sẽ liên lạc với nhau thông qua gói tin BPDU, sau đây là BPDU header.

Nguồn ảnh: https://2184390991-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F3y58D4Yewaoo7D5d1RKi%2Fuploads%2Fgit-blob-df45a98b15e436be39be1e506136fdbeb787eb1d%2FBPDU-1.PNG?alt=media

• Như đã nói ở trên, việc tính toán spanning tree dựa trên hai khái niệm khi tạo ra vòng lặp logic trong cấu trúc mạng đó là Bridge ID(BID) và chi phí đường đi. Đây cũng là 2 trường thông tin quan trọng trong BPDU header.

2.1. Bridge ID (BID)

• BID là một trường có 8 bytes, nó gồm có 2 trường con là bridge priority và Mac address.

• Bridge priority: bao gồm 2 bytes là độ ưu tiên bridge có giá trị từ 0 -65.535. Độ ưu tiên bridge có giá trị mặc định là 32.768.

• Mac address: bao gồm 6 bytes là địa chỉ được gán cho Switch. Địa chỉ Mac trong BID sử dụng định dạng Hexa.

2.2. Chi phí đường đi ( Root Path Cost)

• Chi phí đường đi (path cost) được sử dụng để đánh giá đường đi từ các switch khác về root bridge( Root bridge được coi như 1 gốc trong cây spanning tree còn các switch khác được coi như các nhánh)

• Ở đây path cost được tính theo thông số bên dưới

Lưu ý: Chi phí STP càng thấp thì càng tốt

3. Cơ chế hoạt động của giao thức Spanning Tree

Để tạo ra cấu trúc mạng logic chứa vòng lặp( loop free), spanning tree luôn thực hiện theo trình từ 4 bước:

• Bầu chọn Root Bridge

• Bầu chọn Root Port

• Bầu chọn Designated Port

• Các port còn lại sẽ là Block Port

3.1. Bầu chọn Root Bridge_RB

• Quá trình bầu chọn Root Bridge( Bridge gốc) thực chất là quá trình chọn ra switch gốc, rễ trong cây spanning tree. Root bridge sẽ được coi như trung tâm của vạn vật, chịu trách nhiệm gửi các gói tin BPDU để duy trì giao thức STP( 2s/ lần). Các switch còn lại chỉ có thể tiếp nhận, bổ xung thông tin vào trường BPDU và forward gói tin BPDU.

• Quá trình bầu chọn Bridge gốc:

  • Đầu tiên sẽ so sánh switch nào có trị số Priority thấp nhất sẽ là Root-Bridge. Tuy nhiên trị số priority mặc định của các switch đó là 32.678.

  • Trong trường hợp các switch được thiết lập số Priority bằng nhau chúng ta sẽ tiến hành so sánh địa chỉ MAC, switch nào có MAC nhỏ nhất sẽ làm Root-Bridge. Địa chỉ MAC của mỗi thiết bị là duy nhất trên thế giới và không thể trùng được

  • Xét topology bên dưới, các switch đều có trị số priority bằng nhau nên chúng ta xét đến địa chỉ MAC. Địa chỉ MAC của SW1 có trị số nhỏ nhất (AAA) nên sẽ được chọn làm bridge gốc.

- Lưu ý: Chúng ta nên bầu chọn root bridge bằng việc thay đổi trị số priority để dễ dàng cho việc quản trị!

  • Khi các thiết bị bắt đầu khởi động nó sẽ gửi gói tin BPDU một cách rất lộn xộn. Trong gói tin BPDU sẽ chứa thông tin của Root BID. Các bridge luôn đặt bridge ID( BID) của chính nó trong Sender BID.
  • Giả sử ban đầu SW3 khởi động trước, nó sẽ gửi các gói tin BPDU và tự nhận mình là root bridge. Một lúc sau SW2 khởi động và cũng gửi các gói tin BPDU và cũng tự nhận chính mình mới là root bridge. Khi BPDU của nó đến được SW3 thì SW3 sẽ loại bỏ gói tin BPDU vì nó có BID thấp hơn( so sánh dựa theo địa chỉ MAC). Ngay lập tức SW3 sẽ gửi gói tin BPDU đến SW2 nhằm thông báo giả định ban đầu của nó là sai. Lúc này SW2 trở thành root bridge, nó bắt đầu gửi gói tin BPDU với root BID là 2, sender BID là 3.
  • 1 thời gian sau SW1 khởi động và gửi gói tin BPDU đến SW2,SW3 tự nhận mình là root bridge. Lúc này SW2,SW3 sẽ nhường quyền root bridge cho SW1 do nó có trị số MAC thấp hơn.
  • Các switch sẽ lắng nghe các gói tin BPDU từ các switch khác gửi tới, nó sẽ nhường quyền cho switch nào có trị số BID tốt hơn.

Chú ý: Root BID là ID của bridge gốc hiện tại, trong khi Sender BID là ID của bridge cục bộ hoặc switch

3.2. Bầu chọn Root Port_RP- Cổng gốc

  • Sau khi các switch bầu chọn được root bridge, nó sẽ bắt đầu tiến hành bầu chọn Root Port dựa trên khái niệm chi phí đường đi. Cụ thể là các bridge theo dõi chi phí đường đi gốc, chi phí tích lũy của tất cả các liên kết đến bridge gốc. RP là port cung cấp đường về Root-bridge mà có tổng path-cost là nhỏ nhất
  • Ngoại trừ root bridge , các switch con còn lại sẽ phải bầu chọn 1 cổng gốc. Root bridge không có root port chỉ có Designated port. Path Cost được tính theo chiều từ RB đến Bridge đang xét theo nguyên tắc vào cộng, ra không cộng.
  • Quá trình diễn ra như sau:
  • SW1( root bridge) sẽ bắt đầu gửi gói tin BPDU chứa chi phí đường đi gốc là 0. Khi SW2 nhận được gói tin BPDU nó sẽ thêm vào chi phí đường đi của cổng Fa0/14 vào chi phí đường đi gốc chứa trong BPDU nhận. SW2 nhận chi phí đường đi gốc là 0 và thêm chi phí đường đi của cổng Fa0/14 là 19( các cổng kết nối ở đây đều là fastethernet có chi phí STP là 19) và thêm thông tin vào trường BPDU rồi gửi qua Fa0/16. Tương tự khi SW3 nhận gói tin từ SW2 nó sẽ tăng chi phí đường đi gốc thành 38( 19+19).
  • SW2 sẽ tính toán và chọn cổng Fa0/14 làm root port với chi phí là 19. Tương tự SW3 sẽ chọn Fa0/14 làm root port do có chi phí STP thấp hơn cổng Fa0/16.

- Lưu ý:

  • Trong trường hợp nếu Path cost của các cổng là như nhau ra sẽ xét đến BID, rồi đến Port ID và cuối cùng Port Number

3.3. Bầu chọn designated port_DP( cổng được chỉ định)

  • Sau khi bầu chọn được Root bridge và root port thì mọi chuyện trở nên dễ dàng hơn. Designated port là port cung cấp đường về root-bridge có tổng path cost nhỏ nhất trên phân đoạn mạng đang xét.Mỗi phân đoạn mạng đều phải có 1 cổng được chỉ định, có nhiệm vụ nhận và gửi lưu lượng dữ liệu đến phân đoạn mạng khác. DP là port cung cấp đường về Root-bridge trên phân đoạn mạng đang xét mà có tổng path-cost là nhỏ nhất.( khác với RP )
  • Quá trình bầu chọn như sau:
  • Tất cả các port của RB là DP.
  • Đối diện với RP là DP.
  • Trên phân đoạn mạng chưa có RP thì Designated Port được bầu chọn khi cung cấp đường về RB có tổng Path cost nhỏ nhất.
  • Xét đoạn 1: Phân đoạn mạng SW1 ==> SW2, cổng Fa0/14 của SW1 sẽ là cổng được chỉ định
  • Xét đoạn 2: Phân đoạn mạng SW1==> SW3, cổng Fa0/17 của SW1 sẽ là cổng được chỉ định
  • Xét đoạn 3: Phân đoạn mạng SW2 ==> SW3, trên phân đoạn mạng này không có RP nên sẽ sử dụng path cost để so sánh. Trên cổng Fa0/16 của SW2 có path cost gốc là 19, trên cổng Fa0/16 của SW3 cũng có path cost gốc là 19.

Vấn đề nảy sinh khi giá trị path cost gốc trên Fa0/16 của 2 SW đều như nhau. Lúc này ta sẽ xét đến trị số BID để quyết định, BID của SW2 là 32768 – BBB , BID của SW3 là 32678- CCC. Nên cổng Fa0/16 của SW2 sẽ trở thành cổng được chỉ định.

3.4. Các port còn lại sẽ là Block Port

• Bước cuối cùng trong tiến trình STP thì các port không có vai trò là Root hay Designated sẽ bị Block và được gọi là Alternated port. Hình dưới port Fa0/16 của SW3 sẽ bị block và trở thành Alternated port.

  • Tiến trình STP đã hoàn thành và block cổng Fa0/16 trên SW3 để tránh loop-layer 2. Trong trường hợp cổng Fa0/14 của SW3 gặp sự cố thì cổng Fa0/16 sẽ lập tức được mở lại để đảm bảo lưu lượng truy cập internet không bị gián đoạn.

-

Bình luận

Bài viết tương tự

- vừa được xem lúc

Set Up Network and HTTP Load Balancers

1. Overview. There are two types of load balancers in Google Cloud Platform:. .

0 0 73

- vừa được xem lúc

AWS Basic Networking Structure!

Lời nói đầu. Gần đây mình mới có cơ hội được tham gia vào một khóa học về networking cơ bản rất thú vị .

0 0 45

- vừa được xem lúc

Basic Networking !

Lời nói đầu. Gần đây mình mới có cơ hội được tham gia vào một khóa học về networking cơ bản rất thú vị .

0 0 36

- vừa được xem lúc

Một số linux command cơ bản trong quản trị mạng mà bạn nên biết

Là một kỹ sư lập trình hệ thống, một system admin hay một DevOps… thì phần lớn thời gian bạn sẽ phải làm việc trên hệ thống Unix/Linux. Networking là một phần thiết yếu của hệ điều hành.

0 0 59

- vừa được xem lúc

Hướng dẫn cầu hình máy tính cá nhân thành một public server trên mạng internet

Ngày xửa ngày xưa, xưa lắm lắm lắm lắm (Bốn chữ lắm - Trúc Nhân ft Trương Thảo Nhi). Nghe các cụ trong làng kể lại thì nó vào khoảng 3 4 năm trước đây :v .

0 0 181

- vừa được xem lúc

Lập trình socket, giao tiếp client và server bằng ngôn ngữ C (với giao thức TCP)

Lập trình mạng là gì. Lập trình mạng là một trong những nhiệm vụ căn bản để phát triển các ứng dụng.

0 0 164