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

localhost 127.0.0.1和本機ip三者的區別?


排名第一的答案還沒說的太完整。
首先 localhost 是一個域名,在過去它指向 127.0.0.1 這個IP地址。在操作系統支持 ipv6 後,它同時還指向ipv6 的地址 [::1]
在 Windows 中,這個域名是預定義的,從 hosts 文件中可以看出:
# localhost name resolution is handled within DNS itself.
# 127.0.0.1 localhost
# ::1 localhost
而在 Linux 中,其定義位於 /etc/hosts 中:
127.0.0.1 localhost
注意這個值是可修改的,比如我把它改成
192.068.206.1 localhost
然後再去 ping localhost,提示就變成了
PING localhost (192.168.206.1) 56(84) bytes of data.
當然一般人不會像我這麼蛋疼。
————分割線—說完localhost再說127.0.0.1————
127.0.0.1 這個地址通常分配給 loopback 介面。loopback 是一個特殊的網路介面(可理解成虛擬網卡),用於本機中各個應用之間的網路交互。只要操作系統的網路組件是正常的,loopback 就能工作。Windows 中看不到這個介面,Linux中這個介面叫 lo:
#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介面的默認地址只是一個慣例,比如下面這樣:
#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 的軟體掛掉。
————分割線—說完127.0.0.1再說本機地址————
確切地說,「本機地址」並不是一個規範的名詞。通常情況下,指的是「本機物理網卡所綁定的網路協議地址」。由於目前常用網路協議只剩下了IPV4,IPX/Apple Tak消失了,IPV6還沒普及,所以通常僅指IP地址甚至ipv4地址。一般情況下,並不會把 127.0.0.1當作本機地址——因為沒必要特別說明,大家都知道。
本機地址是與具體的網路介面綁定的。比如乙太網卡、無線網卡或者PPP/PPPoE撥號網路的虛擬網卡,想要正常工作都要綁定一個地址,否則其他設備就不知道如何訪問它。

————最後總結一下區別————

  • localhost 是個域名,不是地址,它可以被配置為任意的 IP 地址,不過通常情況下都指向 127.0.0.1(ipv4)和 [::1](ipv6)
  • 整個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 介面上的地址,如果服務端套接字綁定在它上面,你的客戶端程序就只能在本機訪問。
    • 如果主機中存在多個網卡,分別連接不同的物理網路,比如 192.168.0.1/255.255.255.0 和 192.168.1.1/255.255.255.0,那麼當你的服務端套接字綁到 192.168.0.1 這個地址上時,位於 192.168.1.* 網段的其他計算機是無法連接的,只有位於192.168.0.* 網段的計算機才能訪問你的服務端程序。

1. 127.0.0.1/8整個都是環回地址,用來測試本機的TCP/IP協議棧,發往這段A類地址數據包不會出網卡,網路設備不會對其做路由。
2. localhost 就是個指向本機環回口的域名,方便記憶與輸入,/etc/hosts第一行就是"127.0.0.1 localhost..." 第二行的[::1]是IPv6

3. 本機IP看你是有幾張網卡幾個介面了多網卡可能還得分內外網 環回口不需要網卡up,協議棧正常就能通

4. 還有個地址段169.254.0.0/16,可以看成一個B類私網地址,專門用來在DHCP獲取失敗時自動配置的介面地址,windows上肯定有,Linux上倒是沒見過。。明天試試看。。


localhost 就是一個域名,域名指向 127.0.0.1 ,兩者是一樣的。

至於本機 IP,你可以理解為本機有三塊網卡,一塊網卡叫做 loopback(這是一塊虛擬網卡),另外一塊網卡叫做 ethernet (這是你的有線網卡),另外一塊網卡叫做 wlan(這是你的無線網卡)。

你的本機 IP 是你真實網卡的 IP,具體來說有線無線各有一個,而 127.0.0.1 是那塊叫做 loopback 的虛擬網卡的 IP。


對人來說localhost = 127.0.0.1 ,
這是因為hosts文件定義了localhost=127.0.0.1 。所以你只需要記住localhost就可以代表本機了。它其實是個和http://baidu.com一樣的域名。

對機器來說,它需要通過hosts文件來定義localhost = 127.0.0.1 ,才能知道localhost代表的是本機。機器只知道127.0.0.1代表本機。因此在你朝localhost發消息的時候,機器會自動翻譯成朝127.0.0.1發消息,並且這個消息不會出網卡(不需要經過上級路由器),而是在機器本身就可以處理了。

但如果是http://192.168.1.XXX或者橋接的虛擬網卡的話,就要看具體的操作系統和虛擬網卡+虛擬交換機是怎麼實現的了。有的機靈點的不需要經過上級路由器,有些傻的可能會一本正經地繞一圈。。。


排名第一的說的沒錯,我來講的更通俗一點。
1.localhost=127.0.0.1,只不過localhost是域名,127.0.0.1是IP地址。
2.本機IP就是本機在外網的IP地址,如圖。


本機 IP 實際上還要包括一個撥號設備的 IP 地址。一般 PPPoE (也包括傳統的 ppp 撥號方式)都會有這麼一個虛擬設備(unix 類系統里這個設備一般叫做 tun)。這個 IP 地址和你的有線網卡的 IP 是不同的,一般都有你的 ISP 分配一個臨時地址給你。每次撥號都可能獲得不同的地址。


1,什麼是環回地址??與127.0.0.1的區別呢??

環回地址是主機用於向自身發送通信的一個特殊地址(也就是一個特殊的目的地址)。

可以這麼說:同一台主機上的兩項服務若使用環回地址而非分配的主機地址,就可以繞開TCP/IP協議棧的下層。(也就是說:不用再通過什麼鏈路層,物理層,乙太網傳出去了,而是可以直接在自己的網路層,運輸層進行處理了)

IPv4的環回地址為:127.0.0.0到127.255.255.255都是環回地址(只是有兩個特殊的保留),此地址中的任何地址都不會出現在網路中

網路號為127的地址根本就不是一個網路地址(因為產生的IP數據報就不會到達外部網路介面中,是不離開主機的包)

當操作系統初始化本機的TCP/IP協議棧時,設置協議棧本身的IP地址為127.0.0.1(保留地址),並注入路由表。當IP層接收到目的地址為127.0.0.1(準確的說是:網路號為127的IP)的數據包時,不調用網卡驅動進行二次封裝,而是立即轉發到本機IP層進行處理,由於不涉及底層操作。因此,ping 127.0.0.1一般作為測試本機TCP/IP協議棧正常與否的判斷之一。

所以說:127.0.0.1是保留地址之一,只是被經常的使用,來檢驗本機TCP/IP協議棧而已

如果我們可以ping通的話,就說明:本機的網卡和IP協議安裝都沒有問題。(跟我們當前主機有沒有聯網沒有一點關係)

2,

localhost首先是一個域名(如同:http://www.baidu.com),也是本機地址,它可以被配置為任意的IP地址(也就是說,可以通過hosts這個文件進行更改的),不過通常情況下都指向:(如下)
IPv4:表示 127.0.0.1

IPv6:表示 [::1]

整個127.*網段通常被用作loopback網路介面的默認地址,按照慣例通常設置為127.0.0.1。我們當前這個主機上的這個地址,別人不能訪問,即使訪問,也是訪問自己。因為每一台TCP/IP協議棧的設備基本上都有local/127.0.0.1

3,

本機IP,我們可以理解為本機有三塊網卡,一塊網卡叫做loopback(虛擬網卡),一塊叫做ethernet(有線網卡),一塊叫做wlan(你的無線網卡),

聯網,網卡傳輸,受防火牆和網卡限制

用於本機和外部訪問


操作系統解析網路地址是有優先順序的。
優先順序最高的就是host查找,首先讀取
然後是netbios廣播查找,最後查找DNS。


本機IP沒什麼好說的,在區域網有區域網的對應IP,網際網路對於這個大區域網的入口IP而已!

localhost與127.0.0.1的區別是什麼?

相信有人會說是本地ip,曾有人說,用127.0.0.1比localhost好,可以減少一次解析。

看來這個入門問題還有人不清楚,其實這兩者是有區別的。

no1: localhost也叫local ,正確的解釋是:本地伺服器 127.0.0.1在windows等系統的正確解釋是:本機地址(本機伺服器)

no2: localhot(local)是不經網卡傳輸!這點很重要,它不受網路防火牆和網卡相關的的限制。

127.0.0.1是通過網卡傳輸,依賴網卡,並受到網路防火牆和網卡相關的限制。

一般設置程序時本地服務用localhost是最好的,localhost不會解析成ip,也不會佔用網卡、網路資源。

有時候用localhost可以,但用127.0.0.1就不可以的情況就是在於此。

猜想localhost訪問時,系統帶的本機當前用戶的許可權去訪問,而用ip的時候,等於本機是通過網路再去訪問本機,可能涉及到網路用戶的權-限。


必須嚴正加上一條:127.0.0.1會被瀏覽器默認為受信任站點,然而本機IP並不會


localhost是一個主機名稱,指向本地主機。ipv4對應127.0.0.1,ipv6對應::1。也就是說,localhost多了ipv6的支持。(前面3個回答沒有一人提到這點)本機IP是指每個網卡各自的IP地址。


推薦閱讀:

為何vxlan需要封裝在UDP里而不是直接使用IP包封裝?
操作系統接駁網路連接設備後,都是怎樣判斷已經成功連入Interent?
tcp詳解v1 真的適合初學tcp/udp編程嗎?
TCP/IP 協議到底在講什麼?
tcp中的mss是536?

TAG:計算機網路 | TCPIP |