localhost、127.0.0.1 和 本機IP 三者的區別

localhost

首先 localhost 是一個域名,在過去它指向 127.0.0.1 這個IP地址。在操做系統支持 ipv6 後,它同時還指向ipv6 的地址 [::1]
在 Windows 中,這個域名是預約義的,從 hosts 文件中能夠看出:php

# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost

而在 Linux 中,其定義位於 /etc/hosts 中:web

127.0.0.1    localhost

注意這個值是可修改的,好比把它改爲網絡

192.068.206.1    localhost

而後再去 ping localhost,提示就變成了svg

PING localhost (192.168.206.1) 56(84) bytes of data.

127.0.0.1

127.0.0.1 這個地址一般分配給 loopback 接口。loopback 是一個特殊的網絡接口(可理解成虛擬網卡),用於本機中各個應用之間的網絡交互。只要操做系統的網絡組件是正常的,loopback 就能工做。Windows 中看不到這個接口,Linux中這個接口叫 lo:oop

#ifconfig
eth0    Link encap:Ethernet hwaddr 00:00:00:00:00:00
            inet addr :192.168.0.1 Bcase:192.168.0.255 Mask:255.255.255.0
           ......
lo        Link encap:Local Loopback
           inetaddr: 127.0.0.1 Mask: 255.0.0.0
           ......

能夠看出 lo 接口的地址是 127.0.0.1。事實上整個 127.* 網段都算可以使用,好比你 ping 127.0.0.2 也是通的。
可是使用127.0.0.1做爲loopback接口的默認地址只是一個慣例,好比下面這樣:spa

#ifconfig lo 192.168.128.1
#ping localhost #糟糕,ping不通了
#ping 192.128.128.1 # 能夠通
#ifconfig lo
lo        Link encap:Local Loopback
           inetaddr: 192.168.128.1 Mask: 255.255.255.0
           ......

若是隨便改這些配置,可能致使不少只認 127.0.0.1 的軟件掛掉。操作系統

本機IP

確切地說,「本機地址」並非一個規範的名詞。一般狀況下,指的是「本機物理網卡所綁定的網絡協議地址」。因爲目前經常使用網絡協議只剩下了IPV4,IPX/Apple Tak消失了,IPV6還沒普及,因此一般僅指IP地址甚至ipv4地址。通常狀況下,並不會把 127.0.0.1看成本機地址——由於不必特別說明,你們都知道。
本機地址是與具體的網絡接口綁定的。好比以太網卡、無線網卡或者PPP/PPPoE撥號網絡的虛擬網卡,想要正常工做都要綁定一個地址,不然其餘設備就不知道如何訪問它。code

● localhost 是個域名,不是地址,它能夠被配置爲任意的 IP 地址,不過一般狀況下都指向 127.0.0.1(ipv4)和 ::1
● 整個127.* 網段一般被用做 loopback 網絡接口的默認地址,按慣例一般設置爲 127.0.0.1。這個地址在其餘計算機上不能訪問,就算你想訪問,訪問的也是本身,由於每臺帶有TCP/IP協議棧的設備基本上都有 localhost/127.0.0.1。
● 本機地址一般指的是綁定在物理或虛擬網絡接口上的IP地址,可供其餘設備訪問到。
● 最後,從開發度來看
○ localhost是個域名,性質跟 「www.baidu.com」 差很少。不能直接綁定套接字,必須先gethostbyname轉成IP才能綁定。
○ 127.0.0.1 是綁定在 loopback 接口上的地址,若是服務端套接字綁定在它上面,你的客戶端程序就只能在本機訪問。xml