Traceroute 工作原理這是一個traceroute 的輸出,源主機使用TTL=1、2、3…23 基於UDP的探測包,每一跳發3次,可以測量RTT的最大值、最小值、平均值。假定源主機的TTL= 1,經過第一跳裝置會TTL減1 操作,然後TTL = 0,第一跳發TTL Expired 訊息給源主機,然後源主機把第一跳的IP地址列印輸出。其它的跳數以此類推…問題產生的原因第19跳到達內網192.168.0.45,TTL =0,於是以source IP =192.168.0.45 告訴源主機TTL Expired,當這條訊息到達內網出口,NAT沒有將ICMP訊息做私網Source IP =192.168.0.45轉換成公網的工作,所以原封不動地到達源主機,於是產生了很奇怪的現象。為何TTL Expired ICMP 能夠到達源主機?因為Destination IP = 源主機公網IP ,Source IP =192.168.0.45,路由器一般只根據destination IP 查詢路由表做轉發,有時運營商也會檢查Source IP 是不是非法(私有IP),如非法會丟棄,從這裡的輸出看,沒有做合法性檢查,所以ICMP鬼使神差到達了源主機。第20、21、22跳的情況參考第19跳。第23跳允許外部訪問,在內網邊界做了靜態NAT(公網IP=119.75.218.70),所以顯示正常。
Traceroute 工作原理這是一個traceroute 的輸出,源主機使用TTL=1、2、3…23 基於UDP的探測包,每一跳發3次,可以測量RTT的最大值、最小值、平均值。假定源主機的TTL= 1,經過第一跳裝置會TTL減1 操作,然後TTL = 0,第一跳發TTL Expired 訊息給源主機,然後源主機把第一跳的IP地址列印輸出。其它的跳數以此類推…問題產生的原因第19跳到達內網192.168.0.45,TTL =0,於是以source IP =192.168.0.45 告訴源主機TTL Expired,當這條訊息到達內網出口,NAT沒有將ICMP訊息做私網Source IP =192.168.0.45轉換成公網的工作,所以原封不動地到達源主機,於是產生了很奇怪的現象。為何TTL Expired ICMP 能夠到達源主機?因為Destination IP = 源主機公網IP ,Source IP =192.168.0.45,路由器一般只根據destination IP 查詢路由表做轉發,有時運營商也會檢查Source IP 是不是非法(私有IP),如非法會丟棄,從這裡的輸出看,沒有做合法性檢查,所以ICMP鬼使神差到達了源主機。第20、21、22跳的情況參考第19跳。第23跳允許外部訪問,在內網邊界做了靜態NAT(公網IP=119.75.218.70),所以顯示正常。