By Arnon Puitrakul - 19 มกราคม 2024
หลังจากอินเตอร์เน็ตเฟื่องฟูมากขึ้น ผู้คนเชื่อมต่อเข้าสู่โลกอินเตอร์เน็ตมากขึ้นเรื่อย ๆ จน IP Address เวอร์ชั่นเดิม หรือคือ IPv4 มันเต็มจนต้องออก Protocol เพื่อเข้ามาแก้ปัญหาชั่วคราวเช่น NAT ณ วันนี้เรามี IPv6 ที่เข้ามาแก้ปัญหานี้เต็ม แต่สร้างปัญหาใหม่แทน เพราะไม่ใช่ทุกคนที่ใช้งาน IPv6 พร้อม ๆ กัน ดังนั้น เราต้องมีเทคนิคบางอย่างเพื่อเชื่อมคนที่ใช้ IPv4 และ IPv6 เข้าหากัน
สำหรับคนที่ยังไม่คุ้นเคยกับ Concept ของ IP Address มาก เราแนะนำให้ไปอ่านพื้นฐานในบทความก่อนหน้านี้ก่อน จะได้อิน และ เข้าใจกับเรื่องที่จะเล่าในบทความนี้มากขึ้น
ปัญหามันอยู่ที่ว่า เราใช้ Address คนละรูปแบบกัน ทำให้ถึงแม้ เราจะมีการเชื่อมต่อระบบ หรือเครื่องคอมพิวเตอร์เข้าหากันในเชิง Physical แล้ว แต่มันไม่สามารถสื่อสารกันได้ เหมือน คนนึงใช้ที่อยู่แบบนึง อีกคนใช้อีกแบบนึง ทำให้ต่างคนต่าง งง ว่า อ้าว เดี๋ยวนะ ที่ไหนนะ
นอกจากนั้น ใน Packet ส่วนของ Header ที่ส่งหากัน มันหน้าตาไม่เหมือนกันอีก จะเห็นว่า ใน Packet ของ IPv6 หลาย ๆ มันดู Lean กว่าฝั่ง IPv4 หลายส่วนอยู่ เช่นใน IPv4 เรามีส่วนที่ใช้สำหรับการทำ Fragmentation อย่าง Identification, Flag และ Fragmentation Offset แต่ใน IPv6 มันหายไป จริง ๆ มีความต่างในแง่ของ Header อีกเยอะเลย ไว้จะมาเล่าลึก ๆ อีกทีนึง
จากทั้ง Address ที่หน้าตาไม่เหมือนกัน และ Header ยังหน้าตาไม่เหมือนกันอีกทำให้เราสามารถบอกได้ว่า มันทำงานกันอยู่คนละโลกกันเลย แต่ปัญหาคือ เราไม่สามารถตื่นมาแล้วบอกว่า โอเคทุกคน เลิกใช้ IPv4 แล้วมาใช้ IPv6 กันนะ ทำให้เราจะต้องมีวิธีการบางอย่างเพื่อทำให้โลกทั้งสองมันเชื่อมเข้าหากัน
ในเมื่อเรายังต้องใช้ทั้ง IPv4 และ IPv6 กันต่อไป งั้น เราก็ทำให้ระบบของเราสามารถรองรับการทำงานทั้งสอง Protocol เลยสิ ได้หมดทั้ง v4 และ v6 ไปเลย หมายความว่า เราจำเป็นต้องตั้งค่า ระบบของเรา ให้มี Address ทั้ง v4 และ v6 เมื่อเราตั้งได้ลักษณะแบบนี้ เราจะถือว่า มันทำงานแบบ Dual Stack ทันที
ในเมื่อการทำ Dual Stack เสมือนว่า เรามีทางออก 2 Link แล้วเครื่องจะรู้ได้อย่างไรว่า มันจะไปออกฝั่ง IPv4 หรือ IPv6 ละ ทำให้เขาจะมีการกำกับ Protocol ID ไว้ที่ Ethernet Frame หรือถ้าไปดูใน Ethernet Frame Structure มันคือส่วนที่เรียกว่า Ethernet Type หากเป็น IPv4 จะใส่มาเป็น 0x0800 หากเป็น IPv6 จะออกเป็น 0x86dd แทน แล้วจึงไปออกไม่ว่าจะผ่าน TCP หรือ UDP ได้หมดไปที่ Application หรือ Service ปลายทางที่ต้องการได้ตรง ๆ
นั่นแปลว่า การทำงานแบบ Dual Stack นี้ เรายังสามารถสื่อสารกับปลายทางได้ทั้งหมด ไม่ว่าปลายทางจะรองรับ IPv4 หรือ IPv6 เราสามารถคุยได้หมดถ้าสดชื่น และเรายังเป็นต้องใช้ IPv4 ในการคุยอยู่ เหมือนเดิมเท่านั้นเลย เราคิดว่า Service ส่วนใหญ่ ณ เวลานี้ ก็น่าจะเล่นท่าแบบนี้กันเยอะ เพื่อให้รองรับทั้ง IPv4 และ IPv6 ไปพร้อม ๆ กัน
ปัญหาเกิดอีก เพราะเราไม่สามารถให้ทุกคนเปิดใช้งาน Dual Stack ได้ ด้วยหลาย ๆ เหตุผล จึงทำให้เราต้องมีอีกวิธีการมาช่วยเพื่อให้เราสามารถส่งข้อมูลได้นั่นคือ การใช้ Tunnelling
จากเดิม ถ้าเราใช้ Dual Stack เราส่งข้อมูลระหว่างระบบที่เปิดใช้ Dual Stack ไม่ว่าเราจะคุยกันผ่าน IPv4 หรือ IPv6 เรารับได้หมดถ้าสดชื่น แต่โลก Internet มันไม่ได้ทำงานแบบนั้น เราต้องส่งผ่านระบบตัวกลางอยู่หลายตัวมาก ๆ เช่นจากบ้านเราจะไป Google เราต้องออกRouter เรา ผ่านเข้า ISP ของเรา แล้วไปเข้า Google นั่นนี่เต็มไปหมด คำถามคือ แล้วถ้าเราไม่มีเส้นทางที่ตัวกลางตัวไหนเลย ที่รองรับ IPv6 หรือ Dual Stack เราจะทำยังไง
วิธีการแก้ปัญหาง่าย ๆ คือ งั้นเราก็แปลง IPv6 ให้ทำงานกับ IPv4 ได้ก็จบแล้วปะ สิ่งที่ทำจริง ๆ ก็คือ การยัด IPv6 Packet เข้าไปใส่ใน IPv4 Packet แทนเท่านั้นเลย โดย IPv6 Packet ทั้งตัวจะโดนอัดอยู่ในส่วน Payload ของ IPv4 Packet
สิ่งที่ทำคือ เมื่อเราเริ่มต้นจากส่ง IPv6 Packet ออกมา ผ่านตัวกลางนั่นนี่ จนถึงจุดที่มันเป็น Dual Stack มันมองเห็นแล้วว่า Next Hop ชิบหายละ มันไม่มีเส้นทางที่เป็น IPv6 เลย มันจะทำการยัด Packet ใส่เข้าไปใน IPv4 Packet แล้วส่งผ่าน IPv4 Network จนไปโผล่ที่ตัวกลางสักตัวที่เป็น Dual Stack เมื่อมันเห็น มันจะรู้ละว่า โอเค เราเดิน IPv6 ได้ หาก Next Hop เป็น IPv6 Address ได้มันก็จะคลาย IPv6 Packet ออกมาแล้วส่งต่อไป
ถ้าเราลองไปดูในรายละเอียดจริง ๆ มันมีวิธีการยัด IPv6 Packet หลายแบบมาก ๆ ตั้งแต่ 6in4 และ 6over4 เราขอไม่เล่ารายละเอียดว่าแต่ละตัวมันต่างกันอย่างกันอย่างไร มันมีรายละเอียดพอสมควร แยกออกไปเป็นอีกบทความได้เลย ฮ่า ๆ แต่หลักการมันจะคล้าย ๆ กันหมดนี่แหละ
ทั้ง Dual Stack และ Tunnelling เป็นวิธีการที่ทำให้เราสามารถค่อย ๆ Integrate IPv4 และ IPv6 ให้ทำงานอยู่ในระบบเดียวกันได้ เรียกว่าเป็นเหมือนเครื่องมือวิเศษเลยก็ว่าได้ สำหรับการใช้งานจริง ส่วนใหญ่หากเป็นผู้ใช้งาน Internet เราไม่จำเป็นต้องใส่ใจเท่าไหร่ เพราะทั้งหมดพวกนี้ผู้ดูแลระบบของเราจัดการหมดแล้ว หรือกระทั่ง ISP ของเราจัดการส่วนใหญ่ให้เราหมดแล้ว เช่น ถ้าเราต้องการวิ่งไปหา IPv6 เขามักจะมี Translation Service ให้เรามาแล้ว เราจึงสามารถเข้าได้ตรง ๆ ผ่าน IPv4 ได้ เราเขียนเพื่อให้รู้เฉย ๆ ว่า เบื้องหลังการทำงานมันมีอะไรมากกว่าที่เราเห็นเยอะพอสมควร
หลังจากเมื่อหลายอาทิตย์ก่อน Apple ออก Mac รัว ๆ ตั้งแต่ Mac Mini, iMac และ Macbook Pro ที่ใช้ M4 กันไปแล้ว มีหลายคนถามเราเข้ามาว่า เราควรจะเลือก M4 ตัวไหนดีถึงจะเหมาะกับเรา...
จากตอนก่อน เราเล่าเรื่องการ Host Website จากบ้านของเราอย่างปลอดภัยด้วย Cloudflare Tunnel ไปแล้ว แต่ Product ด้าน Zero-Trust ของนางยังไม่หมด วันนี้เราจะมาเล่าอีกหนึ่งขาที่จะช่วยปกป้อง Infrastructure และ Application ต่าง ๆ ของเราด้วย Cloudflare Access กัน...
ทุกคนเคยได้ยินคำว่า Mainframe Computer กันมั้ย เคยสงสัยกันมั้ยว่า มันต่างจากเครื่องคอมพิวเตอร์ที่เราใช้งานกันทั่ว ๆ ไปอย่างไรละ และ Mainframe ยังจำเป็นอยู่มั้ย มันได้ตายจากโลกนี้ไปหรือยัง วันนี้เรามาหาคำตอบไปด้วยกันเลย...
เคยมั้ยเวลา Deploy โปรแกรมสักตัว เราจะต้องมานั่ง Provision Infrastructure ไหนจะ VM และ Settings อื่น ๆ อีกมากมาย มันจะดีกว่ามั้ยถ้าเรามีเครื่องมือบางอย่างที่จะ Automate งานที่น่าเบื่อเหล่านี้ออกไป และลดความผิดพลาดที่อาจจะเกิดขึ้น วันนี้เราจะพาทุกคนมาทำความรู้จักกับ Infrastructure as Code กัน...