This is the process of bringing a Bitcoin client up to date with the list of all Bitcoin transactions known as the blockchain.

Synchronizing a full node requires downloading blocks from the node's peers. Currently this process requires many resources, including CPU to validate the blocks, Disk I/O to write the received blocks to disk, and RAM to hold blocks in memory while being processed and to hold the UTXO database cache. During synchronization, blocks are downloaded in parallel and primarily validated in parallel. The only parts that are not done in parallel are those which rely on other blocks, such as checking that all transactions are valid and that the previous block was valid. Synchronization is also sped up with the use of assumevalid since Bitcoin Core 0.14. With assumevalid, signatures in transactions are not verified up to a certain point, the assumevalid block. This saves on resources as signature validation is one of the more expensive parts of validating a block.

Lightweight client such as Electrum must also perform some synchronization. For this, all they do is receive the block headers for all blocks in the blockchain and ensure that they connect and that the Proof of Work is valid. This is done to ensure that the nodes they are connected to are serving them blocks from the valid chain with the most work.

This tag should be used for any question which pertains to synchronizing the full blockchain with a full node or synchronizing a lightweight wallet's headers chain.