0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

24張圖搞定ICMP :最常用的網(wǎng)絡(luò)命令ping和tracert

Linux愛好者 ? 來源:Linux愛好者 ? 2023-08-01 15:08 ? 次閱讀

462e0dc6-301f-11ee-9e74-dac502259ad0.png

ICMP

IP是盡力傳輸?shù)?a href="http://www.ttokpm.com/v/tag/1722/" target="_blank">網(wǎng)絡(luò)協(xié)議,提供的數(shù)據(jù)傳輸服務(wù)是不可靠的、無連接的,不能保證數(shù)據(jù)包能成功到達(dá)目的地。那么問題來了:如何確定數(shù)據(jù)包成功到達(dá)目的地?

463f5770-301f-11ee-9e74-dac502259ad0.png

這需要一個網(wǎng)絡(luò)層協(xié)議,提供錯誤檢測功能和報告機制功能,于是出現(xiàn)了ICMP(互聯(lián)網(wǎng)控制消息協(xié)議)。ICMP 的主要功能是,確認(rèn) IP 包是否成功送達(dá)目的地址,通知發(fā)送過程中 IP 包被丟棄的原因。有了這些功能,就可以檢查網(wǎng)絡(luò)是否正常、網(wǎng)絡(luò)配置是否正確、設(shè)備是否異常等信息,方便進(jìn)行網(wǎng)絡(luò)問題診斷。

4657d890-301f-11ee-9e74-dac502259ad0.png

舉個栗子:如果在傳輸過程中,發(fā)生了某個錯誤,設(shè)備便會向源設(shè)備返回一條 ICMP 消息,告訴它發(fā)生的錯誤類型。

46672192-301f-11ee-9e74-dac502259ad0.png

ICMP 消息是通過 IP 進(jìn)行傳輸,但它的目的并不是讓 IP 成為一種可靠的協(xié)議,而是對傳輸中發(fā)生的問題進(jìn)行反饋。ICMP 消息的傳輸同樣得不到可靠性保證,也有可能在傳輸過程中丟失。因此 ICMP 不是傳輸層的補充,應(yīng)該把它當(dāng)做網(wǎng)絡(luò)層協(xié)議。

ICMP 消息封裝

ICMP 消息使用 IP 來封裝,封裝格式如下圖。

468d0042-301f-11ee-9e74-dac502259ad0.png

其中type(類型)字段表示 ICMP 消息的類型,code(代碼)字段表示 ICMP 消息的具體含義。例如:type 值為 3 表示目的不可達(dá)消息( Destination Unreachable Message ),若 code 值為 0 表示目的網(wǎng)絡(luò)不可達(dá)( Network Unreachable )。常見的 ICMP 消息類型如下圖。

46a02014-301f-11ee-9e74-dac502259ad0.png

從功能上,ICMP 的消息可分為兩類:一類是通知出錯原因的錯誤消息,另一類是用于診斷的查詢消息。

46cdd4dc-301f-11ee-9e74-dac502259ad0.png

常見的 ICMP 消息類型

回送請求消息( Echo Request ):是由源設(shè)備(主機或路由器等)向一個指定的目的設(shè)備發(fā)出的請求。這種消息用來測試目的地是否可達(dá)。

回送響應(yīng)消息( Echo Reply ):對 Echo Request 的響應(yīng)。目的設(shè)備發(fā)送 Echo Reply 來響應(yīng)收到的 Echo Request 。最常用的 ping 命令就是使用 Echo Request 和 Echo Reply 來實現(xiàn)的。

46ddf59c-301f-11ee-9e74-dac502259ad0.png

目的不可達(dá)( Destination Unreachable ):路由器無法將 IP 包發(fā)送給目的地址時,會給源設(shè)備返回一個 Destination Unreachable 消息,并在消息中顯示不可達(dá)的具體原因。

46fdb51c-301f-11ee-9e74-dac502259ad0.png

實際情況下,經(jīng)常會遇到的錯誤代碼是 1 ,表示主機不可達(dá),它是指路由表中沒有目的設(shè)備的信息,或目的設(shè)備沒有連接到網(wǎng)絡(luò)。

4715aaa0-301f-11ee-9e74-dac502259ad0.png

參數(shù)問題( Parameter Problem ):路由器發(fā)現(xiàn) IP 包頭出現(xiàn)錯誤或非法值后,向源設(shè)備發(fā)送一個 Parameter Problem 消息。這個消息包含有問題的 IP 頭,或錯誤字段的提示信息。

472d6fdc-301f-11ee-9e74-dac502259ad0.png

重定向( Redirect ):如果路由器發(fā)現(xiàn)一條更優(yōu)的路徑發(fā)送數(shù)據(jù),那么它就會返回一個 Redirect 消息給主機。這個消息包含了最合適的路由信息和源數(shù)據(jù)。

實際情況下,這種 Redirect 消息會引發(fā)路由問題,所以不進(jìn)行這種設(shè)置。比如:路由器的路由表不準(zhǔn)確時,ICMP 有可能就無法正常工作。

4743fbee-301f-11ee-9e74-dac502259ad0.png

超時( Time Exceeded ):IP 包中有一個字段是 TTL(生存周期),它的值每經(jīng)過一次路由器就減 1 ,直到減到 0 時 IP 包會被丟棄。這時,路由器會發(fā)送一個 Time Exceeded 消息給源設(shè)備,并通知 IP 包已被丟棄。

設(shè)置 TTL 的主要目的,是當(dāng)路由發(fā)生環(huán)路時,避免 IP 包無休止的在網(wǎng)絡(luò)上轉(zhuǎn)發(fā)。還可以用 TTL 控制 IP 包的可達(dá)范圍,比如設(shè)置一個較小的 TTL 值。

475bff0a-301f-11ee-9e74-dac502259ad0.png

時間戳請求/時間戳響應(yīng)( Timestamp Request / Timestamp Reply ):時間戳可以記錄 ICMP 消息一次往返所需的時間。源設(shè)備發(fā)送一個帶有發(fā)送時間的 Timestamp Request 消息,目的設(shè)備收到后,發(fā)送一個帶有原設(shè)備發(fā)送時間、目的設(shè)備接收時間以及目的設(shè)備發(fā)送時間的 Timestamp Reply 消息。源設(shè)備收到 Timestamp Reply 時,并同時記錄到達(dá)時間。這些時間戳可以估計網(wǎng)絡(luò)上的傳輸時間。

476fddd6-301f-11ee-9e74-dac502259ad0.png

ICMP 的應(yīng)用

ICMP 被廣泛應(yīng)用于網(wǎng)絡(luò)測試,最常用的ping和tracert網(wǎng)絡(luò)測試工具,都是使用 ICMP 協(xié)議實現(xiàn)的。

ping

ping 是 ICMP 最著名的一個應(yīng)用,通過 ping 可以測試網(wǎng)絡(luò)的可達(dá)性,即網(wǎng)絡(luò)上的報文能否成功到達(dá)目的地。使用 ping 命令時,源設(shè)備向目的設(shè)備發(fā)送 Echo request 消息,目的地址是目的設(shè)備的 IP 地址。目的設(shè)備收到 Echo request 消息后,向源設(shè)備回應(yīng)一個 Echo reply 消息,可知目的設(shè)備是可達(dá)的。也可以通過 ping 命令來判斷目標(biāo)主機是否啟用。

4786602e-301f-11ee-9e74-dac502259ad0.png

如果中間某個路由器沒有到達(dá)目的網(wǎng)絡(luò)的路由,便會向源設(shè)備回應(yīng)一個 Destination Unreachable 消息,告知目的設(shè)備不可達(dá)。

479a7b4a-301f-11ee-9e74-dac502259ad0.png

如果源主機在一定時間內(nèi)無法收到回應(yīng)報文,就認(rèn)為目的設(shè)備不可達(dá),并顯示超時。

47c038f8-301f-11ee-9e74-dac502259ad0.png

需要注意的是 ping 過程是雙向的消息通信,只有雙向都成功傳輸時,才能說明通信是正常的。另外主機也可能因為防火墻攔截,導(dǎo)致 ping 不通。

tracert

ping 工具只能測試目的設(shè)備的連通性,但是看不到數(shù)據(jù)包的傳輸路徑。所以在網(wǎng)絡(luò)不通的情況下,無法知道網(wǎng)絡(luò)問題發(fā)生在哪個位置。tracert 工具可以查看數(shù)據(jù)包的整條傳輸路徑,包括途中經(jīng)過的中間設(shè)備。

47cadba0-301f-11ee-9e74-dac502259ad0.png

IP 頭部的TTL字段是為避免數(shù)據(jù)包循環(huán)轉(zhuǎn)發(fā)而設(shè)計的。每經(jīng)過一個路由器,數(shù)據(jù)包頭中的 TTL 值減 1 。如果 TTL 值為 0 則丟棄報文,并向源設(shè)備回應(yīng)一個 Time Exceeded 消息,告知錯誤類型。tracert 就是基于 TTL 字段和 ICMP 協(xié)議實現(xiàn)的。在 Windows 中命令是tracert,在 Unix 、MacOS 中命令是traceroute。

使用 tracert 命令時,源設(shè)備的 tracert逐跳發(fā)送數(shù)據(jù)包,并等待每一個響應(yīng)報文。發(fā)送第一個數(shù)據(jù)包時,TTL 值設(shè)為 1 。第一個路由器收到數(shù)據(jù)包后 TTL 值減 1 ,隨即丟棄數(shù)據(jù)包,并返回一個 Time Exceeded 消息。源設(shè)備的 tracert 收到響應(yīng)報文后,取出源 IP 地址,即路徑上的第一個路由器地址。然后 tracert 發(fā)送一個 TTL 值為 2 的數(shù)據(jù)包。第一個路由器將 TTL 值減 1 ,并轉(zhuǎn)發(fā)數(shù)據(jù)包。第二個路由器再將 TTL 值減 1 ,丟棄數(shù)據(jù)包并返回一個 Time Exceeded 消息。tracert 收到響應(yīng)報文后,取出源 IP 地址,即路徑上的第二個路由器地址。類似步驟,tracert 逐跳獲得每一個路由器的地址,并探測到目的設(shè)備的可達(dá)性。

47dd1cf2-301f-11ee-9e74-dac502259ad0.png

tracert 過程也是雙向的消息通信,只有雙向都成功傳輸時,才能正確探測路徑。另外主機安裝了防火墻,也可能造成路徑探測失敗。

網(wǎng)絡(luò)實戰(zhàn)

ping

在 Windows 電腦上使用ping命令,并查看返回信息。

48026174-301f-11ee-9e74-dac502259ad0.png

同步抓包進(jìn)行驗證。

4813fc0e-301f-11ee-9e74-dac502259ad0.png

還可以直接使用 ping 命令,查看 ping 命令的使用方法。

48478eca-301f-11ee-9e74-dac502259ad0.png

tracert

在 Windows 電腦上使用tracert命令,并查看返回信息。

48613de8-301f-11ee-9e74-dac502259ad0.png

同步抓包進(jìn)行驗證。

4871fa2a-301f-11ee-9e74-dac502259ad0.png

也可以直接使用 tracert 命令,查看 tracert 命令的使用方法。

48ed26c8-301f-11ee-9e74-dac502259ad0.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 網(wǎng)絡(luò)協(xié)議

    關(guān)注

    3

    文章

    252

    瀏覽量

    21467
  • ICMP
    +關(guān)注

    關(guān)注

    0

    文章

    51

    瀏覽量

    14870
  • Ping
    +關(guān)注

    關(guān)注

    0

    文章

    68

    瀏覽量

    15889

原文標(biāo)題:24 張圖搞定 ICMP :最常用的網(wǎng)絡(luò)命令 ping 和 tracert

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    在家里可以常用網(wǎng)絡(luò)測試命令

           在家里可以常用網(wǎng)絡(luò)測試命令先按開始-運行 然后輸入cmd進(jìn)入命令提示然后輸入以下
    發(fā)表于 06-02 18:23

    [原創(chuàng)]網(wǎng)管一定要知道----網(wǎng)絡(luò)管理中的常用命令

    網(wǎng)管一定要知道----網(wǎng)絡(luò)管理中的常用命令1.最基本,最常用的,測試物理網(wǎng)絡(luò)ping 192.168.0.8 -t ,參數(shù)-t是等待用戶
    發(fā)表于 09-07 12:09

    四個ping命令搞定網(wǎng)絡(luò)故障

    四個ping命令搞定網(wǎng)絡(luò)故障如果你的電腦不能上網(wǎng)或者突然不能上網(wǎng)了怎么辦?請專業(yè)人員來維修還是自己瞎急一通呢,下面給大家介紹如何準(zhǔn)確地判斷電腦不能上網(wǎng)問題出在哪里?又如何能快捷地解決這
    發(fā)表于 04-13 14:24

    必須學(xué)的幾個網(wǎng)絡(luò)測試命令

    必須學(xué)的幾個網(wǎng)絡(luò)測試命令ping ping是測試網(wǎng)絡(luò)聯(lián)接狀況以及信息包發(fā)送和接收狀況非常有用的工具,是網(wǎng)
    發(fā)表于 02-25 15:09

    【我是電子發(fā)燒友】常用網(wǎng)絡(luò)命令匯總

    解決 NetBIOS 名稱問題7. 使用 netstat 用于顯示與IP、 TCP、 UDP和ICMP協(xié)議相關(guān)的統(tǒng)計數(shù)據(jù),一般用于檢驗本機各端口的網(wǎng)絡(luò)連接情況。8. 使用 tracert 跟蹤
    發(fā)表于 06-15 22:48

    巧用Ping和Traceroute命令排除網(wǎng)絡(luò)故障

    在分析Ping 和Traceroute 命令工作原理和影響因素的基礎(chǔ)上,詳細(xì)介紹了使用Ping 和Traceroute 命令檢查網(wǎng)絡(luò)連接性、
    發(fā)表于 08-11 08:25 ?35次下載

    icmpping的區(qū)別

    ping 程序是用來探測主機到主機之間是否可通信,如果不能ping到某臺主機,表明不能和這臺主機建立連接。ping 使用的是ICMP協(xié)議,它發(fā)送ic
    發(fā)表于 11-03 09:41 ?6w次閱讀
    <b class='flag-5'>icmp</b>和<b class='flag-5'>ping</b>的區(qū)別

    ping命令的使用方法及功能

    ping是Windows、Unix和Linux系統(tǒng)下的一個命令ping也屬于一個通信協(xié)議,是TCP/IP協(xié)議的一部分。利用“ping命令
    發(fā)表于 11-23 15:22 ?7.2w次閱讀
    <b class='flag-5'>ping</b><b class='flag-5'>命令</b>的使用方法及功能

    ICMP協(xié)議Ping命令的應(yīng)用是什么

    Ping命令利用ICMP回射請求報文和回射應(yīng)答報文來測試目標(biāo)系統(tǒng)是否可達(dá)。ICMP回射請求和ICMP回射應(yīng)答報文是配合工作的?當(dāng)源主機向目標(biāo)
    發(fā)表于 12-08 15:22 ?7777次閱讀

    ping命令的使用大全(Windows下ping命令的使用)

    ping命令相信大家已經(jīng)再熟悉不過了,但是能把ping的功能發(fā)揮到最大的人卻并不是很多,下面就給大家講一些ping命令的運用。
    的頭像 發(fā)表于 02-24 10:29 ?1.4w次閱讀

    ping命令的作用和原理是什么?

    在測試和部署網(wǎng)絡(luò)通信應(yīng)用時,我們經(jīng)常會遇到網(wǎng)絡(luò)不通的問題。一般都會想到ping一下。那么ping命令的作用和原理到底是什么呢?
    的頭像 發(fā)表于 03-18 17:21 ?9402次閱讀

    雙絞線的兩種接法,網(wǎng)絡(luò)測試最常用PING命令

    今天和大家一起復(fù)習(xí)常用網(wǎng)絡(luò)基礎(chǔ)知識,包括雙絞線;光模塊;交換機;還有網(wǎng)絡(luò)測試最常用PING命令
    的頭像 發(fā)表于 03-21 10:39 ?1w次閱讀

    如何利用Python實現(xiàn)快速Ping一個IP網(wǎng)段地址?

    ping 命令是我們檢查網(wǎng)絡(luò)最常用命令,作為網(wǎng)絡(luò)人員,基本上每天都會用到,可以很好地幫助我們
    的頭像 發(fā)表于 06-29 15:59 ?3554次閱讀
    如何利用Python實現(xiàn)快速<b class='flag-5'>Ping</b>一個IP網(wǎng)段地址?

    你知道ping命令是如何工作的嗎?

    我們用來測試一臺機器與另一臺機器的網(wǎng)絡(luò)連通性一般會使用ping命令,那么你知道ping命令是如何工作的嗎?
    的頭像 發(fā)表于 05-31 11:40 ?943次閱讀
    你知道<b class='flag-5'>ping</b><b class='flag-5'>命令</b>是如何工作的嗎?

    Ping命令的基本用法

    當(dāng)談到網(wǎng)絡(luò)故障排除工具時,Ping(Packet Internet Groper)是其中最常用和最基本的之一。
    的頭像 發(fā)表于 10-17 13:58 ?1609次閱讀