อย่างที่รู้กันนะครับ ว่า IPv4 กำลังจะหมดไปในไม่ช้านี้ ซึ่งเป็นคำพูดที่ผมได้ยินมาตั้งแต่เริ่มเข้าเรียนมหาวิทยาลัยตอนปีหนึ่ง จนตอนนี้จบมาทำงานได้จะสิบปีแล้ว ก็ยังไม่หมดซะที 555+ แต่เอาเป็นว่า ซักวันนึงจะต้องเลิกใช้ IPv4 อย่างแน่นอน ซึ่งก็ไม่รู้ว่ากว่าจะถึงเวลานั้น จะเปลี่ยนจาก IPv4 ไปเป็น IP version อะไร อาจจะเป็น 6, 7 หรือ 8 ก็ได้ แต่ที่มีอยู่และใช้งานจริงกันแล้วในปัจจุบันนี้ ที่นอกเหนือจาก IPv4 ก็คือ IPv6 นั่นเอง ซึ่งก็เป็นที่มาของบทความนี้ ที่จะมาแนะนำให้ได้รู้จักกับ Internet Protocol Version 6 (IPv6) กันครับ
ก่อนอื่น เรามาดูปัญหาของ IPv4 ซึ่งหลาย ๆ ท่านน่าจะพอทราบกันอยู่แล้ว แต่เผื่อใครที่ยังไม่ทราบ ผมจะขออธิบายสั้น ๆ แบบคร่าว ๆ อีกซักรอบนะครับ
"2001:0000:0000:cd30:0000:0000:0000:0001/64"
สามารถเขียนได้เป็น
"2001:0:0:cd30:0:0:0:1/64"
2.กรณีที่เป็นชุดของเลขฐานสิบหก ที่เป็นเลขศูนย์ต่อเนื่องกัน จะสามารถลดรูปได้ด้วยการใช้เครื่องหมาย double colons (::) โดยใน IPv6 address หนึ่ง ๆ เราจะสามารถใช้เครื่องหมาย double colons (::) ได้เพียงครั้งเดียวเท่านั้น เช่น
"2001:0:0:cd30:0:0:0:1/64"
สามารถเขียนได้เป็น
"2001::cd30:0:0:0:1/64"
หรือ
"2001:0:0:cd30::1/64"
โดยจะไม่สามารถใช้เครื่องหมาย double colons (::) สองครั้ง เช่น 2001::cd30::1/64 ในการเขียน IPv6 address ได้
ถ้าสังเกตุหมายเลข IPv6 address ทั้งที่ใช้งานจริงและอยู่ในเอกสารหรือตำราต่าง ๆ จะใช้งาน global unicast address ใน prefix 2000::/3 กันเสียส่วนมาก ก็เนื่องจากตาม RFC2373 ได้กำหนดให้ใช้งานหมายเลขที่อยู่ใน prefix นี้เพียง prefix เดียวเป็น global unicast address แต่ในปัจจุบัน ได้มีการปรับปรุง prefix ที่จะใช้งานเป็น unicast address แล้ว ซึงก็คือทุก prefix ที่ไม่ใช่ multicast address นั่นเอง
จากตารางด้านบน ตาม RFC4291 ถ้า IPv6 address มีค่า prefix ใน octet แรกสุดเป็น FF (หรือ 1111 1111) แสดงว่าเป็นหมายเลขที่อยู่ชนิด multicast address แต่ถ้าหาก prefix ใน octet แรกสุดไม่ใช่ FF แสดงว่าเป็นหมายเลขที่อยู่ชนิด unicast address ทั้งหมด ไม่เว้นแต่ anycast address ที่จะถูกจัดสรรมาจากส่วนหนึ่งของ unicast address
เพื่อให้เห็นภาพและง่ายต่อการเข้าใจ ผมจะนำมาเปรียบเทียบกับชนิดของ IPv4 address ที่ใช้งานกันในปัจจุบันนะครับ
IPv6 subnet prefix
ในการใช้งาน IPv6 โดยปกติแล้วจะใช้ prefix length ขนาด 64 bits หรือ /64 เสมอ การใช้งาน subnet prefix length อื่น ๆ ที่นอกเหนือจาก /64 นั้น จะทำให้หลาย ๆ คุณสมบัติของ IPv6 ไม่สามารถใช้งานได้ เช่น Neighbor Discovery (ND), Secure Neighbor Discovery (SEND), privacy extensions, parts of Mobile IPv6, Protocol Independent Multicast - Sparse Mode (PIM-SM) with Embedded-RP และ Site Multihoming by IPv6 Internediation (SHIM6) รวมทั้งคุณสมบัติอื่น ๆ ที่อยู่ระหว่างขั้นตอนการพัฒนา เนื่องจากคุณสมบัติเหล่านี้ ได้ถูกออกแบบมาให้ใช้งานกับ subnet prefix /64 เท่านั้น
แม้แต่ในการใช้งานในลักษณะ point-to-point link ระหว่างการเชื่อมต่อของเราเตอร์ก็ควรที่จะใช้งาน subnet prefix /64 แต่ถ้าหากว่าไม่ต้องการใช้งานคุณสมบัติใด ๆ ของ IPv6 ที่ได้ออกแบบมาให้ใช้งานกับ subnet prefix /64 ก็สามารถที่จะใช้งาน subnet prefix /126 (เหมือนกับ /30 บน IPv4) กับ point-to-point link ระหว่างการเชื่อมต่อของเราเตอร์ก็ได้ แต่จะต้องทำการกำหนดค่าด้วยตนเอง และไม่ควรที่จะใช้งาน prefix length ที่มีขนาดมากกว่า /64 ในการเชื่อมต่อกับ end host โดยตรง
ในปัจจุบันสำหรับลูกค้าทั่วไป ISP จะทำการแจก subnet prefix ขนาด /48 หรือ /56 มาให้ (สำหรับลูกค้าขนาดใหญ่ อาจจะได้รับ subnet prefix ตั้งแต่ /32 - /40 มาใช้งาน) โดยในกรณีที่ได้รับ subnet prefix ขนาด /48 มาใช้งาน ทางลูกค้าจะสามารถกำหนดหมายเลข subnet ID ได้เองถึง 16 bits (หรือเป็น 8 bits ถ้าหากได้รับ sunet prefix /56 มาจาก ISP) นั่นคือลูกค้าสามารถที่จะทำการแบ่ง subnet prefix ได้เองถึง 216 หรือ 65536 subnet เลยทีเดียว ซึ่งก็เพียงพอต่อการใช้งานโดยทั่วไปขององค์กรต่าง ๆ อยู่แล้ว
IPv6 Header
ถ้าจะเปรียบเทียบระหว่าง IPv4 Header กับ IPv6 Header จะเห็นว่ามีบาง fields ที่จะมีการทำงานเหมือนกันกับ IPv4 header และมีบาง fields ของ IPv4 header ที่ไม่ถูกนำไปใช้งานบน IPv6 header โดย fields ของ IPv4 ในส่วนที่มีสีแดงจะเป็น fields ที่จะไม่ถูกนำไปใช้งานบน IPv6 header ส่วน fields ของ IPv6 ที่มีสีฟ้าจะเป็น fields ที่เพิ่มขึ้นมาใหม่บน IPv6
โดยแต่ละ field ของ IPv6 address จะมีรายละเอียด ดังนี้
- IPv4 ไม่เพียงพอต่อการใช้งาน อย่างที่บอกไปข้างต้น ผมได้ยินคำพูดว่า IPv4 กำลังจะหมดมาซัก 10 ปีได้แล้ว แต่ที่ผ่านมาก็ยังมีให้ใช้กันมาเรื่อย ๆ อยู่ แต่ในปัจจุบัน เริ่มมีสัญญาณบางอย่างที่สะท้อนความจริงของคำพูดนี้ออกมาแล้ว ยกตัวอย่างเช่น internet แบบ ADSL ที่ใช้งานกันอยู่ตามบ้านทั่ว ๆ ไป จากที่เมื่อก่อนเคยแจก Public IPv4 ให้กับลูกค้าแต่ละบ้าน ในปัจจุบันหลาย ๆ ISP ก็เริ่มที่จะแจก Private IPv4 กันแล้ว หรือจะดูจากจำนวนของ full IPv4 internet route ในปัจจุบันก็ได้ ที่ขยับไปแตะที่ 500,000 route กันแล้ว เป็นต้น
- รูปแบบ Header ที่ล้าสมัย แน่นอนที่จะล้าสมัย เนื่องจาก IPv4 ที่ใช้งานกันอยู่ในปัจจุบันนี้ ได้เกิดขึ้นเมื่อ 30 กว่าปีมาแล้ว เรียกได้ว่าอะไรก็ตามที่ทันสมัยสุด ๆ ในเวลานั้น ก็กลายเป็นวัตถุโบราณในปัจจุบันไปหมดแล้ว ดังนั้น การออกแบบและใช้งาน IPv4 ตั้งแต่สมัยเมื่อ 30-40 ปีก่อน ก็ย่อมจะมีบางสิ่งที่ขาด และบางสิ่งที่ไม่จำเป็นอีกต่อไป
และในเมื่อไหน ๆ จะมาใช้งาน IP version ใหม่กันแล้ว (จริง ๆ ก็ไม่ใหม่เท่าไร นับเฉพาะตั้งแต่ที่ RFC 2460 เริ่ม publish ตั้งแต่ปี 1998 ก็ 16 ปีผ่านมาแล้ว) ก็เลยถือโอกาส "ยกเครื่อง" ทำการปรับปรุงหลาย ๆ สิ่งให้เหมาะสมกับปัจจุบันให้มากยิ่งขึ้น เช่น
- เพิ่มขนาดของหมายเลขที่อยู่ : IPv6 จะเพิ่มขนาดของหมายเลขที่อยู่จากเดิม 32 bits เป็น 128 bits เพื่อรองรับกับความต้องการในการใช้งานหมายเลขที่อยู่ที่มากขึ้น
- IP Header ที่ไม่ซับซ้อน : บน IPv6 จะมี Header ที่มีความซับซ้อนน้อยกว่า IPv4 และจัดเรียงใหม่ให้สามารถอ่านในรูปแบบ 64 bits ได้ง่ายขึ้น เพื่อลดขั้นตอนในการประมวลผล packet และจะมี Header ที่มีขนาดคงที่ (40 bytes) โดยจะมีการตัด Header ที่ไม่จำเป็นบน IPv4 ออกไปหรือเปลี่ยนไปเป็นทางเลือกบน IPv6 แทน
- ความสามารถในการจัดการทราฟิกด้วยการใช้ flow label : มีการเพิ่ม field ใหม่ที่ชื่อว่า flow label ทำให้เป็นการเพิ่มความสามารถในการทำ QoS ได้มากขึ้น เพื่อรองรับกับการให้บริการแบบ real-time service
- ขนาดของ minimum MTU : MTU ขั้นต่ำของ IPv4 คือ 567 byte แต่บน IPv6 จะเพิ่มเป็น 1280 byte ทำให้สามารถส่งข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น เนื่องจากสัดส่วนของ header ต่อข้อมูลทั้งหมดจะลดลง
- การทำ stateless autoconfiguration : เราเตอร์จะทำการประกาศ prefix ของตัวเองออกมา ทำให้โฮสต์สามารถรับ prefix นั้นมาสร้าง IPv6 address ได้เองโดยอัตโนมัติ โดยไม่ต้องใช้งาน DHCP (แต่ในการใช้งานจริงกับเครื่องโฮสต์ ก็ยังจำเป็นต้องใช้ DHCP อยู่)
- ความสามารถในการตรวจสอบย้อนหลัง : เนื่องจากจำนวนของ IPv6 มีมาก ทำให้ไม่มีความจำเป็นที่จะต้องทำ NAT เหมือนกับ IPv4 อีกต่อไป (ยกเว้นต้องการเพิ่มระดับความปลอดภัย) ทำให้สามารถตรวจสอบการใช้งานของแต่ละ IPv6 address ได้ง่ายขึ้น ไม่ต้องปวดหัวเรื่องการทำ NAT เหมือนกับ IPv4 ที่เวลาต้องการตรวจสอบการใช้งานย้อนหลัง ต้องมานั่งไล่ log กันหน้ามืดเลยทีเดียว
รูปแบบของ IPv6 address
ก่อนอื่น เรามาดูตัวอย่างหน้าตาของ IPv6 address กันครับ IPv6 address จะเขียนอยู่ในรูปแบบ "IPv6-address/prefix-length" เช่น
"2001:0000:0000:cd30:0000:0000:0000:0001/64"
IPv6 address จะมีขนาด 128 bits ในการใช้งานจะถูกแบ่งเป็นเลขฐาน 16 จำนวน 8 ชุด โดยแต่ละชุดจะมีขนาด 16 bits และจะถูกคั่นไว้ด้วยเครื่องหมาย colons ":" ซึ่งดูแล้วยากต่อการเขียนจริงมั้ยครับ โดยถ้าจะเทียบกับ IPv4 ที่ใช้เลขฐาน 10 ในการเขียน แล้วดูเหมือนว่า IPv6 จะใช้งานยากกว่ากันเยอะเลย เอาง่าย ๆ ให้มาบอก IPv6 address โดยที่ไม่ต้องดู เหมือนที่เคยบอก IPv4 address จะกลายเป็นเรื่องยากแน่นอน ทำให้การใช้งาน DNS จะมีส่วนสำคัญและจำเป็นมากยิ่งขึ้นในการใช้งานกับ IPv6 นะครับ
IPv6 address prefix จะมีหลักการใช้งานที่คล้ายกับการใช้งาน CIDR บน IPv4 address โดยจะมีการกำหนด prefix length ซึ่งเป็นเลขฐานสิบที่ระบุถึงจำนวนของ bits ที่เป็น prefix หรือ network address ของหมายเลขที่อยู่ อย่างเช่น 2001:0000:0000:cd30:0000:0000:0000:0001/64 จะมีเลข network address ขนาด 64 bits เป็น 2001:0000:0000:cd30:: และมีหมายเลขที่อยู่สำหรับ host อีก 64 bits เป็น 0000:0000:0000:0001 เป็นต้น
จากตัวอย่าง IPv6 address ด้านบน ที่ยากต่อการเขียนและการจดจำ เพื่อความสะดวกมากยิ่งขึ้น เราสามารถที่จะเขียนโดยย่อรูปได้ เช่นจากตัวอย่างด้านบน จะสามารถเขียนได้เป็น
"2001:0:0:cd30::1/64"
ซึ่งจะเห็นว่าง่ายกว่าเดิม (นิดหน่อย) และไม่ต้องมาเขียนแบบเต็ม ๆ แบบตัวอย่างด้านบนทุกครั้ง โดยหลักในการเขียน IPv6 address แบบย่อ ก็มีดังนี้ครับ
1.กรณีที่เป็นเลขศูนย์นำหน้าในแต่ละชุด จะละเว้นไม่ต้องเขียนเลขศูนย์ได้ หรือถ้าเป็นเลขศูนย์ทั้งชุดจะสามารถเขียนโดยใช้เลข 0 ตัวเดียวได้ เช่น
"2001:0000:0000:cd30:0000:0000:0000:0001/64"
สามารถเขียนได้เป็น
"2001:0:0:cd30:0:0:0:1/64"
2.กรณีที่เป็นชุดของเลขฐานสิบหก ที่เป็นเลขศูนย์ต่อเนื่องกัน จะสามารถลดรูปได้ด้วยการใช้เครื่องหมาย double colons (::) โดยใน IPv6 address หนึ่ง ๆ เราจะสามารถใช้เครื่องหมาย double colons (::) ได้เพียงครั้งเดียวเท่านั้น เช่น
"2001:0:0:cd30:0:0:0:1/64"
สามารถเขียนได้เป็น
"2001::cd30:0:0:0:1/64"
หรือ
"2001:0:0:cd30::1/64"
โดยจะไม่สามารถใช้เครื่องหมาย double colons (::) สองครั้ง เช่น 2001::cd30::1/64 ในการเขียน IPv6 address ได้
ชนิดของ IPv6 address
ชนิดของ IPv6 address โดยหลักการทำงานแล้วก็จะเหมือนกันกับ IPv4 address ทั้ง unicast, multicast, anycast (IPv4 ก็มี anycast นะครับ) แต่จะเห็นว่าไม่มี broadcast address บน IPv6 นะครับ แต่จะไปใช้งาน link-local scope multicast address แทนครับ ทำให้ในปัจจุบัน ตาม RFC 4291 และ 4193 จะมีชนิดของ IPv6 address ดังนี้ครับ
- unicast address : มีหลักการทำงานเหมือนกับ IPv4 unicast address ใช้ในการรับส่งข้อมูลแบบ one-to-one จากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง โดยจะแบ่งชนิดในการใช้งานแยกย่อยไปอีกดังนี้
- global unicast address คล้ายกับ public IPv4 address เป็นหมายเลขที่อยู่ที่สามารถเข้าถึงได้จากเครือข่ายภายนอก
- link-local address มี prefix เป็น FE80::/10 โดยจะทำงานคล้ายกับ link-local IPv4 address (169.254.0.0/16)
- unique local address มี prefix เป็น FC00::/7 โดยจะทำงานคล้ายกับ private IPv4 address
- embedded IPv4 address เป็น IPv6 address ที่สร้างมาเพื่อช่วยในการเปลี่ยนจากการใช้งาน IPv4 address เป็น IPv6 address ให้สะดวกยิ่งขึ้น เป็นการนำ IPv4 address มาแปลงเป็น IPv6 address โดยจะมีแยกย่อยอีก 2 ชนิดคือ
- IPv4-Compatible IPv6 address ในปัจจุบันได้เลิกใช้งานไปแล้ว โดยจะมีรูปแบบประกอบไปด้วยบิตที่เป็นศูนย์ "0" จำนวน 96 bits และตามมาด้วยหมายเลข IPv4 address ที่ถูกแปลงเป็นเลขฐาน 16 อีก 32 bits อย่างเช่นมีหมายเลข IPv4 address เป็น 222.1.41.90 ก็จะมีหมายเลขที่อยู่แบบ IPv4-Compatible IPv6 address เป็น ::de01:295a เป็นต้น
- IPv4-mapped IPv6 address จะนำ IPv4 address ไป mapped เข้ากับ IPv6 address โดยรูปแบบจะประกอบไปด้วยบิตที่เป็นศูนย์ "0" จำนวน 80 bits และตามมาด้วยบิตที่เป็นหนึ่ง "1" จำนวน 16 bits จากนั้นจึงตามมาด้วยหมายเลข IPv4 address ดังนั้น ถ้าหากมีหมายเลข IPv4 address เป็น 222.1.41.90 ก็จะมีหมายเลขที่อยู่แบบ IPv4-Mapped IPv6 address เป็น ::FFFF:222.1.41.90
- site-local address มี prefix เป็น FEC0::/10 เป็นหมายเลข IPv6 address สำหรับใช้ภายในองค์กร ถูกกำหนดไว้ใน RFC2373 แต่ใน RFC4291 ได้ยกเลิกการใช้งานไปแล้ว และไปใช้งาน unique local address (ULA) แทน
- multicast address : มี prefix เป็น FF00::/8 โดยมีหลักการทำงานคล้ายกับ IPv4 multicast address ใช้ในการรับส่งข้อมูลแบบ one-to-many จากเครื่องหนึ่งไปยังกลุ่มของเครื่องที่กำหนด โดยจะต้องมีการกำหนดให้แต่ละเครื่องอยู่ใน group ที่ต้องการ โดยแต่ละ group จะต้องทำการกำหนดหมายเลข multicast address ไว้ และเมื่อไรก็ตามที่มีการส่งข้อมูลไปยัง multicast address ที่กำหนดไว้ เครื่องทุกเครื่องที่อยู่ใน group ก็จะได้รับข้อมูลที่ส่งไป
- anycast address : จะใช้ในการรับส่งข้อมูลแบบ one-to-one-of-many โดยจะนำหมายเลข unicast address แบบปกติมาใช้งาน แต่จะต่างจากการใช้งาน unicast address ตรงที่ หมายเลขที่อยู่ที่นำมาใช้งานนี้ จะถูกนำไปใช้งานซ้ำกันบนอินเทอร์เฟสของอุปกรณ์มากกว่าหนึ่งตัว อย่างเช่น ทำการตั้งค่าหมายเลข anycast address เดียวกันให้กับเราเตอร์หลาย ๆ ตัวที่ติดตั้งอยู่คนละพื้นที่กัน และกำหนดว่าหมายเลขที่อยู่นี้เป็น anycast address (เพื่อปิดการทำงานของ DAD) จากนั้นก็จะประกาศหมายเลขที่อยู่นี้ไปใน dynamic routing protocol ที่ใช้งานอยู่ ทำให้เมื่อมีโฮสต์ปลายทางที่ต้องการติดต่อสื่อสารไปยัง anycast address ที่ได้กำหนดไว้ แพ็คเก็ตก็จะถูกส่งไปยังเราเตอร์ที่มีค่า metric ที่ดีที่สุด ตามแต่ละ routing protocol ที่ใช้งานอยู่ ซึ่งโดยทั่วไปก็จะเป็นเส้นทางที่ใกล้ที่สุดนั่นเอง
- Loopback address : ใช้หมายเลข ::1/128 โดยมีหลักการทำงานเหมือนกับ loopback address บน IPv4 ทุกประการ (127.0.0.1)
ชนิดของ IPv6 address และ prefix ที่กำหนดไว้ตาม IP Version 6 Addressing Architecture ใน RFC 2373 (version ดั้งเดิม) และ RFC 4291 (version ปัจจุบัน) มีดังนี้
RFC 2373
|
RFC 4291
|
Prefix (binary)
|
Prefix (hex)
|
เศษส่วนจากจำนวน IPv6ทั้งหมด
|
Unassigned
|
Unspecified
|
00…0 (128 bits)
|
::/128
|
-
|
Unassigned
|
Loopback
|
00…1 (128 bits)
|
::1/128
|
-
|
Reserved
|
Global Unicast
|
0000 0000
|
::/8
|
1/256
|
Unassigned
|
Global Unicast
|
0000 0001
|
100::/8
|
1/256
|
Reserved for NSAP Allocation
|
Global Unicast
|
0000 001
|
200::/7
|
1/128
|
Reserved for IPX Allocation
|
Global Unicast
|
0000 010
|
400::/7
|
1/128
|
Unassigned
|
Global Unicast
|
0000 011
|
600::/7
|
1/128
|
Unassigned
|
Global Unicast
|
0000 1
|
800::/5
|
1/32
|
Unassigned
|
Global Unicast
|
0001
|
1000::/4
|
1/16
|
Aggregatable Global Unicast Addresses
|
Global Unicast
|
001
|
2000::/3
|
1/8
|
Unassigned
|
Global Unicast
|
010
|
4000::/3
|
1/8
|
Unassigned
|
Global Unicast
|
011
|
6000::/3
|
1/8
|
Unassigned
|
Global Unicast
|
100
|
8000::/3
|
1/8
|
Unassigned
|
Global Unicast
|
101
|
A000::/3
|
1/8
|
Unassigned
|
Global Unicast
|
110
|
C000::/3
|
1/8
|
Unassigned
|
Global Unicast
|
1110
|
E000::/4
|
1/16
|
Unassigned
|
Global Unicast
|
1111 0
|
F000::/5
|
1/32
|
Unassigned
|
Global Unicast
|
1111 10
|
F800::/6
|
1/64
|
Unique Local Address (RFC4193)
|
Unique Local Address (RFC4193)
|
1111 110
|
FC00::/7
|
1/128
|
Unassigned
|
Global Unicast
|
1111 1110 0
|
FE00::/9
|
1/512
|
Link-Local Unicast Addresses
|
Link-Local Unicast Addresses
|
1111 1110 10
|
FE80::/10
|
1/1024
|
Site-Local Unicast Addresses
|
Global Unicast
|
1111 1110 11
|
FEC0::/10
|
1/1024
|
Multicast Addresses
|
Multicast Addresses
|
1111 1111
|
FF00::/8
|
1/256
|
ถ้าสังเกตุหมายเลข IPv6 address ทั้งที่ใช้งานจริงและอยู่ในเอกสารหรือตำราต่าง ๆ จะใช้งาน global unicast address ใน prefix 2000::/3 กันเสียส่วนมาก ก็เนื่องจากตาม RFC2373 ได้กำหนดให้ใช้งานหมายเลขที่อยู่ใน prefix นี้เพียง prefix เดียวเป็น global unicast address แต่ในปัจจุบัน ได้มีการปรับปรุง prefix ที่จะใช้งานเป็น unicast address แล้ว ซึงก็คือทุก prefix ที่ไม่ใช่ multicast address นั่นเอง
จากตารางด้านบน ตาม RFC4291 ถ้า IPv6 address มีค่า prefix ใน octet แรกสุดเป็น FF (หรือ 1111 1111) แสดงว่าเป็นหมายเลขที่อยู่ชนิด multicast address แต่ถ้าหาก prefix ใน octet แรกสุดไม่ใช่ FF แสดงว่าเป็นหมายเลขที่อยู่ชนิด unicast address ทั้งหมด ไม่เว้นแต่ anycast address ที่จะถูกจัดสรรมาจากส่วนหนึ่งของ unicast address
เพื่อให้เห็นภาพและง่ายต่อการเข้าใจ ผมจะนำมาเปรียบเทียบกับชนิดของ IPv4 address ที่ใช้งานกันในปัจจุบันนะครับ
IPv4 address
|
IPv6 address
| ||
ชนิด
|
Subnet ที่ใช้งาน
|
ชนิด
|
Prefix ที่ใช้งาน
|
Public IP address
|
หมายเลขอื่น ๆ
|
Global unicast address
|
หมายเลขอื่น ๆ (RFC4291)
|
Private IP address
|
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
|
Unique Local Address (ULA)
|
FC00::/7
|
Link local address
|
169.254.0.0/16
|
Link local address
|
FE80::/10
|
Multicast address
|
224.0.0.0/4
|
Multicast address
|
FF00::/8
|
Loopback address
|
127.0.0.1
|
Loopback address
|
::1/128
|
IPv6 subnet prefix
ในการใช้งาน IPv6 โดยปกติแล้วจะใช้ prefix length ขนาด 64 bits หรือ /64 เสมอ การใช้งาน subnet prefix length อื่น ๆ ที่นอกเหนือจาก /64 นั้น จะทำให้หลาย ๆ คุณสมบัติของ IPv6 ไม่สามารถใช้งานได้ เช่น Neighbor Discovery (ND), Secure Neighbor Discovery (SEND), privacy extensions, parts of Mobile IPv6, Protocol Independent Multicast - Sparse Mode (PIM-SM) with Embedded-RP และ Site Multihoming by IPv6 Internediation (SHIM6) รวมทั้งคุณสมบัติอื่น ๆ ที่อยู่ระหว่างขั้นตอนการพัฒนา เนื่องจากคุณสมบัติเหล่านี้ ได้ถูกออกแบบมาให้ใช้งานกับ subnet prefix /64 เท่านั้น
แม้แต่ในการใช้งานในลักษณะ point-to-point link ระหว่างการเชื่อมต่อของเราเตอร์ก็ควรที่จะใช้งาน subnet prefix /64 แต่ถ้าหากว่าไม่ต้องการใช้งานคุณสมบัติใด ๆ ของ IPv6 ที่ได้ออกแบบมาให้ใช้งานกับ subnet prefix /64 ก็สามารถที่จะใช้งาน subnet prefix /126 (เหมือนกับ /30 บน IPv4) กับ point-to-point link ระหว่างการเชื่อมต่อของเราเตอร์ก็ได้ แต่จะต้องทำการกำหนดค่าด้วยตนเอง และไม่ควรที่จะใช้งาน prefix length ที่มีขนาดมากกว่า /64 ในการเชื่อมต่อกับ end host โดยตรง
ในปัจจุบันสำหรับลูกค้าทั่วไป ISP จะทำการแจก subnet prefix ขนาด /48 หรือ /56 มาให้ (สำหรับลูกค้าขนาดใหญ่ อาจจะได้รับ subnet prefix ตั้งแต่ /32 - /40 มาใช้งาน) โดยในกรณีที่ได้รับ subnet prefix ขนาด /48 มาใช้งาน ทางลูกค้าจะสามารถกำหนดหมายเลข subnet ID ได้เองถึง 16 bits (หรือเป็น 8 bits ถ้าหากได้รับ sunet prefix /56 มาจาก ISP) นั่นคือลูกค้าสามารถที่จะทำการแบ่ง subnet prefix ได้เองถึง 216 หรือ 65536 subnet เลยทีเดียว ซึ่งก็เพียงพอต่อการใช้งานโดยทั่วไปขององค์กรต่าง ๆ อยู่แล้ว
ถ้าจะเปรียบเทียบระหว่าง IPv4 Header กับ IPv6 Header จะเห็นว่ามีบาง fields ที่จะมีการทำงานเหมือนกันกับ IPv4 header และมีบาง fields ของ IPv4 header ที่ไม่ถูกนำไปใช้งานบน IPv6 header โดย fields ของ IPv4 ในส่วนที่มีสีแดงจะเป็น fields ที่จะไม่ถูกนำไปใช้งานบน IPv6 header ส่วน fields ของ IPv6 ที่มีสีฟ้าจะเป็น fields ที่เพิ่มขึ้นมาใหม่บน IPv6
Field
|
Description
|
Version
|
เป็นตัวบอก version ของ Internet protocol
|
Traffic class
|
คือ ToS field บน IPv4 แต่จะมีจำนวน bits ที่มากกว่า ทำให้สามารถกำหนดลำดับความสำคัญในการให้บริการของ packet (เช่น การทำ DiffServ QoS) ได้ละเอียดยิ่งขึ้น
|
Flow label
|
เป็น field ใหม่ที่เกิดขึ้นบน IPv6 header จะใช้สำหรับการกำหนดให้ packet ใช้งานตามเส้นทางที่กำหนด (จะต้องมีการกำหนด class of service (CoS)) โดยเราเตอร์และสวิตซ์จะใช้ field นี้เพื่อกำหนดให้ packet นั้นใช้งานเส้นทางในระดับ network layer เป็นเส้นทางเดิมเพื่อป้องกันไม่ให้เกิดการ reorder ขึ้น และในอนาคตจะใช้ field นี้สำหรับป้องกันและตรวจสอบ spoofed packets อีกด้วย
|
Payload length
|
คือ total length field บน IPv4 โดย payload length จะใช้สำหรับบอกขนาดข้อมูลของ packet ที่รวม extension header ทั้งหมด โดยจะมีขนาดสูงสุดคือ 65536 bytes และจะทีค่าเป็นศูนย์ เมื่อมีการใช้งาน jumbo payload บน hop-by-hop extension header
|
Next header
|
คือ protocol field บน IPv4 ใช้สำหรับกำหนดชนิดของข้อมูลของ packet ที่ตามมา โดยชนิดของข้อมูลอาจจะเป็นข้อมูลในระดับ transport layer เช่น TCP หรือ UDP หรือเมื่อมีการใช้งาน extension header ใน packet จะใช้ field นี้สำหรับบอกว่า packet ต่อไปเป็น extension header ชนิดใด
|
Hop limit
|
คล้ายกับ time to live field บน IPv4 ใช้สำหรับกำหนดจำนวนของเราเตอร์ที่ IPv6 packet สามารถส่งผ่านข้อมูลไปได้ ก่อนที่ packet จะถูก drop โดยเมื่อ packet เดินทางผ่านไปบนแต่ละเราเตอร์ ค่านี้จะถูกลดลงไปครั้งละ 1 ค่า และเนื่องจากไม่มีการใช้งาน checksum บน IPv6 header ทำให้เราเตอร์จะทำการลดค่านี้ลงโดยไม่ต้องทำการคำนวณค่า checksumใหม่ ซึ่งจะเป็นการลดการประมวลผลของอุปกรณ์ลง
|
Source address
|
คือ source address field บน IPv4 แต่จะมีขนาดของหมายเลขที่อยู่ของ IPv6 จะเป็น 128 bits แทนที่ 32 bits บน IPv4
|
Destination address
|
คือ destination address field บน IPv4 แต่จะมีขนาดของหมายเลขที่อยู่ของ IPv6 จะเป็น 128 bits แทนที่ 32 bits บน IPv4
|
No comments:
Post a Comment