I sent an Ethernet packet
Building an Ethernet frame and TCP/IP stack from scratch on a microcontroller sparks broader debate over how deep developers should go into low-level networking instead of relying on mature libraries and built-in MAC/PHY hardware. Commenters trade practical tips on hardware options—from STM32 and ESP32 boards to RP2040 PIO, FPGAs, and raw sockets on Linux—while clarifying protocol terminology around frames, packets, and datagrams. Many see this kind of “from first principles” tinkering as invaluable for understanding how networks really work, even if it’s not directly aligned with typical Jira-driven commercial priorities.
Hardware-level Ethernet and Bit-Banging
- Several commenters discuss the dream of “bit-banging real protocols” at very high speeds, pointing to practical limits once signals reach tens or hundreds of MHz.
- FPGAs are repeatedly cited as the realistic answer for flexible high-speed I/O; above ~1 GHz, transceivers become expensive and complex.
- RP2040/RP2350 PIO is highlighted as powerful for high-speed output (100–300 MHz), but commenters note serious limitations for reliable high-speed input due to lack of clock recovery and instruction-cycle constraints.
- Examples include attempts to bit-bang Ethernet, FM radio sampling, and ad‑hoc video output (VGA/DVI/HDMI) on microcontrollers.
Frames vs Packets vs Datagrams
- A long subthread debates terminology: Ethernet frames, IP datagrams, TCP segments, and generic “packets.”
- Some argue for strict correctness; others note that in common practice “packet” is used loosely for “whatever is on the wire,” especially since typical deployments map 1 Ethernet frame ≈ 1 IP datagram.
- The tone ranges from pedantic to playful, with some meta-discussion about whether such nitpicking is useful or off‑putting.
Microcontrollers, Ethernet Chips, and Alternatives
- Many suggest MCUs with built‑in Ethernet MACs (e.g., STM32F4, ESP32 variants) instead of external ASICs like W5100/W5500, generally for performance and simplicity.
- Others defend external chips as great for hobby projects and for learning, even if not “state of the art.”
- Some report reliability issues with W5100-based Arduino setups; others share success with ESP32-based Ethernet modules (e.g., WT32-ETH01).
Learning Networking “From Scratch”
- Multiple commenters share experiences implementing Ethernet/TCP/IP in FPGAs, 8-bit MCUs, or Linux using raw packet sockets, AF_PACKET, AF_XDP, or tun/tap interfaces.
- Recommended learning tools include Wireshark, classic RFCs (e.g., router requirements), and hands-on experiments like custom routers or bare-bones echo servers.
- There’s debate over whether low-speed or hobbyist projects meaningfully prepare one for 10 Gbit/“hard mode” designs; some say fundamentals transfer, others say high-performance work is a different discipline.
Tool-Building, 10x Developers, and Process Tension
- A large subthread centers on the value of building custom tools and exploratory projects (like a hand-rolled stack) versus sticking strictly to tickets and existing libraries.
- Many see tool-building as a core “superpower” that pays off in debugging and productivity; others argue employers rarely want to fund it directly.
- There’s disagreement over “10x developer” narratives, burnout, and whether exploration should be explicitly sanctioned or quietly done in the margins.