วันพุธที่ 4 พฤศจิกายน พ.ศ. 2552

IP Header ของ IPv4

IPv6 Packet Format

- สิ่งที่ควรจะรู้เกี่ยวกับ IPv6 เป็นอย่างแรกก็คือ packet format ของ IPv6 ครับ.. เพราะ packet format ก็คือ data structure ที่บอกว่า IPv6 สามารถทำอะไรได้บ้าง.. IPv6 packet ประกอบด้วย header, extended header, แล้วก็ payload ครับ .. Header ของ IPv6 ออกแบบมาให้มีขนาดคงที่และมีรูปแบบที่ง่ายที่สุดเท่าที่จะทำได้ โดย header จะประกอบด้วย field จำเป็นต้องใช้ในการ process packet ที่ทุกๆ router เท่านั้น พวก options ต่างๆ ที่อาจจะ process เฉพาะที่ต้น/ปลายทาง หรือ ที่ router บางตัวจะแยกออกมาไว้ที่ extended header แทน .. รายละเอียดของ extended header เดี๋ยวว่ากันในหัวข้อ extended header ละกันนะครับ.. ตอนนี้เรามาดูที่ header ของ IPv6 กันก่อน..


- จากรูปของ packet format จะเห็นว่า header ของ IPv6 ดู simple มากเมื่อเทียบกับ header ของ IPv4 เหตุผลก็เป็นไปตามนี้:

> Version ยังคงต้องมีเหมือนเดิม เพื่อใช้บอกว่า packet นี้เป็น IP version ไหน.. กรณีของ IPv6 ค่าของ version ก็จะเป็น 6

> Header length ถูกตัดออกไป เพราะขนาดของมันจะเป็น 40 octets เสมอ การกำหนดให้เป็น fixed length header ทำให้ประสิทธิภาพโดยรวมของการประมวลผล packet ดีขึ้น

> Type of Service ของ IPv4 ถูกแทนที่ด้วย Traffic Class ซึ่งใช้ระบุว่า packet นี้อยู่ใน class ไหนและมีระดับความสำคัญเท่าไหร่ เพื่อที่ router จะได้จัด schedule ในการส่ง packet ให้เหมาะสม

> Flow label ใช้ระบุ end-to-end traffic flow ระหว่างต้นทางกับปลายทาง ใน application นึงสามารถสร้าง flow ได้หลายๆ อัน อย่างเช่น video conference เราสามารถแยก flow ของภาพและเสียงออกจากกันได้ แม้ว่าจะเปิด socket ในการทำงานเพียง socket เดียว

> Total Length แทนที่ด้วย Payload length เพื่อระบุขนาดของ payload ในหน่วย octet (byte) ดังนั้นขนาดของ payload สูงสุดจะเป็น 65535 octets

> Identification, Flag, Segmentation, Protocol, Options, และ Padding ถูกย้ายไปอยู่ในส่วนของ extended header เพราะถือว่าเป็นส่วนที่ไม่จำเป็นต้อง process ในทุก router

> Hop Limit ถูกใช้แทน Time-To-Live ของ IPv4 ... ตาม IPv4 specification TTL จะเก็บเป็นเวลาจริงๆ หน่วยเป็นวินาที โดยระบุว่าแต่ละ router ต้องลด TTL ลงอย่างน้อย 1 วินาที แม้ว่าจะใช้เวลาประมวลผล packet น้อยกว่านั้น.. ในความเป็นจริงการประมวลผล packet เร็วมากครับ เพียงแค่ไม่กี่ usec เท่านั้น.. router ใหม่ๆ อาจจะทำได้น้อยกว่า 1 usec เสียอีก..router จึงลด TTL ครั้งละ 1 เสมอ .. TTL ก็เลยกลายเป็น hop count แทนที่จะเป็นเวลาจริงๆ ซึ่งก็เหมาะสมและง่ายต่อการประมวลผล... ใน IPv6 จึงเปลี่ยนมาใช้คำว่า Hop limit เพื่อให้ตรงกับความหมายจริงๆ ของมัน

> Next Header ซึ่งใช้เป็นตัวบอกว่า extended header ตัวถัดไปเป็น header ประเภทไหน

> Header Checksum ถูกตัดออกเพราะว่ามันซ้ำซ้อนกับ function ของ protocol บน layer ที่อยู่สูงกว่า IP อีกทั้งเป็นการเพิ่มประสิทธิภาพของการประมวลผล packet ด้วย เพราะ checksum ต้องคำนวณใหม่ที่ router เสมอ หากตัดออกก็จะลดภาระงานที่ router ได้ ..


Extended Headers


- มาถึง extended header กันบ้าง .. จากเหตุผลข้างบนที่ย้ายหลายๆ field มาเป็น extended header ทำให้ IPv6 มี extended header หลายๆ แบบเลยครับ แต่ละแบบก็เอาไว้ใช้ทำงานเฉพาะอย่างเพียงงานเดียว ..ใน 1 packet เราสามารถใช้ extended header ได้มากกว่า 1 อัน ดังนั้น เราจึงขอ service จาก IPv6 ได้มากกว่า 1 อย่าง .. IPv6 specification ล่าสุดกำหนดให้มี extended header อยู่ 6 แบบ ทุกแบบจะขึ้นต้นด้วย field "Next Header" เสมอ เพื่อระบุว่า extended header อันถัดเป็นชนิดไหน..

> Hop-by-Hop Options: เป็น option ที่ระบุให้ทุก router ที่อยู่ในเส้นทางระหว่างต้น/ปลายทางจะต้องทำตาม ตอนนี้ใน IPv6 specification มี option อยู่เพียงสองอัน คือ Jumbogram options สำหรับให้ IPv6 packet มีขนาดใหญ่กว่า 65535 octets ได้ ขนาดของ jumbogram สูงสุดคือ 2^32 octets (4,294,967,295 octets) เชียวล่ะครับ..อีก option นึงเอาไว้ทำ padding


> Routing: ใช้สำหรับทำ source routing ครับ.. คือต้นทางสามารถระบุเส้นทางที่ packet ต้องผ่านได้ โดย list เป็น router ที่ต้องส่ง packet ผ่านไปจนถึงปลายทาง.. Source routing ของ IPv6 สามารถระบุแต่ละ router ใน list ได้เลยว่าเป็น strict source routing หรือ loose source routing (หมายความว่าเราระบุ ทั้ง strict และ loose source routing ผสมกันได้) ซึ่งยืดหยุ่นมากกว่า source routing ของ IPv4 ที่จะบังคับว่า router ใน list ต้องเป็น strict หรือไม่ก็เป็น loose source routing ทั้งหมด


> Fragment: ใช้สำหรับทำ fragmentation เหมือนของ IPv4 แต่ที่ต่างกันก็คือ IPv6 จะมี function สำหรับหา path MTU ไว้อยู่แล้วเพื่อจะได้รู้ว่าขนาด Maximum Transfer Unit ที่เหมาะสมของ path นั้นๆ มีค่าเป็นเท่าไหร่ ดังนั้นการทำ fragmentation จึงทำที่ source node เท่านั้น (IPv4 จะทำ fragmentation ทั้งที่ source node และ router)


> Destination Options: ใช้งานคล้ายๆ กับ Hop-by-Hop option ครับ แต่จะเป็น option สำหรับปลายทางเท่านั้น.. ตอนนี้มีเพียง option เดียว คือเอาไว้ทำ padding


> Authentication: อันนี้ชื่อก็บอกอยู่แล้ว..ใช้สำหรับทำ authentication รายละเอียดจะอยู่ในเรื่อง IP Security (IPSEC) เอาไว้ว่างๆ จะเขียนมาให้อ่านครับ ถ้าเอามารวมกับ IPv6 เดี๋ยวจะยาวเกินไป


> Encapsulated Security Payload: ใช้สำหรับทำ encryption และ cryptography อื่นๆ รายละเอียดก็จะอยู่ใน IP Security เหมือนกัน..


- Extended header มีอย่างมากไม่เกินแบบละ 1 อัน ยกเว้น destination option header ซึ่งอาจจะมีได้ 2 อัน..อืมม..ทีนี้พอมี extended header หลายๆ แบบอย่างนี้ก็ต้องมีลำดับการเรียง extended header ให้ถูกต้องด้วย...ถ้าใส่กันเต็มๆ ก็จะเรียงลำดับตามนี้:


1. IPv6 header

2. Hop-by-Hop Options header

3. Destination Options header

4. Routing header

5. Fragment header

6. Authentication header

7. Encapsulating Security Payload header

8. Destination Options header

9. Upper-layer header (e.g., TCP, UDP)


- IPv6 header ได้ถูกออกแบบให้มีขนาด Header ลดน้อยลง โดยทำการย้ายฟิลด์ที่ไม่จำเป็น หรือที่เพิ่มออก โดยวางไว้หลัง IPv6 header และใช้การแจ้งเป็น Streamline header ซึ่งมีประสิทธิภาพในการดำเนินการติดต่อกับ Router ทันทีทันใด


- IPv4 header กับ IPv6 header ไม่สามารถใช้ง่ายร่วมกันได้ ซึ่งในการวางระบบทั้ง Ipv4 และ IPv6 ต้องทำทั้งคู่เพื่อให้รู้จักรูปแบบของ Header ซึ่ง Header ของ IPv6 ใหญ่กว่าของ IPv4 สองเท่า และตำแหน่งที่อยู่ใหญ่กว่าถึง 4 เท่า




รูปที่ 1 IP Header


- เฮดเดอร์ของ IP โดยปกติจะมีขนาด 20 bytes ยกเว้นในกรณีที่มีการเพิ่ม option บางอย่าง ฟิลด์ของเฮดเดอร์ IP จะมีความหมายดังนี้


Version : หมายเลขเวอร์ชันของโปรโตคอล ที่ใช้งานในปัจจุบันคือ เวอร์ชัน 4 (IPv4) และเวอร์ชัน 6 (IPv6)

Header Length : ความยาวของเฮดเดอร์ โดยทั่วไปถ้าไม่มีส่วน option จะมีค่าเป็น 5 (5*32 bit)

Type of Service (TOS) : ใช้เป็นข้อมูลสำหรับเราเตอร์ในการตัดสินใจเลือกการเราต์ข้อมูลในแต่ละดาต้าแกรม แต่ในปัจจุบันไม่ได้มีการนำไปใช้งานแล้ว

Length : ความยาวทั้งหมดเป็นจำนวนไบต์ของดาต้าแกรม ซึ่งด้วยขนาด 16 บิตของฟิลด์ จะหมายถึงความยาวสูงสุดของดาต้าแกรม คือ 65535 byte (64k) แต่ในการส่งข้อมูลจริง ข้อมูลจะถูกแยกเป็นส่วนๆตามขนาดของ MTU ที่กำหนดในลิงค์เลเยอร์ และนำมารวมกันอีกครั้งเมื่อส่งถึงปลายทาง แอพพลิเคชั่นส่วนใหญ่จะมีขนาดของดาต้าแกรมไม่เกิน 512 byte

Identification : เป็นหมายเลขของดาต้าแกรมในกรณีที่มีการแยกดาต้าแกรมเมื่อข้อมูลส่งถึงปลายทางจะนำข้อมูลที่มี identification เดียวกันมารวมกัน Flag : ใช้ในกรณีที่มีการแยกดาต้าแกรม

Fragment offset : ใช้ในการกำหนดตำแหน่งข้อมูลในดาต้าแกรมที่มีการแยกส่วน เพื่อให้สามารถนำกลับมาเรียงต่อกันได้อย่างถูกต้อง

Time to live (TTL) : กำหนดจำนวนครั้งที่มากที่สุดที่ดาต้าแกรมจะถูกส่งระหว่าง hop (การส่งผ่านข้อมูลระหว่างเน็ตเวิร์ค) เพื่อป้องกันไม่ให้เกิดการส่งข้อมูลโดยไม่สิ้นสุด โดยเมื่อข้อมูลถูกส่งไป 1 hop จะทำการลดค่า TTL ลง 1 เมื่อค่าของ TTL เป็น 0 และข้อมูลยังไม่ถึงปลายทาง ข้อมูลนั้นจะถูกยกเลิก และเราเตอร์สุดท้ายจะส่งข้อมูล ICMP แจ้งกลับมายังต้นทางว่าเกิด time out ในระหว่างการส่งข้อมูล

Protocol : ระบุโปรโตคอลที่ส่งในดาต้าแกรม เช่น TCP ,UDP หรือ ICMP

Header checksum : ใช้ในการตรวจสอบความถูกต้องของข้อมูลในเฮดเดอร์

Source IP address : หมายเลข IP ของผู้ส่งข้อมูล

Destination IP address : หมายเลข IP ของผู้รับข้อมูล Data : ข้อมูลจากโปรโตคอลระดับบน



การใช้งานระหว่าง IPv4 และ IPv6


- การปรับเปลี่ยนเครือข่ายจาก IPv4 ไปสู่ IPv6 สามารถทำได้ 3 แนวทางคือ การทำ Dual Stacks , การใช้ Tunneling และการทำ Header Translation


1. การใช้สแต็กคู่ ( Dual Stacks ) คือ การทำให้โฮสต์สามารถใช้งานได้กับ IP address ทั้ง 2 version โดยจะพิจารณาว่าจะส่งข้อมูลไปโดยใช้ IP address version ไหนจากการส่ง packet ไปสอบถาม DNS ก่อนแล้ว จึงส่งข้อมูลตาม version ที่ DNS ตอบกลับมา ถ้า DNS ส่ง packet กลับมาเป็น IPv6 แสดงว่าโฮสต์ต้นทางจะต้องส่ง Packet เป็น IPv6 ข้อมูลจะสามารถส่งถึงโฮสต์ปลายทางได้








2.การใช้อุโมงค์เครือข่าย ( Tunneling) คือ วิธีการที่โฮสต์ต้นทางและโฮสต์ปลายทางใช้ IPv6 ทั้งคู่ แต่การสื่อสารระหว่าง 2 โฮสต์นี้ต้องกระทำผ่าน เครือข่าย IPv4 ดังนั้น จึงจำเป็นต้องมีการ encapsulate IPv6 ให้เป็น IPv4 จึงจะสามารถส่งผ่านข้อมูลผ่านเครือข่าย IPv4 ได้ หลังจากนั้นโฮสต์ปลายทางจึงจะทำการดีแคปซูเลต IPv4 ให้เป็น IPv6 ตามเดิม




3.การแปลงเฮดเดอร์ (Header Translation) คือ วิธีการนี้ใช้เมื่ออินเตอร์เน็ตได้เปลี่ยนเป็น IPv6 แล้วแต่ยังมีบางเครือข่ายที่ยังเป็น IPv4 อยู่จึงจำเป็นที่จะต้องทำการเปลี่ยนแปลงโครงสร้างของ Header ทั้งหมด โดยใช้ตัวแปลงเฮดเดอร์ ซึ่งแปลงเฮดเดอร์ IPv6 ให้เป็น IPv4










รูป : แสดงการใช้งาน Header Translation เมื่อเครือข่ายส่วนใหญ่เปลี่ยนเป็น IPv6 แล้ว








รูป : แสดงขั้นตอนการทำงานของ Header Translation



• เทคนิคการทำ Translation เป็นวิธีที่ใช้กับการสื่อสารข้ามเครือข่าย เช่น โหนดจากเครือข่าย IPv4 ต้องการคุยกับเซิร์ฟเวอร์ ในเครือข่าย IPv6 หรือ โหนดที่เป็น IPv6 ต้องการคุยกับเซิร์ฟเวอร์ ที่เป็น IPv4


• หรือการทำ Translation คือการเปลี่ยนแปลงข้อมูลไปมาระหว่างข้อมูลในรูปแบบของ IPv4 และ IPv6

• เป็นกรณีที่ต่างไปจากการใช้งาน Dual stacks และ Tunnel


• การแปลงข้อมูลนี้สามารถทำได้หลายระดับ เช่น Network layer, Transport layer, หรือ Application layer

• ไม่ว่าจะทำการแปลงข้อมูลที่ระดับไหน องค์ประกอบสำคัญที่จำเป็นคือส่วนที่ทำหน้าที่แปลงหมายเลข IP address หรือ Address translation ซึ่งการแปลงหมายเลขสามารถทำได้โดยการจัดเก็บคู่หมายเลข IPv4 และ IPv6 address ทุกคู่ในเครือข่าย เราเรียกวิธีนี้ว่า Stateful address translation หรือจะทำการแปลงแบบอัตโนมัติ ที่เรียกว่า Stateless address translator ก็ได้


จุดเด่นของ IPv6 ที่เหนือกว่า IPv4


1. รูปแบบ Header ใหม่ IPv6 header ได้ถูกออกแบบให้มีขนาด Header ลดน้อยลง โดยทำการย้ายฟิลด์ที่ไม่จำเป็น หรือที่เพิ่มออก โดยวางไว้หลัง IPv6 Header และใช้การแจ้ง เป็น Streamline Header ซึ่งมีประสิทธิภาพในการดำเนินการติดต่อกับ Router ทันทีทันใด IPv4 Header กับ IPv6 Header ไม่สามารถใช้ง่ายร่วมกันได้ ซึ่งในการวางระบบทั้ง IPv4 และ IPv6 ต้องทำทั้งคู่เพื่อให้รู้จักรูปแบบของ Header ซึ่ง Header ของ IPv6 ใหญ่กว่าของ IPv4 สองเท่า และตำแหน่งที่อยู่ใหญ่กว่าถึง 4 เท่า


2. มีขนาด Address มากขึ้น IPv6 มีการกำหนดตำแหน่งที่อยู่ผู้ติดต่อ และผู้รับการ ติดต่อเป็น 128 บิต ซึ่งมีจำนวนที่อยู่ถึง

3.4x1038 ทำให้มีการออกแบบเป็นหลายลำดับชั้น และ จองที่อยู่สำหรับ Internet Backbone เพื่อแยกจากเครือข่ายในองค์กรซึ่งเพียงไม่กี่เปอร์เซ็นต์ที่ ใช้สำหรับตำแหน่งโฮสต์ และมีที่อยู่จำนวนมาที่ใช้ในอนาคต ทำให้อ้างจะไม่จำเป็นที่ต้องใช้ NATs ในเครือข่ายอนาคตก็ได้


3. มีการกำหนดที่อยู่เป็นลำดับชั้น และกำหนดโครงสร้างการหาเส้นทางได้IPv6 Global Addresses ใช้บน IPv6 สามารถที่สร้างและกำหนดลำดับชั้นได้อย่างมีประสิทธิสำหรับการหา เส้นทาง และสิ่งที่เกิดขึ้นหลายลำดับในผู้ให้บริการอินเตอร์เน็ต บน IPv6 Internet, Backbone Routers ทำให้ขนาดข้อมูลใน Routing Table เล็กลง


4. ไม่จำเป็นที่ต้องแจ้งที่อยู่ก่อน หรือกำหนดที่อยู่ไว้ก่อนได้เป็นการกำหนดค่าโฮสต์ ซึ่ง IPv6 รองรับทั้งกำหนดค่าที่แจ้งไว้ก่อน เช่นการใช้ DHCP Server และการกำหนดค่าที่อยู่โดย ไม่แจ้งไว้ก่อนได้ (Stateless) ในกรณีที่ไม่มี DHCP Server อยู่ เครื่องโฮสต์บนลิงค์นี้จะ กำหนดค่าอัตโนมัติในตัวเองด้วย IPv6 addresses สำหรับลิงค์ (Link-Local Addresses) และ การกำหนดค่าที่อยู่โดยนำมาจากค่าประกาศด้านหน้าของ Routers แม้ว่าไม่มี Router โฮสต์ก็ สามารถที่ลิงค์ได้โดยกำหนดค่าที่อยู่ในลิงค์ท้องถิ่นเอง ด้วย Link-Local Addresses และการ สื่อสารโดยไม่ต้องกำหนดค่าที่อยู่ด้วยมือ


5. ฝังความปลอดภัยไว้ภายในรองรับ IPSec บนลำดับชั้นของ IPv6 ซึ่งรองรับเป็นทาง แก้ปัญหามาตรฐาน ซึ่งทำให้การสื่อสารระหว่างเครื่องมีความปลอดภัย6. รองรับบริการ Quality of Service (QoS) มีฟิลด์ใหม่ใน IPv6 Header ที่กำหนด สำหรับรองรับการระบุ ซึ่งระบุการจราจร โดยใช้ฟิลด์ Flow Label ใน IPv6 Header อนุญาตให้ Router ทำการระบุและดูแลแพ็ตเก็ตที่ไหล การไหลที่เป็นชุดของแพ็ตเก็ตระหว่างต้นทาง ไปยัง ปลายทาง โดยรองรับ QoS ทำให้ง่ายต่อการติดต่อให้บรรลุเป้าหมายเมื่อมี Packet Payload ถูกเข้ารหัสด้วย IPSec7. มีการติดตั้งกับเครื่องข้างเคียง Neighbor Discovery Protocol สำหรับ IPv6 เป็นชุด Internet Control Message Protocol สำหรับ IPv6 (ICMPv6) ซึ่งจัดการโหนดเพื่อนบ้าน


* IPv6 ใช้ 128 bits ในการระบุหมายเลข IP ในขณะที่ IPv4 มีพื้นที่ให้ระบุเพียง 32 Bits ทำให้ IPv6 สามารถรองรับจำนวนหมายเลข IP ได้มากกว่า


* IPv6 มีการกำหนดขนาดของส่วน Header เอาไว้ตายตัว ทำให้ความเร็วในการประมวลผลและการส่องต่อมีประสิทธิภาพขึ้น


* IPv6 มีการออกแบบ Header มาเพื่อช่วยให้การค้นหาเส้นทางมีประสิทธิภาพ มากยิ่งขึ้น


* IPv6 ตัดส่วนที่ใช้ในการตรวจสอบความถูกต้องของข้อมูลออกไป เพราะหน้าที่สามารถให้ layer ข้างบนทำได้ เป็นการลดภาระงานของ Router ด้วย * IPv6 สามารถรองรับต่อขนาดของข้อความ (payload) ได้ถึง 4 GiB. ซึ่ง IPv4 รองรับได้แค่ 64 KiB


* ส่วน OS ที่รองรับ ก็มี Linux , Windows XP/ Vista, Mac OS X


แหล่งที่มา : 1. http://www.thaicert.nectec.or.th/paper/basic/tcp-ip.php

2. http://74.125.153.132/search?q=cache:aS_ouR6ZgfQJ:ccsmail.sut.ac.th/e-ru/teacher/file/file172.doc+ip+header+%E0%B8%82%E0%B8%AD%E0%B8%87+IPV4&cd=1&hl=th&ct=clnk&gl=th&lr=lang_th

3. http://eng.sut.ac.th/tce/Photos/couseonline/Gr14.pdf

4. http://kitty.in.th/index.php?room=article&id=83

5. http://guru.google.co.th/guru/thread?tid=11256713b4c94964

6. http://kom.homelinux.org/node/288

7. http://www.specialist.co.th/se/web/news_detail.php?id=70