I built a user-space implementation of ping that constructs Ethernet frames, performs ARP resolution, builds IPv4 headers, and sends ICMP echo requests manually using AF_PACKET.
- ARP (packet format, cache with aging, re-ARP, conflict handling)
- IPv4 header construction and checksum
- DF handling and ICMP Fragmentation Needed (Type 3 Code 4)
- IP fragment reassembly
- ICMP echo request/reply parsing
- A basic ping loop with loss statistics
The goal was to understand how packets actually move from Layer 2 upward.
reply