ItemDetails
Period2026.05 ~ (in progress)
TypePersonal learning project
LanguageGo
GitHub315-protocol-deep-dive

Project Overview#

A project to implement the inner workings of network protocols directly in code, and compare differences across layers through benchmarks. Questions like “why is gRPC faster?” and “how different are TCP and UDP in practice?” are answered through direct measurement.


Protocols Compared#

LayerProtocolKey Characteristics
L3ICMPNo handshake, raw ICMP header, TTL
L4TCP3-way handshake, ordered delivery, flow control
L4UDPConnectionless, unordered, packet loss possible
L7HTTP/1.1Text headers, 1 request per connection vs keep-alive
L7HTTP/2TLS+ALPN, multiplexing, HPACK header compression
L7gRPCProtobuf over HTTP/2, Unary/ServerStream/Bidi
L7gRPC-WebgRPC from the browser via HTTP/1.1 proxy

Structure#

├── l3/icmp/           ICMP ping
├── l4/tcp/            TCP echo server/client
├── l4/udp/            UDP echo server/client
├── l7/http1/          HTTP/1.1 server/client
├── l7/http2/          HTTP/2+TLS server/client
├── l7/grpc/           gRPC server/client + proto
├── l7/grpcweb/        gRPC-Web proxy + browser demo
├── benchmark/         Full protocol benchmark suite
├── dashboard/         Chart.js web dashboard
└── cmd/               CLI entrypoints

Each protocol is implemented as a server/client pair, benchmarked with the same payload to compare latency, throughput, and overhead.


Progress#

  • Server/client implementation for each L3–L7 protocol
  • Benchmark runner
  • Chart.js web dashboard
  • Benchmark result analysis and writeup
  • Per-protocol packet capture (tcpdump/Wireshark) analysis
  • NLB vs ALB comparison (EKS environment)