I have 4 DHCP Scopes.
10.200.0.0 <--------DHCP Server Lives Here
10.54.0.0
10.16.0.0
10.32.0.0
A DHCP broadcast request is sent to my DHCP server. How does it decide which scope to pull an address from?
My problem is that a client that should be getting a 10.200.0.0 address is actually getting an IP address from the 10.16.0.0 scope and I can't figure out why.
That's not expected behavior, so it makes me think something more complex is happening than a simple broadcast being received by the DHCP server.
When the DHCP server receives a layer 2 broadcast DHCPREQUEST it will fulfill that request out of a scope that corresponds to the subnet of the interface the DHCPREQUEST was received on, just like you expect. When it receives the request as a layer 3 unicast from a DHCP relay agent (with the GIADDR address set) it will fulfill the request out of a scope with a subnet that includes the GIADDR address.
I'd sniff the traffic coming into your DHCP server (with Microsoft NetMon or Wireshark) to be sure that the request really is arriving as a layer 2 broadcast.
In addition to what Evan stated in his answer, do you in fact have networks of 10.54.x.x, 10.16.x.x, and 10.32.x.x separated by a router or routers? It sounds like maybe you have simply set up multiple scopes for clients that are all on the same network. Is that the case?
In addition, (as Evan stated) DHCP broadcast messages from clients on a different network than the DHCP server need to be "relayed" to the server via a DHCP relay agent (usually configured on the router itself). The DHCP relay agent transforms the broadcast messages into unicast messages, so you should not see any broadcast messages reaching the server from networks other than the DHCP server network itself. You should be seeing unicast messages from the DHCP relay agent for clients on different networks. Is that what you're seeing?