Re: "We have now run out of IPv4 addresses"
That's what NAT does - it adds two extra bytes (the port number) to the address. That's a kludge.
We could have added an "options field" to the header with the extra address info, but that wouldn't have been backwardsly compatible. Although it probably could have been made to work and we might even have upgraded our systems by now.