《TCP/IP详解》学习笔记(四):ICMP 协议、ping 和 Traceroute
ICMP 協議介紹
前面講到了,IP 協議并不是一個可靠的協議,它不保證數據被成功送達,那么自然的,保證數據送達的工作應該由其他的模塊來完 成。其中一個重要的模塊就是 ICMP(網絡控制報文)協議。
當傳送 IP 數據包發生錯誤--比如主機不可達,路由不可達等等,ICMP 協議將會把錯誤信息封包,然后傳送回給主機。給主機 一個處理錯誤的機會,這也就是為什么說建立在 IP 層以上的協議是可以做到安全的原因。ICMP 數據包由8bit 的錯誤類型和8bit 的代碼和16bit 的校驗和組成。而前 16bit 就組成了 ICMP 所要傳遞的信息。書上的圖6-3清楚的給出了錯誤類型和代碼的組合代表的意思。
盡管在大多數情況下,錯誤的包傳送應該給出 ICMP 報文,但是在特殊情況下,是不產生 ICMP 錯誤報文的。如下:
- ?ICMP 差錯報文不會產生 ICMP 差錯報文(防止 ICMP 的無限產生和傳送)。
- 目的地址是廣播地址或多播地址的IP數據報。
- 作為鏈路層廣播的數據報。
- 不是IP分片的第一片。
- ?源地址不是單個主機的數據報。這就是說,源地址不能為零地址、環回地址、廣播地址或多播地址。 雖然里面的一些規定現在還不是很明白,但是所有的這一切規定,都是為了防止產生 ICMP 報文的無限傳播而定義的。
- ICMP 協議大致分為兩類,一種是查詢報文,一種是差錯報文。其中查詢報文有以下幾種用途:
- ping 查詢(不要告訴我你不知道 ping 程序)
- 子網掩碼查詢(用于無盤工作站在初始化自身的時候初始化子網掩碼)
- 時間戳查詢(可以用來同步時間)
而差錯報文則產生在數據傳送發生錯誤的時候。就不贅述了。
?
ICMP 的應用--ping
ping 可以說是 ICMP 的最著名的應用,當我們在某一個網站上不去的時候。通常會 ping 一下這個網站。ping 會回顯出一些有用的信息。
一般的信息如下:
?
ping 這個單詞源自聲納定位,而這個程序的作用也確實如此,它利用 ICMP 協議包來偵測另一個主機是否可達。原理是用類型碼為0的 ICMP 發送請求,受到請求的主機則用類型碼為8的 ICMP 回應。ping 程序來計算間隔時間,并計算有多少個包被送達。用戶就可 以判斷網絡大致的情況。我們可以看到,ping 給出來了傳送的時間和 TTL 的數據。我給的例子不太好,因為走的路由少,有興趣地 可以 ping 一下國外的網站比如 sf.net,就可以觀察到一些 丟包的現象,而程序運行的時間也會更加的長。
ping 還給我們一個看主機到目的主機的路由的機會。這是因為,ICMP 的 ping 請求數據報在每經過一個路由器的時候,路由器都會把 自己的 ip 放到該數據報中。而目的主機則會把這個 ip 列表復制到回應 ICMP數據包中發回給主機。但是,無論如何,ip 頭所能紀錄的路由列表是非常的有限。如果要觀察路由, 我們還是需要使用更好的工具,就是要講到的 Traceroute(windows 下面的名字叫做 tracert)。
ICMP 的應用--Traceroute程序
Traceroute 是用來偵測主機到目的主機之間所經路由情況的重要工具,也是最便利的工具。前面說到,盡管 ping 工具也可以進行偵測,但是,因為 ip 頭的限制,ping 不能完全的記錄下所經過的路由器。所以 Traceroute 正好就填補了這個缺憾。
Traceroute 的原理是非常非常的有意思,它受到目的主機的 IP 后,首先給目的主機發送一個 TTL=1(還記得 TTL 是什么嗎?)的 UDP(后面就 知道 UDP 是什么了)數據包,而經過的第一個路由器收到這個數據包以后,就自動把 TTL 減1,而 TTL 變為0以后,路由 器就把這個包給拋棄了,并同時產生 一個主機不可達的 ICMP 數據報給主機。主機收到這個數據報以后再發一個 TTL=2的 UDP 數據報給目的主機,然后刺激第二個路由器給主機發 ICMP 數據 報。如此往復直到到達目的主機。這樣,traceroute 就拿到了所有的路由器 ip。從而避開了 ip 頭只能記錄有限路由 IP 的問題。
有人要問,我怎么知道 UDP 到沒到達目的主機呢? 這就涉及一個技巧的問題,TCP 和 UDP 協議有一個端口號定義,而普通的網 絡程序只監控少數的幾個號碼較 小的端口,比如說80,比如說23,等等。而 traceroute 發送的是端口號>30000(真變態)的 UDP 報,所以到 達目的主機的時候,目的 主機只能發送一個端口不可達的 ICMP 數據報給主機。主機接到這個報告以后就知道,主機到了,所以,說 Traceroute 是一個騙子一點也不為過
Traceroute 程序里面提供了一些很有用的選項,甚至包含了 IP 選路的選項,請察看 man 文檔來了解這些,這里就不贅述了。
總結
以上是生活随笔為你收集整理的《TCP/IP详解》学习笔记(四):ICMP 协议、ping 和 Traceroute的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “马踏飞燕”玩偶凭丑萌火出圈:半月卖出近
- 下一篇: 2.Explore Your Data