ทำความรู้จัก Spanning Tree ตอนที่ 3
STP
สวัสดีครับผู้อ่านทุกท่าน ตอนนี้ก็เป็นตอนที่ 3 แล้วนะครับ ในตอนก่อนหน้าตอนที่ 2 ผมได้อธิบายวิธีการทำงานของ STP แบบคร่าวๆไปแล้วเพื่อแก้ไขปัญหาการเกิดลูปขึ้นในระบบ เรามาสรุปขั้นตอนการทำงานของ STP กันอีกสักครั้งครับ
ขั้นตอนที่ 1 เลือก Root Bridge จากค่า Bridge ID ที่น้อยที่สุด โดยค่าเริ่มต้นเราจะพิจารณาจาก MAC Address ที่น้อยที่สุด เพราะค่า Bridge priority เท่ากันหมด
ขั้นตอนที่ 2 พอร์ตของ Root Bridge ทุกพอร์ตที่มีสถานะ Active จะทำหน้าที่เป็น Designated port มีสถานะเป็น Forwarding
ขั้นตอนที่ 3 สวิตซ์ที่เหลือจะเป็น non Root Bridge เราจะต้องกำหนดพอร์ตใดพอร์ตนึงให้ทำหน้าที่เป็น Root port โดยเลือกจากพอร์ตที่มีค่า root path cost น้อยที่สุด
ขั้นตอนที่ 4 พอร์ตที่เหลือของ non Root Bridge จะทำหน้าที่เป็น Designated port หรือ Blocked port นั้น พิจารณาจาก
- ถ้า Bridge ID ที่รับเข้ามามีค่าน้อยกว่า ให้กำหนดพอร์ตนั้นเป็น Blocked port มีสถานะเป็น Discarding
- ถ้า Bridge ID ที่รับเข้ามามีค่ามากกว่า ให้กำหนดพอร์ตนั้นเป็น Designated port มีสถานะเป็น Forwarding
- พอร์ตที่ต่อกับอุปกรณ์ end device ให้กำหนดเป็น Designated port มีสถานะเป็น Forwarding
หลังจากที่ทำขั้นตอนที่ 4 เสร็จเราก็จะได้ STP ที่สมบูรณ์ซึ่งขั้นตอนทั้งหมดคร่าวๆก็จะเป็นดังที่กล่าวไปข้างต้น ในตอนที่ 3 นี้ผมจะอธิบายต่อในส่วนของการเปลี่ยนสถานะพอร์ตจาก disable -> blocking -> listening -> learning -> forwarding และ port state แบบละเอียดกันต่อครับ
เพื่อให้เข้าใจการทำงานของ STP แบบครบถ้วน ถ้าจะไม่อธิบายว่า BPDU packet คืออะไรก็คงไม่ได้ครับ เพราะเป็นหัวใจของ STP ที่ใช้ในการคำนวนtopologyเลยก็ว่าได้
BPDU
สวิตซ์เมื่อเปิดใช้งานจะทำการส่ง BPUD packet ออกไปทางพอร์ตที่มีสถานะ Active(พอร์ตที่ต่อกับอุปกรณ์อื่นที่เปิดใช้งานเหมือนกัน) โดยที่ BPDU จะถูก encapsulation (กระบวนการห่อห้มของpacket โดยที่layerที่สูงกว่าจะส่งข้อมูลให้layerที่ต่ำกว่าในรูปแบบของpayloadของlayerที่ต่ำกว่า และจะเพิ่มในส่วนของheaderหรือทั้งheaderและtailerขึ้นอยู่กับว่าเป็นlayerใด) ไว้ในEthernet frame ขออธิบายในส่วนของpacketกับframeว่าแตกต่างกันอย่างไร packetจะใช้เป็นชื่อเรียกหน่วยข้อมูลของLayer3 ส่วนframeจะใช้เป็นชื่อเรียกของหน่วยข้อมูลLayer2 แต่เพื่อความสะดวกในการเรียกชื่อผมจึงใช้เป็น BPDU packet แทนที่จะเป็น BPDU frame เนื่องจาก BPUD ทำงานที่Layer 2 นั่นเอง สวิตซ์จะทำการส่ง BPDU ออกไปในรูปแบบ multicast(ผู้รับหลายคน) ที่มีหมายเลข Destination MAC Address เป็น 01:80:C2:00:00:00
BPDU นั้นจำแนกออกเป็น 2 ประเภทตามลักษณะการทำงาน ดังนี้
1) Configuration BPDU ใช้เพื่อคำนวนสร้าง STP topolgy และดูสถานะว่าพอร์ตของสวิตซ์ที่ต่ออยู่ด้วยนั้นยังทำงานได้ปกติหรือไม่
2) Topology Change Notification BPDU (TCN BPDU) ใช้เพื่อแจ้งเตือนสวิตซ์ตัวที่ต่ออยู่ด้วยเมื่อสถานะของพอร์ตเปลี่ยนสถานะเป็น downหรือในกรณีที่สวิตซ์รับรู้ว่าtopologyเปลี่ยนไปจากเดิม เช่น ต่อสวิตซ์เพิ่มในระบบ
มาดูรูปแบบframeของ Configuration BPDU กันครับว่ามีข้อมูลอะไรอยู่ในนั้นบ้าง
ฟิลด์ที่เราสนใจมีประมาณนี้ครับ
1) Root ID คือ Bridge ID ของสวิตซ์ที่เป็น root
2) Root path cost คือค่าผลรวมของ cost ของเส้นทางที่ต่อไปยัง root switch
3) Bridge ID คือค่า Bridge ID ของสวิตซ์ที่สร้าง BPDU frame
4) Port ID คือค่า port priority และหมายเลข port ของพอร์ตที่ส่ง BPDU frame ออกไปโดยค่าport priorityเริ่มต้นจะเป็น 128
5) Max age มีค่าเท่ากับ 20 วินาที ซึ่งสวิตซ์ต้องได้รับ BPDU ภายใน 20 วินาทีเพื่อเป็นการยืนยันว่า สวิตซ์ที่ส่ง BPDU มายังทำงานได้ตามปกติ
6) Hello time มีค่าเท่ากับ 2 วินาที เป็นตัวบอกว่าสวิตซ์จะส่ง Configuration BPDU ทุกๆ 2 วินาที
7) Forward delay มีค่าเท่ากับ 15 วินาที เป็นระยะเวลาที่ใช้เพื่อเปลี่ยนจาก port stateนึงไปอีกstateนึง เช่นจาก listening เป็น learning
ส่วนของรูปแบบframeของ Topology Change Notification BPDU จะมีดังรูปครับ
1) Protocol ID ถ้าเป็น 802.1D จะเป็นค่า 0x0000
2) Protocol version ID มีค่าเป็น 0x00 บอกถึงเวอร์ชันของ STP
3) BPDU type มีค่าเป็น 0x80 บอกว่าเป็น TCN BPDU
หลังจากเข้าใจรายละเอียดของ BPDU ทั้ง 2 ประเภทกันแล้ว เราไปต่อกันที่ STP port state ครับ
1) Disabled เมื่อพอร์ตอยู่ใน state disabled พอร์ตนั้นจะไม่ประมวลผล BPDU หรือข้อมูลของผู้ใช้ที่รับเข้ามา และแน่นอนว่าไม่สามารถส่งข้อมูลใดๆออกไปด้วย
2) Blocking เมื่อพอร์ตอยู่ใน state blocking พอร์ตจะรับและประมวลผล BPDU เพียงอย่างเดียว และจะไม่ส่งข้อมูลใดๆออกไป
3) Listening เมื่อพอร์ตอยู่ใน state listening จะทำการคำนวน STP topology พอร์ตสามารถส่งและรับ BPDU ได้แต่สามารถส่งต่อข้อมูลผู้ใช้ได้
4) Learning เมื่อพอร์ตอยู่ใน state learning สวิตซ์จะเริ่มเรียนรู้เพื่อสร้าง MAC Address table เนื่องจากในสถานะนี้จะไม่มีลูปเกิดขึ้นในระบบแล้ว แต่ยังไม่สามารถส่งต่อข้อมูลของผู้ใช้ได้
5) Forwarding เมื่อพอร์ตอยู่ใน state forwarding สวิตซ์สามารถรับและส่งรวมถึงประมวลผล BPDU ได้และส่งต่อข้อมูลของผู้ใช้งานด้วย พอร์ตที่มีหน้าที่เป็น root port และ designated port เท่านั้นถึงจะมีสถานะเป็น forwarding
เพื่อให้เข้าใจการเปลี่ยนผ่านของแต่ละstateแบบง่ายๆผมขออธิบายโดยใช้รูปแบบของแผนผังflowchartดังนี้ครับ
1.เมื่อมีการเปิดใช้งานSTP พอร์ตจากสถานะdisabledจะเปลี่ยนเป็นblockingได้ในทันที
2.พอร์ตที่ถูกเป็นroot port และ designated port เท่านั้นถึงจะเปลี่ยนไปเป็นสถานะlistening
3.รอจนครบเวลา forward delay ซึ่งเท่ากับ 15 วินาทีพอร์ตจะเปลี่ยนไปสู่สถานะlearningหรือforwarding
4.สำหรับพอร์ตที่ไม่ใช่root port และ designated port จะเข้าสู่สถานะblocking
5.พอร์ตที่มีสถานะการทำงานเป็นdownหรือปิดใช้งานSTP จะเข้าสู่สถานะdisabled
จากแผนผังFlowchartนั้นเมื่อสวิตซ์ถูกเปิดขึ้นมาใช้งาน โดยค่าเริ่มต้นจากโรงงานนั้นSTPจะถูกเปิดใช้โดยอัตโนมัติอยู่แล้วจึงทำให้พอร์ตจากสถานะDisabledเปลี่ยนเป็นสถานะBlockingได้ทันทีจากนั้นจะรอจนครบ20วินาทีเพื่อเปลี่ยนเป็นสถานะlisteningเพื่อคำนวนSTP topologyโดยใช้เวลา 15 วินาทีก่อนจะเปลี่ยนเป็นสถานะlearningและทำการสร้าง MAC Address tableอีก15วินาทีก่อนจะเปลี่ยนเป็นสถานะForwarding ซึ่งเวลาที่ต้องใช้ทั้งหมดเท่ากับ 20+15+15 = 50 วินาทีจึงจะพร้อมสำหรับการรับส่งข้อมูลให้ผู้ใช้ และมันก็นานพอที่จะต้องมีการปรับปรุงการทำงานของSTPเสียใหม่ จึงเป็นที่มาของ RSTP หรือ Rapid Spanning Tree Protocol ซึ่งทำงานได้เร็วกว่า STP และในตอนหน้าผมจะมาอธิบายต่อว่า RSTP มีกระบวนการทำงานอย่างไรถึงได้มาทดแทนการทำงานของ STP ได้ในที่สุด