ยินดีต้อนรับสู่ show running-config ครับ

บล็อก show running-config นี้สร้างไว้เพื่อเป็นแหล่งรวบรวมเทคนิคการตั้งค่าอุปกรณ์เครือข่าย Cisco ไม่ว่าจะเป็น Cisco IOS Router, Cisco Catalyst Swtich, Cisco ASA Firewall, Cisco Mars เป็นต้น รวมทั้งอาจจะมีเทคนิคการตั้งค่าอุปกรณ์ในยี่ห้ออื่น ๆ บ้างเล็กน้อยครับ

ซึ่งบทความในบล็อกนี้ก็จะรวบรวมมาจากประสบการณ์ส่วนตัวของกระผมเองครับ (หากมีข้อผิดพลาดก็ขออภัยไว้ล่วงหน้าเลยละกันนะครับ) และก็อยากใช้พื้นที่แห่งนี้เป็นแหล่งในการแลกเปลี่ยนความรู้ รวมไปถึงวิธีการหรือเทคนิคการตั้งค่าอุปกรณ์เครือข่าย กับทุก ๆ คนครับ

Saturday, September 17, 2016

MPLS ตอนที่ 1 ทำความรู้จักกับการทำงานของ MPLS ใน Dataplane




ในปัจจุบัน ได้มีการใช้งาน MPLS ในหลากหลายรูปแบบ ไม่ว่าจะเป็นการใช้งาน MPLS สำหรับการเชื่อมต่อเครือข่าย WAN หรือแม้กระทั่งการใช้งานในเครือข่ายภายในหรือใน data center ภายในของแต่ละองค์กร เหตุผลที่ MPLS ได้รับความนิยมในการใช้งานในปัจจุบัน ก็เนื่องมาจาก MPLS เป็นเทคโนโลยีการสื่อสารข้อมูลความเร็วสูง ที่สามารถตอบสนองต่อรูปแบบการทำงานได้หลากหลาย รองรับการทำงานร่วมกันของโปรโตคอลต่าง ๆ ได้เป็นอย่างดี ซึ่งในวันนี้ผมจะมาแนะนำให้ได้รู้จักรายระเอียดการทำงานของ MPLS ใน dataplane กันครับ

ก่อนที่จะมากล่าวถึงการทำงานของ MPLS กันนั้น ก่อนอื่น จะขอกล่าวถึงการทำงานโดยทั่วไปของอุปกรณ์เครือข่ายกันก่อนครับ โดยทั่วไปอุปกรณ์เครือข่ายจะแบ่งการทำงานออกเป็น 3 ส่วนหลัก ๆ คือ
  1. Control Plane จะทำหน้าที่ในการสร้างเส้นทางระหว่างต้นทางไปยังปลายทาง เช่น การทำงานของ routing protocol ต่าง ๆ การทำงานของ ARP table ในเครือข่าย MPLS ก็จะใช้งาน control plane ในการสร้างและส่งต่อข้อมูล label หรือนำมาสร้าง LFIB table เป็นต้น
  2. Data Plane ทำหน้าที่ในการส่งต่อข้อมูลของผู้ใช้ปลายทาง ตัวอย่างเช่น เราเตอร์ใน IP network จะทำการส่งต่อแพ็คเก็ตจากข้อมูลใน FIB table ส่วนเราเตอร์ที่ทำงานอยู่ในเครือข่าย MPLS ก็จะตัดสินส่งต่อแพ็คเก็ตโดยใช้ข้อมูลจาก LFIB table เป็นต้น
  3. 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
  1. (ในทางทฤษฏี) การใช้งาน MPLS จะมีความเร็วในการส่งต่อแพ็คเก็ตสูงกว่าการใช้งาน IP แบบปกติ เนื่องด้วย MPLS จะทำการส่งต่อแพ็คเก็ตโดยดูจาก MPLS label เป็นหลัก เป็นการหลีกเลี่ยงการส่งต่อแพ็คเก็ตจาก routing table ตามปกติ ซึ่งมีความซับซ้อนในการทำงานมากกว่า จึงทำให้ MPLS สามารถส่งต่อแพ็คเก็ตได้เร็วกว่าเนื่องจากมันมีความซับซ้อนน้อยกว่านั่นเอง
  2. องรับการทำงานร่วมกับโปรโตคอลได้หลากหลาย 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 เป็นต้น
  3. รองรับการขยายตัวในอนาคตได้ดี ในการทำงานของ 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 บนเราเตอร์
P1#show mpls forwarding-table
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
22         Pop Label  172.16.1.3/32    0             Et0/0      192.168.20.1
23         Pop Label  172.16.1.1/32    0             Et0/1      192.168.10.1
24         32         10.8.8.0/24      590           Et0/0      192.168.20.1
25         16         10.1.1.0/24      0             Et0/1      192.168.10.1
26         Pop Label  172.16.10.0/30   570           Et0/1      192.168.10.1
27         Pop Label  172.16.20.0/30   0             Et0/0      192.168.20.1


การทำงานระหว่างเราเตอร์กับ 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 ดังนี้
  1. โฮสต์ 10.1.1.1 ทำการสร้างและส่งแพ็คเก็ตธรรมดาที่ไม่มี MPLS header ไปยังโฮสต์ปลายทาง 10.8.8.8
  2. เราเตอร์ CE1 ที่ไม่มีการตั้งค่าใช้งาน MPLS ได้รับแพ็คเก็ตเข้ามา และตัดสินใจส่งต่อตามข้อมูล destination IP ตามปกติ โดยไม่ทำอะไรเกี่ยวกับ label
  3. เราเตอร์ LSR PE1 ได้รับแพ็คเก็ตที่ไม่มี label เข้ามา และตัดสินใจที่จะทำการส่งต่อแพ็คเก็ตนี้เข้าไปยังเครือข่าย MPLS มันจะทำกระบวนการ Push labal (24) เข้าไปยังแพ็คเก็ตและทำการส่งต่อแพ็คเก็ตนั้นไปยัง P1 ต่อไป 
  4. เราเตอร์ LSR P1 ได้รับแพ็คเก็ตที่มี label เป็น 24 เข้ามา มันจะใช้ข้อมูลที่อยู่ใน LFIB เพื่อดูว่า outgoing label ของ local label 24 เป็นค่าอะไร ซึ่งปรากฏว่า P1 จะต้องทำการ Swap label จาก 24 เป็น 32 ก่อนที่จะทำการส่งแพ็คเก็ตต่อไป
  5. เราเตอร์ LSR PE2 ได้รับแพ็คเก็ตที่มี label เป็น 32 เข้ามา มันก็จะเรียกดูข้อมูล outgoing label จาก LFIB ซึ่งพบว่่าเป็นค่า  "No Label" มันจึงทำการ Pop label ออก ก่อนที่จะทำการส่งต่อแพ็คเก็ตต่อไปยังเราเตอร์ CE2 (ไม่เกิดกระบวนการ PHP เนื่องจากโดยปกติ PHP จะเกิดขึ้นในกรณีที่เป็น connected หรือ summary route เท่านั้น)
  6. เราเตอร์ CE2 ที่ไม่มีการตั้งค่าใช้งาน MPLS ได้รับแพ็คเก็ตเข้ามา และตัดสินใจส่งต่อแพ็คเก็ตตามข้อมูล destination IP ตามปกติ ไปยังปลายทาง

การส่งต่อแพ็คเก็ตด้วย FIB และ LFIB


ในการส่งต่อแพ็คเก็ตของเราเตอร์ จะเรียกดูข้อมูลที่จำเป็นต่อการส่งต่อแพ็คเก็ตจาก FIB และ LFIB table เช่นอินเทอร์เฟสขาออก (outgoing interface) หรือข้อมูลของอุปกรณ์ตัวถัดไป (next-hop) โดยสิ่งที่ FIB และ LFIB ต่างกันก็คือ FIB จะใช้สำหรับการส่งต่อ IP packet ที่ไม่มีการใช้งาน label ส่วน LFIB จะใช้สำหรับส่งต่อ MPLS packet ที่มีการใช้งาน label อยู่ ภาพด้านล่าง แสดงรายละเอียดของเราเตอร์ LSR 3 ตัว ที่มีการใช้งาน FIB, LFIB ตามภาพ จะมีรายละเอียดการทำงาน ดังนี้


เมื่อเราเตอร์ PE1 ได้รับแพ็คเก็ตที่ไม่มี label เข้ามา เราเตอร์ PE1 จะดึงข้อมูล destination IP ของแพ็คเก็ตมาตรวจสอบกับ FIB table ว่าตรงกับ prefix ปลายทางใดบ้างใน FIB table (10.8.8.0/24) เมื่อพบแล้วก็จะทำการส่งแพ็คเก็ตไปทางอินเทอร์เฟสขาออกตามข้อมูลใน FIB table พร้อมกับทำการ Push label 24 เข้าไปในแพ็คเก็ตด้วย

ตัวอย่างรายละเอียด FIB table และ Adjacency table บน PE1
PE1#show ip cef 10.8.8.0
10.8.8.0/24
  nexthop 192.168.10.2 Ethernet0/0 label 24

PE1#show adjacency 192.168.10.2 detail
Protocol Interface                 Address
TAG      Ethernet0/0               192.168.10.2(7)
                                   10 packets, 1180 bytes
                                   epoch 0
                                   sourced in sev-epoch 0
                                   Encap length 14
                                   AABBCC001C10AABBCC001B008847
                                   ARP

ทราฟิกก่อนเข้าสู่เราเตอร์ PE1 จะยังไม่มี MPLS header 

ทราฟิกที่เราเตอร์ PE1 ส่งออกไปยังเราเตอร์ P1 จะเห็นว่ามีการเพิ่ม MPLS header ที่มี label เป็น 24 ระหว่าง datalink header (ethernet header) และ network header (IP header)

เมื่อแพ็คเก็ตถูกส่งมายังเราเตอร์ P1 มันจะทำการตรวจสอบ MPLS header โดยจะใช้ข้อมูลที่อยู่ใน LFIB เพื่อทำการค้นหารายการ local label 24 ว่ามี outgoing label เป็นค่าอะไร ซึ่งปรากฏว่ามีค่า outgoing label เป็น 32 ดังนั้นเราเตอร์ P1 จะทำการ Swap label จาก 24 เป็น 32 ก่อนที่จะทำการส่งแพ็คเก็ตต่อไปยังเราเตอร์ PE2

ตัวอย่างรายละเอียด LFIB table บน P1
P1#show mpls forwarding-table 10.8.8.0
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
24         32         10.8.8.0/24      590           Et0/0      192.168.20.1

ทราฟิกที่เราเตอร์ P1 ส่งออกไปยังเราเตอร์ PE2 จะเห็นว่ามีการ Swap label จาก 24 กลายเป็น 32 แล้ว

เมื่อเราเตอร์ PE2 ได้รับแพ็คเก็ตเข้ามา ก็จะใช้ LFIB ในการตรวจสอบ local label 32 ว่ามี outgoing label เป็นค่าอะไร ซึ่งพบว่ามี outgoing label เป็น "No label" ดังนั้นเราเตอร์ PE2 จึงทำการ Pop label ออกจากแพ็คเก็ต และทำการส่งต่อแพ็คเก็ตไปโดยไม่มี MPLS header รวมอยู่ด้วย ไปยังปลายทางต่อไป

ตัวอย่างรายละเอียด LFIB table บน PE2
PE2#show mpls forwarding-table 10.8.8.0
Local      Outgoing   Prefix           Bytes Label   Outgoing   Next Hop
Label      Label      or Tunnel Id     Switched      interface
32         No Label   10.8.8.0/24      570           Et0/0      172.16.20.2


ทราฟิกที่เราเตอร์ PE2 ส่งออกไปยังปลายทาง จะเห็นว่าไม่มี MPLS header อีกแล้ว เนื่องจากเราเตอร์ PE2 เป็นเราเตอร์ตัวสุดท้ายในเครือข่าย MPLS จึงทำการ Pop label ออกก่อนที่จะส่งข้อมูลต่อไป

เราเตอร์ P1 และ PE2 ในตัวอย่างนี้ จะไม่ได้ใช้งาน destination IP เพื่อเลือกเส้นทางในการส่งต่อแพ็คเก็ตแต่อย่างใด เนื่องจากมันเป็นเราเตอร์ที่ทำงานอยู่ในเครือข่าย MPLS ที่จะทำการส่งต่อข้อมูลโดยดูจาก label เป็นหลัก และข้อมูลที่โอสต์ต้นทางส่งมาและโอสต์ปลายทางได้รับไปนั้น จะเห็นว่าเป็นข้อมูลแบบปกติที่ไม่มี  MPLS header อยู่ในแพ็คเก็ตแต่อย่างใด ทำให้โฮสต์ต้นทางและโฮสต์ปลายทางสามารถที่จะรับ-ส่งข้อมูลกันได้ตามปกติ โดยที่ไม่ทราบเลยว่ามีการใช้งาน MPLS อยู่ในส่วนหนึ่งของระบบเครือข่าย

สำหรับบทความในวันนี้จะขอจบลงแต่เพียงเท่านี้ก่อนนะครับ เนื้อหาในบทความนี้ยังเป็นแค่ส่วนเล็ก ๆ ส่วนนึงของ MPLS ทั้งหมดเท่านั้น ในบทความนี้จะกล่าวถึง MPLS ในมุมของการทำงานบน Dataplane หรือกล่าวถึงวิธีการใช้งาน LFIB table เท่านั้น ส่วนวิธีการสร้าง LFIB table ขึ้นมาจะขอกล่าวถึงในบทความต่อ ๆ ไป ในเรื่อง MPLS บน Control Plane นะครับ

บทความเรื่อง MPLS ที่เกี่ยวข้อง
MPLS ตอนที่ 1 ทำความรู้จักกับการทำงานของ MPLS ใน Dataplane
MPLS ตอนที่ 2 การทำงานของ MPLS TTL propagation
MPLS ตอนที่ 3 ทำความรู้จักกับการทำงานของ MPLS ใน Control Plane
MPLS ตอนที่ 4 การตั้งค่า MPLS สำหรับการส่งต่อ Unicast IP

No comments:

Post a Comment