介紹
ping是用來測試目的主機是否可達的一個程序測試
原理:向目的主機發送ICMP回顯請求報文,並等待返回ICMP回顯應答ui
- ping客戶端:發送回顯請求的主機
- ping服務端:被ping的主機
大部分TCP/IP實現都在內核中實現ping服務端code
ICMP回顯請求與應答
報文格式:blog
![image_1chthn8f0jl2fnfuij16b8v2n9.png-59.6kB](http://static.javashuo.com/static/loading.gif)
- 標識符:Unix採用進程id做爲標識符。用來匹配ICMP回顯請求與應答
- 序號:從0開始,每次回顯請求都會+1。用來確認是否有分組丟失、重複、亂序
局域網內ping:進程
![image_1chti1vqv17kn1dss1vom635nsj13.png-107.4kB](http://static.javashuo.com/static/loading.gif)
廣域網內ping:路由
![image_1chti2ukv5qsdhv1lfc1i6112hm1g.png-155.6kB](http://static.javashuo.com/static/loading.gif)
觀察到出現高延遲和大量分組丟失狀況原理
IP記錄路由選項
做爲IP首部中的選項字段,最長40字節。用來記錄IP報文通過了哪些主機路由器
經過ping -R
,程序就會記錄並使用IP記錄路由選項請求
當通過一個路由器,它記錄出口IP地址,當帶該選項的回顯應答回到源主機(發ping請求的主機),也會記錄該主機的入口地址。經過該功能,能夠發現實際路由過程當中會頻繁使用默認路由程序
IP記錄路由選項的報文:
![image_1chtj1b0k1h3m1tfq12f6q4037g1t.png-57.6kB](http://static.javashuo.com/static/loading.gif)
- code:IP選項類型。值7表明IP記錄路由選項
- len:選項總字節長度。值爲39
- ptr:存放下一個IP地址的位置。初始化值爲4,每當加入一個IP,值+4,當值爲40時表明已經記錄9個IP,空間已滿
經過這種方式記錄路由過程的問題:
- 不是全部主機都支持該選項。如今大部分系統都支持
- 記錄的IP有限。因爲只有40字節來記錄,除開記錄元信息的,最多隻能記錄9個IP
IP記錄時間戳選項
做爲IP首部中的選項字段,最長40字節。
IP記錄時間戳選項的報文:
![image_1chtjp8veson23q80m1ju8hph2a.png-53.3kB](http://static.javashuo.com/static/loading.gif)
- code:IP選項類型:值0x44表明IP記錄時間戳選項
- len:選項總字節長度。值爲36或40
- ptr:存放下一個時間戳的位置
- OF:4位溢出字段。當路由器沒有空間追加時間戳時,就增長溢出字段的值
- FL:4位標誌字段。不一樣標誌描述了時間戳部分該記錄哪些東西
可用FL:
![image_1chtk38d823v15qv1p8b6l10rt2n.png-128.4kB](http://static.javashuo.com/static/loading.gif)
該方案的問題是:
- 一般標誌3纔有意義。標誌0功能太弱,標誌1會致使只能放4條記錄,而且可能都不是本身關心的
- 標誌3中指定了主機,但這些主機的時間戳可能並不許確