1. A full-duplex, link-level protocol based on three packet types: data, empty, and sync where each packet includes a link header for exchanging protocol state across the link, and a trailer containing a cyclic redundancy code (CRC) of the packet contents and a known-bad-packet bit, wherein data packets transport application-layer packets, empty packets simply exchange protocol state when there are no data packets to send, and sync packets maintain logic level transitions on the link when it is idle.