1.) open a new geth instance and type in geth.exe attach
2.) now type in eth.syncing
This shows you the "currentBlock" and the "highestBlock".
{
currentBlock: 3929244,
highestBlock: 6481189,
knownStates: 7409642,
pulledStates: 7395171,
startingBlock: 0
}
eth.blockNumber
The reason why eth.blockNumber returns 0:
The definiton of eth.blockNumber is the latest available block. During sync the latest fully available block is the genesis, since no other block has the necessary state available to do anything.
Geth 1.6.0 uses fast sync by default. The block states are unavailable for intermediate blocks and are downloaded only for the recent state. As such, up to the point that sync completes, the latest complete block is zero, since all newer blocks are incomplete during sync. When fast sync finishes, it downloads the associated state for the head, so the head block becomes complete and the latest block can be bumped to the current head.