traceroute和tracert的區別
最近在看TCP/IP詳解卷1時被traceroute和tracert命令給小小的坑了一下,原來二個是有差別的。
我是在windows下面抓包的,結果死活抓不到udp包。。。。
也是給自己提了個醒看書要動腦啊!!!
二者都用於探測數據包從源到目的經過路由的IP,但兩者探測的方法卻有差別。
不同點:
一、應用環境不同
tracert是應用在windows下。
traceroute則是應用在linux/BSD/router/UNIX下。
tracert是Windows下常用的命令行工具,UNIX下的是traceroute。都是基於UDP協議的路由探測。
Tracert(跟蹤路由)是路由跟蹤實用程序,用於確定 IP 數據報訪問目標所采取的路徑。Tracert 命令用 IP 生存時間 (TTL) 字段和 ICMP 錯誤消息來確定從一個主機到網絡上其他主機的路由。
工作原理和過程:
通過向目標發送不同 IP 生存時間 (TTL) 值的“Internet 控制消息協議 (ICMP)”回應數據包,Tracert 診斷程序確定到目標所采取的路由。要求路徑上的每個路由器在轉發數據包之前至少將數據包上的 TTL 遞減 1。數據包上的 TTL 減為 0 時,路由器應該將“ICMP 已超時”的消息發回源系統。
Tracert 先發送 TTL 為 1 的回應數據包,並在隨後的每次發送過程將 TTL 遞增 1,直到目標響應或 TTL 達到最大值,從而確定路由。通過檢查中間路由器發回的“ICMP 已超時”的消息確定路由。某些路由器不經詢問直接丟棄 TTL 過期的數據包,這在 Tracert 實用程序中看不到。
Tracert 命令按順序打印出返回“ICMP 已超時”消息的路徑中的近端路由器接口列表。如果使用 -d 選項,則 Tracert 實用程序不在每個 IP 地址上查詢 DNS。
在下例中,數據包必須通過兩個路由器(10.0.0.1 和 192.168.0.1)才能到達主機 172.16.0.99。主機的默認網關是 10.0.0.1,192.168.0.0 網絡上的路由器的 IP 地址是 192.168.0.1。
C:\>tracert 172.16.0.99 -d
Tracing route to 172.16.0.99 over a maximum of 30 hops
1 2s 3s 2s 10,0.0,1
2 75 ms 83 ms 88 ms 192.168.0.1
3 73 ms 79 ms 93 ms 172.16.0.99
Trace complete.
Traceroute程序的設計是利用ICMP及IP header的TTL(Time To Live)欄位(field)。首先,traceroute送出一個TTL是1的IP datagram(其實,每次送出的為3個40字節的包,包括源地址,目的地址和包發出的時間標簽)到目的地,當路徑上的第一個路由器(router)收到這個datagram時,它將TTL減1。此時,TTL變為0了,所以該路由器會將此datagram丟掉,並送回一個「ICMP time exceeded」消息(包括發IP包的源地址,IP包的所有內容及路由器的IP地址),traceroute 收到這個消息後,便知道這個路由器存在於這個路徑上,接著traceroute 再送出另一個TTL是2 的datagram,發現第2 個路由器...... traceroute 每次將送出的datagram的TTL 加1來發現另一個路由器,這個重復的動作一直持續到某個datagram 抵達目的地。當datagram到達目的地後,該主機並不會送回ICMP time exceeded消息,因為它已是目的地了,那麼traceroute如何得知目的地到達了呢?
Traceroute在送出UDP datagrams到目的地時,它所選擇送達的port number 是一個一般應用程序都不會用的號碼(30000 以上),所以當此UDP datagram 到達目的地後該主機會送回一個「ICMP port unreachable」的消息,而當traceroute 收到這個消息時,便知道目的地已經到達了。所以traceroute 在Server端也是沒有所謂的Daemon 程式。
Traceroute提取發 ICMP TTL到期消息設備的IP地址並作域名解析。每次 ,Traceroute都打印出一系列數據,包括所經過的路由設備的域名及 IP地址,三個包每次來回所花時間。
Traceroute 有一個固定的時間等待響應(ICMP TTL到期消息)。如果這個時間過了,它將打印出一系列的*號表明:在這個路徑上,這個設備不能在給定的時間內發出ICMP TTL到期消息的響應。然後,Traceroute給TTL記數器加1,繼續進行。
二、探測方法及探測的數據類型不同
默認情況下,tracert是向目的地址發出ICMP請求回顯數據包,而traceroute是向目的地址的某個端口(大於30000)發送UDP數據報。
相同點:
一、兩者都用於探測數據包從源到目的經過路由的IP。
二、兩者都是通過設置發送包的TTL的值從1開始、逐次增1的方法來探測。
最後,tcptracetroute是向80端口發送TCP SYN包到目標,穿透更強。