diff --git a/core/network/src/protocol/sync.rs b/core/network/src/protocol/sync.rs
index 17ba6ca94d289fec4d3af4ba4ca6a9f27f2f6f86..d1d3b178c51c424a666ba2378bfc1f8a9da9418a 100644
--- a/core/network/src/protocol/sync.rs
+++ b/core/network/src/protocol/sync.rs
@@ -465,7 +465,11 @@ impl<B: BlockT> ChainSync<B> {
 				hash, peers,
 			);
 
-			peers = self.peers.iter().map(|(id, _)| id.clone()).collect();
+			peers = self.peers.iter()
+				// Only request blocks from peers who are ahead or on a par.
+				.filter(|(id, peer)| peer.best_number >= number)
+				.map(|(id, _)| id.clone())
+				.collect();
 		} else {
 			debug!(target: "sync", "Explicit sync request for block {:?} with {:?}", hash, peers);
 		}