127.0.0.1、localhost、0.0.0.0的區別


  在開發web應用的測試環境中,如果希望同一個局域網的同事通過內網IP訪問自己的應用,則需要把web服務監聽的ip地址改為0.0.0.0。為什么用127.0.0.1不行,而用0.0.0.0就可以呢?

  flask文檔有提到

app.run(host='0.0.0.0')

  會讓操作系統監聽所有的公網ip。在服務器中,0.0.0.0指的是本機上的所有IPV4地址,如果一個主機有兩個IP地址,192.168.1.1 和 10.1.2.1,並且該主機上的一個服務監聽的地址是0.0.0.0,那么通過兩個ip地址都能夠訪問該服務。 一般我們自己的機器都會有防火牆之類的東西阻止非此局域網的IP訪問,所以測試時才需要其他人的機器與自己接入同一個局域網。

  而作為IP地址,0.0.0.0意味着“這個網絡”或者“這個主機”,全0的IP地址作為網絡號指的是當前網絡。0.0.0.0允許機器在不知道網絡號的情況下訪問自己所在的網絡。

  因此,當我們在本地啟動flask應用時,在瀏覽器輸入0.0.0.0:5000,無論有無接入互聯網都可以訪問flask應用,因為機器訪問的是自己所在的網絡。

 

  所有127.xx.yy.zz形式的地址保留給回環測試用,發送到該地址的數據包並沒有被真正放在線路上,它們如同入境數據包一樣在本地處理。

  而127.0.0.1是一個回環地址,通過這個地址我們只能訪問發出此次訪問的同一台主機,目的地址為“127.0.0.1”的數據包不會通過網關,因此該數據包不會出現在網絡傳輸過程中。如果一個服務監聽127.0.0.1,其實它只監聽本機對此服務的訪問。

 

  localhost是一個別名,默認表示IP地址127.0.0.1,也可以在/etc/hosts中設置為其他IP地址。在終端ping localhost可以看到localhost被解析為127.0.0.1

MacBook-Pro-2:~ zixiluo$ ping localhost

PING localhost (127.0.0.1): 56 data bytes

64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.036 ms

64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.081 ms

64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.084 ms

64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.082 ms

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM