ICMP 協(xié)議介紹
IP 協(xié)議并不是一個(gè)可靠的協(xié)議,它不保證數(shù)據(jù)被送達(dá),那么保證數(shù)據(jù)送達(dá)的工作應(yīng)該由其他的模塊來完成。其中一個(gè)重要的模塊就是 ICMP(網(wǎng)絡(luò)控制報(bào)文)協(xié)議。
當(dāng)傳送 IP 數(shù)據(jù)包發(fā)生錯(cuò)誤,比如主機(jī)不可達(dá),路由不可達(dá)等等,ICMP 協(xié)議將會(huì)把錯(cuò)誤信息封包,然后傳送回給主機(jī)。給主機(jī)一個(gè)處理錯(cuò)誤的機(jī)會(huì),這 也就是為什么說建立在 IP 層以上的協(xié)議是可能做到安全的原因。
ICMP即互聯(lián)網(wǎng)控制消息協(xié)議(Internal Control Message Protocol),與IP協(xié)議一樣同屬TCP/IP模型中的網(wǎng)絡(luò)層,并且ICMP數(shù)據(jù)包是包裹在IP數(shù)據(jù)包中的。
他的作用是報(bào)告一些網(wǎng)絡(luò)傳輸過程中的錯(cuò)誤與做一些同步工作。
ICMP數(shù)據(jù)包有許多類型。每一個(gè)數(shù)據(jù)包只有前4個(gè)字節(jié)是相同域的,剩余的字段有不同的數(shù)據(jù)包類型的不同而不同。ICMP數(shù)據(jù)包的格式如下:
- 類型字段:指明該數(shù)據(jù)包屬于什么類型(大分類),長度1個(gè)字節(jié)。
- 代碼字段:指明數(shù)據(jù)包屬于大類里面的哪個(gè)小類,長度1個(gè)字節(jié)。類型字段與代碼字段共同決定ICMP數(shù)據(jù)包類型,以及后續(xù)字段含義。
- 校驗(yàn)和 : 指明該數(shù)據(jù)包的校驗(yàn)和,長度2個(gè)字節(jié)。該校驗(yàn)和覆蓋整個(gè)ICMP數(shù)據(jù)包。
常見的ICMP數(shù)據(jù)包:
- ICMP端口不可達(dá)差錯(cuò)
- ICMP地址請(qǐng)求與應(yīng)答。
其中第1種為ICMP差錯(cuò)數(shù)據(jù)包;第2種是ICMP查詢數(shù)據(jù)包。
ping 命令
示例:
ping ms.com
Pinging ms.com [10.195.48.99] with 32 bytes of data:
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Reply from 10.195.48.99: bytes=32 time=251ms TTL=41
Ping statistics for 10.195.48.99:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 251ms, Maximum = 251ms, Average = 251ms
TTL是 Time To Live的縮寫,該字段指定IP包被路由器丟棄之前允許通過的最大網(wǎng)段數(shù)量。
ping命令是用來查看網(wǎng)絡(luò)上另一個(gè)主機(jī)系統(tǒng)的網(wǎng)絡(luò)連接是否正常的一個(gè)工具。
Ping命令只使用眾多ICMP報(bào)文中的兩種:"請(qǐng)求回送'(ICMP_ECHO)和"請(qǐng)求回應(yīng)'(ICMP_ECHOREPLY)。
ping命令的工作原理是:用類型碼為8(請(qǐng)求回顯)的 ICMP 發(fā)請(qǐng)求,收到請(qǐng)求的主機(jī)則用類型碼為0(回顯應(yīng)答)的 ICMP 回應(yīng)。ping 程序來計(jì)算間隔時(shí)間,并計(jì)算有多少個(gè)包被送達(dá)。用戶就可以判斷網(wǎng)絡(luò)大致的情況。
ICMP協(xié)議規(guī)定:目的主機(jī)必須返回ICMP回送應(yīng)答消息給源主機(jī)。如果源主機(jī)在一定時(shí)間內(nèi)收到應(yīng)答,則認(rèn)為主機(jī)可達(dá)。
ping還給我們一個(gè)看主機(jī)到目的主機(jī)的路由的機(jī)會(huì)。這是因?yàn)?ICMP 的 ping 請(qǐng)求數(shù)據(jù)報(bào)在每經(jīng)過一個(gè)路由器的時(shí)候,路由器都會(huì)把 自己的 IP 地址放到該數(shù)據(jù)報(bào)中。而目的主機(jī)則會(huì)把這個(gè) IP 地址列表復(fù)制到回應(yīng) ICMP 數(shù)據(jù)包中發(fā)回給主機(jī)。
Ping工作過程:
假定主機(jī)A的IP地址是192.168.1.1,主機(jī)B的IP地址是192.168.1.2,都在同一子網(wǎng)內(nèi)。
首先,Ping命令會(huì)構(gòu)建一個(gè)固定格式的ICMP請(qǐng)求數(shù)據(jù)包,然后由ICMP協(xié)議將這個(gè)數(shù)據(jù)包連同地址“192.168.1.2”一起交給IP層協(xié)議,IP層協(xié)議將以地址“192.168.1.2”作為目的地址,本機(jī)IP地址作為源地址,加上一些其他的控制信息,構(gòu)建一個(gè)IP數(shù)據(jù)包,并在一個(gè)映射表中查找出IP地址192.168.1.2所對(duì)應(yīng)的物理地址(也叫MAC地址),一并交給數(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ò)層(OSI的第三層)地址解析為數(shù)據(jù)連接層(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一模一樣。
引用:
(005)TCP/IP協(xié)議-ICMP協(xié)議
ping實(shí)現(xiàn)原理
ping 原理與ICMP協(xié)議