What is an IP address and what is the difference between public and private?
An IP address identifies a device on a network so traffic can be routed to it. The important distinction for everyday troubleshooting is between the address your device holds on your local network and the address the rest of the internet sees.
Private addresses come from ranges reserved for internal use. They are not routable across the internet, and the same ranges are reused in millions of homes and offices simultaneously, which is precisely why they can be reused: nothing outside your network ever addresses them directly. Your router assigns these to your devices.
Your public address belongs to the router and is assigned by your provider. Everything in your home shares it. The router keeps track of which internal device made which outbound request and directs replies back correctly, a process called address translation.
This explains several things people find puzzling. Every device in your house reporting the same address to a website is expected. A device being reachable from another room but not from outside is expected, because nothing outside knows how to reach a private address. And forwarding a port is necessary for incoming connections precisely because translation has no way to guess which internal device an unsolicited request was meant for.
Most home connections receive a dynamic public address that can change, which is why remote access setups often rely on a dynamic naming service that tracks it.
A growing complication is that some providers place customers behind an additional shared layer of translation, meaning you do not have a unique public address at all. Where that applies, port forwarding cannot work regardless of your router configuration, and the provider must be asked for an alternative.