ping 程序是用來探測主機(jī)到主機(jī)之間是否可通信,如果不能ping到某臺(tái)主機(jī),表明不能和這臺(tái)主機(jī)建立連接。ping 使用的是ICMP協(xié)議,它發(fā)送icmp回送請(qǐng)求消息給目的主機(jī)。ICMP協(xié)議規(guī)定:目的主機(jī)必須返回ICMP回送應(yīng)答消息給源主機(jī)。如果源主機(jī)在一定時(shí)間內(nèi)收到應(yīng)答,則認(rèn)為主機(jī)可達(dá)。
ICMP協(xié)議通過IP協(xié)議發(fā)送的,IP協(xié)議是一種無連接的,不可靠的數(shù)據(jù)包協(xié)議。在Unix/Linux,序列號(hào)從0開始計(jì)數(shù),依次遞增。而Windows ping程序的ICMP序列號(hào)是沒有規(guī)律。
ICMP協(xié)議在實(shí)際傳輸中數(shù)據(jù)包:20字節(jié)IP首部 + 8字節(jié)ICMP首部+ 1472字節(jié)《數(shù)據(jù)大小》38字節(jié)
ICMP報(bào)文格式:IP首部(20字節(jié))+8位類型+8位代碼+16位校驗(yàn)和+(不同的類型和代碼,格式也有所不同)
首先icmp和arp是沒有關(guān)系的!icmp承載于網(wǎng)絡(luò)層他的協(xié)議號(hào)好像是1,其中有8種類型比如host不可達(dá)、超時(shí)等這是用來測試網(wǎng)絡(luò)連通性的一種控制信息協(xié)議。ARP是以太網(wǎng)技術(shù)中最重要的一種協(xié)議地址解析協(xié)議,它承載于osi第二層類型號(hào)好像是806,因?yàn)橐蕴W(wǎng)是多路訪問的一種,所以為了解析其以太網(wǎng)物理MAC地址必須要用ARP協(xié)議,這種協(xié)議發(fā)送的request包中目標(biāo)MAC地址為全1廣播地址,reply包以自己的mac和IP地址為源,目標(biāo)地址以目標(biāo)主機(jī)MAC和IP地址為目標(biāo)封裝成幀后發(fā)送出去!雖然說它是鏈路層協(xié)議,但是他有網(wǎng)絡(luò)層的概念I(lǐng)P地址,我抓包看到過ARP協(xié)議中有協(xié)議類型800這是IP協(xié)議的類型,因?yàn)樗肐P地址來解析MAC地址,所以每個(gè)網(wǎng)絡(luò)層以上的設(shè)備都會(huì)有基于ARP的緩存,路由交換設(shè)備中的命令是show arp !windows中的命令是arp -a,
有了這種緩存大大提高了互聯(lián)網(wǎng)訪問速度!好了說了這么多可能樓主認(rèn)為我說的是廢話!那么我就開始所問所答了!
第一,ping命令是ICMP的一種形式,它屬于ICMP,當(dāng)然tracert也屬于ICMP!ICMP與ARP沒有任何關(guān)系,一個(gè)是網(wǎng)絡(luò)層協(xié)議,一個(gè)是數(shù)據(jù)鏈路層協(xié)議!在功能方面上也沒有什么交集的地方,唯一共同點(diǎn)就是都涉及IP地址。
第二,我不會(huì)寫什么UBOOT代碼,但是既然承載在internet上那么他就應(yīng)該遵循網(wǎng)絡(luò)體系結(jié)構(gòu)為了讓網(wǎng)絡(luò)統(tǒng)一化,IEEE和國際標(biāo)準(zhǔn)化組織iso統(tǒng)一定義了接入層及上層協(xié)議標(biāo)準(zhǔn)!當(dāng)你ping時(shí)會(huì)發(fā)送ARP幀是因?yàn)槟阍谝蕴W(wǎng)的環(huán)境中,為什么會(huì)發(fā)送ARP是因?yàn)樵谟?jì)算機(jī)剛剛啟動(dòng)的時(shí)候是沒有對(duì)方主機(jī)的通信地址的!
ping是為了測試與對(duì)方主機(jī)的連通性,所以需要知道對(duì)方主機(jī)的地址雖然你知道了目的的IP地址,但還需要其MAC地址,所以在ping之前就會(huì)發(fā)送ARP幀,主機(jī)中ARP默認(rèn)緩存老化時(shí)間應(yīng)該是10分鐘。也就是說,自ARP解析10分鐘后ARP緩存條目會(huì)自動(dòng)清除。
第三,arp幀發(fā)送和恢復(fù)確實(shí)不一樣!一個(gè)用廣播一個(gè)是單播
Ping工作過程——假定主機(jī)A的IP地址是192.168.1.1,主機(jī)B的IP地址是192.168.1.2,都在同一子網(wǎng)內(nèi),則當(dāng)你在主機(jī)A上運(yùn)行“Ping 192.168.1.2”后,都發(fā)生了些什么呢?
首先,Ping命令會(huì)構(gòu)建一個(gè)固定格式的ICMP請(qǐng)求數(shù)據(jù)包,然后由ICMP協(xié)議將這個(gè)數(shù)據(jù)包連同地址“192.168.1.2”一起交給IP層協(xié)議(和ICMP一樣,實(shí)際上是一組后臺(tái)運(yùn)行的進(jìn)程),IP層協(xié)議將以地址“192.168.1.2”作為目的地址,本機(jī)IP地址作為源地址,加上一些其他的控制信息,構(gòu)建一個(gè)IP數(shù)據(jù)包,并在一個(gè)映射表中查找出IP地址192.168.1.2所對(duì)應(yīng)的物理地址(也叫MAC地址,熟悉網(wǎng)卡配置的朋友不會(huì)陌生,這是數(shù)據(jù)鏈路層協(xié)議構(gòu)建數(shù)據(jù)鏈路層的傳輸單元——幀所必需的),一并交給數(shù)據(jù)鏈路層。后者構(gòu)建一個(gè)數(shù)據(jù)幀,目的地址是IP層傳過來的物理地址,源地址則是本機(jī)的物理地址,還要附加上一些控制信息,依據(jù)以太網(wǎng)的介質(zhì)訪問規(guī)則,將它們傳送出去。
其中映射表由ARP實(shí)現(xiàn)。ARP(Address ResoluTIon Protocol)是地址解析協(xié)議,是一種將IP地址轉(zhuǎn)化成物理地址的協(xié)議。ARP具體說來就是將網(wǎng)絡(luò)層(IP層,也就是相當(dāng)于OSI的第三層)地址解析為數(shù)據(jù)連接層(MAC層,也就是相當(dāng)于OSI的第二層)的MAC地址。
主機(jī)B收到這個(gè)數(shù)據(jù)幀后,先檢查它的目的地址,并和本機(jī)的物理地址對(duì)比,如符合,則接收;否則丟棄。接收后檢查該數(shù)據(jù)幀,將IP數(shù)據(jù)包從幀中提取出來,交給本機(jī)的IP層協(xié)議。同樣,IP層檢查后,將有用的信息提取后交給ICMP協(xié)議,后者處理后,馬上構(gòu)建一個(gè)ICMP應(yīng)答包,發(fā)送給主機(jī)A,其過程和主機(jī)A發(fā)送ICMP請(qǐng)求包到主機(jī)B一模一樣。
即先由IP地址,在網(wǎng)絡(luò)層傳輸,然后再根據(jù)mac地址由數(shù)據(jù)鏈路層傳送到目的主機(jī)