• การพัฒนา TCP/IP stack

    • การลงมือพัฒนา TCP/IP stack ด้วยตัวเองอาจดูเป็นงานที่ซับซ้อน
    • ข้อกำหนดหลักของ TCP ประกอบด้วยการแยกวิเคราะห์ส่วนหัว TCP, state machine, การควบคุมความหนาแน่นของเครือข่าย และการคำนวณ retransmission timeout
    • ซีรีส์บล็อกนี้จะพัฒนา TCP/IP stack ขั้นต่ำใน user space บน Linux
    • จุดประสงค์ของโพสต์นี้และซอฟต์แวร์นี้คือเพื่อการศึกษา สำหรับการเรียนรู้ด้าน network และ system programming ให้ลึกยิ่งขึ้น
  • อุปกรณ์ TUN/TAP

    • ใช้อุปกรณ์ TAP เพื่อดักจับทราฟฟิกเครือข่ายระดับต่ำจาก Linux kernel
    • อุปกรณ์ TUN/TAP ตั้งค่าได้ง่ายจากโปรแกรมใน user space และถูกใช้ในโปรแกรมหลากหลาย เช่น OpenVPN
    • สามารถใช้อุปกรณ์ TAP เพื่ออ่านและเขียนข้อมูลลงใน Ethernet buffer ได้
  • รูปแบบเฟรม Ethernet

    • Ethernet เป็นพื้นฐานของเทคโนโลยีเครือข่ายหลายแบบที่ใช้เชื่อมต่อคอมพิวเตอร์ใน LAN
    • มาตรฐาน Ethernet มีการพัฒนาอย่างมากนับตั้งแต่เผยแพร่ครั้งแรกในปี 1980
    • ส่วนหัวของ Ethernet frame สามารถประกาศเป็น C struct ได้ และประกอบด้วยฟิลด์ DMAC, SMAC, Ethertype และ payload
  • การแยกวิเคราะห์ Ethernet frame

    • ใช้แอตทริบิวต์ packed เพื่อไม่ให้คอมไพเลอร์ GNU C ปรับแต่ง memory layout ของ struct
    • ภาพรวมของการแยกวิเคราะห์และประมวลผล Ethernet frame นั้นค่อนข้างเรียบง่าย
  • Address Resolution Protocol (ARP)

    • ARP ใช้สำหรับแมปที่อยู่ Ethernet แบบ 48 บิตเข้ากับ protocol address แบบไดนามิก
    • รูปแบบแพ็กเก็ต ARP ค่อนข้างเรียบง่าย และประกอบด้วยฟิลด์ hardware type, protocol type, hardware size, protocol size, opcode และ data
  • อัลกอริทึมการระบุที่อยู่

    • ใช้ translation table เพื่อเก็บผลลัพธ์ของ ARP และหลีกเลี่ยงคำขอ ARP ที่ซ้ำซ้อน
    • การทดสอบขั้นสุดท้ายของการพัฒนา ARP คือการตรวจสอบว่าสามารถตอบสนองต่อคำขอ ARP ได้อย่างถูกต้องหรือไม่
  • บทสรุป

    • การประมวลผล Ethernet frame และการพัฒนา ARP แบบขั้นต่ำทำได้ค่อนข้างง่าย และใช้โค้ดเพียงไม่กี่บรรทัด
    • สามารถดูซอร์สโค้ดของโปรเจกต์ได้บน GitHub
    • ในโพสต์ถัดไปจะพัฒนาต่อด้วย ICMP echo และ response (ping) รวมถึงการแยกวิเคราะห์แพ็กเก็ต IPv4

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น