MPLS ตอนที่ 1 ทำความรู้จักกับการทำงานของ MPLS ใน Dataplane
ในปัจจุบัน ได้มีการใช้งาน MPLS ในหลากหลายรูปแบบ ไม่ว่าจะเป็นการใช้งาน MPLS สำหรับการเชื่อมต่อเครือข่าย WAN หรือแม้กระทั่งการใช้งานในเครือข่ายภายในหรือใน data center ภายในของแต่ละองค์กร เหตุผลที่ MPLS ได้รับความนิยมในการใช้งานในปัจจุบัน ก็เนื่องมาจาก MPLS เป็นเทคโนโลยีการสื่อสารข้อมูลความเร็วสูง ที่สามารถตอบสนองต่อรูปแบบการทำงานได้หลากหลาย รองรับการทำงานร่วมกันของโปรโตคอลต่าง ๆ ได้เป็นอย่างดี ซึ่งในวันนี้ผมจะมาแนะนำให้ได้รู้จักรายระเอียดการทำงานของ MPLS ใน dataplane กันครับ
ก่อนที่จะมากล่าวถึงการทำงานของ MPLS กันนั้น ก่อนอื่น จะขอกล่าวถึงการทำงานโดยทั่วไปของอุปกรณ์เครือข่ายกันก่อนครับ โดยทั่วไปอุปกรณ์เครือข่ายจะแบ่งการทำงานออกเป็น 3 ส่วนหลัก ๆ คือ
- Control Plane จะทำหน้าที่ในการสร้างเส้นทางระหว่างต้นทางไปยังปลายทาง เช่น การทำงานของ routing protocol ต่าง ๆ การทำงานของ ARP table ในเครือข่าย MPLS ก็จะใช้งาน control plane ในการสร้างและส่งต่อข้อมูล label หรือนำมาสร้าง LFIB table เป็นต้น
- Data Plane ทำหน้าที่ในการส่งต่อข้อมูลของผู้ใช้ปลายทาง ตัวอย่างเช่น เราเตอร์ใน IP network จะทำการส่งต่อแพ็คเก็ตจากข้อมูลใน FIB table ส่วนเราเตอร์ที่ทำงานอยู่ในเครือข่าย MPLS ก็จะตัดสินส่งต่อแพ็คเก็ตโดยใช้ข้อมูลจาก LFIB table เป็นต้น
- Management Plane จะทำหน้าที่ในส่วนของการบริหารจัดการตัวอุปกรณ์เครือข่าย เช่น การทำงานของ SNMP, CLI, GUI ในการบริหารจัดการต่าง ๆ
สำหรับเนื้อหาของ MPLS ที่จะกล่าวถึงในบทความนี้ จะขอกล่าวถึง MPLS ที่ทำงานอยู่ใน dataplane กันก่อนนะครับ เพื่อให้เห็นภาพของการส่งต่อแพ็คเก็ต เมื่อใช้งานอยู่บนเครือข่าย MPLS กันนะครับ
ในการใช้งาน MPLS จะมีการสร้างกลไกการส่งต่อแพ็คเก็ตรูปแบบใหม่ขึ้นมา โดยแทนที่จะทำการส่งต่อแพ็คเก็ตโดยดูจาก destination IP ใน IP header เป็นหลักเหมือนกับการส่งต่อแพ็คเก็ตใน IP network ทั่วไป MPLS จะทำการส่งต่อแพ็คเก็ตโดยดูจากสิ่งที่เรียกว่า MPLS label เป็นหลักแทน ซึ่งด้วยการที่ไม่ได้ทำการส่งต่อแพ็คเก็ตจาก destination IP นี่เอง ทำให้ MPLS สามารถทำการสร้างวงจรการสื่อสารแบบ end-to-end ข้ามไปยังเครือข่ายทุกประเภทได้ โดยที่ไม่ต้องสนใจว่าใช้งานอยู่บนเครือข่ายชนิดใด และยังสามารถทำการส่งต่อแพ็คเก็ตโดยดูจากคุณสมบัติด้านอื่น ๆ เช่น การทำ traffic engineering, ตามความต้องการทางด้าน QoS หรือการทำ VPN ได้ เป็นต้น
ข้อดีของการใช้งาน MPLS
- (ในทางทฤษฏี) การใช้งาน MPLS จะมีความเร็วในการส่งต่อแพ็คเก็ตสูงกว่าการใช้งาน IP แบบปกติ เนื่องด้วย MPLS จะทำการส่งต่อแพ็คเก็ตโดยดูจาก MPLS label เป็นหลัก เป็นการหลีกเลี่ยงการส่งต่อแพ็คเก็ตจาก routing table ตามปกติ ซึ่งมีความซับซ้อนในการทำงานมากกว่า จึงทำให้ MPLS สามารถส่งต่อแพ็คเก็ตได้เร็วกว่าเนื่องจากมันมีความซับซ้อนน้อยกว่านั่นเอง
- รองรับการทำงานร่วมกับโปรโตคอลได้หลากหลาย MPLS จะทำงานอยู่ระหว่างชั้น datalink layer และ network layer ของ OSI model ในบางครั้งจึงจะได้ยินว่า MPLS ทำงานใน layer 2.5 ซึ่งจะทำให้สามารถนำ MPLS ไปใช้งานร่วมกับโครงข่ายชนิดใด ๆ ก็ได้ที่รองรับการทำงานของ IP และมีการใช้งานอยู่ก่อนหน้านี้ (Layer 1 และ Layer 2 เป็นอะไรก็ได้ ที่สามารถส่งต่อ IP packet ได้) ไม่ว่าจะเป็น PPP, ATM, Framerelay, DSL หรือ Ethernet เป็นต้น ข้อดีข้อนี้เองที่ทำให้ MPLS เป็นที่นิยมในการใช้งานในปัจจุบัน เนื่องจากมันสามารถรองรับการทำงานร่วมกันได้กับเครือข่ายทุกยุคทุกสมัย เป็นการพังทลายขีดจำกัดในการใช้งานเทคโนโลยียุคเก่า ๆ ลง อีกทั้ง MPLS ยังสามารถทำการส่งข้อมูลได้หลายรูปแบบ ไม่ว่าจะเป็น IPv4, IPv6 หรือ IPX เป็นต้น
- รองรับการขยายตัวในอนาคตได้ดี ในการทำงานของ MPLS อาจจะมี label ได้มากกว่าหนึ่งชั้น ทำให้มีความคล่องตัวสูง สามารถนำ label แต่ละชั้นไปประยุกต์ใช้งานได้หลากหลายรูปแบบ เช่นการทำ MPLS L3 VPN, MPLS L2 VPN, Traffic Engineering, QoS เป็นต้น
MPLS Header
MPLS header จะมีขนาดทั้งหมด 4 bytes โดยจะเป็น header ที่จะนำไป encapsulation อยู่ในตำแหน่งระหว่าง datalink และ network (IP) header ในบางครั้งจะเรียก MPLS header แบบให้เข้าใจง่าย ๆ ว่า label แต่ขอให้เข้าใจไว้ว่าจริง ๆ แล้ว label เป็นเพียง 20 bits แรกใน MPLS header เท่านั้น โดยส่วนประกอบของ MPLS header มีดังนี้
ฟิลด์ | ขนาด (bits) | วัตถุประสงค์ |
Label | 20 | ค่า label เพื่อระบุส่วนหนึ่งของ LSP |
Experimental (EXP) | 3 | ใช้สำหรับการทำ QoS marking |
Bottom-of-stack (S) | 1 | เป็น flag ที่เมื่อถูก set เป็น 1 จะหมายความว่าเป็น label ชั้นสุดท้ายก่อนจะถึง IP header |
Time-to-Live (TTL) | 8 | ใช้เพื่อวัตถุประสงค์เดียวกันกับค่า TTL ใน IP header |
*โดย default บน Cisco IOS จะใช้ค่า label ในช่วง 16 – 100,000 ในการส่งต่อแพ็คเก็ต
MPLS IP forwarding บน dataplane
เทคโนโลยี MPLS จะมีการกำหนดกลไกในการส่งต่อแพ็คเก็ตรูปแบบใหม่ขึ้นมา ด้วยการใช้งาน label เป็นตัวตัดสินใจในการส่งต่อแพ็คเก็ตไปยังปลายทาง อย่างไรก็ตามอุปกรณ์ที่ใช้งานทั่วไปในองค์กร เช่น โฮสต์ในฝั่งต้นทางและปลายทาง จะไม่ได้มีการใช้งาน label แต่อย่างใด ดังนั้นในการส่งต่อข้อมูล โฮสต์ต้นทางก็จะทำการส่ง IP packet แบบธรรมดาที่ไม่มีการใช้งาน label ออกมา จากนั้นจะต้องมีเราเตอร์บางตัวในเส้นทางที่ทำหน้าที่เพิ่ม MPLS header เข้าไปในแพ็คเก็ต ก่อนจะส่งแพ็คเก็ตต่อไป จากนั้นก็จะต้องเราเตอร์อีกตัวในเส้นทางที่จะต้องทำหน้าที่ในการถอด MPLS header ออกจากแพ็คเก็ตก่อนที่จะทำการส่งต่อแพ็คเก็ตนั้น ไปยังโฮสต์ปลายทางต่อไป ดังนั้นโอสต์ต้นทางและโอสต์ปลายทาง จะสามารถใช้งานได้ตามปกติ โดยที่ไม่ทราบเลยว่ามีการใช้งาน MPLS ระหว่างทางอยู่
เราเตอร์ที่ทำงานในระบบเครือข่าย ที่โดยทั่วไปก็จะทำการส่งต่อแพ็คเก็ตโดยดูจาก IP header เป็นหลัก ในการใช้งาน MPLS ก็จะมีเราเตอร์บางกลุ่มเท่านั้นที่จะทำการส่งต่อข้อมูลโดยดูจาก label ที่อยู่ใน MPLS header โดยเราจะเรียกเราเตอร์เหล่านี้ว่า Label Switch Router (LSR) ซึ่งจะหมายถึงเราเตอร์ตัวใด ๆ ก็ตาม ที่สามารถอ่าน MPLS header และใช้ข้อมูล label ในการส่งต่อแพ็คเก็ต เช่นจากภาพด้านบนจะเรียกเราเตอร์ PE1, P1, PE2 ว่า LSR ทั้งนี้เราเตอร์ LSR ยังมีการแบ่งเป็นประเภทย่อย ๆ ลงไปอีก ตามลักษณะการทำงาน ดังนี้
ชนิด LSR | รูปแบบการทำงาน |
Label Switch Router (LSR) | เราเตอร์ตัวใด ๆ ที่ Push,Pop หรือ Swap label ไปยังแพ็คเก็ต |
Edge LSR (E-LSR) | เราเตอร์ LSR ที่เป็นตัวขอบของเครือข่าย MPLS คือเป็นเราเตอร์ที่ประมวลผลทั้งlabeled packet และ unlabeled packet |
Ingress E-LSR | เราเตอร์ที่รับข้อมูล IP packet เข้ามายังเครือข่าย MPLS โดยจะเป็นเราเตอร์ที่ทำหน้าที่ในการ Push label เข้าไปด้านหน้า IP header |
Egress E-LSR | เราเตอร์ตัวสุดท้ายในเครือข่าย MPLS โดยจะรับ labeled packet เข้ามา และจะทำการ Pop label ออกจากแพ็คเก็ตก่อนที่จะทำการส่งต่อแพ็คเก็ตนั้นต่อไป |
ในทบความนี้จะกล่าวถึงเทคโนโลยี MPLS แบบพื้นฐานที่เรียกว่า MPLS unicast IP forwarding ซึ่งเป็นการใช้ MPLS สำหรับการส่งต่อแพ็คเก็ตแบบ unicast IP ทั่วไปเท่านั้น เพื่อเป็นการอธิบายหลักการทำงานเบื้องต้นของ MPLS ให้เข้าใจกันเสียก่อน จากบทความด้านบนที่ถึงแม้จะบอกว่า MPLS จะทำการส่งต่อแพ็คเก็ตโดยดูจากสิ่งที่เรียกว่า label ใน MPLS header แต่จริง ๆ แล้ว โดยทั่วไป label ก็จะได้ข้อมูลต้นทางมาจากข้อมูลใน IP routing tabel นั่นเอง ดังนั้นในท้ายที่สุดแล้ว เส้นทางที่เราเตอร์ MPLS จะใช้ในการเลือกที่จะส่งต่อแพ็คเก็ตออกไป ก็จะเป็นเส้นทางเดียวกันกับที่ไม่ได้มีการใช้งาน MPLS อยู่ดี ดังนั้นจริง ๆ แล้วการใช้งาน MPLS จะไม่ได้นำไปใช้สำหรับการส่งต่อแพ็คเก็ต unicast IP ทั่วไปเท่านั้น แต่จะนิยมนำไปประยุกต์ใช้งานในด้านอื่น ๆ เช่น การทำ MPLS L3/L2 VPN, MPLS Traffic Engineering ซึ่งจะใช้งาน MPLS unicast IP forwarding ในบทความนี้เป็นพื้นฐานนั่นเอง
ในการส่งต่อข้อมูลของ MPLS ที่บอกว่าจะใช้งานสิ่งที่เรียกว่า label นั้น ก็จะมีฐานข้อมูลที่ใช้ในการส่งต่อแพ็คเก็ตในส่วนของ dataplane อยู่ ที่เรียกว่า Label Forwarding Information Base (LFIB) ซึ่งจะมีลักษณะการทำงานที่คล้ายกันกับ FIB (Forwarding Information Base) (สำหรับใครที่ยังไม่รู้จักว่า FIB คืออะไรลองศึกษาเพิ่มเติมได้ในบทความ ทำความรู้จักกับ Switching Path บน Cisco IOS Router) ที่ใช้ในการส่งต่อข้อมูลในระดับ dataplane ของ IP network โดยเมื่อ LSR ได้รับแพ็คเก็ตที่มี MPLS header เข้ามา มันจะดึงค่า label ที่อยู่ใน MPLS header มาเปรียบเทียบกับรายการใน LFIB เพื่อเรียกดูข้อมูลที่จำเป็นจะต้องใช้ในการส่งต่อแพ็คเก็ตต่าง ๆ เช่น label operation type, outgoing label และ next-hop สำหรับส่งแต่แพ็คเก็ตไปยังปลายทางต่อไป
ตัวอย่าง LFIB table บนเราเตอร์
การทำงานระหว่างเราเตอร์กับ label
เมื่อเราเตอร์ MPLS ได้รับแพ็คเก็ตทั่วไปที่ไม่ได้มีการใช้งาน label เข้ามา เราเตอร์จะทำการเพิ่ม label เข้าไปอย่างน้อย 1 ชั้น จะเรียกกระบวนการนี้ว่าเป็นการทำ “MPLS encapsulating” โดยจะทำการสร้าง MPLS header เพิ่มเข้าไประหว่างชั้นของ datalink และ IP header จากนั้นจะทำการส่งต่อแพ็คเก็ตไปยัง LSR ตัวถัดไป เมื่อเราเตอร์ LSR ตัวถัดไปได้รับแพ็คเก็ตที่มี label นี้เข้ามา มันก็จะทำการตรวจสอบ label ในชั้นนอกสุด จากนั้นก็จะทำกระบวนการ swap, push, pop อย่างใดอย่างหนึ่ง โดยดูจากข้อมูลที่อยู่ใน LFIB โดยจะมีรูปแบบการดำเนินการดังนี้
- Push จะเป็นการเพิ่ม label ใหม่เข้าไปในชั้นนอกสุดของแพ็คเก็ต โดยจะเรียกว่าเป็นการทำ “encapsulating” แพ็คเก็ตใหม่ด้วย MPLS header โดย label ที่เพิ่มเข้าไปนี้ อาจจะมีแค่ชั้นเดียว ถ้าเป็นการเพิ่ม label เข้าไปยังแพ็คเก็ต IP ที่ไม่มี MPLS header อยู่ก่อนหน้านี้ (กรณีที่ ingress LSR ได้รับข้อมูลแพ็คเก็ต IP ที่ไม่มีการใช้งาน label เข้ามา) หรืออาจจะมี label หลาย ๆ ชั้น ที่เรียกว่า “label stacking” ในกรณีที่ทำการเพิ่ม label เข้าไปยังแพ็คเก็ตที่มี MPLS header อยู่ก่อนหน้านี้แล้ว (กรณีที่นำ MPLS ไปประยุกต์ใช้งานด้านอื่น ๆ เช่น MPLS L3 VPN, MPLS traffic engineering)
- Pop จะทำการถอด label ไล่ลำดับจากชั้นนอกสุดออกจากแพ็คเก็ต โดยจะเรียกว่าเป็นการทำ “decapsulating” โดยเมื่อทำการถอด label ออกจากแพ็คเก็ตแล้ว อาจจะยังคงเหลือ label ชั้นอื่นเหลืออยู่อีกก็ได้ (ในกรณีที่มี label หลายชั้น) หรืออาจจะเป็นการ pop label ชั้นสุดท้ายออกจากแพ็คเก็ต ซึ่งจะหมายถึงว่าแพ็คเก็ตนี้กำลังจะถูกส่งออกนอกเครือข่าย MPLS นั่นเอง
- Swap จะทำการสลับ label ชั้นนอกสุด ด้วย label ใหม่ ตามข้อมูลใน LFIB และทำการส่งต่อแพ็คเก็ตต่อไปตามเส้นทางด้วย label นั้น
จากภาพด้านบน มีขั้นตอนการส่งข้อมูลของ MPLS ใน dataplane ดังนี้
- โฮสต์ 10.1.1.1 ทำการสร้างและส่งแพ็คเก็ตธรรมดาที่ไม่มี MPLS header ไปยังโฮสต์ปลายทาง 10.8.8.8
- เราเตอร์ CE1 ที่ไม่มีการตั้งค่าใช้งาน MPLS ได้รับแพ็คเก็ตเข้ามา และตัดสินใจส่งต่อตามข้อมูล destination IP ตามปกติ โดยไม่ทำอะไรเกี่ยวกับ label
- เราเตอร์ LSR PE1 ได้รับแพ็คเก็ตที่ไม่มี label เข้ามา และตัดสินใจที่จะทำการส่งต่อแพ็คเก็ตนี้เข้าไปยังเครือข่าย MPLS มันจะทำกระบวนการ Push labal (24) เข้าไปยังแพ็คเก็ตและทำการส่งต่อแพ็คเก็ตนั้นไปยัง P1 ต่อไป
- เราเตอร์ LSR P1 ได้รับแพ็คเก็ตที่มี label เป็น 24 เข้ามา มันจะใช้ข้อมูลที่อยู่ใน LFIB เพื่อดูว่า outgoing label ของ local label 24 เป็นค่าอะไร ซึ่งปรากฏว่า P1 จะต้องทำการ Swap label จาก 24 เป็น 32 ก่อนที่จะทำการส่งแพ็คเก็ตต่อไป
- เราเตอร์ LSR PE2 ได้รับแพ็คเก็ตที่มี label เป็น 32 เข้ามา มันก็จะเรียกดูข้อมูล outgoing label จาก LFIB ซึ่งพบว่่าเป็นค่า “No Label” มันจึงทำการ Pop label ออก ก่อนที่จะทำการส่งต่อแพ็คเก็ตต่อไปยังเราเตอร์ CE2 (ไม่เกิดกระบวนการ PHP เนื่องจากโดยปกติ PHP จะเกิดขึ้นในกรณีที่เป็น connected หรือ summary route เท่านั้น)
- เราเตอร์ CE2 ที่ไม่มีการตั้งค่าใช้งาน MPLS ได้รับแพ็คเก็ตเข้ามา และตัดสินใจส่งต่อแพ็คเก็ตตามข้อมูล destination IP ตามปกติ ไปยังปลายทาง