Loop ฝันร้ายในความเป็นจริง (ภาค ทำความเข้าใจเกี่ยวกับ loop)

Posted by

Loop หมายถึง ห่วง, บ่วง, วง

…. แต่ถ้า Loop ในระบบเครือข่ายหมายถึงความฉิบหาย!!

หลายๆคนคงเคยเจอกับประสบการณ์เกี่ยวกับ loop ไม่ว่าจะเป็นประสบการณ์ตรงหรือได้ผลกระทบจาก loop หรือได้ยินคนเขาเล่าต่อๆกันมาเป็นตำนาน….

แล้วจริงๆ loop คืออะไรกันแน่??

….ถ้าให้ตอบแบบขวานผ่าซากมันคือ “วง” นั่นแหละ (OK ตรงไปใช่ไหม งั้นเอาใหม่)
วงที่ว่าคือวงของทราฟฟิกคือการที่มีข้อมูลอะไรบางอย่างถูกส่งออกไปแล้วกลับมาที่เดิมโดยที่ไม่มีอะไรเปลี่ยนแปลงไปซักนิดนั่นแหละคือ loop

ฉะนั้นเวลาเราเอ่ยถึง loop ในระบบเครือข่าย มุมมองของเราจะโฟกัสไปที่ข้อมูลเป็นหลัก loop ที่ว่าเรามักมองใน 2 ระดับคือ loopในระดับ Layer2 และ Layer3 (กลับไปอ่าน OSI model ได้ที่นี่ ยาวหน่อยนะ มี 3 ตอน)


layer 3 Loop

มันคือการที่เมื่อ packet ถูก routed ไปแล้วมันวนกลับมาที่เดิม ตัวอย่างเช่น

Capture
จากรูปจะเห็นได้ว่า Packet สีแดงที่ถูกส่งจาก RouterA นั้นเมื่อไปถึงที่ RouterB มันจะถูกส่งกลับมาที่ RouterA เพราะไปตรงกับ default route ใน RouterB ก็เกิดสภาพที่ packet วนไปวนมาเรื่อยๆ

แต่แบบนี้สุดท้าย packet จะถูก drop ทิ้งไปเมื่อค่า TTL ลดลงเหลือ 0 (TTL เป็นค่าหนึ่งที่อยู่ใน Layer 3 header จะลดลงทีละ 1 เมื่อผ่านอุปกรณ์ Layer 3) และจำนวน packet ยังคงเท่าเดิมตลอด ผลลลัพธ์ที่ได้ก็แค่ว่าไม่สามารถส่งข้อมูลไปยังปลายทางได้

สิ่งที่เราเอามาใช้จัดการกับ Layer 3 Loop นี้คือ dynamic routing protocol ต่างๆ ซึ่งจะมีกลไกในการป้องกัน Loop ในตัวอยู่แล้ว (สำหรับ Static กลไกการป้องกัน Loop คือ admin ที่ configure เอง)

ฉะนั้นแล้วเวลาเรากลัว Loop จะไม่ค่อยหมายถึง Loop ในระดับ Layer 3 เท่าไหร่
อ่าว แล้วเรากลัวอะไรละ?


Layer 2 Loop

จะเข้าใจ Loop Layer 2 ได้ต้องทำความเข้าใจการทำงานของ Switch ให้ได้ก่อน

     Switch เป็นอุปกรณ์ ที่ทำงานในระดับ Layer 2
Switch ตัดสินใจส่งข้อมูลโดยดูจาก Source MAC address และ destination MAC address โดยจะเปรียบเทียบกับตารางที่ชื่อว่า MAC address table (เป็นตารางจับคู่ MAC address ของ client กับ หมายเลข Port)
เมื่อ Frame เข้ามาที่ port ใดก็ตาม, Switch จะตรวจสอบกับตาราง MAC address table แล้วส่งไปตามนั้น แต่ถ้าไม่มีมันจะ copy frame นั้นส่งออกไปทุกๆ port ยกเว้น port ที่มันได้รับ frame เข้ามา รวมถึงเมื่อมันได้รับ Frame ที่มี destination MAC address เป็น Broadcast( หน้าตาประมาณนี้ FF:FF:FF:FF:FF:FF) Switch ก็จะส่งออกไปทุก port เช่นกัน

ฉะนั้นเมื่อมีช่องทางการไหลของ frame ที่สามารถไปและกลับมาทางเดิมได้ก็จะเกิดสถาณการณ์ที่ frame ที่เป็น broadcast จะถูก copy เพิ่มจำนวนขึ้นไปเรื่อยๆ (ใน header layer 2 ไม่มี TTL) จนทำให้อุปกรณ์ไม่สามารถจัดการกับ traffic จำนวนมหาศาลไหวแล้วก็ล่มไป (T-T)

Capture.JPG
Frame เดียวถูก copy ซ้ำไปซ้ำมา ทำให้จำนวน frame เพิ่มขึ้นเรื่อยๆจนสุดท้ายระบบพินาศ!!
Capture
แบบนี้ก็ loop ได้เหมือนกัน ขอแค่ให้ frame วนกลับมาที่เดิมได้คือ loop ทั้งหมด!
Capture
แบบนี้ไม่มี loop เพราะ frame จาก VLAN 10 และ 20 ไม่มีทางกลับมาหา switch ที่เป็นต้นกำเนิด broadcast frame ได้

การจัดการกับ Layer 2 Loop นั้นเราใช้ Spanning tree protocol (STP) ซึ่งโดยปกติ switch ในระดับ Enterprise ทุกยี่ห้อจะเปิดใช้งานมันมาให้อยู่แล้วจากโรงงานแม้ไม่ตั้งค่าอะไรเลย

การทำงานของ Spanning tree protocol นั้นจะทำการตรวจสอบค่า BPDU( frame ที่เป็นเอกลักษณ์ของ switch ใช้บอกได้ว่ามาจาก switch ตัวไหน) ดูว่าการเชื่อมต่อนั้นมี loop หรือไม่ถ้ามีก็จะ block บาง port ทิ้งไป

Capture
การ block โดย spanning tree protocol เป็นการ block เชิง logical คือ port ไม่ได้ down ไปจริงๆ มันแค่รับ-ส่งข้อมูลไม่ได้เฉยๆ แต่ยังคอย monitor BPDU อยู่นะ (Cisco อาจจะเห็น port เป็นสีส้มๆ [กรณีมี VLAN เดียว])
เท่านี้ก็ไม่มี loop ให้กลัวแระ ง่ายจะตาย (รายละเอียดลึกๆของ spanning tree นี่อาจจะเขียนตอนหลังนะครับเอาจริงๆก็เหมาะกับ geek เท่านั้นคือรู้ไปก็อาจจะไม่ค่อยได้เอาไปใช้ประโยชน์เท่าไหร่)
และ switch จะคอย monitor BPDU อยู่เรื่อยๆถ้ามีการเปลี่ยนแปลงก็จะทำการคำนวณใหม่อีกรอบว่ามี Loop หรือเปล่าถ้าไม่มีมันก็จะ unblock port นั้นๆให้


“ว่าแต่ที่บริษัทก็ใช้ Cisco Switch นะทำไมมันยังมี loop ให้ปวดหัวอยู่อีกละ??”

คำถามนี้จะถูกนำไปอธิบายในหัวข้อถัดไป
Loop ฝันร้ายในความเป็นจริง (ภาค ทำไมยังคงมี loop) 

1 ความเห็น

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s