利用WireShark分析由Ping产生的Internet 控制报文协议(ICMP)
2019獨角獸企業重金招聘Python工程師標準>>>
ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網絡通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據,但是對于用戶數據的傳遞起著重要的作用
ICMP為TCP/IP協議簇中的成員,工作在網絡層,作用是在主機和路由器之間傳遞控制信息.
上文中Ping命令完成DNS域名解析任務后,隨即利用得到的第一條主機資源記錄(A記錄)中的IP地址發送ICMP請求報文:
圖中可以看到ICMP報文格式:
Type(類型)以及Code(代碼)合起來說明ICMP報文類型.
--這里ICMP的類型是:請求(0x8)表示ping請求; 響應(0x0)表示ping響應
Checksum(校驗和)包含整個ICMP報文數據的校驗.
ID(標識符)和Seq(序列號)由發送端任意設置,響應報文返回相同的值,用于配對請求和響應.
--比如,在這個例子中,ID字段和Seq有兩種表示方式:大端和小端,在請求和響應報文中,ID值始終不變;但是每發送一次請求,Seq就被加一.
隨后的Data數據段長度不固定,ping命令的發送的Echo請求數據是32bytes的a~i字符序列,且沒有終止0,
剛好印證了為什么Ping時會顯示: "Ping xxx 具有32字節的數據:" 這里32字節的數據就是a~i字符序列.
ICMP響應報文中:
Type值是0x0,表示 ping reply,這一點顯而易見的.
ID和Seq值和請求報文中的相同.
Data也是相同的.
在接收到響應之后同時計算出報文往返的時間,這里是Response time: 47.360ms
這樣就完成了一次Ping
之后的三個Ping其實是重復上述操作,只不過Seq序號字段要自增.
今天就到這里,歡迎大家學習交流,其實我更希望得到大家的意見,謝謝點贊~
轉載于:https://my.oschina.net/ybusad/blog/291237
總結
以上是生活随笔為你收集整理的利用WireShark分析由Ping产生的Internet 控制报文协议(ICMP)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php和mysql建立链接
- 下一篇: js中,(function(){})()