背景知識:
當路由器收到一份IP數據報時,如果其TTL是0或者1,則路由器丟棄該數據包,并給源IP發送一條ICMP超時消息。traceroute程序的關鍵在于這條ICMP消息中包含該路由器的IP
traceroute的操作過程:
發送一份TTL為1的消息給目的主機,處理這個消息的第一個路由器將TTL減1,丟棄該數據包,發給源IP一份超時ICMP報文,這樣就得到了第一個路由器的地址,以此類推可以獲取第二個,第三個路由器的地址,繼續這個過程直到該消息到達目的主機,如果判斷消息到達目的主機呢?traceroute使用UDP發送數據報給目的主機,但它選擇一個不可能的值作為目的主機的端口號,使目的主機的任何應用程序都不使用該端口,使目的主機的UDP模塊產生一個端口不可達錯誤的ICMP報文。這樣ICMP可以通過收到的消息是超時還是端口不可達來判斷何時結束。