女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如果把IP 127.0.0.1換成0.0.0.0或localhost會怎么樣呢?

小林coding ? 來源:小白debug ? 2022-12-30 14:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

網通不通,你 ping 一下就知道了。

可能看到標題,你就知道答案了,但是你了解背后的原因嗎?

那如果把 127.0.0.1 換成 0.0.0.0 或 localhost 會怎么樣呢?你知道這幾個IP有什么區別嗎?

話不多說,我們直接開車。

拔掉網線,斷網。

然后在控制臺輸入ping 127.0.0.1。

$ping127.0.0.1
PING127.0.0.1(127.0.0.1):56databytes
64bytesfrom127.0.0.1:icmp_seq=0ttl=64time=0.080ms
64bytesfrom127.0.0.1:icmp_seq=1ttl=64time=0.093ms
64bytesfrom127.0.0.1:icmp_seq=2ttl=64time=0.074ms
64bytesfrom127.0.0.1:icmp_seq=3ttl=64time=0.079ms
64bytesfrom127.0.0.1:icmp_seq=4ttl=64time=0.079ms
^C
---127.0.0.1pingstatistics---
5packetstransmitted,5packetsreceived,0.0%packetloss
round-tripmin/avg/max/stddev=0.074/0.081/0.093/0.006ms

說明,拔了網線,ping 127.0.0.1 是能ping通的

其實這篇文章看到這里,標題前半個問題已經被回答了。但是我們可以再想深一點。

為什么斷網了還能 ping 通 127.0.0.1 呢?

這能說明你不用交網費就能上網嗎?

不能。

首先我們需要進入基礎科普環節。

不懂的同學看了就懂了,懂的看了就當查漏補缺吧。

什么是127.0.0.1

首先,這是個 IPV4 地址。

IPV4 地址有 32 位,一個字節有 8 位,共 4 個字節。

其中127 開頭的都屬于回環地址,也是 IPV4 的特殊地址,沒什么道理,就是人為規定的。

而127.0.0.1是眾多回環地址中的一個。之所以不是 127.0.0.2 ,而是 127.0.0.1,是因為源碼里就是這么定義的,也沒什么道理。

/*Addresstoloopbackinsoftwaretolocalhost.*/
#defineINADDR_LOOPBACK0x7f000001/*127.0.0.1*/
b1bdcade-77b7-11ed-8abf-dac502259ad0.png

回環地址

IPv4 的地址是 32 位的,2的32次方,大概是40+億。地球光人口就76億了,40億IP這點量,塞牙縫都不夠,實際上IP也確實用完了。

所以就有了IPV6, IPv6 的地址是 128 位的,大概是2的128次方≈10的38次方。據說地球的沙子數量大概是 10的23次方,所以IPV6的IP可以認為用不完。

IPV4以8位一組,每組之間用 . 號隔開。

IPV6就以16位為一組,每組之間用 : 號隔開。如果全是0,那么可以省略不寫。

b1cec4ba-77b7-11ed-8abf-dac502259ad0.pngipv6回環地址

在IPV4下的回環地址是 127.0.0.1,在IPV6下,表達為 ::1 。中間把連續的0給省略了,之所以不是7個 冒號,而是2個冒號: , 是因為一個 IPV6 地址中只允許出現?次兩個連續的冒號。

多說一句:在IPV4下用的是 ping 127.0.0.1 命令。在IPV6下用的是 ping6 ::1 命令。

什么是 ping

ping 是應用層命令,可以理解為它跟游戲或者聊天軟件屬于同一層。只不過聊天軟件可以收發消息,還能點個贊什么的,有很多復雜的功能。

而 ping 作為一個小軟件,它的功能比較簡單,就是嘗試發送一個小小的消息到目標機器上,判斷目的機器是否可達,其實也就是判斷目標機器網絡是否能連通。

ping應用的底層,用的是網絡層的ICMP協議。

b1e29274-77b7-11ed-8abf-dac502259ad0.pngIP和ICMP和Ping所在分層

雖然ICMP協議和IP協議都屬于網絡層協議,但其實ICMP也是利用了IP協議進行消息的傳輸

b1f9104e-77b7-11ed-8abf-dac502259ad0.pngip和icmp的關系

所以,大家在這里完全可以簡單的理解為 ping 某個IP 就是往某個IP地址發個消息。

TCP發數據和ping的區別

一般情況下,我們會使用 TCP 進行網絡數據傳輸,那么我們可以看下它和 ping 的區別。

b21d2470-77b7-11ed-8abf-dac502259ad0.pngping和普通發消息的關系

ping和其他應用層軟件都屬于應用層。

那么我們橫向對比一下,比方說聊天軟件,如果用的是TCP的方式去發送消息。

為了發送消息,那就得先知道往哪發。linux里萬物皆文件,那你要發消息的目的地,也是個文件,這里就引出了socket 的概念。

要使用 socket , 那么首先需要創建它。

在 TCP 傳輸中創建的方式是 socket(AF_INET, SOCK_STREAM, 0);,其中 AF_INET 表示將使用 IPV4 里 host:port 的方式去解析待會你輸入的網絡地址。

SOCK_STREAM 是指使用面向字節流的 TCP 協議,工作在傳輸層

創建好了 socket 之后,就可以愉快的把要傳輸的數據寫到這個文件里。調用 socket 的sendto接口的過程中進程會從用戶態進入到內核態,最后會調用到 sock_sendmsg 方法。

然后進入傳輸層,帶上TCP頭。網絡層帶上IP頭,數據鏈路層帶上 MAC頭等一系列操作后。進入網卡的發送隊列 ring buffer ,順著網卡就發出去了。

回到 ping , 整個過程也基本跟 TCP 發數據類似,差異的地方主要在于,創建 socket 的時候用的是 socket(AF_INET,SOCK_RAW,IPPROTO_ICMP),SOCK_RAW 是原始套接字 ,工作在網絡層, 所以構建ICMP(網絡層協議)的數據,是再合適不過了。

ping 在進入內核態后最后也是調用的 sock_sendmsg 方法,進入到網絡層后加上ICMP和IP頭后,數據鏈路層加上MAC頭,也是順著網卡發出。因此 本質上ping 跟 普通應用發消息 在程序流程上沒太大差別。

這也解釋了為什么當你發現懷疑網絡有問題的時候,別人第一時間是問你能ping通嗎?因為可以簡單理解為ping就是自己組了個數據包,讓系統按著其他軟件發送數據的路徑往外發一遍,能通的話說明其他軟件發的數據也能通。

為什么斷網了還能 ping 通 127.0.0.1

前面提到,有網的情況下,ping 最后是通過網卡將數據發送出去的。

那么斷網的情況下,網卡已經不工作了,ping 回環地址卻一切正常,我們可以看下這種情況下的工作原理。

b23b6f34-77b7-11ed-8abf-dac502259ad0.pngping回環地址

從應用層到傳輸層再到網絡層。這段路徑跟ping外網的時候是幾乎是一樣的。到了網絡層,系統會根據目的IP,在路由表中獲取對應的路由信息,而這其中就包含選擇哪個網卡把消息發出。

當發現目標IP是外網IP時,會從"真網卡"發出。

當發現目標IP是回環地址時,就會選擇本地網卡。

本地網卡,其實就是個"假網卡",它不像"真網卡"那樣有個ring buffer什么的,"假網卡"會把數據推到一個叫 input_pkt_queue 的 鏈表 中。這個鏈表,其實是所有網卡共享的,上面掛著發給本機的各種消息。消息被發送到這個鏈表后,會再觸發一個軟中斷

專門處理軟中斷的工具人"ksoftirqd" (這是個內核線程),它在收到軟中斷后就會立馬去鏈表里把消息取出,然后順著數據鏈路層、網絡層等層層往上傳遞最后給到應用程序。

工具人ksoftirqd

ping 回環地址和通過TCP等各種協議發送數據到回環地址都是走這條路徑。整條路徑從發到收,都沒有經過"真網卡"。之所以127.0.0.1叫本地回環地址,可以理解為,消息發出到這個地址上的話,就不會出網絡,在本機打個轉就又回來了。所以斷網,依然能 ping 通 127.0.0.1。

ping回環地址和ping本機地址有什么區別

我們在mac里執行 ifconfig 。

$ifconfig
lo0:flags=8049mtu16384
inet127.0.0.1netmask0xff000000
...
en0:flags=8863mtu1500
inet192.168.31.6netmask0xffffff00broadcast192.168.31.255
...

能看到 lo0,表示本地回環接口,對應的地址,就是我們前面提到的 127.0.0.1 ,也就是回環地址。

eth0,表示本機第一塊網卡,對應的IP地址是192.168.31.6,管它叫本機IP。

之前一直認為ping本機IP的話會通過"真網卡"出去,然后遇到第一個路由器,再發回來到本機。

為了驗證這個說法,可以進行抓包,但結果跟上面的說法并不相同。

b30646b4-77b7-11ed-8abf-dac502259ad0.pngping 127.0.0.1

b3cc9efe-77b7-11ed-8abf-dac502259ad0.pngping 本機地址

可以看到 ping 本機IP 跟 ping 回環地址一樣,相關的網絡數據,都是走的 lo0,本地回環接口,也就是前面提到的"假網卡"。

只要走了本地回環接口,那數據都不會發送到網絡中,在本機網絡協議棧中兜一圈,就發回來了。因此 ping回環地址和ping本機地址沒有區別。

127.0.0.1 和 localhost 以及 0.0.0.0 有區別嗎

回到文章開頭動圖里的提問,算是面試八股文里的老常客了。

以前第一次用 nginx 的時候,發現用這幾個 IP,都能正常訪問到 nginx 的歡迎網頁。一度認為這幾個 IP 都是一樣的。

b433212e-77b7-11ed-8abf-dac502259ad0.png訪問127.0.0.1:80 b4564492-77b7-11ed-8abf-dac502259ad0.png訪問localhost:80 b4676132-77b7-11ed-8abf-dac502259ad0.png訪問0.0.0.0:80 b48f861c-77b7-11ed-8abf-dac502259ad0.png訪問本機的IP地址

但本質上還是有些區別的。

首先 localhost 就不叫 IP,它是一個域名,就跟 "baidu.com",是一個形式的東西,只不過默認會把它解析為 127.0.0.1 ,當然這可以在 /etc/hosts 文件下進行修改。

所以默認情況下,使用 localhost 跟使用 127.0.0.1 確實是沒區別的。

其次就是 0.0.0.0,執行 ping 0.0.0.0 ,是會失敗的,因為它在IPV4中表示的是無效的目標地址

$ping0.0.0.0
PING0.0.0.0(0.0.0.0):56databytes
ping:sendto:Noroutetohost
ping:sendto:Noroutetohost

但它還是很有用處的,回想下,我們啟動服務器的時候,一般會 listen 一個 IP 和端口,等待客戶端的連接。

如果此時 listen 的是本機的 0.0.0.0 , 那么它表示本機上的所有IPV4地址。

/*Addresstoacceptanyincomingmessages.*/
#defineINADDR_ANY((unsignedlongint)0x00000000)/*0.0.0.0*/

舉個例子。剛剛提到的 127.0.0.1 和 192.168.31.6 ,都是本機的IPV4地址,如果監聽 0.0.0.0 ,那么用上面兩個地址,都能訪問到這個服務器。

當然, 客戶端 connect 時,不能使用 0.0.0.0 。必須指明要連接哪個服務器IP。

總結

127.0.0.1 是回環地址。localhost是域名,但默認等于 127.0.0.1。

ping 回環地址和 ping 本機地址,是一樣的,走的是lo0 "假網卡",都會經過網絡層和數據鏈路層等邏輯,最后在快要出網卡前狠狠拐了個彎, 將數據插入到一個鏈表后就軟中斷通知 ksoftirqd 來進行收數據的邏輯,壓根就不出網絡。所以斷網了也能 ping 通回環地址。

如果服務器 listen 的是 0.0.0.0,那么此時用127.0.0.1和本機地址都可以訪問到服務。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IP協議
    +關注

    關注

    3

    文章

    85

    瀏覽量

    22113
  • ICMP
    +關注

    關注

    0

    文章

    52

    瀏覽量

    15292
  • TCP通信
    +關注

    關注

    0

    文章

    146

    瀏覽量

    4556

原文標題:面試官:斷網了,還能 ping 通 127.0.0.1 嗎?

文章出處:【微信號:小林coding,微信公眾號:小林coding】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如果把flash的地址改為別的大小,下載bin文件的地址如何設置?

    如果把flash的地址改為別的大小,下載bin文件的地址如何設置?可以自己分配嗎??
    發表于 07-12 11:08

    在樹莓派上安裝和使用MySQL

    which is more compatible and is not less secure. bind-address= 127.0.0.1 127.0.0.1 改成 0.0.0.0
    發表于 01-13 17:55

    如果把CC2650用做路由器,他內置FLASH和SRAM資源夠用嗎?

    如果把CC2650用做路由器,他內置FLASH和SRAM資源夠用嗎?
    發表于 02-26 13:46

    請問 范例里的RT項目IP地址怎么從0.0.0.0改成自己設備的IP

    請問 范例里的RT項目IP地址怎么從0.0.0.0改成自己設備的IP如題,如圖
    發表于 04-25 21:53

    ARM中斷的使能與除能如果把SETENA和CLRENA位都寫了1怎么?

    的CLRENA位中。如果向他們寫0,則不會有任何效果。問題:如果SETENA和CLRENA位都寫了1,怎么?到底是使能還是除能該中斷
    發表于 03-18 08:06

    在Linux平臺下啟動和關閉MySQL服務

    :670.0.0.0:*2482/dnsmasqudp00 127.0.0.1:3230.0.0.0:*708/chronydudp00 0.0.0.0:376530.0.0.0:*705/avahi-daemon
    發表于 07-09 06:39

    如果將float轉換成char類型為什么提示報錯

    怎樣通過sprintf將float轉換成string類型的如果將float轉換成char類型為什么提示報錯?有何解決辦法?
    發表于 12-01 07:37

    用網線STM32F407和電腦直連后ping不通是為什么?

    我用網線STM32F407和電腦直連,然后設置的靜態ip地址,電腦連的wifi。在電腦上也以太網的ip地址設置成在rtt上一的地址。但
    發表于 04-08 09:41

    如果給路由器天線換成5G信號塔天線怎么?

    如圖所示,如果把路由器天線切換成5G信號塔天線怎樣?技術上可行嗎?信號和支持范圍會不會增強? 我想自己做一款路由器,功能類似于5G工業級路由器(參考),支持網線及SIM卡接入,網線信號優于sim卡。 誰有對應零件的廠商資源
    發表于 06-19 09:44

    如果把ad9643配置成測試模式, 一個時鐘周期內兩個通道通過LVDS接口輸出的數據是一的嗎?

    你好, 請問如果把ad9643配置成測試模式, 一個時鐘周期內兩個通道通過 LVDS接口輸出的數據是一的嗎? 謝謝!
    發表于 12-04 07:18

    如果把Xbox One X換成同等配置的PC 500美元做得到嗎?

    微軟的Xbox One X給臺式機組裝用戶呈現出了一個有意思的挑戰。如果你想要純粹的性能,那沒有什么能超越PC。但你能用500美元(約合人民幣3403元)組裝一臺和Xbox One X同配置的PC嗎?
    發表于 06-19 17:22 ?1638次閱讀

    IP地址相關知識的深入了解

    ;/span>`,但是localhost并不等于127.0.0.1,localhost指向的IP地址是可以配置的,如果大家閑得蛋疼的話,可以
    的頭像 發表于 02-14 10:17 ?1513次閱讀
    <b class='flag-5'>IP</b>地址相關知識的深入了解

    IP地址的分類

    127.0.0.1 本機地址主要用于測試。用漢語表示,就是“我自己”。在Windows系統中,這個地址有一個別名“Localhost”。
    發表于 06-29 09:38 ?1628次閱讀
    <b class='flag-5'>IP</b>地址的分類

    如果把cmos反相器中的nmos和pmos顛倒連接,電路能否工作?為什么?

    如果把cmos反相器中的nmos和pmos顛倒連接,電路能否工作?為什么? CMOS反相器是數字電路中非常基礎的一種電路,也被廣泛應用于不同的場合中,例如計算機處理器、通訊系統、自動控制系統等
    的頭像 發表于 09-12 10:57 ?3585次閱讀

    功放功率小于音響功率怎么?

    功放功率小于音響功率怎么
    的頭像 發表于 11-25 10:22 ?1390次閱讀
    功放功率小于音響功率<b class='flag-5'>會</b>怎么<b class='flag-5'>樣</b><b class='flag-5'>呢</b>?