From what I can find, TCP/UDP packets do not have any delimiters to indicate the start/end of a packet. So what happens if, during transmission, a byte is lost? Wouldn't this corrupt basically all following packets?
While TCP/UDP has an organized packet structure, the packet still needs to be serialized into binary, and each bit is sent one by one over the ethernet cable / wifi connection. Let's say we have a packet where the length field is 50 bytes. During transmission, 8 bits (aka 1 byte) in the payload section are flat out lost (not flipped). The receiver gets the packet header, sees that it needs to receive 50 bytes. It only receives 49 bytes, and gets stuck waiting for the last byte before considering the packet to be received. Meanwhile, a second packet's binary data is sent over the wire. The receiver, still waiting for the last byte from the first packet, steals the first byte from the second packet thinking its actually the last byte from the first packet. Now both the first and second packet are corrupted, and it is highly likely that most, if not all, additional packets that are received are corrupted because the sender and receiver are out of sync by one byte.
I can't imagine this is actually a real world problem, so obviously I'm missing something in my understanding of how TCP/UDP works over the wire.
TCP and udp packets aren’t written to the wire directly; rather each packet is handed off to a lower-level networking system (such as Ethernet or Bluetooth). The lower-level system is then responsible for either delivering the whole packet, or detecting corruption and either fixing it or dropping the corrupted packet. You might Google “Ethernet packet framing” for an example of how Ethernet implements that logic.