Build a TCP stack yourself. Implement UDP clients and servers with raw syscalls, the TCP 3-way handshake, data transfer with sequence numbers, retransmission, sliding windows, congestion control, and connection teardown.