ping命令在網絡中是一個十分常用的命令,通常用來測試網絡是否可達。本文就來聊一聊ping命令的原理及如何使用ping命令。
一、ping命令的原理
ping命令是ICMP協議的一個重要應用。
ICMP協議全稱網際控制報文協議,工作在網際層。能夠使IP報文更有效的轉發,提高交付成功的機會。
ICMP協議封裝在IP報文中,所以并不是高層協議,而是IP協議。
ICMP協議的報文主要有兩種,即ICMP差錯報告報文和ICMP詢問報文。在ping命令中主要使用的是ICMP詢問報文中的回送請求或回送回答報文。以下給出了此報文的相關概念。
回送請求:由主機或路由器向一個特定的目的主機發出詢問。
回送回答:收到詢問報文的主機必須給源主機或路由器發送ICMP回送回答報文。
這些報文主要用來測試目的站是否可達。
二、ping命令的使用
ping命令,即分組網監探測ping。使用ICMP的回送請求和回送回答報文,用來測試網絡間的連通性。
在Windows10中,在命令行中可以使用ping命令。首先在運行中輸入cmd進入命令行界面。
在命令行界面可以直接使用ping命令測試某個IP地址。例如,直接輸入ping 114.114.114.114,ping命令發出4個ICMP回送請求報文,如果目標連通,而且響應ping的回送請求報文,就會發回ICMP回送回答報文。可以看到回復的最終統計結果:
在Windows中,直接輸出ping命令,可以看到ping命令支持的參數
Ping (Packet Internet Groper),因特網包探索器是一種計算機網絡管理軟件實用程序,用于測試網絡上主機的可達性。它幾乎適用于所有具有網絡功能的操作系統,包括大多數嵌入式網絡管理軟件。
Ping 通過互聯網控制消息協議(ICMP)數據包進行操作。Ping涉及向目標主機發送ICMP 回顯請求并等待ICMP 回顯答復。該程序報告錯誤、數據包丟失和結果的統計摘要,通常包括最小值、最大值、平均往返時間和平均值的標準偏差。
舉例圖片操作系統環境為windows10,可在cmd鍵入ping /? 查看ping的使用幫助。
ping 目標IP地址:用于檢測網絡的連通情況和分析網絡問題;
ping -t :不間斷的ping目標主機,直到管理員鍵入crtl c停止命令;
ping -n:默認情況下,只發送四個數據包,通過這個參數可以自定義發送的個數,對于需要長時間分析網絡情況有所幫助;
ping -l size:指定發送到目標主機的數據包大小,可以用于測試鏈路承載質量或者測試路由器轉發大數據包的性能.
Ping 目標域名baidu.com 數據包大小為1024字節,數據數為10個。
使用華為模擬器ensp,模擬網絡結構局域網和跨局域網,實現數據通信,概述兩種網絡環境的訪問過程:
局域網一(左側部分)內部的網絡通信,局域網內部主機數據轉發過程:
1、局域網內同段IP地址之間ping,首先查詢本機的arp表象,arp表象存在目標地址的記錄,直接發起icmp的請求,互相通信不需要經過網關。
2、如果arp表象不存在目標地址的記錄,對目標主機發起arp廣播請求獲取mac地址,獲取到mac地址后發起icmp請求。
3、跨網段(跨路由器)訪問,首先查詢arp表象,路由器發現目標mac地址為路由器本身,路由器查詢自身路由表進行數據轉發。
4、局域網內數據通信的數據包(手動清空了arp表):
廣播請求mac地址,獲取到mac地址后發起和收到icmp數據包。
腳步內容分享如下:
@echo off
color 0A
echo %date% >~datetime.txt
for /f "eol=tokens=1-5 delims=/ " %%i in (~datetime.txt) do (
set year=%%i
set month=%%j
set day=%%k
set week=%%l
)
echo %time% >>~datetime.txt
for /f "eol=tokens=1-4 delims=.: " %%i in (~datetime.txt) do (
set hour=%%i
set minute=%%j
set second=%%k
set week=%%l
)
del ~datetime.txt
if %hour% lss 10 set hour=0%hour%
set today=%year%%month%%day%
set tod=%hour%%minute%%second%
set timestamp=%today%%tod%.txt
echo 正在進行Ping探測,請稍候…… by 山海有情,天遼地寧
echo.
echo 路由測試結果: >> %timestamp%
echo. >> %timestamp%
echo 測試開始時間: %date% %time% >> %timestamp%
echo.
echo. >> %timestamp%
FOR /F "eol=[ tokens=1,2 delims=" %%a in (測試點.txt) do echo 正在測試%%b…… & echo 目的測試點: %%b[%%a] >> %timestamp% & ping -n 5 %%a >> %timestamp% & echo %%b測試完畢! & echo. & echo. >> %timestamp%
echo 測試結束時間: %date%%time% >> %timestamp%
echo 全部測試完畢!
pause
探測演示圖: