19

If bind a socket in Python to localhost,8200 this is accessible via http://localhost:8200/. but not http://x.x.x.x:8200/

If bind a socket in Python to x.x.x.x,8200, machinename,8200 this is accessible via http://x.x.x.x:8200/ and http://machinename:8200/, but not http://localhost:8200/

I thought localhost meant 'this machine', and that using it would 'loop back' to the machine's ip address, but it appears to be different ips.

Is 127.0.0.1 always a different ip address to the machines ip address?

update:

I understand that the actual numbers are different, but what does the loopback do?

For example wikepedia says that
'pointing a web browser to the URLs http://127.0.0.1/ or http://localhost/ will access that computer's own web site'

but that web site will also be accessible on x.x.x.x, and presumably be set up with a single socket on x.x.x.x. So how do both references work then?

conclusion:

I think I finally understand that 127.0.0.1 and x.x.x.x work like this

--127.0.0.1 ==\
               >- Computer
--x.x.x.x   ==/

and not

--127.0.0.1 ==\
--------------- x.x.x.x >- Computer

or

--x.x.x.x ==\
--------------- 127.0.0.1 >- Computer

Thanks all for the help

2
  • 1
    you wrote "is 127.0.0.1 always a different ip address to the machine's ip address". The numbers between the dots are different, that is a different IP address. What an odd question you ask. If by machine's ip address, you mean something other than 127.0.0.1 then yes, it would be a different IP address. And if what you call your machine's IP address is 192.168.0.1 (or some other standard local range), then you don't have to be afraid to say so. You can write it instead of x.x.x.x That 192 address won't exist on the internet anyway.
    – barlop
    Oct 7, 2010 at 10:23
  • The references for both work because of how the web server is configured. You can tell the server to bind to all addresses, or to only listen on specific ones. Since the Loopback and the actual IP are distinct addresses, the configuration is determining which IP to listen on. Since localhost is just a hosts entry for 127.0.0.1, it will only work when the web server is bound to 127.0.0.1.
    – peelman
    Oct 7, 2010 at 14:17

3 Answers 3

20

To answer your question.

127.0.0.1 is not just a different ip address to the machine ip address, it's a different interface as well. 127.0.0.1 should not be seen on the local network. It's a special internal IP address for the loopback adapter.

x.x.x.x will be your ethernet card.

by the way 'localhost' is simply an entry in your hosts file that points to 127.0.0.1

If you bind a socket to 127.0.0.1:8200 then only clients running locally will be able to access it and only with http://127.0.0.1:8200 or http://localhost:8200 (or a dns or hosts file entry that points to 127.0.0.1).

A socket bound to x.x.x.x:8200 will only be available through http://x.x.x.x:8200 or a dns or hosts file entry that points to that.

Binding a socket to 127.0.0.1 does not automatically make it available on the ethernet interface as well.

Thats why you can't connect to x.x.x.x:8200

You can bind port 8200 to all available interfaces (0.0.0.0) then it should work.

Other features of the loopback adapter:

The loopback interface is a virtual interface. It's often used to allow programs to talk to each other on the same machine. It is not a way to reference the machine IP address. 127.0.0.1 IS the IP address of the loopback virtual adaptor.

The other thing about the loopback adapter is that because it's virtual it doesn't actually pass any packets through to the network card.

4
  • So what does the 'loopback' bit do? What does it loopback to? I thought it was a way to reference the machine ip address, whatever that happened to be' i.e. 127.0.0.1 => x.x.x.x
    – David
    Oct 7, 2010 at 14:03
  • 1
    The loopback interface is a virtual interface. It's often used to allow programs to talk to each other on the same machine. It is not a way to reference the machine IP address. 127.0.0.1 IS the IP address of the loopback virtual adaptor.
    – hookenz
    Oct 8, 2010 at 0:30
  • 1
    The other thing about the loopback adapter is that because it's virtual it doesn't actually pass any packets through to the network card.
    – hookenz
    Oct 12, 2010 at 23:18
  • 1
    literally wasted 4 hours not understanding this concept... apparently some web servers automatically bind to both x.x.x.x and 127.0.0.1 for you which elicits confusion. Great question & answer guys. Thx=)
    – jrhee17
    May 15, 2016 at 9:34
4

For example wikepedia says that 'pointing a web browser to the URLs http://127.0.0.1/ or http://localhost/ will access that computer's own web site'

Slightly inaccurate. It may do so. Equally well it may not bring up any website and it is even possible to display an different internal website from what you get when you use your x.x.x.x address.

127.0.0.1 points to your own machine, but that doesn't mean it will behave the same way once it reaches your machine

If you want a non-technical analogy, your can consider them different doors into your house.

There are both pointing to the same house but they are not the same thing. It is possible for each door to take you into the same room or they could take you into a different room. It is also possible to lock one door and not the other.

When you configure a website, you specify which addresses to bind to and quite often the answer is all addresses. (That is equivalent to have all doors taking you into the one room)

You can also specify the website to bind to one address only. (That is equivalent to locking all doors except one.)

If you have two (or more) websites you can bind them to separate addresses. (That is equivalent to having each door going into separate rooms).

An example of how both references work, my Windows 7 computer has IIS installed, when I go into IIS Manager and right click on Default Web Site, it gives me a 'Edit Bindings' menu option. Selecting that bring up a list of bindings. I have only one, but for IP Address it has * which means IIS listens on all my ip addresses.

1
  • 1
    Great analogy! Thank you soo much ! I just made a trial. I successfully binded 127.0.0.1:5000 to a website and binded 192.168.1.104:5000 to another site. The key is that address:port means a different room(service) in the house (the computer).
    – Rick
    Sep 9, 2019 at 18:25
1

Every IP address on the system is independent and can be bound to by sockets separately, with the exception of the special address 0.0.0.0 which indicates to the OS to bind the socket to all interfaces.

2
  • 1
    But 127.0.0.1 is also a special address, as the most common choice for the loopback interface. What does that address loop back to?
    – David
    Oct 7, 2010 at 14:14
  • That doesn't make it "special", that just makes it "an address on the loopback interface" (unless you say "every address is special in its own way", but let's not go there). It's the interface that does the looping, not the address. Oct 7, 2010 at 14:38

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .