The use of all 0's and all 1's . There are two issues here. The use of all 0's and all 1's for the host portion of an address, and the use of all 0's or all 1's for the network or subnetwork portion of the address. For the host portion, the reason that you can't use all ones is that it is the broadcast address for the subnet. If an application needs to communicate with all hosts on a subnet it uses this address.
All zeros is the subnetwork itself.
Routers use this address to identify how to route packets between subnetworks. For the subnetwork portion of the address, you can often use the non-recommended addresses of all 0's. NT supports their use as do all new routers. However many older routers will not recognize the zero subnet. Microsoft recommend this.