簡單是這樣分:
windows -> tracert -> icmp
linux -> traceroute -> udp
仔細分是這樣:
共同的部分是一樣都是讓TTL隨著hop count的增加而遞增, 中間的點(TTL等於0的那一點)都會送icmp time exceeded(type=11 code=0)的 error message 回給送端.
但在實做時:
Cisco IOS and Linux
使用UDP封包. 目的地的udp port一開始是33434(但每多送一次,會遞增), 而source udp是亂數(不過是與0x8000做過OR後的亂數).
在中間的hop(還未到目的地的點),每當TTL到zero時, probe會送icmp time exceeded(type=11 code=0)的 error message 回給送端
一直到目的端時, 目的地端會回送icmp Port Unreachable(icmp type=3 code=3)error message給送端.
Microsoft Windows
此種OS就不是使用UDP封包, 而是用ICMP echo request與TTL. 而目的地端就不是用ICMP unreachable類型的封包回, 而是用ICMP echo reply回.
請參考Cisco Using the traceroute Command on Operating Systems
共同的部分是一樣都是讓TTL隨著hop count的增加而遞增, 中間的點(TTL等於0的那一點)都會送icmp time exceeded(type=11 code=0)的 error message 回給送端.
但在實做時:
Cisco IOS and Linux
使用UDP封包. 目的地的udp port一開始是33434(但每多送一次,會遞增), 而source udp是亂數(不過是與0x8000做過OR後的亂數).
在中間的hop(還未到目的地的點),每當TTL到zero時, probe會送icmp time exceeded(type=11 code=0)的 error message 回給送端
一直到目的端時, 目的地端會回送icmp Port Unreachable(icmp type=3 code=3)error message給送端.
Microsoft Windows
此種OS就不是使用UDP封包, 而是用ICMP echo request與TTL. 而目的地端就不是用ICMP unreachable類型的封包回, 而是用ICMP echo reply回.
請參考Cisco Using the traceroute Command on Operating Systems
沒有留言:
張貼留言