By default, DRBD will use protocol C (fully synchronous) replication. It uses it's own internal protocols when replicating writes to it's peer, and typically is used in an Active/Passive manner.
DRBD keeps a bitmap in memory to keep track of what has been replicated and what's still "in flight". If DRBD were to become disconnected from it's peer, those bitmaps get pushed down to disk (into DRBD's metadata). When the peers reconnect, they exchange bitmaps and generation identifiers to determine which direction and which blocks to sync.

That image shows where DRBD sits in the Linux Kernel's Storage Stack. Hope that helps!