很多小伙伴遇到網(wǎng)絡(luò)故障 或者無法連通時, 大多情況下, 我們都會一頓ping操作 判斷是否網(wǎng)絡(luò)故障。 那么我想問下, Ping 127.0.0.1的原理是什么? 我相信大部分小伙伴, 都會有“心有力,而語不出”這種感覺 心里感覺好像應(yīng)該懂點什么, 到嘴里又好像沒有什么可說的。 就問你,尷尬不尷尬? 今天,我們就好好聊聊 “Ping 127.0.0.1”背后那點事 首先,我們要弄清楚127.0.0.1的位置 1.window系統(tǒng)里,在hosts文件里可以找到127.0.0.1 可以發(fā)現(xiàn)localhost解析地址為127.0.0.1 2.linux中是寫在/etc/hosts中 通過ifconfig命令,是可以看到這個lo0寫了127.0.0.1地址 我們可以發(fā)現(xiàn)127.0.0.1默認配給了一個loopback虛擬接口上。 其次,我們要弄清楚ping 127.0.0.1的數(shù)據(jù)包是否經(jīng)過網(wǎng)卡. 先簡單的闡述下ping的程序 ping是對兩個TCP/IP系統(tǒng)連通性進行測試的基本工具, 它只利用ICMP回顯請求和回顯應(yīng)答報文, 而不用經(jīng)過傳輸層(TCP/UDP) 我們一般把發(fā)送回顯請求的ping程序為客戶端, 而被ping的主機為服務(wù)器。 大多數(shù)的TCP/IP實現(xiàn)都在內(nèi)核中直接支持ping服務(wù)器。 然后,我們引用“TCP/IP協(xié)議卷一”, 關(guān)于“網(wǎng)卡驅(qū)動處理IP數(shù)據(jù)包”的流程圖,來解釋下。 在我們輸出ping 127.0.0.1時, IP輸出函數(shù)會先檢查地址是不是換回地址: 1. 如果是環(huán)回地址,直接交給環(huán)回驅(qū)動程序處理,返回ip輸入函數(shù) 2. 如果不是環(huán)回地址,檢查是不是廣播地址或者多播地址, 如果是廣播地址或者組播地址數(shù)據(jù)報復(fù)制一份傳給環(huán)回接口。然后在送到以太網(wǎng)上。(因為廣播和多播包含主機本身) 3. 如果不是廣播或者多播地址,才檢查是不是本機地址,如果是本機地址,則交給環(huán)回驅(qū)動程序處理,環(huán)回驅(qū)動程序返回給ip輸入函數(shù) 另外,請童鞋注意的是,目前大部分網(wǎng)卡接口不能讀會它自己發(fā)送出去的數(shù)據(jù)包, 所以如果是發(fā)送給本地的數(shù)據(jù)包, 最好是不需要經(jīng)過網(wǎng)卡的。 很多網(wǎng)卡驅(qū)動的注釋上都有備注。 從上面可以看出 ping 127.0.0.1數(shù)據(jù)包是不經(jīng)過網(wǎng)卡的。 而如果ping本機IP是需要經(jīng)過網(wǎng)卡。 那么,我們是不是可以得出這樣的一個結(jié)論: 1.ping 127.0.0.1是檢查TCP/IP協(xié)議棧是否正常。 2.ping 本地IP 是檢查你網(wǎng)卡、配置是否正常。 為了驗證這個問題,我們通過實驗去看下結(jié)果: window環(huán)境下,我們把網(wǎng)卡禁用,我們來嘗試ping 127.0.0.1 圖一:網(wǎng)卡禁用 圖二:Ping 結(jié)果 通過這個簡單實驗驗證我們上面的結(jié)論。 那么,有童鞋會問 ping 127.0.0.1會不會被防火墻的影響 我們繼續(xù)做一個實驗去驗證: 1.首先測試機開啟防火墻功能 2.我們添加127.0.0.1的地址過濾,在高級設(shè)置->入站規(guī)則里與出站規(guī)則:新建規(guī)則 3.然后DOS里ping 127.0.0.1,同時wireshark抓包本地網(wǎng)卡的包 可以發(fā)現(xiàn)還是能正常ping通,而且網(wǎng)卡上沒有127.0.0.1的數(shù)據(jù)包。 所以ping 127.0.0.1的數(shù)據(jù)包不受防火墻影響。 總結(jié):ping 127.0.0.1環(huán)回地址, 如果不能ping通過說明當(dāng)前機器的TCP/IP協(xié)議棧有問題。 Window的TCP/IP協(xié)議棧重裝步驟: 1.刪除注冊表鍵值 把這兩個刪除 。 |
|
來自: wxt208 > 《網(wǎng)絡(luò)》