關於Ping和Tracert命令原理詳解

2022-05-07 02:06:06 字數 2777 閱讀 9642

本文只是總結了兩個常用的網路命令的實現原理和一點使用經驗說明。這些東西通常都分布在各種書籍或者文章中的,我勤快那麼一點點,總結一下,再加上我的一點理解和使用經驗,方便大家了解。這些也是很基礎的東西,沒什麼高深的。  

ping  

這個應該大家都會用的吧,最主要的就是檢測目標主機是不是可連通。ping程式實際就是傳送乙個icmp回顯請求報文(就是請求別人收到這個報文之後回顯)給目的主機,並等待回顯的icmp應答。然後列印出回顯的報文。ping不通乙個位址,並不一定表示這個ip不存在或者沒有連線在網路上,因為對方主機可能做了限制,比如安裝了防火牆,因此ping不通並不表示不能使用ftp或者telnet連線。  c:\documents and settings\snoopy> ping 202.103.176.22 /t pinging

202.103.176.22 with 32 bytes of data: reply from 202.103.176.22: bytes=32 time=6ms ttl=58 reply from 202.103.176.22: bytes=32 time=6ms ttl=58 

ping得到的結果包括位元組數、反應時間、以及生存時間。ping程式通過在icmp報文資料中存放傳送請求的時間來計算返回時間。當應答返回時,根據現在時間減去報文中存放的傳送時間就得到反應時間了。生存時間(ttl),本來就存放在ip資料報的頭部,直接就能夠獲取。在返回的報文顯示的ttl值表示從目標主機到源主機剩下的跳數。    tracert  

首先,要知道乙個路由器的原理:當路由器接收到乙個ttl為1的ip資料報的時候,路由器就不再**這個資料了,而直接丟棄,並且傳送乙個icmp「超時」資訊給源主機,這個資訊會帶上自己的介面位址。(當路由器接收到ttl=1的資料報時,它會將

ttl值減1,這時ttl值減為0,路由器將會丟棄該報文並向源點傳送錯誤資訊。這個方法可以防止報文在網際網路上無休止的傳輸,所以網路中根本就不會有ttl=0的報文) 

乙個探測路由的程式,可以讓我們看見ip資料報到達目的地經過的路由。  tracert利用icmp資料報和ip資料報頭部中的ttl值來實現。ttl(time to live)是乙個ip資料報的生存時間,當每個ip資料報經過路由器的時候都回把ttl值減去1或者減去在路由器中停留的時間,但是大多數資料報在路由器中停留的時間都小於1秒種,因此實際上就是在ttl值減去了1。這樣,ttl值就相當於乙個路由器的計數器。  當路由器接收到乙個ttl為1的ip資料報的時候,路由器就不再**這個資料了,而直接丟棄,並且傳送乙個icmp「超時」資訊給源主機。tracert程式的關鍵就是這個回顯的icmp報文的ip報頭的信源位址就是這個路由器的ip位址。同時,如果到達了目的主機,我們並不能知道,於是,tracert還同時傳送乙個udp資訊給目的主機,並且選擇乙個很大的值作為udp的埠,使主機的任何乙個應用程式都不使用這個埠。所以,當達到目的主機的時候,目標主機的udp模組(別的主機的不會做出反應)就產生乙個「埠不可到達」的錯誤,這樣就能判斷是否是到達目的地了。

有說法是利用ping得到的ttl值來判斷主機型別,這種辦法可以大概地用來判斷,有人問為什麼一般得到的都不是標準的ttl值。這個就是因為icmp資料報走的路由器線路的原因,所以,用ping 和 tracert 一起來用更容易判斷主機型別(不過並不一定兩次走的路線都一樣,所以,還是個大概值,不過更接近點,而且主機的預設ttl值是可以改變的)。  

tracert命令檢視某個位址,得到的時間有3個如下         比如:   26ms     10ms     10ms. 

表示傳送的三個探測包的回應時間;一般在網路情況平均的情況下,三個時間差不多;如果相差比較大,說明網路情況變化比較大. 

也就是說,tracert每次返回的時間都是從出發點到目的路由器的所花費的時間,因為中間是包的**,所以花費的時間很少,而且有些路由器負荷比較大,響應時間比較長,也就有可能出現前面的路由器返回的時間比後面一跳路由器返回的時間還要長的情況。 

ping和tracert的原理:  

1、ping命令主要作用是測試2臺裝置網路層之間是否。  

其工作原理:假設a路由器ping b路由器,a路由器會先發乙個icmp echo報文(type=8,code=0),如果2臺裝置  之間路由是可達的,b收到後會回乙個icmp reply的報文(type=0,code=0)。ping命令也可以顯示經過的跳數,  

這樣也可以通過ping命令檢視我經過了哪幾跳,每一跳的ip位址,命令引數是-r。但不是所有的路由器均支援該  

命令,並且ip首部中留給選項的空間有限,不能存放太多的路徑,一般最多就只能存放9個ip位址。  

2、tracert命令主要作用和ping -r的作用一樣,是測試2臺裝置之間經過的跳數和每一跳的ip位址。其工作原  理分2種情況說明:  

1)假設a是一台pc機,由a來tracert b,a首先會傳送乙個icmp echo的報文(type=8,code=0), 並且該報  文的ttl=1,第乙個路由器收到後會丟棄該報文不**,並返回乙個icmp超時的報文(type=11,code=0),然後  

a會在傳送乙個icmp echo的報文,這時ttl=2,下乙個路由器收到後又回乙個icmp超時報文。當報文到達b後,b會  

回給a乙個icmp埠不可達的報文(type=3,code=3)。  

2)假設a是一台路由器,由a來tracert b,a首先會傳送乙個udp報文,並且udp的埠號大於30000以保證這個  

埠號在b上未被占用,該報文的ttl=1,第乙個路由器收到後會丟棄該報文不**,並返回乙個icmp超時的報文  

(type=11,code=0),然後a會在傳送乙個udp的報文,這時ttl=2,下乙個路由器收到後又回乙個icmp超時報文。  

當報文到達b後,b會回給a乙個icmp埠不可達的報文(type=3,code=3)

關於tracert與traceroute的區別

linxu上tracert和traceroute雖然都是路由跟蹤,但是兩者探測方法及探測的資料型別不同。預設情況下,traceroute是向目的位址的某個埠 大於30000 傳送udp資料報,tracert是向目的位址發出icmp請求回顯資料報。結論 出現以上問題的原因很可能就是目的伺服器或者路由器...

CentOS下Docker安裝ping命令

說明 docker容器裡,如果我們想測試兩個容器是否建立關係,我們可以用ping來測試。在預設情況下,docker的centenos映象由於做了精簡,去掉了ping命令,此時需要我們自己安裝 執行一下命令,這時會提示沒有找到ping命令 root localhost docker exec it t...

關於updatedb命令和locate命令的問題

在centos 7中使用locate命令發現沒有這個命令,就去安裝但是也不可安裝 這就需要使用updatedb更新一下檔案庫,執行這個命令發現也不存在 所以就yum安裝,發現還是不存在 這是你就需要去安裝一下mlocate 命令如下 yum y install mlocate yum y insta...