IPv6 — มัน เยอะ มาก
โลก internet บูมขึ้นมาในยุค IPv4 และอยู่ในช่วงเปลี่ยนผ่านแบบใช้ควบคู่กันไปกับ IPv6
IP = Internet Protocol, v = version, 4 = ๔, 6 = ๖ (จะบอกทำไม)
ข้ามเรื่อง version อื่นๆ ไป หนนี้เราจะสนใจแค่ v4 กับ v6 พอ
2 version นี้มีสิ่งที่ต่างและเป็นที่จดจำกันมากๆ คือ IP address ที่เปรียบเสมือนบ้านเลขที่บน internet นี่แหละ และเป็นประเด็นใหญ่ที่ทำให้เรากำลังถูกผลักดันให้เปลี่ยนจาก v4 ไปสู่ v6 ส่วนว่าทำไมนั้นเราคงต้องมาทำความรู้จักไปจนถึงข้อจำกัดของ v4 กันเสียก่อน
IPv4
ตัว IPv4 address เวลาเราเขียนเราจะแบ่งเลขออกเป็น 4 ชุด คั่นด้วย . โดยแต่ละชุดมีค่าได้ตั้งแต่ 0–255 เช่น 192.168.76.5
ผมเข้าใจว่าในตอนออกแบบเนี่ยเค้าก็คิดว่ามันมีเยอะแล้วนะ เพราะเลขพวกนี้มีค่าไม่ซ้ำกันได้ตั้ง 4 พันล้านหมายเลขแน่ะ
มาถึงปัจจุบัน มันเปลี่ยนเป็น “แค่” 4 พันล้านหมายเลขแล้ว
เอาง่ายๆ บนโลกมีคนใช้งาน internet กี่คน คนนึงมีอุปกรณ์ที่เชื่อมต่อ internet กี่ชิ้น แบบบ้านผมที่อยู่คนเดียวนี่ก็ประมาณ 20 ชิ้นแล้วอ่ะ นี่พูดถึงแค่ฝั่งผู้ใช้ยังไม่นับผู้ให้บริการอีกนะ
มีให้ใช้อยู่แค่นั้นไม่พอ เลขพวกนี้ก็ไม่ได้เอามาใช้ได้ทุกเลขนะ มีเลขที่เก็บไว้ใช้ในความหมายเฉพาะมากมาย มีส่วนที่จัดสรรมาให้ใช้เป็นบ้านเลขที่ได้จริงๆ นิดเดียวเอง ด้วยความที่ทีแรกคิดว่ามันเหลือเฟือล่ะมั้ง เค้าสับทิ้งกันทีคือ อ๋อ จะใช้เลขนี้สักเลขนึงอ่ะ พวกนี้ที่คล้ายๆ กันสิบกว่าล้านหมายเลขก็โยนทิ้งไปให้หมดเลยนะ
บ้านเลขที่v4 พวกนี้ก็เลยไม่พอใช้ครับ ทางหน่วยงานดูแลได้จัดสรรหมายเลขกลุ่มสุดท้ายให้สักพื้นที่บนโลกไปตั้งนานมากแล้ว
เราก็เลยมีทางออกสองทาง ทางออกที่ง่ายกว่าในระยะสั้นคือ large-scale NAT กับการเปลี่ยนไปใช้ IPv6
NAT & large-scale NAT
มาเริ่มที่ large-scale NAT กันก่อน การ NAT ที่เราใช้กันถ้าเอาง่ายๆ ก็คือการเอาบ้านเลขที่ซ้อนบ้านเลขที่แหละครับ จริงๆ เราเริ่มใช้ NAT กันมานานมากแล้วนะแต่เป็นระดับบ้าน เราขอติดตั้ง internet บ้านเราก็จะได้ router มาหนึ่งตัวใช่ไหมครับ? นั่นแหละ มันผ่านมานานมากแล้วที่เราได้ internet address แค่ 1 หมายเลขที่ router ส่วนอุปกรณ์เราที่ต่อกับ router นั่นจะได้แค่บ้านเลขที่ที่คุยกันได้แค่ในวงของ router นี้ เพราะมันเป็นบ้านเลขที่ที่ตั้งกันขึ้นมาเองไม่ได้ประกาศให้สากลรู้และเป็นบ้านเลขที่ที่ซ้ำกับคนอื่นมากมาย ที่เป็นแบบนี้เนื่องจากผู้ให้บริการเค้าไม่ได้มี IPv4 เหลือเฟือเพื่อแจกให้อุปกรณ์ทุกชิ้นของเราไงครับ
วันเวลาผ่านไป ISP หรือผู้ให้บริการก็ไม่เหลือแม้แต่ IPv4 ที่จะแจกให้กับบ้านทุกหลังด้วยซ้ำ เค้าก็เลยเอา NAT เนี่ยไปขวางไว้ตั้งแต่ที่ฝั่งเค้า เอาบ้านเลขที่สากลไว้ที่ฝั่งเค้าแล้วก็ส่งบ้านเลขที่ที่เราใช้คุยกับเค้าได้แค่นั้นมาให้ router เรา แล้ว router เราก็ส่ง address ที่ใช้คุยกันได้แค่ในวง router นี้มาให้อุปกรณ์เราอีกที ซ้อนกันไปเรื่อยๆ
ปัญหาของ NAT
ข้อดีของ NAT คืออุปกรณ์ทั่วไปก็ใช้งานต่อได้ทันทีเลยราวกับทุกอย่างเหมือนเดิม ก็ฟังดูใช้งานได้นะครับ แต่การแชร์บ้านเลขที่แบบนี้เนี่ยมันก็มีปัญหาของมัน มีคนและอุปกรณ์ต้องแบกรับภาระเพื่อให้ใช้งานได้อยู่ตลอดเวลา ไม่ใช่แค่อุปกรณ์ที่ทำ NAT ที่เหนื่อยนะ มีมากกว่านั้นมากเพราะระบบมันไม่ได้ออกแบบให้เราสามารถบอกบ้านเลขที่ซ้อนได้ เราไม่สามารถขอส่งจดหมายโดยจ่าหน้าซองได้ว่าให้ส่งไปบ้านเลขที่ 3.4.5.6 ที่อยู่ในบ้านเลขที่ 2.3.4.5 ซึ่งก็อยู่ในบ้านเลขที่ 1.2.3.4 อีกทีได้ เราจ่าหน้าซองได้แค่ ขอส่งจดหมายไปบ้านเลขที่ 1.2.3.4 หน่อยครับ ซึ่งแน่นอนว่ามันไปไม่ถึง 1.2.3.4 -> 2.3.4.5 -> 3.4.5.6 หรอกครับ
ในฝั่งตอบกลับ (แบบที่ 3.4.5.6 ส่งข้อความออกไปหาบ้านเลขที่สากลข้างนอกแล้วเค้าตอบกลับมาได้) มันก็มีกลไกให้ทำงานได้ของมันแหละเราถึงยังใช้งาน internet อยู่ข้างหลัง NAT กันได้ แต่คงไม่กล่าวถึงในที่นี้ ซึ่งอุปกรณ์ NAT ต้องรับภาระทั้ง CPU และ RAM มหาศาลเพื่อให้ทำงานได้และทำงานทัน
ตัวอย่างของปัญหาก็เช่นพวก real-time push message ทั้งหลายแบบที่โทรศัพท์เราเด้งทันทีที่มีคนส่งข้อความให้นั่นน่ะ โทรศัพท์ต้องเผาแบตเตอรี่เกินความจำเป็นไปมากเพื่อให้มันได้รับข้อความได้แบบนั้นนะครับ และทั้งทีม dev ทั้งทีม network ต้องเหนื่อยกันมหาศาลให้มันทำงานได้ทันใจผู้ใช้
IPv6
เพื่อแก้ปัญหาบ้านเลขที่ไม่พอให้หายขาด เราก็เปลี่ยนรูปแบบให้มีจำนวนบ้านเลขที่ได้มากขึ้นครับ เย้ แก้ปัญหาได้ตรงจุด แต่ด้วยความที่รูปแบบบ้านเลขที่มันเปลี่ยนไปเนี่ยมันก็ทำให้ทำงานกับระบบเดิมไม่ได้นะ เป็นเหตุผลนึงว่าทำไม IPv6 ถึงได้มาช้าและเหมือนผู้ให้บริการไม่ค่อยอยากเปลี่ยนกันเท่าไหร่
ส่วนว่าครั้งนี้มีจำนวนบ้านเลขที่เยอะขนาดไหน อืมมม ผมว่าทีมออกแบบกลัวเจอปัญหาอีกแหละ เลยทำออกมาเยอะแบบ
เยอะ
และเนื้อหาของบทความนี้จะเน้นไปที่ความ เยอะ ของเจ้า IPv6 นี้นี่แหละ
ย้อนกลับไปที่ผมบอกว่า IPv4 เนี่ยไม่ได้ใช้ได้ทั้ง 4 พันล้านหมายเลขนะ หน่วยงานดูแลเค้ากันเลขจำนวนนึงไปไว้ใช้อย่างอื่น IPv6 ก็เช่นกัน เท่าที่ผมหาข้อมูลเจอ ตอนนี้หน่วยงานที่ดูแลเรื่องการแจกจ่าย IPv6 ได้อนุมัติออกมาราวๆ 20% ของหมายเลขที่เป็นไปได้ก่อน ที่เหลือว่ากันทีหลัง
20% นี่เยอะขนาดไหน?
เอาง่ายๆ ก่อนครับ ตอนนี้เวลาต่อเน็ตบ้านเนี่ย ISP ไม่ได้ให้บ้านเลขที่แค่เลขเดียวกับ router เราเหมือน v4 ตอนนี้นะ
และก็ไม่ได้ให้บ้านเลขที่ 1 หมายเลขต่อ 1 อุปกรณ์เราด้วยนะ
บ้านเราจะมาเป็นวง (หรือชุด) ที่นิยมกันอยู่ตอนนี้คือให้วงขนาดที่มีได้กว่า 16.7 ล้านหมายเลข
และด้วย 20% ที่เปิดให้ใช้แล้วเนี่ย เราสามารถแจกวง 16.7 ล้านหมายเลขนี้ให้ทุกคนบนโลกได้คนมากกว่าคนละ 4,000 ชุด
ทำไม v6 ถึงได้มีเหลือเฟือขนาดนั้น? ก็จากที่เรามี 0–255 อยู่ 4 ชุดใน v4 มาเป็น 0-ffff (0–65,535 แหละ แต่เขียนเป็นเลขฐาน 16 ให้สั้นลง ไม่งั้นยาวเกิน) อยู่ 8 ชุดใน v6
จาก v4 ที่มี 4 พันล้านหมายเลข มาเป็น v6 ที่มีกว่า 340 undecillion หมายเลข
หน่วยอะไรไม่เข้าใจใช่มะ งั้นแปลงเป็น trillion ที่เราเรียกล้านล้าน (ศูนย์ 12 ตัว) แล้วกัน
กว่า 340 trillion trillion trillion หมายเลข
เอ่อ ก็ประมาณ 34 แล้วเติมเลข 0 ต่อท้ายไปอีก 37 ตัว น่ะ
เพื่อให้เห็นภาพ นี่คือจำนวนหมายเลข IPv6 ที่เป็นไปได้เทียบกับ IPv4 ครับ
ไปเจอคนลองคำนวณดู (ที่ผมก็ไม่ได้ตรวจสอบนะ) ว่าถ้าโลกเราผิวเรียบแบบตัดหลุมตัดภูเขาออก เราจะสามารถแจกเจ้าบ้านเลขที่v6 เนี่ยให้กับทุกอะตอมที่ปกคลุมพื้นผิวโลกได้ (เอาเฉพาะผิวชั้นเดียวหนา 1 อะตอมนะ)
และไม่ใช่แค่แจกให้ได้ทุกอะตอมนะ แจกให้ได้อะตอมละมากกว่า 100 หมายเลข
ถ้าเราใช้เครื่องมือในยุคปัจจุบันไปทำ network port scan ก็ต้องใช้เวลากว่า 3 ชั่วอายุจักรวาลของเราถึงจะสแกนได้ครบน่ะครับ
ข้อดีของ IPv6 ที่มีเหลือเฟือ
คือพอมันมีเหลือเฟือ เราก็แจกบ้านเลขที่สากลให้กับทุกอุปกรณ์ที่เรามีได้ครับ
router ก็ทำงานน้อยลง ใช้ RAM น้อยลง
ไม่ต้องมี NAT มาคั่นเพิ่มเป็นชั้นๆ
เอาที่คนทั่วไปสัมผัสได้ ก็เช่น hop ไปที่ใดที่นึงน้อยลง (เพราะชั้น NAT หายไป) และ latency ลดลง (ก็จาก NAT ที่หายไปด้วยนี่แหละ router ทำงานน้อยลงเลยเร็วขึ้นนิดนึง)
ถ้าใช้งานกันจริงจังแล้วค่าไฟฟ้าก็จะลดลงด้วย ระบบพูดคุยอย่าง voice chat ก็อาจลด latency ลงได้มาก
เพราะปัจจุบันเราไม่ได้ส่งเสียงคุยกันตรงๆ นะ เราพูด เสียงเราจะวิ่งไปที่ server ก่อน แล้วจาก server ถึงจะวิ่งไปหาปลายทางอีกที
พอมีบ้านเลขที่สากลปุ๊บ เราสามารถเอาข้อมูลวิ่งตรงไปหาปลายสายได้เลย
ในแง่ของคนพัฒนาระบบให้บริการก็ลดภาระไปได้มาก สามารถให้ผู้ใช้คุยกันตรงได้เลยไม่ต้องทำ service มาคั่นกลาง
ความปลอดภัย?
เรื่องนึงที่คนห่วงกันมาจากข้อเสียของ IPv4 นี่แหละ คือกลายเป็นว่าทุกอุปกรณ์มีบ้านเลขที่สากลแล้ว คนจะโจมตีโดยตรงไปถึงอุปกรณ์ได้เลยนะ ยิงนู่นนี่นั่นเข้าไปหาได้เลย
แม้อุปกรณ์ทุกตัวจะมีบ้านเลขที่สากลคงที่แปะประจำอุปกรณ์ไว้ในช่วงเวลานึงที่ค่อนข้างนาน เพื่อให้เราสามารถเอาเลขนี้ไปใช้ไว้เชื่อมต่อกลับมาได้ เช่น กดเข้ามาดูกล้องวงจรปิดจากนอกบ้าน
แต่อันนี้มันมีส่วนเสริมเรื่องความปลอดภัยเป็นมาตรฐานให้ใช้อยู่ครับ ด้วยความที่มันมีเหลือเฟือนั่นแหละ บ้านนึงมีตั้งเกือบ 20 ล้านหมายเลข อุปกรณ์ชิ้นนึงสามารถมีบ้านเลขที่สากลนี่ได้มากกว่า 1 หมายเลขครับ
จะเปิดเว็บ A เหรอ? ขอบ้านเลขที่สากลชั่วคราวมาใหม่เลขนึงครับ ใช้คุยกับเว็บ A โดยเฉพาะ คุยเสร็จ คืนบ้านเลขที่
voice chat คุยกับเพื่อนเหรอ ขอบ้านเลขที่สากลชั่วคราวมาอีกเลขนึง เลขนี้ใช้รับข้อมูลบน port ที่ตั้งไว้เท่านั้นนะ คนอื่นยิงเข้ามาทำอย่างอื่นไม่ได้
จะทำอย่างอื่นอีก ขอบ้านเลขที่ชั่วคราวมาเพิ่มอีก รัวๆ ไป
แต่ในเมื่อบ้านเลขที่ชั่วคราวมันอยู่ในวงเดียวกัน คนอื่นเค้าก็เข้ามาสแกนหาบ้านเลขที่คงตัวได้ไม่ใช่เหรอ?
ก็ได้แหละครับ แต่บ้านผมมีเกือบ 20 ล้านเลข ถ้าพี่สแกนหาเจอจริงๆ ก็ต้องบอกว่าโชคดีของพี่น่ะนะครับ
ถ้าสแกนบ้านผมได้ครบ ทำแบบเดียวกันบน IPv4 ซ้ำอีก 255 ครั้งพี่ก็สแกนได้ทุกบ้านในโลกบน IPv4 แล้วอ่ะ