很多小伙伴遇到網(wǎng)絡故障
或者無法連通時,
大多情況下,
我們都會一頓ping操作
判斷是否網(wǎng)絡故障。
那么我想問下,
Ping 127.0.0.1的原理是什么?
我相信大部分小伙伴,
都會有“心有力,而語不出”這種感覺
心里感覺好像應該懂點什么,
到嘴里又好像沒有什么可說的。
就問你,尷尬不尷尬?
今天,我們就好好聊聊
“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回顯請求和回顯應答報文,
而不用經(jīng)過傳輸層(TCP/UDP)
我們一般把發(fā)送回顯請求的ping程序為客戶端,
而被ping的主機為服務器。
大多數(shù)的TCP/IP實現(xiàn)都在內(nèi)核中直接支持ping服務器。
然后,我們引用“TCP/IP協(xié)議卷一”,
關于“網(wǎng)卡驅動處理IP數(shù)據(jù)包”的流程圖,來解釋下。
在我們輸出ping 127.0.0.1時,
IP輸出函數(shù)會先檢查地址是不是換回地址:
1. 如果是環(huán)回地址,直接交給環(huán)回驅動程序處理,返回ip輸入函數(shù)
2. 如果不是環(huán)回地址,檢查是不是廣播地址或者多播地址,
如果是廣播地址或者組播地址數(shù)據(jù)報復制一份傳給環(huán)回接口。然后在送到以太網(wǎng)上。(因為廣播和多播包含主機本身)
3. 如果不是廣播或者多播地址,才檢查是不是本機地址,如果是本機地址,則交給環(huán)回驅動程序處理,環(huán)回驅動程序返回給ip輸入函數(shù)
另外,請童鞋注意的是,目前大部分網(wǎng)卡接口不能讀會它自己發(fā)送出去的數(shù)據(jù)包,
所以如果是發(fā)送給本地的數(shù)據(jù)包,
最好是不需要經(jīng)過網(wǎng)卡的。
很多網(wǎng)卡驅動的注釋上都有備注。
從上面可以看出 ping 127.0.0.1數(shù)據(jù)包是不經(jīng)過網(wǎng)卡的。
而如果ping本機IP是需要經(jīng)過網(wǎng)卡。
那么,我們是不是可以得出這樣的一個結論:
1.ping 127.0.0.1是檢查TCP/IP協(xié)議棧是否正常。
2.ping 本地IP 是檢查你網(wǎng)卡、配置是否正常。
為了驗證這個問題,我們通過實驗去看下結果:
window環(huán)境下,我們把網(wǎng)卡禁用,我們來嘗試ping 127.0.0.1
圖一:網(wǎng)卡禁用
圖二:Ping 結果
通過這個簡單實驗驗證我們上面的結論。
那么,有童鞋會問
ping 127.0.0.1會不會被防火墻的影響
我們繼續(xù)做一個實驗去驗證:
1.首先測試機開啟防火墻功能
2.我們添加127.0.0.1的地址過濾,在高級設置->入站規(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ù)包不受防火墻影響。
總結:ping 127.0.0.1環(huán)回地址,
如果不能ping通過說明當前機器的TCP/IP協(xié)議棧有問題。
Window的TCP/IP協(xié)議棧重裝步驟:
1.刪除注冊表鍵值
開始-運行-regedit,找到 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Winsock2
把這兩個刪除 。
2.重新安裝協(xié)議
本地連接-屬性-安裝-協(xié)議-增加-從硬盤導入-選擇%Windir%\inf 文件夾(一般為 C:\Windows\inf)-選擇TCP/IP協(xié)議v4 。
3.將TCP/IP協(xié)議?;謴椭脸跏紶顟B(tài)
管理員權限運行 cmd, netsh int ip reset C:\resetlog.txt 。其中C:\resetlog.txt為記錄日志,一定要指定。
4.重啟;