traceroute能保證每個分組都是走一樣路由路徑嗎?

關於traceroute的原理有一點困惑,如果要得到單次測量的完整傳輸路徑,那麼必須每個分組每次往外發經過的路由(返回報文的話怎麼走不影響)都是一樣的才行吧?路由轉發表什麼的不是會更新嗎?

假定在源和目的地之間有N-1台路由器。則源將向網路發送N個特殊分組,其中每個分組地址指向最終目的。這個N個特殊分組標識從1到N。當第n台路由器接收到標識為n的第n個分組時,該路由器不是向它的目的地轉發該分組,而是向源回送一個報文。當目的主機接受第N個分組時,它也會向源返回一個報文。最終該源記錄了所有返回報文的路由器(或目的主機)的名字和地址,以這種方式,源能夠重建分組從源到目的地所採用的路由,並且能決定到所有中間路由器的往返時延。

我覺得如果不是單一路徑的話,每個分組都不知道走哪條路,返回報文也不知道是哪條路徑回來。


Traceroute 是一個古老的troubleshooting 工具,只有在單路徑(對稱路由)才能給出準確的測量。

比如亞當想測試到夏娃經過哪些路徑,假設路徑(對稱路由)如下:

亞當 — A — B — C — D — 夏娃

那麼亞當可以使用 traceroute 可以準確測量出來到達夏娃的路徑,即 亞當 — A — B — C — D — 夏娃。

而如果網路是非對稱路徑:

亞當 — &> A — &>B —&> C —&> D — &>夏娃

亞當 &<— A &<— F &<— E &<— D &<— 夏娃

亞當發給夏娃數據走上面的路徑,而夏娃發給亞當的數據走下面的路徑。

而如果是多路徑:

亞當 — &> A — &>B1 —&> C1 —&> D — &>夏娃

亞當 — &> A — &>B2 —&> C2 —&> D — &>夏娃

亞當 — &> A — &>B3 —&> C3 —&> D — &>夏娃

則traceroute 三次測量走的可能是三條不同的路徑(負載均衡),如果發現測量流量大約有33% 的丟失,那很有可能是其中的一條鏈路無法正常工作,流量被丟棄了。

路徑處於動蕩不安的狀態

假設最初網路路徑是這樣的:

亞當 — &> A — &>B —&> C —&> D — &>夏娃

結果路由發生了更新:

第一跳:A (TTL=1)

第二跳:E(TTL=2)

第三跳:C(TTL=3)

第四跳:D(TTL=4)

第五跳:夏娃(TTL=5)

亞當 — &> A — &> E —&> C —&> D — &>夏娃

此時即使路由又恢復到最初的狀態,顯示的還是以上的路徑。

這時只有重新traceroute 一次,才會顯示

亞當 — &> A — &>B —&> C —&> D — &>夏娃


不能。為什麼不能?因為traceroute沒有保證路由路徑的機制。為什麼沒有?如果有,說明你已經知道2點之間的路徑了,那還測毛啊,traceroute的功能不就是為了知道2點間的路徑嗎?

我覺得你把問題想複雜了。你可以認為traceroute只是一個記錄工具,它單純地把每一跳的數據記錄下來,最終告訴你總共測量得到了這麼多跳,每一跳的路由IP是多少。至於每次得到的數據是否會變,報文怎麼去怎麼回,它不管,也管不了,不是它的問題。

那每一跳路由如何測量?利用icmp的ttl expired通知機制,不斷增加ttl從而不斷發現下一跳路由。直到最後由目標主機返回應答宣告測量結束。

你是想問在這種路由頻繁變化的網路環境下,如何實時有效監控路由路徑嗎?如果是,建議在提問中明確。


不能,因為有負載均衡,其實樓里已經有答案了,jacgod


這個要根據trace的原理去理解。

trace是從源地址開始,每經過一跳ttl是+1(s)的,直到到達目的地址。這也就說明,trace怎麼去的,就得怎麼回,將來trace有了偏差,這條路徑是要負責任的。


可以參考一下這裡的答案 為什麼traceroute指令有時候一個躍點會有多個主機響應? - 計算機網路


很多情況下,每次的tracerouter結果都是不一樣的


我覺得每次路徑有所不同吧,你運行mtr有時候有些跳會有多個ip啊,意思就是走出了不同路徑


推薦閱讀:

svchost一直不停下載!怎麼才能讓它停止下載?
IC卡的錢是裝在卡里還是裝在伺服器里?
誰能用通俗的語言簡單介紹下什麼是雲技術?
組裝家用伺服器和家用台式機有什麼不同?如何選購?
網線里有電線嗎,為什麼停電不斷網?

TAG:互聯網 | 計算機網路 |