If you’ll look here - https://github.com/algorand/go-algorand/blob/master/config/config.go#L323 you’ll see that it’s defined as
// CatchupLedgerDownloadRetryAttempts controls the number of attempt the block fetching would be attempted before giving up catching up to the provided catchpoint.
CatchupBlockDownloadRetryAttempts int `version[9]:"1000"`
The fast catchup need to download the past 1000 blocks. In order to download each block, it makes an http request to one of the relays and download the block.
If one ( or more ) of the relays aren’t available, it would retry with another relay ( at random ). The number of retries for the entire fast catchup is capped by the CatchupBlockDownloadRetryAttempts variable.