- If we do the network subnetting as above, we are wasting large amounts of IP addresses for the intermediate links that do not have any systems connected to them.
- Also, if there are (say)90 computers in Arizona and only 20 computers in Florida, then according to this method, that would be impossible.
The answers to these two questions are basically the same: you don't have to slice a subnet into equal-size portions. This is the same as that a single ISP may allocate one customer a /22 and another customer might receive a /28, based on their respective addressing needs.
Let's say your subnet IP address allocation needs are 90, 50 and 30 addresses, respectively, and that you have a full IPv4 /24 (but nothing more) to play with. Let's see how we might allocate those subnets.
90 IP addresses fits nicely within a /25, so you allocate .0/25 for that which leaves you with a nice margin and .128/25 unassigned.
50 IP addresses needs a block of 64 (which translates to a /26), so you allocate .128/26 which leaves you with a bit of a margin and .192/26 unallocated.
30 IP addresses needs a block of 32 (a /27), so you allocate .192/27, which leaves you with almost no margin to grow in but .224/27 remains unallocated. 20 IP addresses would also require a /27 but leave you with a much larger margin. (If on the other hand you needed 35 IP addresses you'd need a /26, which leaves you with no remaining IP address space in your allocated netblock. In that case and if you need to run the point-to-point links within your allocated netblock but outside of the site subnets, you'd have to beg your ISP for a /23 instead and start over.)
The space .224/27 can be subdivided into /30s or /31s for the point-to-point links. Since you only really need two IP addresses (one for each endpoint) on each link, /31s should do, but sometimes a /30 is used to allow for a network and broadcast address as well. If you use /31s, you can squeeze 16 (2^(31-27)) point-to-point links in there without resorting to tricks like NAT or local addresses such as RFC 1918.
Hopefully I got the numbers right (I haven't double-checked), but you get the idea. The trick is to allocate the largest blocks first, and then continue with what remains, allocating the smallest blocks possible that will allow you the number of hosts you need on each subnet.
You might have other issues because absent special arrangements the overall /24 will almost certainly be going to one of the sites, but if you can live with that, a setup like the above should get you pretty close to an ideal (or least-bad) addressing situation.
It's also worth remembering that it's usually a bad idea to allocate a public, global IP address to each client host. Use a single NAT gateway in front of everything that doesn't require direct Internet access, and you can easily consolidate a few hundred clients onto a single global IP address, and in addition likely gain a bit of network security at the same time.
Thanks to @Kwaio, here's a diagram illustrating how such IP address allocations can be done.