โค้ดดิ้ง TCP/IP stack, 1: Ethernet และ ARP (2016)
(saminiir.com)-
การพัฒนา 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
ยังไม่มีความคิดเห็น