โลกที่ IPv6 เคยเป็นการออกแบบอันยอดเยี่ยม (2017)
(apenwarr.ca)- ในเครือข่ายยุคแรกที่เน้นการเชื่อมต่อแบบ point-to-point แทบไม่จำเป็นต้องมีระบบแอดเดรส แต่เมื่อ bus network แพร่หลายเพื่อลดต้นทุน ความซับซ้อนอย่าง MAC address, bridging และ ARP ก็สะสมเพิ่มขึ้น
- เมื่อ Ethernet ผสานกับ IP การส่งต่อไปยัง next hop ต้องอาศัย การระบุ MAC address และ ARP broadcast และภาระนี้ก็ขยายใหญ่ขึ้นมากในเครือข่ายเชื่อมต่อขนาดใหญ่และ 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
จุดที่ bus network ทำให้ทุกอย่างพัง
- ในยุคแรกของระบบโทรศัพท์แบบ circuit switching และวงจรเช่าเฉพาะที่มีเพียง การเชื่อมต่อแบบ point-to-point ยังไม่จำเป็นต้องมีระบบแอดเดรส เพราะโครงสร้างคือบิตที่ใส่เข้าไปฝั่งหนึ่งจะโผล่ออกมาอีกฝั่งหลังเวลาหนึ่ง
- แม้หลังจากมี TDM และ virtual circuit switching แล้ว จากมุมมองของผู้ใช้ก็ยังเป็นรูปแบบที่อินพุตด้านหนึ่งเชื่อมกับเอาต์พุตอีกด้านอยู่ดี และในขั้นนี้ก็ยังไม่จำเป็นต้องมีแอดเดรส
- เมื่อคอมพิวเตอร์ที่มีหลายอินเทอร์เฟซเริ่มส่งต่อบิตระหว่างสายต่าง ๆ จึงเกิด IP address, subnet และ routing ขึ้น แต่บนลิงก์ point-to-point ก็ยังไม่ต้องใช้ MAC address
- เพื่อลดค่าใช้จ่ายในการเชื่อมต่อภายในไซต์ จึงเกิด bus network ที่ให้อุปกรณ์หลายตัวต่ออยู่บนสายเดียวกัน และนอกเหนือจากตระกูล Internet ก็มีระบบ layer 2 ของตัวเองแยกกันเกิดขึ้น
- LAN ยุคแรกอย่าง arcnet ใช้ layer 2 address ขนาด 8 บิตที่ต้องตั้งด้วยจัมเปอร์หรือ DIP switch แบบแมนนวล และถ้าซ้ำกันจะทำให้เกิดปัญหาร้ายแรง แต่เพราะเครือข่ายยังเล็ก ความไม่สะดวกจึงยังจำกัดอยู่
- Ethernet นำ MAC address 48 บิตมาใช้เพื่อแก้ปัญหา address ซ้ำ ด้วยวิธีกำหนดแอดเดรสที่แทบจะไม่ซ้ำกันมาตั้งแต่ขั้นตอนการผลิต
- เทคโนโลยี LAN อย่าง IPX และ Netware ทำงานได้ดีใน bus network เดี่ยวโดยแทบไม่ต้องตั้งค่าแอดเดรส และถูกพรรณนาว่าเป็นยุคที่สวยงามและเชื่อถือได้
- แต่เครือข่ายองค์กรและมหาวิทยาลัยขนาดใหญ่ติดคอขวดของ bus เดี่ยว 10 Mbps จึงต้องเชื่อม bus หลายเส้นเข้าด้วยกัน และเลือกขยายด้วย bridging และ switching ที่อิง Ethernet address แทน IP ซึ่งตอนนั้นยังไม่สุกงอม
- เพราะ Ethernet address ถูกกำหนดเรียงลำดับจากโรงงานจึงไม่มีโครงสร้างแบบลำดับชั้น ทำให้ตาราง bridging ไม่สามารถรวมเส้นทางอย่างมีประสิทธิภาพได้เหมือนตาราง routing ของ IP สมัยใหม่ที่จัดการเป็นระดับ subnet
- เพื่อให้ bridging มีประสิทธิภาพ จึงต้องจำว่า MAC address แต่ละตัวอยู่บน bus ไหน
- และเพื่อไม่ต้องตั้งค่าด้วยมือ จึงต้องมีการเรียนรู้อัตโนมัติและปฏิสัมพันธ์ที่ซับซ้อน
- เครือข่าย bridge ที่ซับซ้อนจึงเชื่อมต่อกันด้วยวิธีอย่าง spanning tree พร้อมปัญหา broadcast flood, เส้นทางที่ไม่เหมาะสม และการดีบักที่ยาก
- อุปกรณ์ bridge ระหว่างทางไม่มีแนวคิดเรื่องแอดเดรสใน Ethernet ปกติ จึงไม่สามารถสร้างเครื่องมืออย่าง traceroute ได้ และทำให้ bridging แทบเป็นโครงสร้างที่ดีบักไม่ได้เลย
- ถึงอย่างนั้น bridging ก็ทำงานได้เร็วมากใกล้เคียงความเร็วสาย Ethernet เพราะ การปรับแต่งด้วยฮาร์ดแวร์ ซึ่งในเวลานั้นถือเป็นข้อได้เปรียบใหญ่
Internet ที่วิ่งอยู่บน bus
- จากโครงสร้างที่เชื่อมคอมพิวเตอร์แต่ละเครื่องด้วยลิงก์ point-to-point ระยะไกล ความต้องการเชื่อม LAN ทั้งชุด เข้าด้วยกันก็ค่อย ๆ เกิดขึ้น จนต้องมีการเชื่อม LAN ระยะไกลเข้าหากัน
- การทำ bridge ระยะไกลแบบง่าย ๆ ใช้ไม่ได้เพราะปัญหาการควบคุมความแออัด โดย Ethernet bridging ใช้งานได้ก็ต่อเมื่อความเร็วของลิงก์ใกล้เคียงกัน หรือแทบไม่มี congestion
- การเชื่อม 10 Mbps Ethernet เข้ากับลิงก์ point-to-point 0.128 Mbps แบบ bridge ตรง ๆ แทบไม่มีทางไปรอด และการค้นหาเส้นทางแบบ flooding ก็สิ้นเปลืองเกินไปบนลิงก์ช้า
- การ routing ที่ไม่เหมาะสม ซึ่งพอทนได้ในสภาพแวดล้อมท้องถิ่น กลับเป็นเรื่องร้ายแรงในลิงก์ระยะไกลที่ช้าและแพง จึงไม่สามารถขยายต่อได้
- กลุ่มปัญหาเหล่านี้เป็นสิ่งที่ฝั่ง Internet จัดการอยู่แล้ว และการเชื่อม LAN bus ต่าง ๆ ด้วยเทคโนโลยี Internet จึงเป็นโครงสร้างที่ดีกว่ามาก
- ดังนั้นจึงมีการออกแบบ รูปแบบเฟรม สำหรับบรรทุกแพ็กเก็ต 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 จึงเริ่มใส่การแฮ็กพิเศษเพื่อลดขอบเขตการส่ง ARP และอุปกรณ์บางชนิด โดยเฉพาะ wifi access point ถึงกับสร้าง ARP response ปลอมขึ้นมา แต่ทั้งหมดก็ใกล้เคียงกับการแฮ็กทางเทคนิค
ตายเพราะมรดกตกทอด
- เมื่อเวลาผ่านไป โปรโตคอลที่ไม่ใช่ IP บน Ethernet แทบหายไปหมด และเครือข่ายก็แข็งตัวเป็นโครงสร้างที่มี bus แบบ layer 2 อยู่บนสาย physical มี bridge เชื่อม bus เข้าหากัน และมี router layer 3 วางอยู่ด้านบน
- เมื่อความเหนื่อยจากการตั้งค่า IP แบบแมนนวลเพิ่มขึ้น ก็เกิดความต้องการให้ตั้งค่าอัตโนมัติ แต่เครื่องต่าง ๆ ถูกส่งออกจากโรงงานพร้อม Ethernet address อยู่แล้ว และ IPv4 32 บิต ก็มีพื้นที่ไม่พอสำหรับกำหนดแอดเดรสถาวรที่ไม่ซ้ำกันตั้งแต่ขั้นการผลิต
- ถ้ากำหนด IP แบบเรียงลำดับง่าย ๆ ก็จะย้อนกลับไปสู่โครงสร้างที่ไม่เป็นลำดับชั้นเหมือน Ethernet จึงไม่ใช่คำตอบที่ดี
- จึงเกิด bootp และ DHCP ขึ้น และมันก็กลายเป็นโปรโตคอลที่ต้องได้รับการปฏิบัติเป็นกรณีพิเศษเหมือน ARP
- DHCP ต้องถูกส่งโดยโหนดที่ยังไม่มี IP address จึงต้องยัด IP header ที่แทบไร้ความหมายแต่เป็นไปตามรูปแบบที่ RFC กำหนด และฝั่ง DHCP server ก็ต้องเติมข้อมูลเหล่านี้เองผ่าน raw socket แทนที่จะใช้ชั้น IP ของเคอร์เนล
- ท้ายที่สุด bootp และ DHCP ต้องรู้ Ethernet address ก่อนจึงจะจัดสรร IP address ได้ จึงทำหน้าที่คล้ายด้านกลับของ ARP
- มีการกล่าวถึงว่า RARP ทำสิ่งเดียวกันนี้ได้ง่ายกว่า แต่แทบไม่ถูกพูดถึงในที่นี้
- ผลคือ Ethernet และ IP ค่อย ๆ พันกันแน่นขึ้นเรื่อย ๆ จนทุกวันนี้แทบแยกจากกันไม่ได้
- ตาราง routing ของ IP ทำทีเหมือนระบุ router ด้วย IP address แต่จริง ๆ คือระบุ MAC address แบบอ้อม ๆ, ARP วิ่งข้าม bridge ได้, และ DHCP แม้จะหน้าตาเหมือนแพ็กเก็ต IP แต่โครงสร้างจริงกลับใกล้กับโปรโตคอล 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 ขนาดใหญ่จำนวนมากทำงานแทบเหมือน virtual bus network ขนาดมหึมาที่ขับเคลื่อนด้วย SDN และมักไม่ได้ทำ routing แพ็กเก็ตอย่างแท้จริง
ตอนนี้ลองลืมเรื่องข้างต้นไปสักครู่
- ตอนที่ IETF ออกแบบ IPv6 ในช่วงต้นทศวรรษ 1990 ความสับสนจำนวนมากเกิดขึ้นไปแล้ว แต่การออกแบบยังเดินหน้าด้วยสมมติฐานว่ายังสามารถหลีกเลี่ยงหายนะที่กำลังจะมาถึงได้
- หนึ่งในการเปลี่ยนแปลงสำคัญระหว่างนั้นคือ การใช้ physical bus network ได้ยุติลงไปโดยพฤตินัยแล้ว
- Ethernet ไม่ได้เป็น bus จริงอีกต่อไป มันแค่แสร้งทำเป็น bus และเมื่อความเร็วสูงขึ้นจนรักษา CSMA/CD ไว้ไม่ได้ มันก็ย้อนกลับไปสู่ star topology อีกครั้ง
- โครงสร้างที่ลากสายแยกจากแต่ละสถานีไปยังสวิตช์กลางกลายเป็นเรื่องปกติ จนผนัง เพดาน และพื้นเต็มไปด้วยมัดสาย Ethernet เส้นใหญ่ราคาแพง
- แม้แต่ wifi ซึ่งดูเหมือน shared wireless medium อันเป็น bus แบบสุดขั้ว ก็แทบทั้งหมดถูกอธิบายว่าใช้งานแบบ 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 และถ้าทั้งสองบิตเป็นจริงพร้อมกันก็สามารถแสดงการทำงานแบบทวนสัญญาณระหว่าง AP ได้ด้วย - หาก A เป็น repeater ที่ต้องส่งต่อไปยังสถานีฐาน B อีกที ผู้ส่งและผู้รับจริงในอากาศก็จะแตกต่างจาก source และ destination ของ Ethernet ทั้งหมด จึงต้องใช้ 4-address mode
- ใน 802.11s mesh ยังมีถึง 6-address mode และผู้เขียนก็ระบุว่าพอถึงจุดนั้นตนเลิกพยายามทำความเข้าใจแล้ว
โลกที่ IPv6 เป็นการออกแบบที่ดี
- IETF ที่กำลังครุ่นคิดเรื่อง IPv6 มองเห็นทั้งความวุ่นวายที่เกิดขึ้นแล้วและความวุ่นวายที่กำลังจะตามมา จึงจินตนาการถึง โลกใหม่ที่ทิ้งมรดกเดิมทั้งหมด
- สมมติฐานของโลกนั้นคือการตัด physical bus network, ตัด layer 2 internetwork, ตัด broadcast, ตัด MAC address, ตัด ARP และ DHCP, ใช้ IP header ที่เรียบง่ายและเร่งด้วยฮาร์ดแวร์ได้, แก้ปัญหาขาดแอดเดรส และเลิกตั้งค่า IP แบบแมนนวลทุกที่ยกเว้นแกนหลัก
- หาก layer 2 เป็น point-to-point เสมอ ก็จะไม่มีเป้าหมายให้ส่ง 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 ต้นทางและปลายทาง 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 เสียอีก และถึง bus network จะหายไปแล้ว ก็ยังต้องจำลองพฤติกรรมคล้าย broadcast เพื่อให้กลไกแบบ ARP ทำงานต่อ
- ในบ้าน ผู้ใช้ยังต้องเปิด DHCP server ภายในต่อไปเพื่อให้หลอดไฟ IPv4 รุ่นเก่าทำงานได้ และถ้าหลอดไฟนั้นจะออกสู่อินเทอร์เน็ตก็ยังต้องมี NAT อยู่ดี
- ที่แย่กว่านั้นคือทีม IPv6 ทิ้งปัญหา mobile IP ไว้โดยแก้ไม่สำเร็จ ส่งผลให้ยังต้องพึ่ง layer 2 bridging อันน่าหวาดหวั่นต่อไป
- จากสิ่งที่ผู้เขียนเข้าใจ ตอนนั้นแผนคือกระจายใช้งาน IPv6 ให้เสร็จภายในไม่กี่ปี จากนั้นเมื่อ IPv4 และ MAC address หายไปแล้วค่อยแก้ mobile IP ซึ่งจะง่ายกว่า
- ในเวลานั้น ยังมองว่ากรณีใช้งานของคอมพิวเตอร์ที่เคลื่อนที่ไประหว่างจุดต่าง ๆ มีน้อยมาก จินตนาการได้เพียงภาพเก้งก้างอย่างการย้ายไปมาระหว่างพอร์ต Ethernet แล้วให้ ftp ทำงานต่อเนื่อง
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 เดิมไม่ว่าจะเชื่อมกับ access point ไหน และยอมรับความวุ่นวายไม่กี่วินาทีช่วงที่ bridge กำลัง reconfigure เพื่อรักษาการเชื่อมต่อไว้
- wifi ภายในบ้านที่มี extender หรือ repeater หลายตัวก็ใช้วิธีเดียวกัน
- ในทางกลับกัน หากเดินไปตามถนนแล้วสลับผ่าน เครือข่าย wifi คนละชุด อย่าง wifi สาธารณะของร้านค้าต่าง ๆ ก็จะได้ IP ใหม่ทุกครั้ง และทุกการเชื่อมต่อก็หลุดทุกครั้ง
- LTE ไปไกลกว่านั้น โดยคง IP address เดิมไว้ได้แม้จะย้ายผ่านสถานีฐานหลายแห่งเป็นระยะทางหลายไมล์ และมีการกล่าวว่าในเครือข่ายมือถือมักใช้ IPv6 address กันเป็นหลัก
- วิธีทำคือ tunnel ทราฟฟิกกลับไปยังจุดศูนย์กลาง แล้ว bridge ทุกอย่างให้เป็น virtual layer 2 LAN ยักษ์หนึ่งเดียวพร้อม firewall จำนวนมาก ซึ่งแลกมาด้วยความซับซ้อนมหาศาลและ 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 แต่เมื่อเคอร์เนลรับแพ็กเก็ตแล้วจะไม่ใช้ข้อมูล layer 3 ระบุ socket และจะใช้เพียง uuid - destination port 80 จำเป็นแค่ตอนเริ่ม session ใหม่เพื่อบอกว่าเป็นบริการใด หลังจากนั้นจะละเลยหรือไม่ส่งมาก็ได้
- เคอร์เนลของ Y จะ cache ว่าแพ็กเก็ตของ session
(uuid)มาจาก X เมื่อไม่นานมานี้ และเมื่อ X ย้ายไป Q แล้วส่งมาพร้อมแท็ก(uuid,80)เดิม ก็จะจับคู่เข้า session เดิมและอัปเดตปลายทางตอบกลับจาก X เป็น Q ได้ - วิธีนี้ทำให้การเชื่อมต่อคงอยู่ได้ แต่ก็มีหมายเหตุว่าต้องระวังเพิ่มเพื่อป้องกัน การยึดการเชื่อมต่อโดยผู้แอบอ้าง
- อย่างไรก็ตาม UDP และ TCP ไม่ได้ทำงานแบบนี้ และการเปลี่ยนมันในตอนนี้ถูกประเมินว่าเป็นโครงการประเภทเดียวกับการเปลี่ยน IPv4 ไป IPv6 ซึ่งตอนแรกดูเหมือนง่ายแต่ผ่านไปหลายสิบปีก็ยังทำได้ไม่ถึงครึ่ง
QUIC และความเป็นไปได้ในการอ้อมปัญหา
- ในด้านบวก มีการเสนอว่าอาจแก้แบบอ้อม ๆ ได้ด้วยการละเมิดชั้นเพิ่มเติมอีกครั้ง
- หากเลิกใช้ TCP รุ่นเก่าและใช้ QUIC บน UDP ก็สามารถออกแบบให้ไม่ใช้ 4-tuple ของ UDP เองเป็นตัวระบุการเชื่อมต่อได้
- หากพอร์ต UDP นั้นเป็นพอร์ตของ mobility layer แบบพิเศษ ก็สามารถแกะ payload ด้านในออกมาเป็นแพ็กเก็ตภายในที่มีแท็ก uuid เหมาะสม แล้วจับคู่เข้ากับ session และ socket ที่ถูกต้องได้
- มีการระบุว่า โปรโตคอล QUIC เชิงทดลอง อย่างน้อยในทางทฤษฎี มีรูปแบบแพ็กเก็ตที่เหมาะกับโครงสร้างแบบนี้อยู่แล้ว
- เพราะการเข้ารหัสและการยืนยันตัวตนของแพ็กเก็ตแบบ stateless ที่ 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 อย่างน้อยผู้โจมตีก็ต้องเป็นระดับคนกลาง ไม่ใช่เพียงผู้โจมตีภายนอกทั่วไป
- หากใช้ โปรโตคอลเข้ารหัส อย่าง 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 มากขนาดนั้นหรือไม่ อยากรู้ว่าข้อสรุปนี้ผิดหรือเปล่า