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卡的錢是裝在卡里還是裝在伺服器里?
※誰能用通俗的語言簡單介紹下什麼是雲技術?
※組裝家用伺服器和家用台式機有什麼不同?如何選購?
※網線里有電線嗎,為什麼停電不斷網?