Flow control is a data link layer mechanism that regulates the amount of data sent by the sender to ensure the receiver can process it. It works by having the sender wait for acknowledgment from the receiver before sending more data. Common flow control methods include stop-and-wait, which only allows one packet to be sent at a time, and sliding window protocols, which allow multiple packets to be sent before waiting for acknowledgment. Flow control prevents buffer overflows and frame losses at the receiver.