กระบวนการส่งต่อข้อมูลบนเราเตอร์ หรือที่เรียกว่า "IP forwarding" หรือ "IP routing" เป็นกระบวนการที่จะเกิดขึ้นเมื่อเราเตอร์ได้รับแพ็คเก็ตเข้ามาทางอินเทอร์เฟสขาเข้า จากนั้นก็จะทำการตัดสินใจว่าจะส่งต่อแพ็คเก็ตนี้ไปในเส้นทางใด ก่อนที่จะทำการส่งต่อแพ็คเก็ตออกไปยังอินเทอร์เฟสขาออก ซึ่งกระบวนการที่ว่านี้ จะถือว่าเป็นหัวในสำคัญในการทำงานของเราเตอร์หรืออุปกรณ์ในระดับ Layer 3 และโดยปกติแล้ว เนื่องจากเราเตอร์จะต้องทำการส่งต่อแพ็คเก็ตจำนวนมากให้ได้อย่างรวดเร็วที่สุด ดังนั้นเพื่อให้เราเตอร์สามารถทำงานได้อย่างมีประสิทธิภาพสูงสุด ก็จะต้องทำให้กระบวนการนี้มีการทำงานที่ซับซ้อนน้อยที่สุดด้วย จึงได้มีการพัฒนารูปแบบในการส่งต่อข้อมูลขึ้นมาหลากหลายวิธี โดยจะขอแนะนำให้ได้รู้จักกันในบทความนี้ครับ
กระบวนการส่งต่อข้อมูลบนเราเตอร์โดยปกติตั้งแต่ดั้งเดิม จะมีขั้นตอนดังนี้
กระบวนการส่งต่อข้อมูลของเราเตอร์ เมื่อโฮสต์ต้นทาง (10.0.0.1) ต้องการส่งข้อมูลไปยังโฮสต์ปลายทาง (30.0.0.1) |
- เมื่อเราเตอร์ได้รับเฟรมเข้ามา จะทำการตรวจสอบ Frame Check Sequence (FCS) : ถ้ามี errors เกิดขึ้น เฟรมนั้นจะถูกทิ้งไป
- ถ้าไม่พบ errors เกิดขึ้น เราเตอร์จะทำการตรวจสอบ field Ethernet Type ว่าเฟรมที่ได้รับมาเป็นข้อมูลชนิดใด ก่อนที่จะทำการถอด Data Link Header (Layer 2) ออกไป
- จากนั้น ถ้าเป็นแพ็คเก็ต IPv4 จะทำการตรวจสอบ header checksum ซึ่งถ้าในกรณีที่ไม่ตรง แพ็คเก็ตนั้นจะถูกทิ้งไป แต่ถ้าเป็นแพ็คเก็ต IPv6 จะไม่มีการตรวจสอบ header checksum แต่อย่างใดเนื่องจาก IPv6 header จะไม่มี field header checksum
- ถ้าผ่านการตรวจสอบ header checksum เราเตอร์จะทำการตรวจสอบว่าหมายเลขที่อยู่ปลายทาง (destination IP address) ของแพ็คเก็ต เป็นหมายเลขที่อยู่อันใดอันหนึ่งบนอินเทอร์เฟสของเราเตอร์หรือไม่ ถ้าใช่ แพ็คเก็ตนั้นก็จะสิ้นสุดอยู่ที่เราเตอร์ตัวนี้ และก็จะทำการส่งต่อข้อมูลไปยัง Layer ในลำดับชั้นถัดไป
- ถ้าหมายเลขที่อยู่ปลายทาง (destination IP address) ของแพ็คเก็ตไม่ใช่หมายเลขที่อยู่ของเราเตอร์ตัวปัจจุบัน แสดงว่าจะต้องมีการส่งต่อแพ็คเก็ตนั้นต่อไป ซึ่งเราเตอร์จะทำการตรวจสอบค่า TTL ก่อนว่ามีค่ามากกว่า 1 หรือไม่ ถ้าไม่ แพ็คเก็ตนั้นจะถูกทิ้งไป และเราเตอร์จะทำการส่ง ICMP Time Exceeded message กลับไปยังต้นทางที่ส่งแพ็คเก็ตมา
- ถ้ามีค่า TTL มากกว่า 1 เราเตอร์จะทำการตรวจสอบหมายเลขที่อยู่ปลายทาง (destination IP address) กับ Routing Table เพื่อหาค่า prefix (subnet) ที่ตรงหรือใกล้เคียงกับหมายเลขที่อยู่ปลายทางมากที่สุด ที่จะใช้ในการส่งต่อแพ็คเก็ตไปยังปลายทางได้
- ข้อมูลเส้นทางบน Routing Table จะประกอบไปด้วย outgoing interface และ next-hop router ซึ่งเราเตอร์ก็จะใช้ข้อมูลนี้ในการค้นหา Layer 2 address ของอุปกรณ์ถัดไป (next-hop) จากตารางที่เกี่ยวข้อง เช่น ARP, IP/DLCI, IP/VPI-VCI, dialer maps และอื่น ๆ เพื่อใช้ในการสร้าง header และเฟรมใหม่ สำหรับการส่งต่อแพ็คเก็ตไปยังปลายทางต่อไป
- ก่อนที่จะทำการสร้างเฟรมใหม่ขึ้นมา เราเตอร์จะทำการปรับลดค่า IP header TTL หรือ Hop count ลงหนึ่งค่า และจะทำการคำนวณ IPv4 header checksum ใหม่
- เราเตอร์จะทำการ encapsulation แพ็คเก็ตนี้ด้วย Data Link header ที่ได้สร้างขึ้นมาใหม่ ก่อนที่จะทำการส่งต่อข้อมูลนั้นไปยังปลายทางต่อไป
กระบวนการที่ว่ามานี้ จะเป็นกระบวนการในการทำงานเบื้องต้นของเราเตอร์ ซึ่งในปัจจุบันได้มีการปรับปรุงขั้นตอนต่าง ๆ ให้อุปกรณ์สามารถทำงานได้อย่างรวดเร็วมากขึ้น ไม่ว่าจะเป็น Fast Switching หรือ CEF
ในปัจจุบัน Switching Path บน Cisco IOS Router ได้มี 3 วิธีการ ดังนี้
- Process Switching
- Fast Switching
- Cisco Express Forwarding (CEF)
Process Switching
เป็นกระบวนการทำงานตั้งแต่ดั้งเดิมของเราเตอร์ โดยรายละเอียดจะมีการทำงานตามขั้นตอนด้านบน โดยเราเตอร์จะทำการตรวจสอบและค้นหาข้อมูลเส้นทางที่ดีที่สุดสำหรับทุก ๆ แพ็คเก็ตที่ได้รับเข้ามา และจะต้องมีการสร้าง Data Link header ขึ้นมาใหม่ โดยจะทำการดึงข้อมูลจาก Table อื่น ๆ อย่างเช่น ARP, DLCI, VPI-VCI ในทุก ๆ ครั้งที่จะทำการส่งต่อเฟรมออกไปยังอินเทอร์เฟสขาออก โดยแพ็คเก็ตต่อ ๆ มาที่มีปลายทางเดียวกัน ก็จะถูกส่งต่อไปในเส้นทางเดียวกันเสมอ ซึ่งการทำงานในรูปแบบนี้ จะทำงานได้ค่อนข้างช้า เนื่องจากเราเตอร์จะต้องทำการประมวลผลด้วยการตรวจสอบหมายเลขที่อยู่ปลายทางของทุก ๆ แพ็คเก็ต (ขั้นตอนที่ 6 จากกระบวนการด้านบน) และจะต้องทำการดึงข้อมูล Data Link header ของอุปกรณ์ถัดไปที่ใช้ในการส่งต่อข้อมูลไปยังปลายทางจาก Layer 3 to Layer 2 mapping Table อย่างเช่น ARP table, หรือ Frame-relay mapping Table มาสร้าง header ใหม่ (ขั้นตอนที่ 7 จากกระบวนการด้านบน) ก่อนที่จะสามารถทำการส่งต่อข้อมูลไปยังปลายทางต่อไปได้ และในทุก ๆ ครั้งที่ส่งแพ็คเก็ตใหม่ไม่ว่าจะมีปลายทางเดียวกันหรือไม่ ก็จะต้องเริ่มกระบวนการนี้ใหม่ทั้งหมด
Fast Switching
การทำงานของ Fast Switching จะยังคงต้องมีการประมวลผลแพ็คเก็ตที่เข้ามาด้วยวิธีการแบบ Process Switching อยู่ แต่เมื่อมีแพ็คเก็ตแรกถูกส่งต่อไปยังปลายทางแล้ว ข้อมูลเส้นทางนั้น ๆ ก็จะถูกนำไปเก็บไว้ใน Switching Cache หรือที่เรียกว่า Route Cache ซึ่งจะประกอบไปด้วยข้อมูลต่าง ๆ ที่จำเป็นสำหรับการส่งต่อแพ็คเก็ตไปยังปลายทาง ไม่ว่าจะเป็น หมายเลขที่อยู่ปลายทาง (/32), ข้อมูลของ next-hop และข้อมูล Data Link สำหรับที่จะนำไปสร้าง header ใหม่ ที่จะใช้ในการส่งเฟรมไปยังอุปกรณ์ตัวถัดไป (ขั้นตอนที่ 7 จากกระบวนการด้านบน) โดยถ้าในอนาคตมีแพ็คเก็ตที่ต้องการไปยังปลายทางเดียวกันเข้ามา เราเตอร์ก็จะสามารถใช้ข้อมูลที่อยู่ใน Switching cache ในการส่งต่อแพ็คเก็ตไปได้ทันที ไม่ต้องทำการตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table ในทุก ๆ แพ็คเก็ต และไม่ต้องทำการดึงข้อมูลจาก Layer 3 to Layer 2 mapping Table ใหม่ ทำให้ Fast Switching จะใช้เวลาในการประมวลผลโดยรวมน้อยกว่าการทำงานแบบ Process Switching
แต่อย่างไรก็ตาม ถึงแม้ว่า Fast Switching จะสามารถทำงานได้ดีกว่า Process Switching ก็ตาม แต่ก็ยังจะต้องมีการตรวจสอบหมายเลขที่อยู่ปลายทางของแต่ละแพ็คเก็ตกับ Routing Table ในครั้งแรกที่จะส่งข้อมูลไปยังปลายทางนั้น ๆ อยู่ จากนั้นเราเตอร์จึงจะสามารถสร้าง cache ขึ้นมาได้ โดย cache ที่สร้างขึ้นมานี้ จะทำการเก็บรายการตามหมายเลขที่อยู่ปลายทางในแต่ละแพ็คเก็ตที่ได้รับมา (/32) ไม่ใช่ตาม subnet หรือ prefix ของปลายทาง ทำให้จะมีการใช้งาน memory เป็นจำนวนมาก ซึ่งถ้าเราเตอร์ตัวนั้น ๆ ได้รับแพ็คเก็ตไปยังปลายทางที่ไม่มีข้อมูลอยู่ใน cache เป็นจำนวนมาก ก็จะยังคงส่งผลต่อการทำงานของ CPU ในการตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table อยู่ดี และในกรณีที่มีมากกว่าหนึ่งเส้นทางที่สามารถใช้ในการส่งต่อข้อมูลไปยังปลายทางได้ จะสามารถทำ load balance ได้แต่เพียงรูปแบบ per destination เท่านั้น
ในการเปิดการทำงานของ Fast Switching นั้น สามารถทำได้ด้วยการใช้คำสั่ง "ip route-cache" ใน interface configuration mode และสามารถใช้คำสั่ง "show ip cache" ในการตรวจสอบรายการภายใน cache ได้
ในปัจจุบัน ได้มีการพัฒนารูปแบบ Switching Path ด้วยวิธีการอื่น ๆ อีก เช่น Cisco Express Forwarding (CEF) ซึ่งเป็นทางเลือกแรกในการใช้งานบน Cisco IOS Router ในปัจจุบัน ส่วน Fast Switching นี้ ก็ยังคงรองรับการตั้งค่าอยู่ แต่จะไม่ค่อยพบเห็นในการใช้งานจริงเท่าไร และมีโอกาสที่ Cisco IOS ในอนาคตจะไม่รองรับการทำงานแบบ Fast Switching อีกต่อไป
ตัวอย่างการใช้งาน Fast Switching บนอุปกรณ์เราเตอร์
Cisco Express Forwarding (CEF)
เป็นวิธีการที่นิยมใช้งานมากที่สุดในปัจจุบัน เราเตอร์จะสามารถส่งต่อแพ็คเก็ตได้รวดเร็วมากกว่าการใช้งาน Process Switching และ Fast Switching โดยในการทำงานจะมีส่วนประกอบที่สำคัญอยู่ 2 ส่วนคือ
เป็นกระบวนการทำงานตั้งแต่ดั้งเดิมของเราเตอร์ โดยรายละเอียดจะมีการทำงานตามขั้นตอนด้านบน โดยเราเตอร์จะทำการตรวจสอบและค้นหาข้อมูลเส้นทางที่ดีที่สุดสำหรับทุก ๆ แพ็คเก็ตที่ได้รับเข้ามา และจะต้องมีการสร้าง Data Link header ขึ้นมาใหม่ โดยจะทำการดึงข้อมูลจาก Table อื่น ๆ อย่างเช่น ARP, DLCI, VPI-VCI ในทุก ๆ ครั้งที่จะทำการส่งต่อเฟรมออกไปยังอินเทอร์เฟสขาออก โดยแพ็คเก็ตต่อ ๆ มาที่มีปลายทางเดียวกัน ก็จะถูกส่งต่อไปในเส้นทางเดียวกันเสมอ ซึ่งการทำงานในรูปแบบนี้ จะทำงานได้ค่อนข้างช้า เนื่องจากเราเตอร์จะต้องทำการประมวลผลด้วยการตรวจสอบหมายเลขที่อยู่ปลายทางของทุก ๆ แพ็คเก็ต (ขั้นตอนที่ 6 จากกระบวนการด้านบน) และจะต้องทำการดึงข้อมูล Data Link header ของอุปกรณ์ถัดไปที่ใช้ในการส่งต่อข้อมูลไปยังปลายทางจาก Layer 3 to Layer 2 mapping Table อย่างเช่น ARP table, หรือ Frame-relay mapping Table มาสร้าง header ใหม่ (ขั้นตอนที่ 7 จากกระบวนการด้านบน) ก่อนที่จะสามารถทำการส่งต่อข้อมูลไปยังปลายทางต่อไปได้ และในทุก ๆ ครั้งที่ส่งแพ็คเก็ตใหม่ไม่ว่าจะมีปลายทางเดียวกันหรือไม่ ก็จะต้องเริ่มกระบวนการนี้ใหม่ทั้งหมด
Fast Switching
การทำงานของ Fast Switching จะยังคงต้องมีการประมวลผลแพ็คเก็ตที่เข้ามาด้วยวิธีการแบบ Process Switching อยู่ แต่เมื่อมีแพ็คเก็ตแรกถูกส่งต่อไปยังปลายทางแล้ว ข้อมูลเส้นทางนั้น ๆ ก็จะถูกนำไปเก็บไว้ใน Switching Cache หรือที่เรียกว่า Route Cache ซึ่งจะประกอบไปด้วยข้อมูลต่าง ๆ ที่จำเป็นสำหรับการส่งต่อแพ็คเก็ตไปยังปลายทาง ไม่ว่าจะเป็น หมายเลขที่อยู่ปลายทาง (/32), ข้อมูลของ next-hop และข้อมูล Data Link สำหรับที่จะนำไปสร้าง header ใหม่ ที่จะใช้ในการส่งเฟรมไปยังอุปกรณ์ตัวถัดไป (ขั้นตอนที่ 7 จากกระบวนการด้านบน) โดยถ้าในอนาคตมีแพ็คเก็ตที่ต้องการไปยังปลายทางเดียวกันเข้ามา เราเตอร์ก็จะสามารถใช้ข้อมูลที่อยู่ใน Switching cache ในการส่งต่อแพ็คเก็ตไปได้ทันที ไม่ต้องทำการตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table ในทุก ๆ แพ็คเก็ต และไม่ต้องทำการดึงข้อมูลจาก Layer 3 to Layer 2 mapping Table ใหม่ ทำให้ Fast Switching จะใช้เวลาในการประมวลผลโดยรวมน้อยกว่าการทำงานแบบ Process Switching
แต่อย่างไรก็ตาม ถึงแม้ว่า Fast Switching จะสามารถทำงานได้ดีกว่า Process Switching ก็ตาม แต่ก็ยังจะต้องมีการตรวจสอบหมายเลขที่อยู่ปลายทางของแต่ละแพ็คเก็ตกับ Routing Table ในครั้งแรกที่จะส่งข้อมูลไปยังปลายทางนั้น ๆ อยู่ จากนั้นเราเตอร์จึงจะสามารถสร้าง cache ขึ้นมาได้ โดย cache ที่สร้างขึ้นมานี้ จะทำการเก็บรายการตามหมายเลขที่อยู่ปลายทางในแต่ละแพ็คเก็ตที่ได้รับมา (/32) ไม่ใช่ตาม subnet หรือ prefix ของปลายทาง ทำให้จะมีการใช้งาน memory เป็นจำนวนมาก ซึ่งถ้าเราเตอร์ตัวนั้น ๆ ได้รับแพ็คเก็ตไปยังปลายทางที่ไม่มีข้อมูลอยู่ใน cache เป็นจำนวนมาก ก็จะยังคงส่งผลต่อการทำงานของ CPU ในการตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table อยู่ดี และในกรณีที่มีมากกว่าหนึ่งเส้นทางที่สามารถใช้ในการส่งต่อข้อมูลไปยังปลายทางได้ จะสามารถทำ load balance ได้แต่เพียงรูปแบบ per destination เท่านั้น
ในการเปิดการทำงานของ Fast Switching นั้น สามารถทำได้ด้วยการใช้คำสั่ง "ip route-cache" ใน interface configuration mode และสามารถใช้คำสั่ง "show ip cache" ในการตรวจสอบรายการภายใน cache ได้
ในปัจจุบัน ได้มีการพัฒนารูปแบบ Switching Path ด้วยวิธีการอื่น ๆ อีก เช่น Cisco Express Forwarding (CEF) ซึ่งเป็นทางเลือกแรกในการใช้งานบน Cisco IOS Router ในปัจจุบัน ส่วน Fast Switching นี้ ก็ยังคงรองรับการตั้งค่าอยู่ แต่จะไม่ค่อยพบเห็นในการใช้งานจริงเท่าไร และมีโอกาสที่ Cisco IOS ในอนาคตจะไม่รองรับการทำงานแบบ Fast Switching อีกต่อไป
ตัวอย่างการใช้งาน Fast Switching บนอุปกรณ์เราเตอร์
R1#show ip cache
IP routing cache 2 entries, 360 bytes
2 adds, 0 invalidates,
0 refcounts
Minimum invalidation interval 2 seconds, maximum interval 5
seconds,
quiet interval 3
seconds, threshold 0 requests
Invalidation rate 0 in last second, 0 in last 3 seconds
Last full cache invalidation occurred 00:35:49 ago
Prefix/Length
Age Interface Next Hop
10.0.0.10/32
00:00:04 FastEthernet0/1
10.0.0.10
192.168.0.0/24
00:00:04 FastEthernet0/0 10.1.3.2
Cisco Express Forwarding (CEF)
เป็นวิธีการที่นิยมใช้งานมากที่สุดในปัจจุบัน เราเตอร์จะสามารถส่งต่อแพ็คเก็ตได้รวดเร็วมากกว่าการใช้งาน Process Switching และ Fast Switching โดยในการทำงานจะมีส่วนประกอบที่สำคัญอยู่ 2 ส่วนคือ
- Adjacency Table คือข้อมูลในระดับ Data Link header ที่เตรียมไว้สำหรับส่งต่อข้อมูลไปยังอุปกรณ์ตัวถัดไป (next-hop)
- Forwarding Information Base (FIB) คือข้อมูล prefix หรือ subnet ของปลายทางทั้งหมดที่่ได้เรียนรู้มาจาก Routing Table
Adjacency Table
จากการทำงานของ Process Switching และ Fast Switching จะเห็นว่า เมื่อเราเตอร์ทำการค้นหาเส้นทางในการส่งต่อข้อมูลได้แล้ว ก็จะต้องมีการสร้าง Data Link header ขึ้นมาใหม่ (ขั้นตอนที่ 7 จากกระบวนการด้านบน) ซึ่งภายใน Data Link header ก็จะประกอบไปด้วย Layer 2 address ของอุปกรณ์ตัวถัดไป (next-hop) ด้วย เพื่อให้สามารถทำการส่งต่อข้อมูลไปยังปลายทางได้อย่างถูกต้อง โดยในการที่จะทราบถึง Layer 2 address ของอุปกรณ์ตัวถัดไปได้นั้น ก็จะต้องอาศัยข้อมูลจาก Layer 3 to Layer 2 mapping table อย่างเช่น ARP table หรือ Frame-relay mapping table ซึ่งในทุก ๆ ครั้งที่มีการส่งต่อแพ็คเก็ตไปยังปลายทาง (ในกรณี Process Switching) หรือทุกครั้งที่มีแพ็คเก็ตไปยังปลายทางที่ไม่มีข้อมูลอยู่ใน cache ครั้งแรก (ในกรณี Fast Switching) ก็จะต้องมีการดึงข้อมูลจาก Layer 3 to Layer 2 mapping table ต่าง ๆ ทุกครั้ง และยิ่งในกรณีที่ไม่มีข้อมูล Layer 3 to Layer 2 mapping อยู่ในช่วงเวลานั้น (อย่างเช่น arp timeout) ก็จะต้องเกิดกระบวนการค้นหา Layer 3 to Layer 2 address กันใหม่ ซึ่งจะทำให้เสียเวลาขึ้นไปอีก
ดังนั้น ในการทำงานของ CEF จึงได้มีการสร้างตารางชนิดใหม่ขึ้นมา สำหรับใช้ในการเก็บข้อมูลที่เกี่ยวข้องสำหรับใช้ในการสร้าง Data Link header สำหรับการส่งต่อแพ็คเก็ตไปยังอุปกรณ์ตัวถัดไปขึ้นมาโดยเฉพาะ โดยจะเรียกว่า Adjacency Table ซึ่งภายในจะประกอบไปด้วย ข้อมูลอินเทอร์เฟสขาออก และข้อมูล Layer 2 address ของอุปกรณ์ตัวถัดไป ที่จะนำมาใช้ในการสร้าง Data Link header ขึ้นมา โดย Adjacency Table นี้ จะถูกสร้างขึ้นมาโดยอัตโนมัติ เมื่อเปิดการทำงานของ CEF (ด้วยคำสั่ง "ip cef" ใน global configuration mode) และเมื่อมีการสร้างรายการบน Routing Table ขึ้นมา (สามารถตรวจสอบได้โดยการใช้คำสั่ง "show adjacency") ในการทำงาน ก็จะไปทำการตรวจสอบบน Routing Table ว่ามีหมายเลขที่อยู่ของอุปกรณ์ตัวถัดไป (next-hop address) เป็นหมายเลขอะไรบ้าง จากนันก็จะทำการดึข้อมูล Layer 2 address ของอุปกรณ์ตัวถัดไป มาจาก Layer 3 to Layer 2 mapping table ต่าง ๆ เช่น ARP Table มาเก็บไว้ใน Adjacency Table เมื่อเราเตอร์ต้องการส่งต่อแพ็คเก็ตไปยังปลายทาง ก็จะสามารถส่งต่อข้อมูลได้ทันที โดยนำข้อมูลจาก Adjacency Table มาใช้ในการสร้าง Data Link header ขึ้นมาใหม่ (ขั้นตอนที่ 7 จากกระบวนการด้านบน) โดยที่ไม่ต้องไปดึงข้อมูลมากจากตารางชนิดอื่น ๆ ที่เกี่ยวข้องมาแต่อย่างใด ส่งผลให้เราเตอร์จะสามารถทำการส่งต่อแพ็คเก็ตได้อย่างรวดเร็วมากยิ่งขึ้น
ตัวอย่าง Adjacency Table บนอุปกรณ์เราเตอร์
R1#show adjacency detail
Protocol Interface Address
IP
FastEthernet0/0
10.1.3.2(11)
0 packets, 0
bytes
Data Link
header --> C20223F80000C20023F800000800
ARP 04:02:01
Epoch: 0
IP Serial0/0 10.1.2.2(5)
0 packets, 0
bytes
18610800
FR-MAP never
Epoch: 0
ข้อมูลใน Adjacency Table จะนำมาใช้ในการสร้าง Data Link Header ในการส่งต่อแพ็คเก็ตไปยังปลายทาง |
Forwarding Information Base (FIB)
ในการทำงานของ Fast Switching เราเตอร์จะทำการสร้างรายการ cache ขึ้นมา เมื่อมีแพ็คเก็ตแรกถูกส่งต่อไปยังแต่ละปลายทาง ซึ่งจะยังคงต้องมีการตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table อยู่ แต่ด้วยการทำงานของ CEF จะมีการสร้างที่เก็บข้อมูล Prefix ปลายทาง ที่แยกออกมาต่างหากจาก Routing Table โดยจะเรียกว่า Forwarding Information Base (FIB) ซึ่งจะเป็นที่เก็บข้อมูลรายการ Prefix หรือ Subnet ปลายทางทั้งหมดตามที่ได้เรียนรู้มาจาก Routing Table หรือในบางครั้งจะเรียกว่า Routing Information Base (RIB) โดยเมื่อเปิดการทำงานของ CEF แล้ว เราเตอร์จะไปทำการดึงข้อมูล Prefix ที่อยู่บน Routing Table มาทำการสร้าง FIB ขึ้นมาโดยอัตโนมัติในทันที โดยที่ไม่ต้องมีการส่งต่อแพ็คเก็ตแรกก่อนเหมือนกับการทำงานของ Fast Switching แต่อย่างใด และในการส่งต่อแพ็คเก็ตไปยังปลายทางเราเตอร์ก็จะมาตรวจสอบกับรายการใน FIB ว่าจะต้องทำการส่งต่อแพ็คเก็ตไปยังอุปกรณ์ถัดไปตัวใด และจะใช้งานอินเทอร์เฟสขาออกเป็นอินเทอร์เฟสใด โดยจะไม่ได้ตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table อีกต่อไป แต่จะใช้งาน Routing Table มาเป็นข้อมูลตั้งต้นสำหรับการสร้างรายการ Prefix และ next-hop บน FIB เท่านั้น
ในแต่ละ Prefix ที่เก็บไว้บน FIB จะมีการระบุถึงหมายเลขที่อยู่ของอุปกรณ์ตัวถัดไป (next-hop) และอินเทอร์เฟสขาออกที่จะใช้ในการส่งต่อข้อมูลออกไป ซึ่งจะไปเชื่อมโยงเข้ากับ Adjacency Table ที่จะเป็นที่เก็บข้อมูลในระดับ Layer 2 ของอุปกรณ์ถัดไปที่จำเป็นสำหรับการสร้าง Data Link header ขึ้นมาใหม่ ในการทำงาน เมื่อมีแพ็คเก็ตเข้ามายังเราเตอร์ มันจะไม่ทำการตรวจสอบหมายเลขที่อยู่ปลายทางกับ Routing Table แต่จะมาทำการตรวจสอบหมายเลขที่อยู่ปลายทางกับ FIB แทน เมื่อพบว่าจะต้องทำการส่งต่อข้อมูลไปยังอุปกรณ์ถัดไปตัวใดแล้ว จากนั้นก็จะไปดึงข้อมูลในระดับ Layer 2 ของอุปกรณ์ถัดไปมาจาก Adjacency Table มาทำการสร้าง Data Link header ขึ้นมาใหม่ และทำการส่งต่อข้อมูลออกไปทางอินเทอร์เฟสขาออกต่อไป
การทำงานโดยปกติของเราเตอร์ในปัจจุบัน จะเปิดใช้งาน CEF โดย default ในกรณีที่ต้องการเปิดการทำงานด้วยตัวเอง ก็สามารถทำได้ด้วยการใช้คำสั่ง "ip cef" บน global configuration mode โดยเมื่อทำการเปิดการทำงานของ CEF แล้ว เราเตอร์จะทำการสร้าง FIB ขึ้นมาโดยอัตโนมัติ โดยสามารถเรียกดูรายการ FIB ในปัจจุบันได้ด้วยการใช้คำสั่ง "show ip cef"
ตัวอย่าง รายการ FIB บน Cisco IOS Router
R1#show ip cef
Prefix Next
Hop Interface
0.0.0.0/0
drop Null0
(default route handler entry)
0.0.0.0/32
receive
10.0.0.0/24 attached FastEthernet0/1
10.0.0.0/32
receive
10.0.0.1/32
receive
10.0.0.10/32
10.0.0.10
FastEthernet0/1
10.0.0.255/32
receive
10.1.2.0/30
attached Serial0/0
10.1.2.0/32
receive
10.1.2.1/32
receive
10.1.2.2/32
10.1.2.2 Serial0/0
10.1.2.3/32
receive
10.1.3.0/30
attached
FastEthernet0/0
10.1.3.0/32
receive
10.1.3.1/32
receive
10.1.3.2/32
10.1.3.2
FastEthernet0/0
10.1.3.3/32
receive
172.16.0.0/24
10.1.3.2
FastEthernet0/0
192.168.0.0/24
10.1.3.2
FastEthernet0/0
192.168.1.0/24
10.1.3.2
FastEthernet0/0
ในปัจจุบันนี้ อุปกรณ์ Layer 3 ไม่ว่าจะเป็นเราเตอร์หรือ Multi Layer Switch ทั้งของ Cisco หรืออุปกรณ์ยี่ห้ออื่น ๆ ก็จะรองรับการทำงานในรูปแบบ CEF ด้วยกันทั้งนั้น โดยในปัจจุบันถือเป็นคุณสมบัติที่เป็น Default ในการส่งต่อแพ็คเก็ตของอุปกรณ์ อีกทั้งในการทำงานร่วมกับคุณสมบัติอื่น ๆ อย่างเช่น MPLS ก็จะต้องมีการเปิดการทำงานของ CEF บนอุปกรณ์ด้วย ในบทความนี้ เป็นเพียงพื้นฐานการทำงานของ Switching Path ในรูปแบบต่าง ๆ แต่ในรายละเอียดในการทำงานของ CEF ยังมีอีกมาก ซึ่งขอให้ติดตามในบทความต่อ ๆ ไปนะครับ
No comments:
Post a Comment