โลกที่ IPv6 เคยเป็นการออกแบบอันยอดเยี่ยม (2017)
(apenwarr.ca)- เครือข่ายยุคแรกที่เน้น การเชื่อมต่อแบบจุดต่อจุด แทบไม่ต้องมีระบบที่อยู่ แต่เมื่อ เครือข่ายแบบบัส แพร่หลายเพื่อประหยัดต้นทุน ความซับซ้อนอย่าง MAC address, bridging และ ARP ก็สะสมเพิ่มขึ้น
- เมื่อ Ethernet กับ IP ถูกผูกเข้าด้วยกัน จึงจำเป็นต้องมี การระบุ MAC address และ ARP broadcast เพื่อส่งต่อไปยัง next hop และภาระนี้ยิ่งขยายใหญ่ขึ้นมากในเครือข่ายที่เชื่อมต่อกันขนาดใหญ่และ wifi
- แนวคิดของ IPv6 สะท้อนความคาดหวังต่อโลกที่เรียบง่ายกว่า ซึ่งจะทิ้ง physical bus และ layer 2 internetwork ไปพร้อมกับการกำจัด broadcast, ARP, DHCP และ MAC address
- แต่ในสภาพแวดล้อมการใช้งานจริง IPv4 และ framing แบบเดิม ยังคงอยู่ ทำให้มรดกเก่าอย่าง neighbor discovery, DHCP, NAT และ layer 2 bridging ยังถูกคงไว้ด้วย
- เพื่อรักษาการเชื่อมต่อระหว่างการเคลื่อนที่ จึงยังคงใช้ layer 2 bridging และการ tunneling ผ่านศูนย์กลางแทน Internet routing และมีการกล่าวถึงทางเลือกอย่าง QUIC ว่าเป็น เส้นทางอ้อมสำหรับ roaming
จุดเริ่มต้นที่เครือข่ายแบบบัสทำให้ทุกอย่างพัง
- ในสภาพแวดล้อมสวิตช์วงจรของเครือข่ายโทรศัพท์ยุคแรกและวงจรเช่าแบบเฉพาะ มีเพียง การเชื่อมต่อแบบจุดต่อจุด จึงไม่จำเป็นต้องมีระบบที่อยู่ โครงสร้างคือบิตที่ใส่จากฝั่งหนึ่งจะโผล่ออกอีกฝั่งหลังผ่านไประยะเวลาหนึ่ง
- แม้หลังมี TDM และ การสวิตช์วงจรเสมือน จากมุมมองของผู้ใช้ก็ยังคงเป็นรูปแบบที่อินพุตฝั่งหนึ่งเชื่อมไปยังเอาต์พุตอีกฝั่งอยู่ดี และในขั้นนี้ก็ยังไม่จำเป็นต้องมีที่อยู่
- เมื่อคอมพิวเตอร์ที่มีหลายอินเทอร์เฟซเริ่มส่งต่อบิตระหว่างสายต่าง ๆ จึงเกิด IP address, subnet และ routing ขึ้นมา แต่บนลิงก์แบบจุดต่อจุดก็ยังไม่จำเป็นต้องมี MAC address
- เพื่อประหยัดค่าใช้จ่ายในการเชื่อมต่อภายในไซต์ จึงเกิด เครือข่ายแบบบัส ที่นำอุปกรณ์หลายตัวมาต่อเข้ากับสายเส้นเดียว และนอกเหนือจากสาย Internet ก็เริ่มมีระบบ layer 2 เฉพาะของตัวเองแยกกันเกิดขึ้น
- LAN ยุคแรกอย่าง arcnet ต้องตั้งค่า layer 2 address แบบ 8 บิตด้วยจัมเปอร์หรือ DIP switch ด้วยมือ และถ้ามีที่อยู่ซ้ำจะเกิดปัญหาร้ายแรง แต่เพราะเครือข่ายยังเล็ก ความไม่สะดวกนี้จึงยังจำกัดอยู่
- Ethernet นำ MAC address แบบ 48 บิตมาใช้ แก้ปัญหาที่อยู่ซ้ำด้วยวิธีกำหนดที่อยู่ซึ่งแทบจะไม่ซ้ำกันตั้งแต่ขั้นตอนการผลิต
- เทคโนโลยี LAN อย่าง IPX และ Netware ทำงานได้ดีภายในเครือข่ายบัสเดี่ยวโดยแทบไม่ต้องตั้งค่าที่อยู่ และถูกบรรยายว่าเป็นยุคที่งดงามและเชื่อถือได้
- แต่เครือข่ายขององค์กรขนาดใหญ่และมหาวิทยาลัยต้องเชื่อมบัสหลายชุดเข้าด้วยกันเพราะคอขวดของบัสเดี่ยว 10 Mbps และจึงเลือกเส้นทางขยายด้วย bridging และ switching บนพื้นฐาน Ethernet address แทน IP ที่ยังไม่สุกงอมในเวลานั้น
- ที่อยู่ Ethernet เป็นการกำหนดแบบเรียงลำดับจากโรงงาน จึงไม่มีโครงสร้างแบบลำดับชั้น ทำให้ bridging table ไม่สามารถรวมกลุ่มได้อย่างมีประสิทธิภาพเหมือน routing table สมัยใหม่ที่จัดการเส้นทางระดับ subnet
- เพื่อทำ bridging อย่างมีประสิทธิภาพ จึงต้องจำว่า MAC address แต่ละตัวอยู่บนบัสใด
- และเพื่อไม่ต้องตั้งค่าด้วยมือ จึงจำเป็นต้องมีการเรียนรู้อัตโนมัติและปฏิสัมพันธ์ที่ซับซ้อน
- เครือข่าย bridge ที่ซับซ้อนจึงเชื่อมต่อกันด้วยวิธีอย่าง spanning tree และตามมาด้วย broadcast flood, เส้นทางที่ไม่เหมาะที่สุด และความสามารถในการ debug ที่ต่ำ
- bridge ระหว่างทางไม่มีแนวคิดเรื่องที่อยู่ใน Ethernet ปกติ จึงไม่อาจสร้างเครื่องมือแบบ traceroute ได้ และ bridging ก็กลายเป็นโครงสร้างที่แทบจะ debug ไม่ได้เลย
- ถึงอย่างนั้น bridging ก็ทำงานได้เร็วมากใกล้เคียงสาย Ethernet เต็มความเร็วด้วยอาศัย การปรับแต่งในฮาร์ดแวร์ ซึ่งในเวลานั้นถือเป็นข้อได้เปรียบใหญ่
Internet ที่วิ่งอยู่บนบัส
- จากโครงสร้างที่เชื่อมคอมพิวเตอร์แต่ละเครื่องด้วยลิงก์จุดต่อจุดระยะไกล ความต้องการก็ขยับไปสู่การเชื่อม ทั้ง LAN เข้าด้วยกัน ทำให้ต้องมีการเชื่อมต่อระยะไกลระหว่าง LAN
- การทำ bridge ระยะไกลง่าย ๆ ใช้ไม่ได้เพราะปัญหาการควบคุมความแออัด และ Ethernet bridging จะทำงานได้ก็ต่อเมื่อความเร็วลิงก์ใกล้เคียงกันหรือแทบไม่มีความแออัด
- การ bridge Ethernet 10 Mbps เข้ากับลิงก์จุดต่อจุด 0.128 Mbps โดยตรงนั้นแทบไร้ความหวัง และการค้นหาเส้นทางด้วย flooding ก็สิ้นเปลืองเกินไปบนลิงก์ช้า
- Routing ที่ไม่เหมาะที่สุด ซึ่งพอทนได้ในสภาพแวดล้อมท้องถิ่น กลับเป็นเรื่องร้ายแรงบนลิงก์ระยะไกลที่ช้าและแพง จึงไม่สามารถขยายได้
- กลุ่มปัญหาเหล่านี้เป็นสิ่งที่ฝั่ง Internet รับมืออยู่ก่อนแล้ว และการเชื่อม LAN bus ด้วยเทคโนโลยี Internet ย่อมให้โครงสร้างที่ดีกว่ามาก
- จึงมีการออกแบบ frame format สำหรับบรรจุแพ็กเก็ต Internet ลงบน LAN อย่าง Ethernet และ arcnet และปัญหาก็เริ่มจากจุดนั้น
- หากมี IP router หลายตัวอยู่ใน Ethernet segment เดียวกัน ก็ต้องมีวิธีระบุว่า router ตัวใดควรรับและส่งต่อแพ็กเก็ต เพราะปลายทาง IP สุดท้ายเพียงอย่างเดียวไม่พอจะแสดงตัวเลือกนั้น
- ดังนั้นจึงต้องปล่อยให้ปลายทางสุดท้ายอยู่ใน IP header และระบุ next-hop router ที่แท้จริงด้วย MAC address ใน Ethernet frame
- ข้อมูลที่มนุษย์อยากอธิบายจริง ๆ คือ
ส่ง destination IP 10.1.1.1 ไปยัง router MAC 11:22:33:44:55:66แต่ระบบปฏิบัติการกลับจัดการมันในรูปอย่างผ่าน router IP 192.168.1.1 - เพื่อทำ abstraction นี้ ระบบปฏิบัติการจึงต้องค้นหา Ethernet address ของ router IP ก่อน และมีการเพิ่ม ARP เข้ามาเป็นขั้นกลาง
- ARP ใช้วิธี broadcast ไปยัง Ethernet ภายในทั้งหมดเพื่อหาเจ้าของ IP หนึ่ง ๆ และถ้ามี bridge อยู่ เพราะมันเป็น Ethernet broadcast จึงต้องถูกส่งต่อออกทุกอินเทอร์เฟซ
- ใน Ethernet ขนาดใหญ่ที่เชื่อมต่อกันมากมาย broadcast ที่มากเกินไปกลายเป็นฝันร้ายอันดับต้น ๆ โดยเฉพาะบน wifi ที่ยิ่งรุนแรงกว่า
- ต่อมาพวก bridge และ switch จึงเริ่มใส่ hack พิเศษเพื่อลดขอบเขตการส่งต่อ ARP และอุปกรณ์บางชนิด โดยเฉพาะ wifi access point ถึงกับสร้าง ARP reply ปลอมขึ้นมาเอง แต่ทั้งหมดก็ใกล้เคียงกับการ hack ทางเทคนิคมากกว่า
ตายเพราะมรดกเก่า
- เมื่อเวลาผ่านไป โปรโตคอลที่ไม่ใช่ IP บน Ethernet ก็แทบหายไปหมด และเครือข่ายก็แข็งตัวเป็นโครงสร้างที่มี layer 2 แบบบัสอยู่บนสาย physical layer มี bridge เชื่อมบัสเหล่านั้น และมี layer 3 router วางอยู่ด้านบน
- เมื่อความเหนื่อยล้าจากการตั้งค่า IP ด้วยมือเพิ่มขึ้น ก็เกิดความต้องการการตั้งค่าอัตโนมัติ แต่เครื่องถูกส่งมาพร้อม Ethernet address อยู่แล้ว และ IPv4 32 บิต ก็ไม่พอสำหรับกำหนดที่อยู่ถาวรไม่ซ้ำกันตั้งแต่ขั้นผลิต
- หากกำหนด IP address แบบเรียงลำดับง่าย ๆ ก็จะย้อนกลับไปสู่โครงสร้างไม่เป็นลำดับชั้นแบบ Ethernet จึงไม่ใช่คำตอบที่เหมาะสม
- จึงเกิด bootp และ DHCP ขึ้นมา และมันก็กลายเป็นโปรโตคอลที่ต้องได้รับการปฏิบัติแบบพิเศษคล้าย ARP
- DHCP ต้องเริ่มส่งข้อมูลจากโหนดที่ยังไม่มี IP address จึงต้องใส่ IP header ที่แทบไร้ความหมายแต่เป็นไปตามรูปแบบที่ RFC กำหนด และ DHCP server ก็ต้องเขียนสิ่งนี้เองผ่าน raw socket แทนชั้น IP ของ kernel
- ท้ายที่สุด bootp และ DHCP ก็ต้องรู้ Ethernet address เพื่อแจก IP address อยู่ดี จึงทำหน้าที่คล้ายด้านกลับของ ARP
- มีการกล่าวว่า RARP ทำสิ่งเดียวกันได้เรียบง่ายกว่า แต่แทบไม่ถูกพูดถึงในที่นี้
- ผลลัพธ์คือ Ethernet กับ IP พันกันแน่นขึ้นเรื่อย ๆ จนวันนี้แทบแยกจากกันไม่ได้
- routing table ของ IP ทำเหมือนระบุ router ด้วย IP address แต่จริง ๆ แล้วคือการระบุ MAC address แบบอ้อม ๆ, ARP วิ่งผ่าน bridge, และ DHCP แม้ดูเหมือน IP packet แต่ในโครงสร้างจริงกลับใกล้เคียงโปรโตคอล Ethernet มากกว่า
- พร้อมกันนั้นทั้ง bridging และ routing ก็ยิ่งซับซ้อนขึ้น โดย bridging ส่วนใหญ่อยู่ในโลกของ IEEE และฮาร์ดแวร์ ส่วน routing ส่วนใหญ่อยู่ในโลกของ IETF และซอฟต์แวร์ โดยต่างฝ่ายต่างทำเหมือนไม่มีอีกฝ่ายอยู่
- ผู้ดูแลเครือข่ายเลือกใช้ bridging หรือ routing ตามความต้องการด้านความเร็วและระดับของการ ไม่อยากตั้งค่า DHCP server โดยมักใช้ bridging ให้มากที่สุดและค่อยใช้ routing เมื่อจำเป็น
- ความซับซ้อนของ bridging ท้ายที่สุดนำไปสู่ SDN ที่ยกการตัดสินใจระดับ layer 2 ขึ้นไปไว้ที่ชั้นบนและบริหารรวมศูนย์ด้วยโปรโตคอลบน IP
- SDN ดีกว่าการปล่อยให้ switch และ bridge ทำงานแบบต่างคนต่างทำ แต่ก็ถูกชี้ว่าชวนขำในระดับรากฐาน เพราะเดิมที IP เองก็เป็น software-defined network อยู่แล้วสำหรับจัดการเครือข่ายที่ใหญ่เกินไปด้วยซอฟต์แวร์
- IPv4 ในช่วงแรกเร่งความเร็วด้วยฮาร์ดแวร์ได้ยาก และในทางปฏิบัติก็ไม่ได้รับการเร่งด้วยฮาร์ดแวร์มากพอ ขณะที่การตั้งค่า DHCP ก็ยุ่งยากมาก ผู้ดูแลจึงค่อย ๆ เรียนรู้วิธีทำ bridging ครอบคลุมพื้นที่ใหญ่ขึ้นเรื่อย ๆ
- ปัจจุบัน data center ขนาดใหญ่ถูกบรรยายว่าทำงานคล้าย เครือข่ายบัสเสมือนขนาดมหึมาที่ขับเคลื่อนด้วย SDN และหลายครั้งไม่ได้ทำ routing แพ็กเก็ตอย่างแท้จริง
ตอนนี้ลองลืมเรื่องก่อนหน้าไปสักครู่
- ตอน IETF ออกแบบ IPv6 ในต้นทศวรรษ 1990 ความสับสนจำนวนมากได้เกิดขึ้นแล้ว แต่การออกแบบก็ดำเนินไปภายใต้สมมติฐานว่ายังหลีกเลี่ยงหายนะที่กำลังมาถึงได้
- ในกระบวนการนั้น การเปลี่ยนแปลงสำคัญอย่างหนึ่งคือแทบจะ เลิกใช้เครือข่ายบัสทางกายภาพ ไปแล้ว
- Ethernet ไม่ได้เป็นบัสจริงอีกต่อไป แค่แกล้งทำตัวเหมือนเป็นบัส และเมื่อความเร็วเพิ่มจนรักษา CSMA/CD ไว้ไม่ได้ มันก็ย้อนกลับไปสู่ star topology อีกครั้ง
- โครงสร้างที่ลากสายเฉพาะจากแต่ละสถานีไปยังสวิตช์กลางกลายเป็นเรื่องปกติ และผนัง เพดาน และพื้นก็เต็มไปด้วยมัดสาย Ethernet ขนาดใหญ่ราคาแพง
- แม้แต่ wifi ซึ่งดูเหมือนสื่อไร้สายที่ใช้ร่วมกันอันเป็นบัสสูงสุด ก็ถูกอธิบายว่าในทางปฏิบัติเกือบทั้งหมดทำงานแบบ infrastructure mode ที่เลียนแบบ star topology ขนาดใหญ่
- แม้ wifi station สองตัวที่เชื่อม access point เดียวกันก็ไม่ได้คุยกันตรง ๆ แต่จะส่งแพ็กเก็ตที่ใส่ MAC address ของอีกฝ่ายไปยัง access point แล้ว access point จึงส่งออกอีกครั้ง
- หากโหนด X จะส่งไปยังโหนด Internet Z ผ่าน IP router Y และ wifi access point A แล้ว Z คือปลายทาง IP, Y คือปลายทาง Ethernet และ A คือคู่สื่อสารจริงบนวิทยุ ทำให้ลำดับชั้นของที่อยู่ซ้อนกันอย่างซับซ้อน
- เพื่อรองรับสิ่งนี้ 802.11 จึงมี 3-address mode ที่บรรจุทั้งปลายทาง Ethernet ที่แท้จริงและปลายทาง Ethernet ระหว่างทางไว้พร้อมกัน
- และยังมีบิต
to-AP,from-APเพื่อระบุทิศทาง station→AP และ AP→station และถ้าทั้งสองบิตเป็นจริงพร้อมกันก็สามารถแสดงการทำงานแบบ repeater ระหว่าง AP ได้ - หาก A เป็น repeater ที่ต้องส่งต่อไปยัง base station B อีกครั้ง ผู้ส่งผู้รับจริงบนอากาศกับ source·destination ของ Ethernet จะต่างกันทั้งหมด จึงต้องใช้ 4-address mode
- ใน 802.11s mesh ยังมีถึง 6-address mode และข้อความต้นฉบับก็บอกว่าพอถึงจุดนั้นผู้เขียนยอมแพ้ที่จะทำความเข้าใจ
โลกที่ IPv6 เป็นการออกแบบที่ดี
- IETF ที่กำลังพิจารณา IPv6 มองเห็นทั้งความสับสนที่เกิดขึ้นแล้วและความสับสนที่ใหญ่กว่านั้นในอนาคต จึงจินตนาการถึง โลกใหม่ที่ทิ้ง legacy เดิมทั้งหมด
- สมมติฐานของโลกนั้นคือ การเลิกใช้เครือข่ายบัสจริง, การเลิกใช้ layer 2 internetwork, การกำจัด broadcast, การกำจัด MAC address, การกำจัด ARP และ DHCP, มี IP header ที่เรียบง่ายและเร่งด้วยฮาร์ดแวร์ได้, แก้ปัญหาที่อยู่ไม่พอ และยกเลิกการตั้งค่า IP ด้วยมือยกเว้นใน core
- หาก layer 2 เป็นจุดต่อจุดเสมอ ก็จะไม่มีเป้าหมายให้ส่ง broadcast ได้อีก จึงแทนที่ด้วย multicast ได้ และเมื่อคู่ส่งคู่รับชัดเจนในตัวอยู่แล้ว ก็ไม่จำเป็นต้องมี MAC address
- เมื่อ MAC address หายไป ก็ไม่ต้องจับคู่ระหว่าง IP กับ MAC อีก ทำให้ ARP และ DHCP หายไปได้ด้วย และยังสามารถมีพื้นที่ที่อยู่มากพอจนกลับมาใช้การ routing subnet ขนาดใหญ่ได้
- ในโลกนั้น มีการจินตนาการว่า wifi repeater, wifi access point, Ethernet switch และแม้แต่ SDN ทั้งหมดคงทำงานเป็น IPv6 router
- ถ้าเป็นเช่นนั้น ARP storm, IGMP snooping bridge และ bridging loop ก็จะหายไป และปัญหา routing ทั้งหมดจะตามรอยได้ด้วย traceroute
- การตัด MAC source/destination 12 ไบต์ออกจากทุก Ethernet packet และข้อมูลที่อยู่ 18 ไบต์จากทุก wifi packet ทำให้แม้ IPv6 จะใช้ที่อยู่ใหญ่กว่า IPv4 อยู่ 24 ไบต์ แต่เมื่อหักส่วนหัว Ethernet ออกแล้ว ภาระเพิ่มเติมจริงจะเหลือเพียง 12 ไบต์
- ข้อคาดหวังว่าในสักวันหนึ่งจะ ลบ Ethernet address ออกได้ทั้งหมด เช่นนี้ ช่วยทำให้การเลือกความยาวที่อยู่ของ IPv6 ซึ่งใหญ่เกินพอดูสมเหตุสมผลขึ้น
- แต่การออกแบบอันสวยงามนี้ไม่ได้เกิดขึ้นจริงในโลกแห่งความเป็นจริง
บทไว้อาลัยแด่ความฝัน
- วลีของเพื่อนร่วมงานที่ว่า "ชั้นต่าง ๆ มีแต่จะถูกเพิ่มเข้าไป ไม่เคยถูกลบออก" ถูกใช้เป็นข้อสรุปโดยรวม
- ข้อดีของ IPv6 จะมีความหมายได้ก็ต่อเมื่อสามารถทิ้ง legacy เดิมและเริ่มใหม่ได้ แต่ในความจริงสิ่งนั้นแทบเป็นไปไม่ได้
- ต่อให้การใช้งาน IPv6 สูงถึง 99% ตราบใดที่ IPv4 ยังไม่หายไปอย่างสมบูรณ์ Ethernet address และ wifi address ก็จะไม่หายไปด้วย และตราบใดที่ยังคงมาตรฐาน framing ของ IEEE 802.3 และ 802.11 การประหยัดไบต์เหล่านั้นก็จะไม่เกิดขึ้นจริง
- ดังนั้น IPv6 จึงต้องมี neighbor discovery ที่ซับซ้อนกว่า ARP อยู่ดี และแม้เครือข่ายแบบบัสจะหายไปแล้ว ก็ยังต้องจำลองสิ่งคล้าย broadcast ต่อไปเพื่อให้การทำงานแบบ ARP ยังเกิดขึ้นได้
- ในบ้าน ผู้ใช้ยังต้องเปิด local DHCP server ต่อไปเพื่อให้หลอดไฟ IPv4 รุ่นเก่าทำงานได้ และถ้าจะให้หลอดไฟนั้นออกสู่อินเทอร์เน็ตก็ยังต้องใช้ NAT อยู่ดี
- ที่แย่กว่านั้นคือทีม IPv6 ปล่อยให้ปัญหา mobile IP ค้างไว้โดยไม่แก้ ทำให้ยังคงต้องพึ่ง layer 2 bridging อันน่าหวาดหวั่นต่อไป
- มีการอธิบายว่าในเวลานั้นดูเหมือนแผนคือรีบ deploy IPv6 ภายในไม่กี่ปี แล้วค่อยแก้ mobile IP ให้ง่ายขึ้นหลังจาก IPv4 และ MAC address หายไปแล้ว
- ตอนนั้นยังเชื่อกันว่ากรณีใช้งานคอมพิวเตอร์ที่เคลื่อนที่ระหว่างใช้งานมีน้อยมาก จึงจินตนาการได้เพียงภาพประหลาดอย่างย้ายเครื่องที่ต่อ
ftpอยู่จากพอร์ต Ethernet หนึ่งไปอีกพอร์ตหนึ่งเท่านั้น
Mobile IP ในฐานะแอปนักฆ่า
- หลังจากนั้นในประวัติศาสตร์ กรณีใช้งานคอมพิวเตอร์ที่พกพาไปมาได้หรือก็คือ โทรศัพท์ ซึ่งย้ายข้าม wireless access point หลายตัว กลายเป็นเรื่องปกติในชีวิตประจำวัน
- ใน LTE การเคลื่อนที่แบบนี้ส่วนใหญ่ใช้งานได้ ส่วนบน wifi ใช้ได้เป็นบางครั้ง และความลับตามที่ชี้ไว้ก็คือไม่ใช่ Internet routing แต่เป็น layer 2 bridging
- Internet routing ไม่รองรับ mobility เลย เมื่อย้ายไปบนเครือข่าย IP ใหม่จน IP address เปลี่ยน การเชื่อมต่อที่เปิดอยู่ทั้งหมดก็จะขาด
- wifi ระดับองค์กรใช้การ bridge ทั้ง LAN ในระดับ layer 2 เพื่อให้ DHCP server กลางแจก IP address เดิมไม่ว่าจะต่อกับ access point ไหน และยอมรับความโกลาหลไม่กี่วินาทีระหว่างที่ bridge ปรับโครงสร้างใหม่เพื่อรักษาการเชื่อมต่อไว้
- wifi ในบ้านที่มี extender หรือ repeater หลายตัวก็ใช้แนวทางเดียวกัน
- ในทางกลับกัน หากเดินไปตามถนนแล้วเปลี่ยนผ่าน เครือข่าย wifi คนละชุด เช่น public wifi ของร้านค้าต่าง ๆ จะได้รับ IP address ใหม่ทุกครั้ง และทุกการเชื่อมต่อจะถูกตัด
- LTE ไปได้ไกลกว่านั้น โดยทำให้ยังคงใช้ IP address เดิมแม้จะเคลื่อนที่หลายไมล์ระหว่างสถานีฐาน และมีการกล่าวว่าในเครือข่ายมือถือมักใช้ IPv6 address อยู่แล้ว
- วิธีทำคือ tunnel traffic ไปยังจุดศูนย์กลางก่อน แล้ว bridge รวมกับ firewall จำนวนมากให้เป็น virtual layer 2 LAN ขนาดมหึมาชุดเดียว ซึ่งต้องแลกมากับความซับซ้อนอย่างมหาศาลและ latency เพิ่มเติม ที่น่าอับอาย
- มีการระบุว่าผู้ให้บริการสื่อสารก็อยากแก้ปัญหานี้ แต่แทบทำไม่ได้
วิธีทำให้ mobile IP ใช้งานได้จริง 1
- คำตอบว่าทำไม mobile IP จึงใช้ไม่ได้ดี สรุปไปสู่ข้อสรุปว่าคำนิยาม 4-tuple อันโด่งดังที่ใช้ระบุ session นั้นผิดตั้งแต่ต้น
- session ของ TCP และ UDP ถูกระบุด้วย
(source ip, source port, destination ip, destination port)ซึ่งเป็นโครงสร้างที่พาดข้าม layer 3 และ layer 4 และเปราะบางต่อการเปลี่ยนแปลงของ IP address - มีการเสนอว่าหากการระบุ session อาศัยเฉพาะข้อมูลของ layer 4 mobile IP ก็คงทำงานได้สมบูรณ์แบบ
- ตัวอย่างเช่น เมื่อ X:1111 คุยกับ Y:80 แล้ว X เปลี่ยนที่อยู่เป็น Q แพ็กเก็ตจะกลายเป็น
(Q,1111,Y,80)ซึ่ง Y จะไม่มองว่าเป็น session เดิมและทิ้งมัน ส่วนแพ็กเก็ตตอบกลับ(Y,80,X,1111)ก็จะไปไม่ถึง X อีกต่อไป - ทางเลือกที่เสนอคือขยายหมายเลขพอร์ตจาก 16 บิตปัจจุบันให้เป็น ค่าแฮชเฉพาะตัว ขนาด 128 หรือ 256 บิต และระบุ socket ด้วยแท็กที่ไม่ผูกกับ IP address
- ในกรณีนี้ แพ็กเก็ตยังคงมีข้อมูลที่อยู่
(X,Y)ใน layer 3 เพื่อการ routing แต่ kernel จะไม่ใช้ข้อมูล layer 3 ในการระบุ socket ตอนรับข้อมูล และจะใช้เพียง uuid - destination port 80 จะจำเป็นเฉพาะตอนเริ่ม session ใหม่เพื่อแยกว่าต้องการบริการใด และหลังจากนั้นก็อาจละเลยหรือตัดออกได้
- kernel ของ Y จะ cache ว่าแพ็กเก็ต session
(uuid)เพิ่งมาจาก X และเมื่อ X ย้ายไป Q แล้วส่งมาพร้อมแท็ก(uuid,80)เดิม ระบบก็จะจับคู่เข้ากับ session เดิมและอัปเดตปลายทางตอบกลับจาก X เป็น Q ได้ - วิธีนี้ช่วยให้การเชื่อมต่ออยู่ต่อได้ แต่มีข้อแม้ว่าต้องเพิ่มความระมัดระวังเพื่อป้องกัน การยึดการเชื่อมต่อโดยผู้ปลอมตัว
- อย่างไรก็ตาม UDP และ TCP ไม่ได้ทำงานแบบนี้ และการเปลี่ยนมันตอนนี้ก็ถูกมองว่าเป็นโครงการประเภทเดียวกับการเปลี่ยน IPv4 เป็น IPv6 ซึ่งตอนแรกดูเหมือนง่ายแต่ผ่านไปหลายสิบปีก็ยังเสร็จไม่ถึงครึ่ง
QUIC และความเป็นไปได้ของทางอ้อม
- ในด้านบวก มีการเสนอว่าการละเมิดชั้นอีกแบบหนึ่งอาจเป็น ทางอ้อมในการแก้ปัญหา
- หากทิ้ง TCP แบบเก่าแล้วใช้ QUIC บน UDP ก็อาจทำให้ไม่ต้องใช้ 4-tuple ของ UDP เองเป็นตัวระบุการเชื่อมต่อ
- หาก UDP port เป็นพอร์ตสำหรับ mobility layer โดยเฉพาะ ก็สามารถแกะเนื้อหาข้างในอีกชั้นแล้วตีความเป็นแพ็กเก็ตภายในที่มีแท็ก uuid ที่เหมาะสม และจับคู่เข้ากับ session และ socket ที่ถูกต้องได้
- มีการอธิบายว่าโปรโตคอล QUIC แบบทดลอง อย่างน้อยในทางทฤษฎี ก็มีรูปแบบแพ็กเก็ตที่เข้ากับโครงสร้างนี้อยู่แล้ว
- เนื่องจากการเข้ารหัสและการยืนยันตัวตนของแพ็กเก็ตแบบไร้สถานะที่ QUIC ใช้ ก็ต้องมีตัวระบุ session หรือกุญแจเฉพาะอยู่แล้ว จึงมีความหวังว่าการรองรับ roaming แบบโปร่งใสอาจทำได้ด้วยงานเพิ่มไม่มาก
- ถ้าเป็นเช่นนั้น สิ่งที่เหลือก็แค่กำจัด UDP และ TCP ที่เหลือทั้งหมดออกจาก Internet แล้วคราวนี้ layer 2 bridging ก็จะไม่จำเป็นอีกต่อไป และจะสามารถลบ broadcast, MAC address, SDN และ DHCP ได้ด้วย
- ตอนจบปิดท้ายด้วยประโยคเรื่อง การฟื้นคืนความสง่างามของ Internet
หมายเหตุการแก้ไขเพิ่มเติม
-
แก้ไขเมื่อ 2017-08-16
- แนวคิดเกี่ยวกับ mobile IP ก่อนหน้านี้ ไม่ได้จำกัดอยู่แค่ IPv6
- มีการแก้ไขว่าแนวคิดนี้ทำงานได้แม้ในสภาพแวดล้อม IPv4 และ NAT รวมถึง roaming ที่ข้าม NAT หลายชั้น
-
แก้ไขเมื่อ 2017-08-15
- มีการยกตัวอย่างว่าวิธีป้องกันการยึดการเชื่อมต่อที่ง่ายที่สุดคือการแลกเปลี่ยน แบบคล้าย SYN-ACK-SYNACK ตอนเริ่ม TCP
- หาก Y เชื่อถือแพ็กเก็ตแรกจากโฮสต์ใหม่ Q ทันที ผู้โจมตีจากที่ใดก็ได้บนอินเทอร์เน็ตจะเข้ายึดการเชื่อมต่อ X→Y ได้ง่าย
- หาก Y ส่งคุกกี้ไปก่อน แล้วให้ Q รับและประมวลผลก่อนส่งกลับมายัง Y อย่างน้อยผู้โจมตีก็ต้องเป็นระดับ man-in-the-middle ไม่ใช่แค่ผู้โจมตีภายนอกทั่วไป
- หากใช้ โปรโตคอลที่เข้ารหัส อย่าง QUIC ก็สามารถปกป้อง handshake ดังกล่าวด้วย session key ได้เช่นกัน
-
แก้ไขเมื่อ 2017-10-24
- นอกจาก QUIC แล้ว ยังมีโปรโตคอลทดแทน TCP ที่รองรับ roaming ลักษณะนี้ และมีการยก MinimaLT เป็นตัวอย่าง
- มีการเขียนว่า MinimaLT เป็นโปรโตคอลแรกที่ผู้เขียนได้ยินว่าสามารถแก้ปัญหา roaming ได้อย่างสง่างาม และแนวทางที่จะถูกนำมาใช้ในอนาคตก็อาจเลียนแบบโครงสร้างนี้
-
แก้ไขเมื่อ 2020-07-09
- มีเพียงการกล่าวว่าได้โพสต์ความคิดเพิ่มเติมเกี่ยวกับการย้ายระบบและการทำงานร่วมกันระหว่าง IPv4/IPv6 ไว้ในบทความอื่น โดยไม่มีคำอธิบายเพิ่มเติมในเนื้อหา
1 ความคิดเห็น
ความเห็นจาก Hacker News
ในมุมมองของฉัน แม้ IPv6 จะไม่ใช่จุดสูงสุดของการออกแบบโปรโตคอลที่สมบูรณ์แบบ แต่ทางเลือกที่ผู้คนเสนอว่าดีกว่าก็มักจะค่อย ๆ ลงเอยด้วยรูปแบบที่คล้าย IPv6 อยู่ดี ถ้าทุกคนยังสร้างสิ่งที่ดีกว่านี้ไม่ได้อย่างต่อเนื่อง ก็แปลว่า IPv6 น่าจะเป็นการออกแบบที่ค่อนข้างดีในท้ายที่สุด
ถ้าลองรวบรวมการถกเถียงเก่า ๆ ใน Hacker News จะเห็นว่าหัวข้อนี้วนกลับมาเรื่อย ๆ ทุกไม่กี่ปี่ เช่น เธรดปี 2017, เธรดปี 2019, เธรดปี 2020, เธรดปี 2023
ฉันไม่ชอบที่บทความนี้มอง ARP ในแง่ลบเกินไป ARP ทำให้การทำ IP networking ภายใน LAN เป็นไปได้โดยไม่ต้องมีเราเตอร์ และยังทำให้ default gateway ถูกมองเป็นเพียงกรณีพิเศษของการสื่อสาร IP แบบ LAN ทั่วไปได้ด้วย อย่างไรก็ตาม คำอธิบายประวัติศาสตร์ของเครือข่ายในบทความนี้ยอดเยี่ยมจริง ๆ และตอนนี้ฉันก็กำลังอ่านส่วน IPv6 อยู่
ฉันยังสับสนเล็กน้อยว่าบทความนี้ต้องการจะสื่ออะไรแน่ มันหมายถึงว่าอุปกรณ์เครือข่ายของฉันจะตั้งที่อยู่ IPv6 เองจาก MAC address หรือเปล่า และนั่นคือหัวใจของ stateless IPv6 ใช่ไหม เท่าที่ฉันเข้าใจ IPv6 ก็ถูกสร้างมาเพื่อแก้ปัญหาการหมดของ IPv4 และปัญหา NAT ด้วย แต่ Xbox ของฉันกลับบอกว่าเครือข่ายไม่ค่อยดีถ้าไม่มี IPv6 ซึ่งก็ดูเป็นมุมมองที่ ยึดอเมริกาเหนือเป็นศูนย์กลาง พอสมควร
ฉันเริ่มรู้สึกมากขึ้นเรื่อย ๆ ว่าการมีทั้ง SLAAC และ DHCPv6 ใน IPv6 เป็นความผิดพลาดครั้งใหญ่ ตัว SLAAC เองยอดเยี่ยม แต่การมีสองกลไกสำหรับการตั้งค่านั้นทำให้สับสนเกินไป การที่ Android ไม่รองรับ DHCPv6 ก็ยิ่งเพิ่มความสับสน ฉันเดาว่า SLAAC เป็นผลผลิตจากยุคที่คอมพิวเตอร์แพงและ DHCP server เป็นอุปกรณ์แยกต่างหาก แต่ตอนนี้คอมพิวเตอร์ราคาถูกและเราเตอร์ส่วนใหญ่ก็รัน DHCP ได้แล้ว สถานการณ์จึงต่างออกไป ถ้า DHCPv6 เดินไปในทางแจกที่อยู่แบบอิง MAC เป็นหลักตั้งแต่แรก การตั้งค่าน่าจะง่ายกว่านี้ และในลิงก์โลคัลก็น่าจะยังคงการตั้งค่าอัตโนมัติไว้ได้เหมือนเดิม
ฉันว่าบทความนี้น่าสนใจมาก แต่มีจุดหนึ่งที่ฉันยังไม่เข้าใจ ผู้เขียนบอกว่าทุกวันนี้แม้แต่บน WiFi ก็ไม่ได้ใช้ CSMA/CD แล้ว ถ้าอย่างนั้นมันทำงานจริง ๆ อย่างไร ผู้เขียนอธิบายว่าสถานี WiFi สองตัวที่เชื่อมกับ access point เดียวกันก็ไม่ได้สื่อสารกันโดยตรง ถ้าเป็นแบบนั้น ไม่ช้าก็เร็วแต่ละสถานีก็น่าจะต้องแยกให้ออกว่าสัญญาณที่ตัวเองได้ยินเป็นของตัวเอง ของอีกสถานีที่ส่งไปยัง AP หรือของ AP ที่ส่งไปยังอีกสถานี ถ้าอย่างนั้นก็ไม่ใช่ว่ายังจำเป็นต้องมีกลไกคล้าย ๆ เดิมอยู่ดี เพียงแค่เรียกคนละชื่อหรือ
เมื่อก่อน IPv6 ดูเหมือนเป็นก้าวต่อไปที่หลีกเลี่ยงไม่ได้ แต่พอมาถึงตอนนี้แล้วมันกลับดูหมดแรงขนาดนี้ ก็ทำให้ฉันคิดว่าบางทีปัญหาที่มันพยายามจะแก้อาจไม่ได้สำคัญขนาดนั้นตั้งแต่แรก จากมุมของผู้ใช้จริง โลกก็ดูเหมือนหาวิธีพอมี IPv4 ใช้ต่อไปได้อยู่ดีและอินเทอร์เน็ตก็ยังเดินหน้าต่อไปได้ ฉันเลยเริ่มสงสัยเองว่าจริง ๆ แล้วเราจำเป็นต้องมี IPv6 มากขนาดนั้นหรือไม่ อยากรู้ว่าข้อสรุปนี้ผิดหรือเปล่า