成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

網(wǎng)絡(luò)協(xié)議 5 - ICMP 與 ping

freewolf / 2942人閱讀

摘要:協(xié)議全稱,指互聯(lián)網(wǎng)控制報(bào)文協(xié)議。對(duì)的主動(dòng)請(qǐng)求,進(jìn)行網(wǎng)絡(luò)抓包,稱為。小兵報(bào)告,大帥,送給張將軍的糧草沒有送到。接收后檢查數(shù)據(jù)幀,將數(shù)據(jù)包從幀中提取處理,交給本機(jī)的層。檢查完成后,提取有用的信息交給協(xié)議。

????日常開發(fā)中,我們經(jīng)常會(huì)碰到查詢網(wǎng)絡(luò)是否暢通以及域名對(duì)應(yīng) IP 地址等小需求,這時(shí)候用的最多的應(yīng)該就是 ping 命令了。 那你知道 ping 命令是怎么工作的嗎?今天,我們就來一起認(rèn)識(shí)下 ping 命令及其對(duì)應(yīng)的 ICMP 協(xié)議。

ICMP 協(xié)議

????ICMP 全稱 Internet Control Message Protocol,指互聯(lián)網(wǎng)控制報(bào)文協(xié)議。

????網(wǎng)絡(luò)本身是不可靠的,數(shù)據(jù)包在傳輸過程中,可能會(huì)發(fā)生很多突發(fā)事件并導(dǎo)致數(shù)據(jù)傳輸失敗。而網(wǎng)絡(luò)層的 IP 協(xié)議是一個(gè)無連接的協(xié)議,它不會(huì)處理網(wǎng)絡(luò)層的故障,因此,我們需要其它的協(xié)議,在數(shù)據(jù)包傳輸出現(xiàn)故障時(shí),能將故障信息傳回來,這樣才能對(duì)應(yīng)處理相關(guān)問題。

????就像在電視劇里看到的古代戰(zhàn)爭(zhēng)一樣,打仗的時(shí)候需要通過斥候來傳遞戰(zhàn)局情況,進(jìn)而更好的控制戰(zhàn)局。而 ICMP 報(bào)文在網(wǎng)絡(luò)世界中就充當(dāng)“斥候”這樣的角色。

????ICMP 報(bào)文是封裝在 IP 包里面的。因?yàn)閭鬏斨噶畹臅r(shí)候,肯定需要源地址和目標(biāo)地址。它本身格式非常簡(jiǎn)單,如下圖:

????ICMP 報(bào)文有很多的類型,不同的類型有不同的代碼,最常用的類型是主動(dòng)請(qǐng)求,代碼為 8,主動(dòng)請(qǐng)求的應(yīng)答,代碼為 0。從大的方面看可以分為 查詢報(bào)文類型差錯(cuò)報(bào)文類型。

查詢報(bào)文類型

????我們經(jīng)常在電視劇里聽到這樣的話:來人,前方戰(zhàn)事如何?斥候回來沒?一有情況,立刻通報(bào)。

????類似這種主帥發(fā)起,主動(dòng)查看敵情的情況,就對(duì)應(yīng)著 ICMP的查詢報(bào)文類型。例如,常見的 ping 命令就是查詢報(bào)文,是一種主動(dòng)請(qǐng)求,并且獲得主動(dòng)應(yīng)答的 ICMP 協(xié)議。因此,ping 命令發(fā)出的包也是符合 ICMP 協(xié)議格式的,只不過它在后面增加了自己的格式。

????對(duì) ping 的主動(dòng)請(qǐng)求,進(jìn)行網(wǎng)絡(luò)抓包,稱為 ICMP ECHO REQUEST。同理,主動(dòng)請(qǐng)求的回復(fù),稱為ICMP ECHO REPLY。比起原生的 ICMP,這里面多了兩個(gè)字段,一個(gè)是標(biāo)識(shí)符,另一個(gè)是序號(hào)。這不難理解,大帥派出去兩隊(duì)斥候,一隊(duì)是找誰要的,一隊(duì)是偵查戰(zhàn)況的,要有個(gè)標(biāo)識(shí)才能區(qū)分。

????另一方面,派出去的斥候,都要編個(gè)號(hào)。如果派出去 10 個(gè),回來 10 個(gè),就說明前方戰(zhàn)況不錯(cuò)。如果派出去 10 個(gè),回來 2 個(gè),就說明情況可能不妙。

????在選項(xiàng)數(shù)據(jù)中,ping 還會(huì)存放發(fā)送請(qǐng)求的時(shí)間值,來計(jì)算往返時(shí)間,說明路程的長(zhǎng)短。

差錯(cuò)報(bào)文類型

????差錯(cuò)報(bào)文主要是用來將發(fā)送的出錯(cuò)報(bào)文相關(guān)信息返回到源設(shè)備,以供源設(shè)備確定如果更好的重發(fā)失敗的數(shù)據(jù)包

????還是拿我們的“大帥”舉例。

????當(dāng)主帥正在大帳中看地圖,思考戰(zhàn)事時(shí),外面的小兵突然喊到:大帥,不好啦,張將軍遭遇埋伏,全軍覆沒了。

????這種是異常情況發(fā)起的,來報(bào)告發(fā)生了不好的事情,對(duì)應(yīng) ICMP 的差錯(cuò)報(bào)文。

????差錯(cuò)報(bào)文有以下常用的類型:

3:終點(diǎn)不可達(dá)

4:源抑制

5:重定向

11:超時(shí)

????第一種情況終點(diǎn)不可達(dá)。小兵報(bào)告,大帥,送給張將軍的糧草沒有送到。

????那大帥肯定會(huì)問,為啥沒有送到?這就對(duì)應(yīng) ICMP 中的以下代碼了。

網(wǎng)絡(luò)不可達(dá)代碼:0

主機(jī)不可達(dá)代碼:1

協(xié)議不可達(dá):2

端口不可達(dá):3

需要進(jìn)行分片但設(shè)置了不分片:4

????具體的場(chǎng)景就像這樣:

網(wǎng)絡(luò)不可達(dá):大帥,找不到地方

主機(jī)不可達(dá):大帥,找到地方,沒找到張將軍

協(xié)議不可達(dá):大帥,找到地方,也找到人了,但是口令沒對(duì)上。

端口不可達(dá):大帥,找到地方,找到了人,也對(duì)上了口令,但事情沒對(duì)上。我去送糧草,人家說在等救兵。

需要進(jìn)行分片但設(shè)置不分片:大帥,走到一半,山路狹窄,想換瞎扯,但是出發(fā)前你下令嚴(yán)禁換小車,就沒辦法送到了。

????第二種是源站抑制。也就是讓源站放慢發(fā)送速度(小兵:大帥,糧草送的太多了吃不完,你可以慢點(diǎn)送)。

????第三種是時(shí)間超時(shí)。也就是超過網(wǎng)絡(luò)包的生存時(shí)間還是沒到目的地(大帥,送糧草的人都把糧食吃完了,還沒到地方,已經(jīng)餓死了)。

????第四種是路由重定向。也就是下次發(fā)給另一個(gè)路由器(大帥,上次送糧草的人本來只要走大王村,一公里就到了,結(jié)果非要繞道張家界,多了五公里,下次記得走大王村)。

????差錯(cuò)報(bào)文的結(jié)構(gòu)相對(duì)復(fù)雜一些。除了前面還是 IP,ICMP 的前 8 個(gè)字節(jié)不變,后面則跟上出錯(cuò)的那個(gè) IP 包的 IP 頭和 IP 正文的前 8 個(gè)字節(jié)。

????而且這類斥候特別盡責(zé),不但字節(jié)返回來報(bào)信,還把一部分遺物帶回來。

斥候:大帥,張將軍已經(jīng)戰(zhàn)死沙場(chǎng),這是他的印信和佩劍。

大帥:張將軍是怎么死的(可以查看 ICMP 的前 8 字節(jié))?沒錯(cuò),這是張將軍的劍(IP 數(shù)據(jù)包的頭及正文前 8 字節(jié))。

ping:查詢報(bào)文類型的使用

????接下來,我們重點(diǎn)來看 ping 命令的發(fā)送和接收過程。

????假定主機(jī) A 的 IP 地址是 192.168.1.1,主機(jī) B 的 IP 地址是 192.168.1.2,它們都在同一個(gè)子網(wǎng)。那么,當(dāng)在主機(jī) A 上運(yùn)行“ping 192.168.1.2” 后,會(huì)發(fā)生什么呢?

源主機(jī)構(gòu)建 ICMP 請(qǐng)求數(shù)據(jù)包。這個(gè)數(shù)據(jù)包內(nèi)包含多個(gè)字段。最重要的有兩個(gè),一個(gè)是類型字段,對(duì)應(yīng)請(qǐng)求數(shù)據(jù)包而言,該字段為 8。另一個(gè)是順序號(hào),主要用于區(qū)分連續(xù) ping 的時(shí)候發(fā)出的多個(gè)數(shù)據(jù)包。每發(fā)出一個(gè)請(qǐng)求數(shù)據(jù)包,順序號(hào)會(huì)自動(dòng)加 1.為了能夠計(jì)算往返時(shí)間 RTT,它會(huì)在報(bào)文的數(shù)據(jù)部分插入發(fā)送時(shí)間。

IP 層構(gòu)建 IP 數(shù)據(jù)包。ICMP 協(xié)議將數(shù)據(jù)包連同目標(biāo) IP 一起交給 IP 層,IP 層將以 192.168.1.2 作為目的地址,本機(jī) IP 地址作為源地址,加上其他控制信息,構(gòu)建一個(gè) IP 數(shù)據(jù)包。

加入 MAC 頭。找到 192.168.1.2 對(duì)應(yīng)的 MAC 地址,附加上一些控制信息,依據(jù)以太網(wǎng)的介質(zhì)訪問規(guī)則,將它們傳送出去。

????主機(jī) B 收到數(shù)據(jù)幀后,會(huì)進(jìn)行如下步驟:

檢查 MAC 地址,丟棄或接收數(shù)據(jù)幀,提取 IP 數(shù)據(jù)包。檢查數(shù)據(jù)包目的 MAC 地址,并與本機(jī) MAC 地址對(duì)比。如符合,就接收數(shù)據(jù)幀,否則就丟棄。接收后檢查數(shù)據(jù)幀,將 IP 數(shù)據(jù)包從幀中提取處理,交給本機(jī)的 IP 層。

IP 層檢查IP。檢查完成后,提取有用的信息交給 ICMP 協(xié)議。

構(gòu)建 ICMP 應(yīng)答包。應(yīng)答數(shù)據(jù)包的類型字段為 0,順序號(hào)為接收到的請(qǐng)求數(shù)據(jù)包中的順序號(hào)。

將應(yīng)答數(shù)據(jù)包發(fā)給主機(jī) A。

????在規(guī)定的時(shí)間內(nèi),源主機(jī)如果沒有接到 ICMP 的應(yīng)答包,則說明目標(biāo)主機(jī)不可達(dá)。

????如果接收到了應(yīng)打包,則說明目標(biāo)主機(jī)可達(dá)。此時(shí),源主機(jī)會(huì)檢測(cè)時(shí)間延遲。就是用當(dāng)前時(shí)刻減該數(shù)據(jù)包從源主機(jī)發(fā)出去的時(shí)刻。

????當(dāng)然,這只是最簡(jiǎn)單的,同個(gè)局域網(wǎng)的情況。如果跨網(wǎng)段的話,還會(huì)涉及網(wǎng)關(guān)的轉(zhuǎn)發(fā)、路由器的轉(zhuǎn)發(fā)等。

????可以看出,ping 命令是使用了 ICMP 里面的 ECHO REQUEST 和 ECHO REPLY 類型。

????那其它類型呢?是不是只有真正遇到錯(cuò)誤的時(shí)候,才能收到?答案是否定的。有一個(gè) Traceroute 命令,它會(huì)使用 ICMP 的規(guī)則,故意制造一些能夠產(chǎn)生錯(cuò)誤的場(chǎng)景。

Traceroute:差錯(cuò)報(bào)文類型的使用

????Traceroute 命令有兩個(gè)比較常用的功能。

????第一個(gè)功能:

????通過設(shè)置特殊的 TTL,追蹤去往目的地時(shí)經(jīng)過的路由器

????Traceroute 的參數(shù)執(zhí)行某個(gè)目的 IP 地址,會(huì)發(fā)送一個(gè) UDP 的數(shù)據(jù)包。

????將 TTL 設(shè)置成 1 時(shí),表示這個(gè)數(shù)據(jù)包的 MP 為 1,碰到第一個(gè)“攔路虎”(通常是路由器或一個(gè)其它類型的關(guān)卡)就會(huì)陣亡了,然后就會(huì)返回一個(gè) ICMP 包,這個(gè)包就是 網(wǎng)絡(luò)差錯(cuò)包,類型是時(shí)間超時(shí)。

????通過差錯(cuò)包,我們就能得到數(shù)據(jù)包到第一個(gè)關(guān)卡時(shí)花費(fèi)的時(shí)間及其每個(gè)關(guān)卡的 IP 地址(有的主機(jī)不會(huì)響應(yīng) ICMP,所以會(huì)出現(xiàn)請(qǐng)求時(shí)全是 * 的情況)。

????那怎么知道 UDP 有沒有到達(dá)目的主機(jī)呢?Traceroute 程序會(huì)發(fā)送一份 UDP 數(shù)據(jù)包給目的主機(jī),但它會(huì)選擇一個(gè)不可能的值作為 UDP 端口號(hào)(大于30000)。當(dāng)該數(shù)據(jù)報(bào)到達(dá)目的主機(jī)時(shí),由于找不到對(duì)應(yīng)端口號(hào),所以會(huì)返回一個(gè)“端口不可達(dá)”的錯(cuò)誤報(bào)文。這樣,我們就知道 UDP 是否到達(dá)主機(jī)了。

????第二個(gè)功能:

????設(shè)置數(shù)據(jù)包不分片,確定路徑的 MTU

????發(fā)送分組,并設(shè)置“不分片”標(biāo)志。發(fā)送的第一個(gè)分組的長(zhǎng)度正好與出口的 MTU 相等。如果中間遇到窄的關(guān)卡就會(huì)被卡主,返回 ICMP 網(wǎng)絡(luò)差錯(cuò)包,類型是“需要進(jìn)行分片但設(shè)置了不分片”。就這樣,每次收到ICMP“不能分片”差錯(cuò)時(shí)就減小分組的長(zhǎng)度,從而確定整個(gè)路徑中的 MTU。

總結(jié)

ICMP 相當(dāng)于網(wǎng)絡(luò)世界的偵察兵。常用的有兩種類型,主動(dòng)探查的查詢報(bào)文和異常報(bào)告的差錯(cuò)報(bào)文。

ping 命令使用查詢報(bào)文,Traceroute 命令使用差錯(cuò)報(bào)文。

參考:

劉超-趣談網(wǎng)絡(luò)協(xié)議系列課;

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29650.html

相關(guān)文章

  • 網(wǎng)絡(luò)協(xié)議 5 - ICMP ping

    摘要:協(xié)議全稱,指互聯(lián)網(wǎng)控制報(bào)文協(xié)議。對(duì)的主動(dòng)請(qǐng)求,進(jìn)行網(wǎng)絡(luò)抓包,稱為。小兵報(bào)告,大帥,送給張將軍的糧草沒有送到。接收后檢查數(shù)據(jù)幀,將數(shù)據(jù)包從幀中提取處理,交給本機(jī)的層。檢查完成后,提取有用的信息交給協(xié)議。 ????日常開發(fā)中,我們經(jīng)常會(huì)碰到查詢網(wǎng)絡(luò)是否暢通以及域名對(duì)應(yīng) IP 地址等小需求,這時(shí)候用的最多的應(yīng)該就是 ping 命令了。 那你知道 ping 命令是怎么工作的嗎?今天,我們就來一...

    CoffeX 評(píng)論0 收藏0
  • Python 實(shí)現(xiàn)簡(jiǎn)單網(wǎng)絡(luò)應(yīng)用程序開發(fā)

    摘要:函數(shù)實(shí)現(xiàn)基于上述原理,首先,需要?jiǎng)?chuàng)建一個(gè)與協(xié)議關(guān)聯(lián)的套接字,并設(shè)置超時(shí)以控制用于接收數(shù)據(jù)包的時(shí)間套接字。創(chuàng)建套接字后,需要實(shí)現(xiàn)一個(gè)函數(shù)來構(gòu)建,打包并將數(shù)據(jù)包發(fā)送到目標(biāo)主機(jī)。套接字將一直等待,直到收到數(shù)據(jù)包或達(dá)到超時(shí)限制。 最后一次更新于 2019/07/10 ICMP Ping 目的 此任務(wù)是重新創(chuàng)建第3講(延遲,丟失和吞吐量)中討論的ping客戶端。Ping 是一個(gè)用于在計(jì)算機(jī)網(wǎng)絡(luò)中...

    kviccn 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<