ส่วนหัวของแพ็คเก็ต IP: รูปแบบ, ฟิลด์

⚡ สรุปอย่างชาญฉลาด

ส่วนหัวของ IP คือข้อมูลเมตาที่วางไว้ที่จุดเริ่มต้นของทุกแพ็กเก็ต IP ซึ่งประกอบด้วยฟิลด์ต่างๆ เช่น เวอร์ชัน ความยาวส่วนหัว ความยาวทั้งหมด ระยะเวลาคงอยู่ โปรโตคอล ผลรวมตรวจสอบ และที่อยู่ต้นทางและปลายทางที่เราเตอร์อ่านเพื่อส่งข้อมูล

  • 🧭 วัตถุประสงค์: ส่วนหัวของ IP จะเก็บรายละเอียดการกำหนดเส้นทางและการส่ง เพื่อให้ทุกแพ็กเก็ตไปถึงปลายทางที่ถูกต้องบนเครือข่ายต่างๆ
  • 📏 ขนาด: ส่วนหัวของ IPv4 มีขนาดตั้งแต่ 20 ถึง 60 ไบต์ ซึ่งถูกควบคุมโดยฟิลด์ความยาวส่วนหัวอินเทอร์เน็ต (Internet Header Length)
  • 🧱 ฟิลด์สำคัญ: ฟิลด์หลักประกอบด้วย เวอร์ชัน, IHL, ประเภทของบริการ, ความยาวทั้งหมด, TTL, โปรโตคอล, ผลรวมตรวจสอบ และที่อยู่
  • 🔀 การแบ่งส่วน: การระบุตัวตน ธง และการชดเชยส่วนย่อย ช่วยให้สามารถแบ่งและประกอบดาตาแกรมขนาดใหญ่ได้อย่างถูกต้อง
  • 🆚 IPv4 กับ IPv6: IPv6 แทนที่ส่วนหัวแบบแปรผันด้วยส่วนหัวคงที่ขนาด 40 ไบต์ และตัดฟิลด์ตรวจสอบความถูกต้อง (checksum) ออกไป
  • 🤖 ความช่วยเหลือจากเอไอ: โปรแกรมวิเคราะห์แพ็กเก็ต AI จะวิเคราะห์ส่วนหัวของ IP โดยอัตโนมัติเพื่อระบุความผิดปกติและช่วยเร่งกระบวนการแก้ไขปัญหา

รูปแบบและฟิลด์ส่วนหัวของแพ็กเก็ต IP

ส่วนหัวของ IP คืออะไร?

ส่วนหัวของแพ็กเก็ต IP คือข้อมูลเมตาที่อยู่ตอนต้นของแพ็กเก็ต IP โดยจะแสดงข้อมูลต่างๆ เช่น เวอร์ชันของ IP ความยาวของแพ็กเก็ต ต้นทาง และปลายทาง

รูปแบบส่วนหัวของ IPv4 มีความยาว 20 ถึง 60 ไบต์ และประกอบด้วยข้อมูลที่จำเป็นสำหรับการกำหนดเส้นทางและการส่งข้อมูล ประกอบด้วยฟิลด์ต่างๆ เช่น เวอร์ชัน ความยาวส่วนหัว ความยาวทั้งหมด รหัสประจำตัว แฟล็ก ผลรวมตรวจสอบ ที่อยู่ IP ต้นทาง และที่อยู่ IP ปลายทาง ฟิลด์เหล่านี้รวมกันแล้วให้ข้อมูลสำคัญที่จำเป็นสำหรับ transmit ส่งแพ็กเก็ตจากโฮสต์หนึ่งไปยังอีกโฮสต์หนึ่งได้อย่างน่าเชื่อถือ

ส่วนประกอบ/ฟิลด์ส่วนหัว IPv4

แผนภาพด้านล่างแสดงรูปแบบส่วนหัว IPv4 ที่สมบูรณ์ โดยแต่ละฟิลด์ถูกวาดในตำแหน่งและความกว้างบิตที่ถูกต้อง:

แผนภาพรูปแบบส่วนหัวของแพ็กเก็ต IPv4 แสดงฟิลด์ทั้งหมดและตำแหน่งบิตของแต่ละฟิลด์

ต่อไปนี้คือส่วนประกอบ/ฟิลด์ต่างๆ ของส่วนหัวของแพ็กเก็ต IP:

  • เวอร์ชัน: ฟิลด์แรกของส่วนหัว IP คือตัวบ่งชี้เวอร์ชัน 4 บิต ใน IPv4 ค่าของบิตทั้งสี่นี้จะถูกตั้งค่าเป็น 0100 ซึ่งหมายถึง 4 ในเลขฐานสอง หากเราเตอร์ไม่รองรับเวอร์ชันที่ระบุ แพ็กเก็ตจะถูกทิ้ง
  • ความยาวส่วนหัวของอินเทอร์เน็ต: ความยาวส่วนหัวของอินเทอร์เน็ต หรือเรียกสั้น ๆ ว่า IHL มีขนาด 4 บิต เรียกอีกอย่างว่า HELEN (Header Length) ส่วนประกอบของ IP นี้แสดงจำนวนคำ 32 บิตที่มีอยู่ในส่วนหัว
  • ประเภทบริการ: ประเภทของบริการเรียกอีกอย่างว่า บริการที่แตกต่างกัน Code ค่า Point หรือ DSCP ฟิลด์นี้ให้คุณสมบัติที่เกี่ยวข้องกับคุณภาพการบริการสำหรับการสตรีมข้อมูลหรือการโทร VoIP บิต 3 บิตแรกเป็นบิตลำดับความสำคัญ นอกจากนี้ยังระบุวิธีการจัดการดาตาแกรมด้วย
  • ความยาวทั้งหมด: ความยาวทั้งหมดวัดเป็นไบต์ ขนาดขั้นต่ำของดาตาแกรม IP คือ 20 ไบต์ และขนาดสูงสุดคือ 65,535 ไบต์ สามารถใช้ HELEN และความยาวทั้งหมดเพื่อคำนวณขนาดของเพย์โหลดได้ โฮสต์ทั้งหมดจะต้องสามารถอ่านดาตาแกรมขนาด 576 ไบต์ได้ อย่างไรก็ตาม หากดาตาแกรมมีขนาดใหญ่เกินไปสำหรับโฮสต์ในเครือข่าย วิธีการแบ่งส่วนดาตาแกรมจะถูกนำมาใช้กันอย่างแพร่หลาย
  • บัตรประจำตัว: ฟิลด์การระบุ (Identification) คือฟิลด์ที่ใช้ระบุส่วนย่อยของดาตาแกรม IP อย่างเฉพาะเจาะจง บางคนแนะนำให้ใช้ฟิลด์นี้เพื่อวัตถุประสงค์อื่น เช่น การเพิ่มข้อมูลสำหรับแพ็กเก็ต tracไอเอ็นจี
  • ค่าสถานะ IP: Flags คือฟิลด์สามบิตที่ช่วยให้คุณควบคุมและระบุส่วนย่อย (fragments) การกำหนดค่าที่เป็นไปได้มีดังนี้: บิตที่ 0 สงวนไว้และต้องตั้งค่าเป็นศูนย์; บิตที่ 1 หมายถึงห้ามแบ่งส่วนย่อย; และบิตที่ 2 หมายถึงแบ่งส่วนย่อยได้มากขึ้น
  • การชดเชยส่วน: ค่าชดเชยส่วนย่อย (Fragment Offset) แสดงถึงจำนวนไบต์ข้อมูลที่อยู่ข้างหน้าส่วนย่อยเฉพาะในดาตาแกรมนั้นๆ โดยระบุเป็นหน่วย 8 ไบต์ และมีค่าสูงสุด 65,528 ไบต์
  • เวลาที่จะมีชีวิตอยู่: นี่คือฟิลด์ 8 บิตที่ระบุเวลาสูงสุดที่ดาตาแกรมสามารถคงอยู่ในระบบอินเทอร์เน็ตได้ ทุกครั้งที่มีการประมวลผลดาตาแกรม ค่า TTL จะลดลงหนึ่ง เมื่อค่า TTL ลดลงเหลือศูนย์ ดาตาแกรมจะถูกทิ้งเพื่อป้องกันไม่ให้แพ็กเก็ตถูกส่งไปเรื่อยๆ อย่างไม่มีที่สิ้นสุด ค่า TTL สามารถอยู่ในช่วงตั้งแต่ 0 ถึง 255
  • Protocol: ฟิลด์ส่วนหัวของ IPv4 นี้ระบุว่าโปรโตคอลอินเทอร์เน็ตใดถูกส่งไปในส่วนท้ายของดาตาแกรม ตัวอย่างเช่น เลข 6 ใช้เพื่อระบุ TCP และเลข 17 ใช้เพื่อระบุโปรโตคอล UDP
  • การตรวจสอบส่วนหัว: ส่วนประกอบถัดไปคือฟิลด์ตรวจสอบความถูกต้องของส่วนหัวขนาด 16 บิต ซึ่งใช้ตรวจสอบส่วนหัวเพื่อหาข้อผิดพลาด ส่วนหัวของ IP จะถูกเปรียบเทียบกับค่าตรวจสอบความถูกต้อง หากค่าตรวจสอบความถูกต้องของส่วนหัวไม่ตรงกัน แพ็กเก็ตนั้นจะถูกทิ้ง
  • ที่อยู่ต้นทาง: ที่อยู่ต้นทางคือที่อยู่แบบ 32 บิตของต้นทางที่ใช้สำหรับแพ็กเก็ต IPv4
  • ที่อยู่ปลายทาง: ที่อยู่ปลายทางมีขนาด 32 บิตเช่นกัน และจะเก็บที่อยู่ของผู้รับ
  • ตัวเลือก IP: นี่คือฟิลด์เสริมในส่วนหัวของ IPv4 ซึ่งใช้เมื่อค่า IHL (Internet Header Length) มีค่ามากกว่า 5 โดยฟิลด์นี้จะมีค่าและการตั้งค่าที่เกี่ยวข้องกับความปลอดภัย เส้นทางการบันทึก การประทับเวลา และตัวเลือกอื่นๆ ที่คล้ายกัน โดยปกติรายการตัวเลือกจะสิ้นสุดด้วยเครื่องหมาย End of Options List (EOL)
  • วันที่: ฟิลด์นี้เก็บข้อมูลจากเลเยอร์โปรโตคอลที่ส่งต่อข้อมูลไปยังเลเยอร์ IP

วิธีคำนวณความยาวส่วนหัวของ IPv4

ฟิลด์ Internet Header Length (IHL) บอกเราเตอร์ว่าส่วนหัวมีความยาวเท่าใด เพื่อให้เราเตอร์รู้ว่าส่วนหัวสิ้นสุดที่ใดและข้อมูลเริ่มต้นที่ใด เนื่องจากฟิลด์นี้มีความกว้างเพียง 4 บิต จึงไม่ได้จัดเก็บความยาวเป็นไบต์โดยตรง แต่จะนับส่วนหัวเป็นคำ 32 บิต โดยแต่ละคำเท่ากับ 4 ไบต์

ในการแปลงค่า IHL เป็นไบต์ ให้คูณด้วย 4:

  • จำนวนขั้นต่ำ: ค่า IHL ที่ถูกต้องตามกฎหมายที่เล็กที่สุดคือ 5 ดังนั้น 5 × 4 = 20 ไบต์ นี่คือส่วนหัวที่ไม่มีตัวเลือกเพิ่มเติม
  • สูงสุด: ค่า IHL ที่ใหญ่ที่สุดคือ 15 ดังนั้น 15 × 4 = 60 ไบต์ ส่วนที่เหลืออีก 40 ไบต์เป็นข้อมูลสำหรับฟิลด์เสริม

ลองพิจารณาตัวอย่างการคำนวณ หากแพ็กเก็ตมาถึงโดยมีค่า IHL เท่ากับ 6 ความยาวของส่วนหัวจะเป็น 6 × 4 = 24 ไบต์ ซึ่งหมายความว่ามีตัวเลือก 4 ไบต์อยู่หลังส่วนหัวมาตรฐาน 20 ไบต์ ในการหาขนาดของเพย์โหลด ให้คำนวณโดยใช้สูตรtracความยาวของส่วนหัวจะคำนวณจากช่องความยาวทั้งหมด หากความยาวทั้งหมดคือ 1,500 ไบต์ และส่วนหัวคือ 24 ไบต์ ดังนั้นส่วนของข้อมูลจะมีขนาด 1,500 − 24 = 1,476 ไบต์

การคำนวณนี้มีความสำคัญในระหว่างการแบ่งส่วนข้อมูล เนื่องจากเราเตอร์ต้องทราบขนาดของส่วนหัวเพื่อคำนวณว่าแต่ละส่วนสามารถรองรับข้อมูลได้มากแค่ไหนโดยไม่เกินขีดจำกัดสูงสุดของเครือข่าย Transmission หน่วย (MTU)

ส่วนหัวของ IPv4 เทียบกับ IPv6

ส่วนหัวของ IPv6 ได้รับการออกแบบใหม่ให้เรียบง่ายและประมวลผลได้เร็วกว่าส่วนหัวของ IPv4 โดยใช้ความยาวคงที่และย้ายตัวเลือกที่ใช้งานไม่บ่อยไปไว้ในส่วนหัวส่วนขยายแยกต่างหาก ทำให้เราเตอร์สามารถส่งต่อแพ็กเก็ตด้วยความเร็วสูงสุด ตารางด้านล่างเปรียบเทียบส่วนหัวทั้งสองแบบทีละฟิลด์:

คุณสมบัติ (Feature) ส่วนหัว IPv4 ส่วนหัว IPv6
ขนาดส่วนหัว 20 ถึง 60 ไบต์ (แปรผันได้) 40 ไบต์ (คงที่)
จำนวนฟิลด์ 13 ช่องกรอกข้อมูล พร้อมตัวเลือกเพิ่มเติม 8 ช่อง
ความยาวของที่อยู่ แหล่งที่มาและปลายทาง 32 บิต แหล่งที่มาและปลายทาง 128 บิต
ผลรวมตรวจสอบส่วนหัว ปัจจุบัน ลบออก
ฟิลด์การแตกตัว ในส่วนหัวพื้นฐาน (การระบุตัวตน, แฟล็ก, ออฟเซ็ต) ย้ายไปยังส่วนหัวส่วนขยาย Fragment แล้ว
ตัวเลือก อยู่ภายในส่วนหัว ขนส่งในส่วนหัวส่วนขยาย
ฟิลด์ความยาว ความยาวทั้งหมด (ส่วนหัวบวกข้อมูล) ความยาวของข้อมูล (เฉพาะข้อมูล)

เนื่องจาก IPv6 ตัดส่วนตรวจสอบความถูกต้อง (checksum) และตัวเลือกความยาวแปรผันออกไป ส่วนหัวของ IPv6 จึงมีฟิลด์น้อยลงและสามารถประมวลผลได้ด้วยฮาร์ดแวร์โดยไม่ต้องคำนวณใหม่ทุกครั้งที่ส่งต่อไปยังปลายทางอื่น

เหตุใดส่วนหัว IP จึงมีความสำคัญ

ทุกฟิลด์ในส่วนหัวของที่อยู่ IP มีอยู่เพื่อให้เราเตอร์และโฮสต์สามารถส่งแพ็กเก็ตข้ามเครือข่ายต่างๆ ได้โดยไม่ต้องมีการเชื่อมต่อถาวรระหว่างกัน ส่วนหัวนี้เองที่ทำให้การสลับแพ็กเก็ตทำงานได้

  • สายงานการผลิต: ที่อยู่ปลายทางจะบอกเราเตอร์แต่ละตัวว่าควรส่งแพ็กเก็ตไปที่ใด ในขณะที่ที่อยู่ต้นทางจะอนุญาตให้ส่งการตอบกลับและข้อความแสดงข้อผิดพลาดกลับมาได้
  • การป้องกันการเกิดลูป: ค่า Time to Live จะลดลงทุกครั้งที่มีการส่งต่อแพ็กเก็ต ดังนั้นแพ็กเก็ตที่ส่งผิดเส้นทางจะถูกทิ้งไปแทนที่จะวนเวียนอยู่ในอินเทอร์เน็ตตลอดไป
  • ส่งมอบตามโปรโตคอลที่ถูกต้อง: ฟิลด์ Protocol จะบอกโฮสต์ผู้รับว่าควรส่งข้อมูลผ่านโปรโตคอล TCP, UDP หรือโปรโตคอลอื่น
  • Integrity และการประกอบใหม่: ค่าตรวจสอบความถูกต้อง (checksum) ช่วยป้องกันส่วนหัวจากการเสียหาย และฟิลด์ Identification, Flags และ Fragment Offset ช่วยให้สามารถสร้างดาตาแกรมที่แตกเป็นส่วนๆ ขึ้นมาใหม่ให้อยู่ในลำดับที่ถูกต้องได้

สำหรับวิศวกรเครือข่าย การอ่านข้อมูลในสาขาเหล่านี้อย่างละเอียดจะช่วยเพิ่มพูนความรู้ได้ TCP / IP การบันทึกข้อมูลมักเป็นวิธีที่เร็วที่สุดในการวินิจฉัยปัญหาแพ็กเก็ตตกหล่น วงวนการกำหนดเส้นทาง และการตั้งค่าที่ไม่ถูกต้อง ที่อยู่ IP.

คำถามที่พบบ่อย

ความยาวส่วนหัว (IHL) วัดเฉพาะส่วนหัวในหน่วยคำ 32 บิต และมีค่าตั้งแต่ 20 ถึง 60 ไบต์ ความยาวทั้งหมดวัดดาตาแกรมทั้งหมด — ส่วนหัวบวกข้อมูล — ในหน่วยไบต์ สูงสุดถึง 65,535 ไบต์tracการแยกข้อมูลหนึ่งออกจากอีกข้อมูลหนึ่งจะทำให้ได้ขนาดของข้อมูลที่ส่งไป

การแบ่งส่วน (Fragmentation) จะแบ่งดาตาแกรมที่มีขนาดใหญ่กว่าขนาดสูงสุดของลิงก์ออกเป็นส่วนๆ Transmission แบ่งแพ็กเก็ตออกเป็นชิ้นเล็กๆ ฟิลด์ Identification, Flags และ Fragment Offset จะช่วยให้ปลายทางประกอบชิ้นส่วนเหล่านั้นเข้าด้วยกันตามลำดับ กระบวนการนี้เกิดขึ้นเมื่อแพ็กเก็ตต้องส่งผ่านเครือข่ายที่มี MTU เล็กกว่า

ส่วนหัวของ IPv4 ประกอบด้วยฟิลด์คงที่ 13 ฟิลด์ ได้แก่ เวอร์ชัน, IHL, ประเภทของบริการ, ความยาวทั้งหมด, รหัสประจำตัว, แฟล็ก, ออฟเซ็ตส่วนย่อย, TTL, โปรโตคอล, ผลรวมตรวจสอบ, ที่อยู่ต้นทาง, ที่อยู่ปลายทาง และฟิลด์ตัวเลือกเพิ่มเติม ส่วนข้อมูลที่ตามมาคือส่วนข้อมูลหลัก ไม่ใช่ฟิลด์ในส่วนหัว

ไม่ครับ การตรวจสอบความถูกต้องของส่วนหัว IPv4 ครอบคลุมเฉพาะฟิลด์ส่วนหัวเท่านั้น ไม่ใช่ส่วนข้อมูล โปรโตคอลระดับบน เช่น TCP และ UDP มีการตรวจสอบความถูกต้องของตนเองเพื่อปกป้องข้อมูล เนื่องจาก TTL เปลี่ยนแปลงในแต่ละฮอป เราเตอร์จึงคำนวณการตรวจสอบความถูกต้องของส่วนหัวใหม่ทุกครั้งที่ส่งต่อข้อมูล

เมื่อค่า TTL เป็นศูนย์ เราเตอร์จะทิ้งแพ็กเก็ตและส่งข้อความ ICMP Time Exceeded กลับไปยังต้นทาง ซึ่งจะป้องกันไม่ให้แพ็กเก็ตสูญหายping วนลูปการกำหนดเส้นทางไปตลอดกาล traceroute เครื่องมือนี้อาศัยพฤติกรรมดังกล่าวในการกำหนดตำแหน่งแต่ละช่วงตามเส้นทาง

ฟิลด์ Protocol ระบุว่าโปรโตคอลระดับบนใดควรรับข้อมูลที่ปลายทาง ค่าทั่วไปคือ 6 สำหรับ TCP, 17 สำหรับ UDP และ 1 สำหรับ ICMP โฮสต์ผู้รับจะอ่านหมายเลขนี้เพื่อส่งข้อมูลไปยังตัวจัดการที่ถูกต้อง

เครื่องมือ AI และแมชชีนเลิร์นนิงจะวิเคราะห์ส่วนหัว IP ที่ตรวจจับได้เพื่อตรวจหาความผิดปกติ เช่น ที่อยู่ต้นทางปลอม ค่า TTL ที่ผิดปกติ หรือการโจมตีแบบแบ่งส่วนข้อมูล พวกมันจำแนกประเภทการรับส่งข้อมูลและระบุภัยคุกคามได้เร็วกว่าการตรวจสอบด้วยตนเอง อย่างไรก็ตาม วิศวกรยังคงต้องตรวจสอบความถูกต้องของผลลัพธ์ก่อนดำเนินการใดๆ

นักบิน GitHub สามารถร่างได้ Python หรือโค้ดภาษาซีที่แยกข้อมูลส่วนหัวของ IP ถอดรหัสแฟล็ก และตรวจสอบความถูกต้องของค่าตรวจสอบจากข้อความแสดงความคิดเห็นสั้นๆ Revโปรดตรวจสอบตรรกะการมาสก์บิตที่สร้างขึ้นอย่างละเอียด เนื่องจากค่าออฟเซ็ตที่คลาดเคลื่อนไปหนึ่งตำแหน่งเป็นสาเหตุทั่วไปของข้อผิดพลาดในการวิเคราะห์

สรุปโพสต์นี้ด้วย: