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