If a bitcoin client goes offline or misses a new block, what is the process of finding the current, main blockchain? And how does bitcoin ensure that updates to the blockchain will be propogated to each device connected to the network (i.e. to make sure connected nodes never have a missed block in the ledger?) Does it somehow recursively backtrack from the next broadcasted block's reference to the previous block? And then how does it ensure that the current chain broadcasted is an addition to the main chain, rather than some fork? For example, if the client connects to the network and receives a block of given height, how does it both know that it has the most work of any chain, and that the local copy contains all blocks in the chain?
Peers of the node will tell the node the height of their longest blockchain, and if this is greater than what the node currently has stored, it will request the missing blocks from that node (to validate and store them). Also, if a node is on the network and receives a new block, it will look at the hash of its parent and decide if it has the parent already or not. If it doesn't have the parent, it will ask its peers for it. That way it will eventually download all the blocks it is missing and be up to date again
The node will keep track of how long each fork of the blockchain is, and will use the longest one it finds which it considers valid. If a long fork appears which the node thinks is not valid, it will show a warning that either the node is out of date or the peers are.